Помощь - Поиск - Пользователи - Календарь
Полная версия: цикл с накоплением с++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Formula
цикл от 10 до N. вычислить значение y=(k+3)/((k-5)*(k-7)).
n<10 результат одно и то же число =((



#include <stdio.h>
#include <cmath>
#include <iostream>

using namespace std;

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
И где же здесь накопление? У тебя вычисляется y = (N+3)/((N-5)*(N-7)) ...

Теперь, почему получается 0: При N > 10 знаменатель больше числителя, целочисленное деление дает 0 (а в С++ два операнда целого типа делятся именно нацело, чтобы поделить их как вещественные числа, нужно хотя бы один операнд явно привести к float или любому другому вещественному типу)...

Сама справишься?
Lapp
Цитата(Formula @ 29.04.2010 1:56) *
цикл от 10 до N. вычислить значение y=(k+3)/((k-5)*(k-7)).
Неясно.. Вычислить таблицу значений, что ли?.. А при чем тут накопление тогда? Может, надо суммировать ряд?
Странно - вычислять значение выражения в цикле и тут же его забывать, а выводить только последнее..
volvo
Нет-нет... Так не пойдет... Я комментировал другой код... Там цикл был оформлен по другому. Здесь - ищи ошибку сама, у тебя цикл вообще не выполняется при N > 10...
Formula
не обещаю, что справлюсь, но попробую))

Добавлено через 2 мин.
blush.gif ой, да. вообще-то его нужно перемножать, но таблицу не нужно
Lapp
Цитата(volvo @ 29.04.2010 2:36) *
Нет-нет... Так не пойдет... Я комментировал другой код... Там цикл был оформлен по другому. Здесь - ищи ошибку сама, у тебя цикл вообще не выполняется при N > 10...
угу, солидарен ))
исправления - в новые мессаджи, плз!


Добавлено через 8 мин.
Цитата(Formula @ 29.04.2010 2:36) *
ой, да. вообще-то его нужно перемножать, но таблицу не нужно
Если перемножать, то перед циклом присвой y=1, а потом домножай его в цикле на выражение.
Formula

как-то так?


#include <stdio.h>
#include <cmath>
#include <iostream>

using namespace std;

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(что б по быстрому ибо выключает уже) придумать не могу. может согрешить? blush.gif
Lapp
Цитата(Formula @ 29.04.2010 3:06) *
ещё бы проверочку на то, что n>10, но ничего, кроме goto(что б по быстрому ибо выключает уже) придумать не могу. может согрешить? blush.gif
Как ты, однако, легко грешишь... надеюсь, не во всем )).
  do {
cout<<"Vvedite N>10"<<endl;
cin>>n;
} while (n<=10);

Так, что ли?
volvo
Formula
Стесняюсь спросить... А почему там строго "меньше N"? В условии же написано
Цитата
цикл от 10 до N
, а не до N - 1...
Formula
почему меньше? больше 10
volvo
Цитата
     for(k=10;k<n;k++){ // <--- Здесь
Formula
я запуталась что, куда и к чему(((
volvo
У тебя в задании сказано:
Цитата
цикл от 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
спасибо)) всё ясно
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.