Что я не так делаю?
паскаль
поиск двух максимальных чисел
program ee;
const N = 5;
var
a : array [1..5]of integer;
iMax,max, iiMa,ma ,i : integer;
begin
for i:= 1 to N do begin
read (a[i]);
end;
write (' числа ', a );
iMax := a[1];// присваиваем для начального сравнения
for i := 1 to N do
if a[i] > iMax then//сравниваем 5 чисел и берём наибольшее
begin
iMax := a[i];//число
max := i;//на каком месте
end;
write (' первое максимальное значение ', iMax,' ',max );
iiMa := a[1];//присваиваем для начального сравнения
ma := 1;//
for i := 1 to N do//
if (iiMa < a[i])and(ma < max)then// ищем второе наибольшее число
begin
iiMa := a[i];//
ma := i//
end;
write (' второе максимальное значение ', iiMa,' ', ma);
end.
Аноним:
Дай условие задачи, я гляну что не так
Условие: Ввести с клавиатуры массив из пяти элементов, найти два максимальных элемента и их номера.
Ответы
Ответ дал:
1
Нашел. у тебя ma изначально 1, тоесть условие ma<>max почти всегда не будет иметь значения
а вообще оно так себе пашет если вводить 54321
program ee;
const N = 5;
var
a : array [1..5]of integer;
iMax,max, iiMa,ma ,i : integer;
begin
for i:= 1 to N do
read (a[i]);
write (' числа ', a );
iMax := a[1];
max:=1;
for i := 1 to N do
if a[i] > iMax then
begin
iMax := a[i];
max := i;
end;
write (' первое максимальное значение ', iMax,' ',max );
iiMa := a[1];
ma := 1;
if iiMa=iMax then begin iiMa:=a[2];
ma:=2;
end;
for i := 1 to N do
if (iiMa < a[i])and (i <> max) then
begin
iiMa := a[i];
ma := i
end;
write (' второе максимальное значение ', iiMa,' ', ma);
end.
const N = 5;
var
a : array [1..5]of integer;
iMax,max, iiMa,ma ,i : integer;
begin
for i:= 1 to N do
read (a[i]);
write (' числа ', a );
iMax := a[1];
max:=1;
for i := 1 to N do
if a[i] > iMax then
begin
iMax := a[i];
max := i;
end;
write (' первое максимальное значение ', iMax,' ',max );
iiMa := a[1];
ma := 1;
if iiMa=iMax then begin iiMa:=a[2];
ma:=2;
end;
for i := 1 to N do
if (iiMa < a[i])and (i <> max) then
begin
iiMa := a[i];
ma := i
end;
write (' второе максимальное значение ', iiMa,' ', ma);
end.
оно так себе пашет если идёт комбинация 123475 или 12435
Вот твоя доработанная, сравни, если что - пиши, поясню
if iiMa=iMax then begin iiMa:=a[2];
ma:=2; для чего это?
ma:=2; для чего это?
Если внезапно 1ый элемент будет максимальным, то дальше действия просто не пойдут, то есть iiMa и ma не изменятся
Так и останутся значениями a[1] и 1. А это так же может оказаться и значенияiMax и max
А ясно. Спасибо ещё раз.
Если будут еще вопросы, возможно, по другим программам - пиши в личку)
хорошо
Вас заинтересует
1 год назад
1 год назад
2 года назад
3 года назад
8 лет назад
8 лет назад