Страница 1 из 2

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

Добавлено: 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;
}

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

Добавлено: 16 янв 2008, 23:25
Vanush
Напиши for(i=2;i<=a;i+=2)
A что касается i%2==1 это возвращает true или false
Прочитай for

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

Добавлено: 17 янв 2008, 08:33
Бабочка
Все равно выдает непонятное число. ВВожу 2,3,1-результат 278?

.

Добавлено: 17 янв 2008, 12:36
BBB
Вообще не понятен алгоритм, который реализован:

Тут считается сумма целых чисел от 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();

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

Еще хотелось бы уточнить термины "парные члены" и "непарные члены". Что это такое?

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

Добавлено: 17 янв 2008, 13:44
Vanush
Это пригодиться?

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

#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;
}

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

Добавлено: 17 янв 2008, 13:48
Romeo

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

#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;
}

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

Добавлено: 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;
}

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

Добавлено: 17 янв 2008, 18:30
Albor
Объявление и инициализацию переменной можно объединить в одной строке: int S(0); int P(1); - здесь, переменная инициализируется в момент создания. Вместо конструкции i+=1; лучше использовать i++; или ++i; в операторе cout<<"a="<<endl;, если убрать endl последующий ввод данных будет размещаться сразу за знаком равно - так, наверное, удобнее для восприятия. А последний вывод в программе склеит два числа в одно - вот здесь бы endl не помешал.

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

Добавлено: 18 янв 2008, 14:37
Romeo
Советую использывать переменную типа 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;
}

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

Добавлено: 18 янв 2008, 16:18
Бабочка
Да, спасибо, так удобнее. :)