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

линейный массив. в линейном массиве найти два наибольших числа и переставить их помогите пожалуйста,заранее спасибо)

with
Ada.Text_IO,
Ada.Integer_Text_IO,
Ada.Numerics.Discrete_Random;
procedure N74139928 is
subtype TSize is Integer range 1 .. 100;
subtype TRandN is TSize range 10 .. TSize'Last;
subtype TValue is Integer range -99 .. 99;
package RandN is new Ada.Numerics.Discrete_Random(TRandN);
package RandV is new Ada.Numerics.Discrete_Random(TValue);
use
Ada.Text_IO,
Ada.Integer_Text_IO,
RandN,
RandV;
n: TRandN;
GenN: RandN.Generator;
GenV: RandV.Generator;
C: Character;
begin
Reset(GenN);
n := Random(GenN);
declare
a: array (1 .. n) of TValue;
imax1, imax2: TSize := TSize'First;
j: Integer;
t: TValue;
begin
Reset(GenV);
Put_Line("Исходный массив A(" & Integer'Image(n) & "):");
for i in a'Range loop
loop
a(i) := Random(GenV);
j := i - 1;
while j >= a'First and then a(i) /= a(j) loop
j := j - 1;
end loop;
exit when j < a'First;
end loop;
Put(a(i), 4);
if i = a'First or else a(i) > a(imax1) then
imax2 := imax1;
imax1 := i;
elsif a(i) > a(imax2) then
imax2 := i;
end if;
end loop;
New_Line;
Put_Line("Два наибольших элемента: ");
Put_Line("A(" & TSize'Image(imax1) & ") = " & TValue'Image(a(imax1)));
Put_Line("A(" & TSize'Image(imax2) & ") = " & TValue'Image(a(imax2)));
t := a(imax1);
a(imax1) := a(imax2);
a(imax2) := t;
Put_Line("Массив после перестановки: ");
for i in a'Range loop
Put(a(i), 4);
end loop;
end;
Get_Immediate(C);
end N74139928;

P.S. Массив создаётся с помощью генератора псевдослучайных чисел.
Элементы массива неповторяющиеся, иначе, при одинаковых по значению двух максимальных элементах, не будет заметно, что они поменялись.
МА
Максим Атаманов
51 590
Лучший ответ
отсортируй массив по убыванию и переставь 2 первых элемента местами. или пройди дважды массив и определи 2 максимальных
переставить куда?
Саша 86 Андриеш
Саша 86 Андриеш
8 247
За пару сотен сделаю )

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