Сравнение элементов массива

  • Автор темы Fre4et
  • Дата начала
F

Fre4et

#1
Написал программу для нахождения максимального и минимального элементов массива:
Код:
#include <iostream>
using namespace std;
int main()

{

int x[]={3,5,14,6,11,8,4,5,17,19};

int min=x[0];

int max=x[0];

int i;

for(i=1;i<10;i++)

{if(min<x[i])

{min=x[0];}

else

{min=x[i];}}

for(i=1;i<10;i++)

{if(max>x[i])

{max=x[0];}

else

{max=x[i];}}
cout << "\nmin=" << min;
cout << "\nmax="<< max;

}
Работает она правильно:
Код:
fre4et@Radio-RK86:~$ g++ mass.cpp -o mass
fre4et@Radio-RK86:~$ ./mass

min=3
max=19
Но если изменить значения элементов массива:
Код:
,,,
int x[]={3,5,14,1,11,8,4,5,20,19};
....
то работает она не правильно:
Код:
fre4et@Radio-RK86:~$ g++ mass.cpp -o mass
fre4et@Radio-RK86:~$ ./mass

min=3
max=3
В чём причина?
 
A

Aleksey

#2
Потому, что неправильно написан алгоритм!
Ветка поиска максимума:
Код:
{if(max>x[i])

{max=x[0];} 

else

{max=x[i];}}
Допустим на каком-то шаге мы записываем в max число, которое больше x[0], а на следующем шаге оказывается, что max>x. Что будет? :)
Правильно, независимо от значения max, ему снова прикажут быть x[0]... а если x[0] не максимальное значение?
Совсем не так должно быть, значение max присваивать только тогда, когда надо, а не каждый раз (так же и с поиском минимума):

Код:
for(i=1;i<10;i++) 
if(max<x[i]) max=x[i];

типа такого ...
 
F

Fre4et

#3
Спасибо, теперь понял как это делать.

А возможно ли ещё в этой программе, после нахождения max и min, поменять их местами?
 
A

Aleksey

#4
Конечно :)
Просто введи еще две переменных, в которых сохраняй значение счетчика цикла - i всякий раз, как присваиваешь значение в min и в max (и инициализировать нулем не забудь). Например назови их min_i и max_i. После выполнения циклов в них будут номера соответствующих элементов массивов. А дальше меняй как угодно (только не затри одно другим).