Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на массивы
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Merlin
Задание :

Задан упорядоченный по невозрастанию одномерный массив.
-------------------
1) найти произведение отрицательных элементов массива;
2) найти сумму положительных элементов массива;
3) упорядоченный по невозрастанию массив преобразовать в упорядоченный по возраста-нию, оставив по одному в каждой группе совпадающих элементов.


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
 const int M=10;
 int A[M]={5,4,3,2,2,1,-1,-2,-3,-4};
  int P;
  P=1;

  for (int i=0; i<10; i++)
 {	 if(A[i]<0)
		P=P*A[i];
 }
	 int S=0;
	   for (i=0;i<10;i++)
	{	if(A[i]>0)
		  S=S+A[i];
	}
 for (i=0;i<10;i++)
  { cout<<A[i];
  }
cout<<"------------------", " Первоначальный массив";
  i=1;
while (i<= 10) 
  {
	 if (A[i]=A[i-1])
	   for (int j=i; M-1;i++)
	   {
		  A[j]=A[j+1];
	   --M;
	   }

	   else (i++);
  }
	for (i=0; M%2;i++)
{	 int temp;
		temp=A[i];
		A[i]=A[M-i+1];
		A[M-i+1]=temp;
}

	  for( i=0; i<10; i++)
		cout<< A[i];
	  cout<<"--------------", "Преобразованный массив ";
cout<<" Сумма  "<< S;
cout<<" Произведение"<< P;

 getche();
}


Подскажите где ошибка ?

1 ) . Вопрос : как заменить в "С" , то что в Паскале можно записать как : M div 2 ?
volvo
Цитата(Merlin @ 20.04.2006 17:24)
Подскажите где ошибка ?

Первая - здесь:
if (A[i]=A[i-1])
Ты не сравниваешь элементы, а присваиваешь...

Вторая - здесь:
  const int M=10;
  ...
  --M;
Это с каких пор константу можно изменять? blink.gif


Цитата(Merlin @ 20.04.2006 17:24)
1 ) . Вопрос : как заменить в "С" , то что в Паскале можно записать как : M div 2 ?

Т.к. результат должен присваиваться целочисленной переменной, то простой
что_то = M / 2;

даст тебе деление нацело...
Merlin

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
 int M=10;
 int A[10]={5,4,3,2,2,1,-1,-2,-3,-4};
  int P;
  P=1;

  for (int i=0; i<10; i++)
 {	 if(A[i]<0)
		P=P*A[i];
 }
	 int S=0;
	   for (i=0;i<10;i++)
	{	if(A[i]>0)
		  S=S+A[i];
	}
 for (i=0;i<10;i++)
  { cout<<A[i];
  }
cout<<" ------  Первоначальный массив"<<endl;
  i=1;
while (i<= 10) 
  {
	 if (A[i]==A[i-1])
	   for (int j=i; M-1;i++)
	   {
		  A[j]=A[j+1];
	   --M;
	   }

	   else (i++);
  }
	for (i=0; M/2;i++)
{	 int temp;
		temp=A[i];
		A[i]=A[M-i+1];
		A[M-i+1]=temp;
}

	  for( i=0; i<10; i++)
		cout<< A[i];
	  cout<<" ------  Преобразованный массив "<<endl;
cout<<"\n Сумма S="<< S;
cout<<"\n Произведение P="<< P;

 getche();
}



Спасибо, всё правильно.
Вот только сортировка не работает.

Т.е. если массив равен : 5,4,3,2,2,1,-1,-2,-3,-4

То результат будет : -4,-3,-2,-1,1,2,3,4,5

Что я не так делаю ??
volvo
Ну, я бы вот так делал:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
int main() {

  int M = 10;
  int A[10] =
	{5, 4, 3, 2, 2, 1, -1, -2, -3, -4};

  int P = 1, S = 0;
  for(int i = 0; i < 10; i++)
	if(A[i]<0) P *= A[i]; else S += A[i];

  for(i = 0;i < 10; i++) cout<<A[i] << " ";
  cout << "------------------ initial array" << endl;

  i = 1;
  while(i < M)
	if (A[i] == A[i-1]) {
	  for (int j = i; j < M - 1; j++)
		A[j] = A[j+1];
	  M -= 1;
	}
	else i += 1;


  for(i = 0; i < M / 2; i++) {
	int temp = A[i];
	A[i] = A[M - i - 1];
	A[M - i - 1] = temp;
  }

  for(i = 0; i < M; i++) cout<< A[i] << " ";
  cout<<"-------------- final array " << endl;

  cout<<" s  "<< S;
  cout<<" p "<< P;
  getche();
  return 0;
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.