Другие языки программирования и технологии

Помогите. Не могу понять как работает поиск максимального элемента массива!!

Здесь исходник -- rghost(точка) ru/36405642
Понел почти все:
1 Заполняем массив рандомными числами
2 Устанавливаем первый элемент как максимальный
3 Сравниваем этот элемент с другими 10 элементами
Только вот не понял, как Паскаль определяет какой ИМЕННО элемент максимальный ведь чисел, которые могут быть больше первого элемента, может быть и 3 и 4...
Почему он берет именно МАКСИМАЛЬНО БОЛЬШЕЕ число, а не какое то другое, которое тоже будет больше 1 элемента??
ДМ
Дима Маргуж
13 924
Потому что у тебя алгоритм неверный.
Выделяем переменную для хранения максимального значения, заносим в нее значение первого элемента массива, затем в цикле сравниваем все оставшиеся элементы массива с этой переменной, если элемент массива оказался больше - заносим в переменную его значение.
Если надо, одновременно с занесением нового максимума в переменную можно в другую переменную записывать его индекс. А можно и проще - записывать в переменную вообще только индекс найденного до сих пор максимального элемента и сравнивать с ним, если найден новый максимальный элемент - заменяем его индекс в переменной.
NB
Nodir Bek
56 928
Лучший ответ
Пусть дан массив A[7, 16, 8, 3, 25, 10]

Предположим максимальный — это первый: max := A[1];
Значит max = 7

Начинаем цикл для i := 2..6

Для i = 2 :
A[2] = 16
16 > 7 — условие выполняется
Значит max := A[2], т. е. сейчас max = 16

Для i = 3 :
A[3] = 8
8 < 16 — условие не выполняется

Для i = 4 :
A[4] = 3
3 < 16 — условие не выполняется

Для i = 5 :
A[5] = 25
25 > 16 — условие выполняется
Значит max := A[5], т. е. сейчас max = 25

Для i = 6 :
A[6] = 10
10 < 25 — условие не выполняется

Итого, после прохода цикла по всем элементам массива, переменная max несёт в себе значение максимального элемента!
Так попроще будет, наверно

const n=10;
var a:array [1..n] of integer;
i,max:integer;
begin
randomize;
for i:= 1 to n do begin a[ i]:=Random(101)-50;write(a[ i]:5) end;
writeln;
max:=1;
for i:=2 to n do if a[max] < a[ i] then max:=i;
writeln('Maximal elemen= ',a[max]:5);
writeln('index= ',max:5);
readln
end.
Nod Tajik_Time
Nod Tajik_Time
15 838
Потому что пункт 3.1 пропущен.
3.1) если текущий элемент > максимального тогда - максимальный элемент = текущий.
В результате когда ты все просмотришь - максимальный будет именно тот, который действительно максимальный.
идет сравнение, вначале с первым, если второе боьше первого, то второе-максимум. потом сравнивается максимальное число со следующим, а не первое.
каждый раз должно быть присваивания максимума определенному параметру, обычно max
Воланд
Воланд
3 043
поиск максимального элемента находится следующим образом. временная переменная с наименьшим значением 0. Каждый элемент массива поочередно сравнивается с этой переменной, если элемент массива больше чем переменная, то значение переменной становится этим элементом, проверяется следующий элемент массива и сравнивается с считающимся на данный момент максимальным числом, если элемент массива больше числа в переменной, то он становится максимумом

Похожие вопросы