int main() { int k,y,n; cout<<"Vvedite N"<<endl; cin>>n; for(k=10;k<n;k--) y=(k+3)/((k-5)*(k-7)); cout<<"y= "<<y<<endl; cin.get(); cin.get(); }
volvo
29.04.2010 5:34
И где же здесь накопление? У тебя вычисляется y = (N+3)/((N-5)*(N-7)) ...
Теперь, почему получается 0: При N > 10 знаменатель больше числителя, целочисленное деление дает 0 (а в С++ два операнда целого типа делятся именно нацело, чтобы поделить их как вещественные числа, нужно хотя бы один операнд явно привести к float или любому другому вещественному типу)...
Сама справишься?
Lapp
29.04.2010 5:35
Цитата(Formula @ 29.04.2010 1:56)
цикл от 10 до N. вычислить значение y=(k+3)/((k-5)*(k-7)).
Неясно.. Вычислить таблицу значений, что ли?.. А при чем тут накопление тогда? Может, надо суммировать ряд? Странно - вычислять значение выражения в цикле и тут же его забывать, а выводить только последнее..
volvo
29.04.2010 5:36
Нет-нет... Так не пойдет... Я комментировал другой код... Там цикл был оформлен по другому. Здесь - ищи ошибку сама, у тебя цикл вообще не выполняется при N > 10...
Formula
29.04.2010 5:36
не обещаю, что справлюсь, но попробую))
Добавлено через 2 мин. ой, да. вообще-то его нужно перемножать, но таблицу не нужно
Lapp
29.04.2010 5:40
Цитата(volvo @ 29.04.2010 2:36)
Нет-нет... Так не пойдет... Я комментировал другой код... Там цикл был оформлен по другому. Здесь - ищи ошибку сама, у тебя цикл вообще не выполняется при N > 10...
угу, солидарен )) исправления - в новые мессаджи, плз!
Добавлено через 8 мин.
Цитата(Formula @ 29.04.2010 2:36)
ой, да. вообще-то его нужно перемножать, но таблицу не нужно
Если перемножать, то перед циклом присвой y=1, а потом домножай его в цикле на выражение.
int main() { double k,y; int n; cout<<"Vvedite N"<<endl; cin>>n; y=1; for(k=10;k<n;k++){ y=y*((k+3)/((k-5)*(k-7))); } cout<<"y= "<<y<<endl; cin.get(); cin.get(); }
ещё бы проверочку на то, что n>10, но ничего, кроме goto(что б по быстрому ибо выключает уже) придумать не могу. может согрешить?
Lapp
29.04.2010 9:24
Цитата(Formula @ 29.04.2010 3:06)
ещё бы проверочку на то, что n>10, но ничего, кроме goto(что б по быстрому ибо выключает уже) придумать не могу. может согрешить?
Как ты, однако, легко грешишь... надеюсь, не во всем )).
do { cout<<"Vvedite N>10"<<endl; cin>>n; } while (n<=10);
Так, что ли?
volvo
29.04.2010 12:35
Formula Стесняюсь спросить... А почему там строго "меньше N"? В условии же написано
Цитата
цикл от 10 до N
, а не до N - 1...
Formula
29.04.2010 14:38
почему меньше? больше 10
volvo
29.04.2010 14:49
Цитата
for(k=10;k<n;k++){ // <--- Здесь
Formula
29.04.2010 14:56
я запуталась что, куда и к чему(((
volvo
29.04.2010 15:08
У тебя в задании сказано:
Цитата
цикл от 10 до N. вычислить значение
. Теперь смотри, что делаешь ты: Вводишь N. Допустим, 15. Начинаешь цикл... Для каких k он отработает? Для k = 10, 11, 12, 13, 14... Всё. Точка... Где вычисление при k = 15? Ведь это как раз и есть то самое N, и его тоже надо считать...
Это первое. Второе: никогда больше не делай так, как ты сделала выше. Очень опасно применять ++ к вещественному числу. А получится у тебя после первого ++ не 11, а 10.999999999 - оно тебе надо? Цикл for - это цикл с заданным количеством повторений, а количество - это целое число...
double y = 1.0; for(int k = 10; k <= n; k++) { y = y * ((double)(k+3) / ((k-5)*(k-7))); }
Ничего сложного, правда?
Formula
29.04.2010 15:12
спасибо)) всё ясно
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.