Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация среднеквадратического откл. на си 
:(
    Опции темы
En_t_end
Дата 9.3.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Код

........................................
double midle_ar(ifstream& in_f, int& kolvo)
{
    double num, res;
    res = NULL;
    int i = 0;
    while(in_f >> num)
    {
        res += num;
        i++;
    }
    kolvo = i;
    return(res/i);
}

void midle_kv_sw_m(ifstream& in_f, double ar, int kolvo)
{
    double num;
    int i = 1;
    if(ar != 0)
    {
        cout << "Srednekvadraticheskoe otklonenie chisel." << endl;
        while(in_f >> num)
        {
            cout << i << " - " 
                << sqrt(pow((num - ar), 2.0)/static_cast<double>(kolvo)) 
                << endl;
            i++;
        }
    }
}
..............................

Нутром чую, что где-то напортачил, но вот где ?
Эти функции в составе работющей 100% программы. in_f открыт и связан с файлом.
PM MAIL ICQ Skype GTalk Jabber   Вверх
maxim1000
Дата 9.3.2005, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



так все-таки
Цитата
напортачил

или
Цитата
в составе работющей 100% программы

smile
вообще, конечно же, такой подход не очень хорош, т.к. требует двух проходов по файлу (а если тебе понадобится вводить числа с клавиатуры, то вообще ужас получится)
поэтому перед тем, как садиться за комп и писать программу, надо сесть за бумажку и пописать немного формул smile
M(x-M(x))^2=M(x^2 - 2*x*M(x) + M(x)^2)=M(x^2) - 2*M(x)^2 + M(x)^2=M(x^2)-M(x)^2
M - среднее
поэтому для вычисления ср.кв.отклонения достаточно вычислить среднее величины и среднее ее квадрата (а их можно вычислять независимо и параллельно)
вот и получается:
Код

{
  int n;
  double m,m2,num;
  n=0;
  m=0;
  m2=0;
  while(in_f>>num)
  {
    m+=num;
    m2+=num*num;
    n++;
  }
  m/=n;
  m2/=n;
  return m2-m*m;
}

Добавлено @ 10:51
и еще:
Цитата
res = NULL

NULL - константа, специально предназначенная для указателей, не стоит ее использовать для double
Добавлено @ 10:54
ну и еще smile
Цитата
if(ar != 0)

в этой строке сразу две ошибки smile
1. не стоит применять к double операторы ==, !=, кроме того если у тебя было несколько ненулевых чисел с нулевым средним, их среднее из-за округления очень редко будет 0
2. эта проверка вообще не нужна: ср.кв.отклонение успешно определяется и в случае нулевого среднего smile


--------------------
qqq
PM WWW   Вверх
En_t_end
Дата 9.3.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Просто я сейчас решаю задачи, направленные на проверку знаний синтаксиса.
В данном случае было поставленно условие - двойной проход по файлу.
Код

в этой строке сразу две ошибки 
1. не стоит применять к double операторы ==, !=, кроме того если у тебя было несколько ненулевых чисел с нулевым средним, их среднее из-за округления очень редко будет 0
2. эта проверка вообще не нужна: ср.кв.отклонение успешно определяется и в случае нулевого среднего 

О... а вот за это спасибо.
Цитата

поэтому перед тем, как садиться за комп и писать программу, надо сесть за бумажку и пописать немного формул

Написано было за 14 минут до школы, поэтому ни о какой бумажке, я подумать не успел ))))

PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.