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

Как исправить недочет в программе Pascal?

Мне нужно сделать программу в паскале, которая ищет два максимальных элемента. Программу я сделал.
Program B_42;
Var A:array [1..5] of integer;
Var i,max,Nmax,max2,Nmax2:integer;
Begin
write('Массив:',' ' );
For i:=1 to 5 do begin
A[i]:= random(20)+1;
Write(A[i],' ');
end;
Writeln;
max:=A[1];
Nmax:=1;
max2:=A[1];
Nmax2:=1;
for i:=2 to 5 do begin
if A[i]> max then begin
max:=A[i];
Nmax:=i;
end;
end;
for i:=2 to 5 do begin
if (a[i]>max2) and (i<>Nmax) then begin
max2:=A[i];
Nmax2:=i
end;
end;
Writeln('Максимальный элемент: A[',Nmax,']=',max);
Writeln('Второй максимум: A[',Nmax2,']=',max2);

End.

Но вот проблема, когда у меня попадается два одинаковых числа, программа берет только одно из них Например, A1=19 A2=19, но программа рассматривает только А1 и выведет его в ответ или же вообще не рассматривает другие объекты. Ошибка где то в условии. В целом как то так:
Массив: 18 17 2 2 4
Максимальный элемент: A[1]=18
Второй максимум: A[1]=18

Надеюсь на помощь, но учтите, что добавление новых операторов мне не поможет, т. к меня ограничивает школьная программа и на вопрос учитель хлопец почему ты вместо моих любимых массивов и if используешь что-то другое я хз как ответить.
Максимальный элемент априори может быть только один (по значению). Из твоего объяснения абсолютно непонятно, что нужно было сделать..
Artyom Arakelyan
Artyom Arakelyan
17 771
Лучший ответ
посмотри эту программу, исходные 5 5 4 3 2
Program B_42;
uses crt;
Var A:array [1..5] of integer;
Var i,j,max,Nmax,max2,Nmax2:integer;
Begin
write('Массив:',' ' );
For i:=1 to 5 do begin
//A[i]:= random(20)+1;
//Write(A[i],' ');
readln(a[i]) ;
end;
Writeln;
//max:=A[1];
Nmax:=1;
//max2:=A[1];
Nmax2:=1;
for i:=1 to 5 do //begin
if A[i]> a[nmax] then begin
//max:=A[i];
Nmax:=i;
end; // writeln(nmax);
//end;
if nmax = 1 then j:=2 else j:=1;
//writeln(j);
for i:=j to 5 do begin
if (a[i]>=a[nmax2]) and (i<>Nmax) then begin
//max2:=A[i];
Nmax2:=i
end;
end;
Writeln('Максимальный элемент: A[',Nmax,']=',a[nmax]);
Writeln('Второй максимум: A[',Nmax2,']=',a[nmax2]);

End.
Второй for надо начинать с единицы.
И непосредственно перед вторым циклом адекватно инициализировать второе максимальное:
if Nmax=1 then Nmax2:=2 else Nmax2=1;
max2:=A[Nmax2];
По хорошему, надо переменные инициализировать минимальным значением в массиве ( ну или, по крайней мере, вторую переменную) и уже тогда идти искать максимальное для первого элемента, и потом для второго.
Или инициализировать нулём, если позволяет задача.
Потому что в твоём случае есть прокол
1)18 17 4 3 - и 1-е и 2-е инициализированы "18", и второе макс значение просто не может найти значение больше, чем 18
Во всех остальных (12 18 4 3, 4 3 18 12....), твоё второе значение будет инициализировано меньшим числом, чем раньше было инициализировано 1-е
Agaddin Ibadov
Agaddin Ibadov
17 459