Помогите решить задачу. Необходимо использовать одномерный массив.
Даны действительные числа a1,a2,...a n. Поменять местами первый наибольший элемент с последним наименьшим элементом.
Ответы
Ответ дал:
1
const
n = 20;
var
a: array[1..n] of real;
i, imax, imin: integer;
r, rmax, rmin:real;
begin
Randomize;
Writeln('Элементы массива');
rmax:=-1; { заведомо меньше меньшего }
rmin:=100; { заведомо больше большего }
for i := 1 to n do
begin
r:=Random(10);
a[i]:=r;
Write(r,' ');
if rmax<r then begin rmax:=r; imax:=i end;
if rmin>=r then begin rmin:=r; imin:=i end
end;
Writeln;
{ меняем местами и выводим результат }
a[imax]:=rmin; a[imin]:=rmax;
Writeln('Конечное состояние массива');
for i := 1 to n do Write(a[i],' ');
Writeln
end.
Тестовое решение:
Элементы массива
4 1 2 8 6 3 7 5 5 1 4 4 3 3 6 8 5 4 7 6
Конечное состояние массива
4 1 2 1 6 3 7 5 5 8 4 4 3 3 6 8 5 4 7 6
Видно, что первая восьмерка поменялась местами с последней единицей.
n = 20;
var
a: array[1..n] of real;
i, imax, imin: integer;
r, rmax, rmin:real;
begin
Randomize;
Writeln('Элементы массива');
rmax:=-1; { заведомо меньше меньшего }
rmin:=100; { заведомо больше большего }
for i := 1 to n do
begin
r:=Random(10);
a[i]:=r;
Write(r,' ');
if rmax<r then begin rmax:=r; imax:=i end;
if rmin>=r then begin rmin:=r; imin:=i end
end;
Writeln;
{ меняем местами и выводим результат }
a[imax]:=rmin; a[imin]:=rmax;
Writeln('Конечное состояние массива');
for i := 1 to n do Write(a[i],' ');
Writeln
end.
Тестовое решение:
Элементы массива
4 1 2 8 6 3 7 5 5 1 4 4 3 3 6 8 5 4 7 6
Конечное состояние массива
4 1 2 1 6 3 7 5 5 8 4 4 3 3 6 8 5 4 7 6
Видно, что первая восьмерка поменялась местами с последней единицей.
archery:
вот только интересно, зачем сохранять не только индекс минимума и максимума, но и их значения? Это ж увеличивает кол-во переменных и тд
Для того сохранять, чтобы при каждом проходе по циклу не обращаться с выборкой к двум элементам массива. Лучше потратить 8 дополнительных байт памяти, чем 2*n раз обратиться к массиву. Напомню, что при обращении к массиву в Паскале проверяется допустимость значения индекса, затем вычисляется смещение относительно начала массива и уж потом формируется ссылка на адрес в памяти.
мне кажется что в школьной задаче удобочитаемость приоритетнее. Не микроконтроллеры в конце концов программируются, когда каждый байт памяти на счету.
Это неверный подход. Из-за него потом люди отучаются строить эффективные алгоритмы, предпочитая везде метод грубой силы (брутфорс).
Удобочитаемость - неверный подход? Это одно из первых чему учат молодого программиста в айтишной конторе. Наверное уже во всех используемых языках верхнего уровня работа с масивами оптимизирована и не нужны такие танцы с бубнами.
Значит, мы в разных конторах работаем. И давайте заканчивать спам тут.
Вас заинтересует
2 года назад
2 года назад
2 года назад
7 лет назад
7 лет назад
9 лет назад