• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Fre4et

Написал программу для нахождения максимального и минимального элементов массива:
Код:
#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

Потому, что неправильно написан алгоритм!
Ветка поиска максимума:
Код:
{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

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

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

Aleksey

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!