Массивы, но массивы не использовать.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Бабочка
Сообщения: 23
Зарегистрирован: 09 янв 2008, 13:39

16 янв 2008, 21:00

Отредактируйте, пожалуйста мой код!!
Задание: Даны положительные числа N,a1,...,aN. Используя только элементарные матем. операции(+,-,*,/), определить сумму непарных и произведение парных членов последовательности а1,...,аN. Массивы не использовать.
Написала код, но он сумму считает не правильно, а произведение вообще не считает.
Скажите, пожалуйста,что в нем не так!!!

Код: Выделить всё

# include <iostream.h>
# include <conio.h>
# include <stdio.h>
int main()
{
int S,P;
int a,i;
S=0;
P=1;
cout<<"Vvedite chisla a"<< endl;
cin>>a;
for (i%2==1;i<=a;i++)
{S=S+i;}
cout<<S;
for (i%2==0;i<=a;i++)
{P=P*i;}
cout<<P;
getch();
return 0;
}
Vanush
Сообщения: 50
Зарегистрирован: 10 янв 2008, 22:18

16 янв 2008, 23:25

Напиши for(i=2;i<=a;i+=2)
A что касается i%2==1 это возвращает true или false
Прочитай for
Бабочка
Сообщения: 23
Зарегистрирован: 09 янв 2008, 13:39

17 янв 2008, 08:33

Все равно выдает непонятное число. ВВожу 2,3,1-результат 278?
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

17 янв 2008, 12:36

Вообще не понятен алгоритм, который реализован:

Тут считается сумма целых чисел от 2 до a включительно:
Бабочка писал(а): for (i=2;i<=a;i++)
{S=S+i;}
cout<<S;
Тут - произведение целых чисел от 2 до a включительно:
for (i = 2;i<=a;i++)
{P=P*i;}
А насчет ввода, то я вообще вижу, что во время рабоут ввод запрашивается лишь два
раза:

cin>>a;
getch();

Как тут вообще вводится последовательность чисел???

Еще хотелось бы уточнить термины "парные члены" и "непарные члены". Что это такое?
Vanush
Сообщения: 50
Зарегистрирован: 10 янв 2008, 22:18

17 янв 2008, 13:44

Это пригодиться?

Код: Выделить всё

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
	int a;
	cout<<"Vvedite a: ";
	cin>>a;
	int s=0;
	for(int i=1;i<=a;i+=2)
		s+=i;
	cout<<s<<endl;
	int p=1;
	for(int i=2;i<=a;i+=2)
		p*=i;
	cout<<p<<endl;
	return 0;
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

17 янв 2008, 13:48

Код: Выделить всё

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

int main()
{
   int S, P;
   int a, ai, i;

   S = 0;
   P = 1;

   cout<<"Vvedite kolichestvo chisel: "<< endl;
   cin << a;

   for (i = 0; i < a; ++i)
   {
      cout << "Vvedite a[" << i + 1 << "]: ";
      cin >> ai;

      if (i % 2)
      {
         P *= ai;
      }
      else
      {
         S += ai;
      }
   }

   cout << "Summa: " << S << end;
   cout << "Proizvedenie: " << P <<end;
   getch();

   return 0;
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Бабочка
Сообщения: 23
Зарегистрирован: 09 янв 2008, 13:39

17 янв 2008, 16:07

Спасибо большое. но вот мой вариант решения:

Код: Выделить всё

# include <iostream.h>
# include <conio.h>
# include <stdio.h>
int main()
{
int S,P;
int N,i,j=0,a;
S=0;
P=1;
cout<<"Vvedite chisla N"<<endl;
cin>>N;
for (i=1;i<=N;i+=1)
 {
cout<<"a="<<endl;
cin>>a;
if (j==0)
  {
  j++;
  S+=a;   
 }
else
   {
   j--;
   P*=a;

    };
  };
  cout<<S;
  cout<<P;
getch();
return 0;
}
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

17 янв 2008, 18:30

Объявление и инициализацию переменной можно объединить в одной строке: int S(0); int P(1); - здесь, переменная инициализируется в момент создания. Вместо конструкции i+=1; лучше использовать i++; или ++i; в операторе cout<<"a="<<endl;, если убрать endl последующий ввод данных будет размещаться сразу за знаком равно - так, наверное, удобнее для восприятия. А последний вывод в программе склеит два числа в одно - вот здесь бы endl не помешал.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

18 янв 2008, 14:37

Советую использывать переменную типа bool вместо переменной j. Этот тип был придуман именно для тех случаев, когда переменная может принимать ровно два разных значения: назовём их условно true и false.

В случае, если ты сделаешь j типа bool, то многие вещи упростяться. Вот исправленный фрагмент кода:

Код: Выделить всё

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

int main()
{
   int S,P;
   int N,i,a;
   S=0;
   P=1;

   bool j = false;

   cout<<"Vvedite chisla N"<<endl;
   cin>>N;
   for (i=1;i<=N;i+=1)
   {
      cout<<"a="<<endl;
      cin>>a;
      if (j)
      {
          S+=a;   
      }
      else
      {
          P*=a;
      }

     j = !j;
   }

   cout<<S;
   cout<<P;
   getch();
   return 0;
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Бабочка
Сообщения: 23
Зарегистрирован: 09 янв 2008, 13:39

18 янв 2008, 16:18

Да, спасибо, так удобнее. :)
Ответить