Определить два элемента массива с наименьшими значениями, и присвоить им max значение между ними - Free Pascal
Формулировка задачи:
Пожалуйста, помогите переделать эту программу так, что бы она определяла 2 элемента с наименьшими значениями и присваивала значения максимального элемента, расположенным между ними найденными значениями
Спасибо огромное заранее:3
var
a: array [1..100] of integer;
c1,c2,n,I,max1,max2,nmax1,nmax2:integer;
begin
readln(n);
randomize;
for i:=1 to n do
a[i]:=random(50);
for i:=1 to n do
write (a[i],’ ’);
writeln;
max1:=a[1];
max2:=a[2];
nmax1:=1;
nmax2:=2;
if max1<max2 then
begin
c1:=max1;
max1:=max2;
max2:=c1;
c2:=nmax;
nmax1:=nmax2;
nmax2:=c2;
end;
for i:=3 to n do
begin
if a[i]>=max1 then begin
max2:=max1;
nmax2:=nmax1;
max1:=a[i];
nmax1:=i;
end;
if (a[i]>max2) and (a[i]<max1) then begin
max2:=a[i];
nmax2:=i;
end;
end;
if nmax1<nmax2 then
begin
for i:=nmax1+1 to nmax2-1 do
a[i]:=0;
end
else
begin
for i:nmax2+1 to nmax1-1 do
a[i]:=0;
end;
writeln;
writeln(max1, ‘ ‘, max2);
for i:=1 to n do
write(a[i], ‘ ‘);
readln;
end.Решение задачи: «Определить два элемента массива с наименьшими значениями, и присвоить им max значение между ними»
textual
Листинг программы
uses crt;
var a: array [1..100] of integer;
n,i,min1,min2,max,x:integer;
begin
clrscr;
repeat
write('Введите размер массива от 3 до 100 n=');
readln(n);
until n in [3..100];
randomize;
writeln('Массив');
for i:=1 to n do
begin
a[i]:=random(50);
if i=1 then max:=a[1]
else if a[i]>max then max:=a[i];
write(a[i]:4);
end;
writeln;
if a[1]<a[2] then
begin
min1:=1;
min2:=2;
end
else
begin
min1:=2;
min2:=1;
end;
for i:=3 to n do
begin
if a[i]<a[min1] then
begin
min2:=min1;
min1:=i;
end
else if a[i]<a[min2] then min2:=i;
end;
writeln('Первое минимальное=a[',min1,']=',a[min1]);
writeln('Второе минимальное=a[',min2,']=',a[min2]);
writeln('Максимальныйлемент=',max);
if abs(min1-min2)=1 then
begin
writeln('Между первым и вторым минимальными нет других элементов');
exit;
end;
if min2<min1 then //обменяем местами если 2 ближе 1
begin
x:=min2;
min2:=min1;
min1:=x;
end;
writeln('Измененный массив');
for i:=1 to n do
begin
if i in [min1+1..min2-1] then a[i]:=max;
write(a[i]:4);
end;
readln
end.
Объяснение кода листинга программы
- Объявлены переменные: a (массив), n (размер массива), i (счетчик), min1, min2, max (для хранения максимального значения), x (для обмена значениями).
- Задается размер массива от 3 до 100.
- Массив заполняется случайными значениями от 0 до 49.
- Находится максимальное значение в массиве.
- Если первое и второе минимальные значения равны, то они меняются местами.
- Находится второе минимальное значение.
- Если между первым и вторым минимальными значениями нет других элементов, то программа завершается.
- Если второе минимальное значение ближе к первому, чем к третьему, то они меняются местами.
- Заполняется измененный массив, где значения между первым и вторым минимальными заменяются на максимальное значение.
- Программа завершается.