Мне нужно сделать программу в паскале, которая ищет два максимальных элемента. Программу я сделал.
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 используешь что-то другое я хз как ответить.
Другие языки программирования и технологии
Как исправить недочет в программе Pascal?
Максимальный элемент априори может быть только один (по значению). Из твоего объяснения абсолютно непонятно, что нужно было сделать..
посмотри эту программу, исходные 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.
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];
И непосредственно перед вторым циклом адекватно инициализировать второе максимальное:
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-е
Или инициализировать нулём, если позволяет задача.
Потому что в твоём случае есть прокол
1)18 17 4 3 - и 1-е и 2-е инициализированы "18", и второе макс значение просто не может найти значение больше, чем 18
Во всех остальных (12 18 4 3, 4 3 18 12....), твоё второе значение будет инициализировано меньшим числом, чем раньше было инициализировано 1-е
Похожие вопросы
- помогите исправить ошибку в программе в Pascal
- Pascal ABC. Помогите исправить ошибку в программе.
- Помогите исправить ошибку в программе (c++).
- Здраствуйте. Оцените программу. Pascal ABC.
- Что не так с программой? Pascal
- помогите написать программу pascal
- Проверить рациональность выполнения программы pascal
- Помогите исправить ошибку в программе на Си
- Помогите исправить программный код на Pascal (индексно-последовательный поиск) вопрос полностью в средине
- Пожалуйста, помогите исправить ошибки в программах на С++!