Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2010, 16:37   #1
siemdi
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 50
По умолчанию проблема с окурглением

суть проблемы такова, Ro=sqrt(SumR/(1/SumR)) вот этот кусок прраммы почему округляет ответ до целых, хотя Ro типа double, помогите, в чем проблемма?
Код:
for(i=0;i<KolRez;i++)
    {
        do
        {
            cout<<"    номинальное сопротивление "<<i+1<<" резистора"<<endl;
            cout<<"    (25<=R[i]<=500000)"<<endl;
            cin>>R[i];
        }
        while((R[i]>500000)||(R[i]<25));
        SumR+=R[i];
    }
    for(i=0;i<KolRez;i++)
    {
    cout<<"R["<<i+1<<"]="<<R[i]<<endl;
    }
    cout<<"SumR="<<SumR<<endl;
    Ro=sqrt(SumR/(1/SumR));
    cout<<"Ro="<<Ro<<endl;

Последний раз редактировалось Stilet; 19.09.2010 в 17:01.
siemdi вне форума Ответить с цитированием
Старый 19.09.2010, 16:39   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

SumR тоже double? если да то исправьте
и вместо 1(целое) напишите 1.0(дробное)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2010, 16:50   #3
siemdi
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
SumR тоже double? если да то исправьте
и вместо 1(целое) напишите 1.0(дробное)
попробовал, не получается, да и вообще суть форулы не ясна, грубо говоря это корень из квадрата и если все числа целые то оо должно быть по любому целое, но преподаватель без этой формулы курсач принемать не хочет
siemdi вне форума Ответить с цитированием
Старый 19.09.2010, 16:54   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я опечатался, SumR должно быть тоже дробное чтоб вывод дробный был.
(все должно быть дробное)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2010, 17:26   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

а в чем смысл задачи?

спрашиваю, потому что

Ro = sqrt(SumR/(1/SumR)) = SumR

кстати, а R[i] целые?

а если подумать то можно и вывод отформатировать:
Код:
cout<<setiosflags(ios_base::fixed)<<setprecision(4)<<Ro;

Последний раз редактировалось f.hump; 19.09.2010 в 17:54.
f.hump вне форума Ответить с цитированием
Старый 19.09.2010, 17:55   #6
siemdi
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
а в чем смысл задачи?

спрашиваю, потому что

Ro = sqrt(SumR/(1/SumR)) = SumR

кстати, а R[i] целые?
Смысл таков, я должен ввести номиналы резисторов, а оно должно по этой формуле вывести оптимальное значение ро, хотя формула не имеет смысла потому что SumR не как не может быть отрецательным потому что номиналы вводятся от 25 до 100000
siemdi вне форума Ответить с цитированием
Старый 19.09.2010, 18:03   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

так это, если под оптимальным понимается rms, то

Код:
SumR2 = 0.0;

for (int i(0);i<N;i++) SumR2 += R[i]*R[i];
Ro = sqrt(SumR2/N);
f.hump вне форума Ответить с цитированием
Старый 19.09.2010, 21:56   #8
siemdi
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
так это, если под оптимальным понимается rms, то

Код:
SumR2 = 0.0;

for (int i(0);i<N;i++) SumR2 += R[i]*R[i];
Ro = sqrt(SumR2/N);
за это большое спасибо))))))))))))))))))))
siemdi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37