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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 21:17   #1
Kozak_Aleksei
Пользователь
 
Регистрация: 22.01.2012
Сообщений: 10
По умолчанию сума чисел

люди подскажите пожалуйста почему после подсчёта сумы чётных чисел в диапазоне от 2 до 30 получается ответ 270 а не 240. в чём ошибка??

мой код:


#include <cstdlib>
#include <iostream>
main()
{
int a=2,sum=0;
while (a<=30)
{
printf("%d \n",a);
a+=2;
sum+=a;

}

printf("sum is %d \n",sum);



system("PAUSE");

return 0;
}
Kozak_Aleksei вне форума Ответить с цитированием
Старый 08.02.2012, 21:32   #2
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
#include <iostream>

int main()
{
	int sum = 0;
	int i = 0;

	while (i <= 30)
	{
		sum += i;
		i+= 2;
	}
	
	std::cout << "Sum = " << sum; 

	return 0;
}
вот так норм

а в твоем коде можно просто местами поменять и тоже все будет ок
Код:
a+=2;
sum+=a;
вот ето

Последний раз редактировалось rUs_LAN; 08.02.2012 в 21:36.
rUs_LAN вне форума Ответить с цитированием
Старый 08.02.2012, 21:53   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Kozak_Aleksei Посмотреть сообщение
люди подскажите пожалуйста почему после подсчёта сумы чётных чисел в диапазоне от 2 до 30 получается ответ 270 а не 240. в чём ошибка??

мой код:


#include <cstdlib>
#include <iostream>
main()
{
int a=2,sum=0;
while (a<=30)
{
printf("%d \n",a);
a+=2;
sum+=a;

}

printf("sum is %d \n",sum);



system("PAUSE");

return 0;
}
Очевидно это потому, что цикл у вас неверно работает. Вы сначала увеличиваете перменную a на 2, а затем суммируете. То есть изначально у вас a равнялась 2. В цикле вы ее увеличиваете, и она становится равна 4, а затем 4 прибавляете к сумме. То есть значение a, равное 2, вы забыли проссумировать. Но при этом, когда a станет равным 30, управление программы попадает в тело цикла, a увеличивает на 2 и становится 32, и вы это значение суммируете.
Итак, без слагаемого равного 2, сумма у вас будет 238, а при суммировании слагаемого 32, сумма станет равной 270.
Чтобы избежать ошибку, надо было написать, например .так

Код:
   while ( a <= 30 )
   {
      printf("%d \n",a);
      sum += a;
      a += 2;
   }
Кстати сказать, у вас не те заголовочные файлы указаны. для вашей программы нужны два заголовочных файла: <cstdlib> и <cstdio>
Еще лучше было написать программу так

Код:
#include <iostream>
#include <cstdlib>

int main()
{
   int sum = 0;

   for ( int i = 2; i <= 30; i++ )
   {
      sum += i;
      std::cout << i << std::endl;
   }

   std::cout << "sum is "  << sum << std::endl;
    
   system( "PAUSE" );
    
   return 0;
}
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 08.02.2012 в 21:58.
Сыроежка вне форума Ответить с цитированием
Старый 08.02.2012, 22:42   #4
Kozak_Aleksei
Пользователь
 
Регистрация: 22.01.2012
Сообщений: 10
По умолчанию

я всё понял)) всем спасибо
Kozak_Aleksei вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку. Сума ряда (Pascal) spinogryz_ua Помощь студентам 2 31.01.2012 15:29
Сума бесконечного ряда tadalox Паскаль, Turbo Pascal, PascalABC.NET 1 30.01.2012 02:30
сума столбиков динамического масива mansp Общие вопросы C/C++ 4 07.11.2010 20:12
От чего программа сходит сума? duhduhduh Общие вопросы Delphi 1 18.01.2010 01:25
Сума ряда С++ Smile.id Помощь студентам 3 14.10.2009 12:37