В одномерном массиве поменяйте местами последний наименьший и первый наибольший элементы - Turbo Pascal
Формулировка задачи:
Задача: В одномерном целочисленном массиве поменяйте местами последний наименьший и первый наибольший элементы. Выведите исходный и изменённый массив, а также индексы элементов, которые менялись местами (исходный массив должен формироваться с помощью ввода их с клавиатуры).
Т.е., если ввожу массив:
22 29 8 3 4 22 15 6 3 29
должно получиться так:
22 3 8 3 4 22 15 6 29 29
2-ой и 9-ый элементы меняются местами.
Пишу такую программу:
Она работает не совсем правильно. На этапе нахождения индекса минимального программа берёт индекс первого встретившегося. Пытаюсь заставить сделать, что мне нужно дополнительным условием:
Безуспешно. Подскажите, как исправить?
Листинг программы
- Type Mas = Array [1..20] of Real;
- Var a:Mas;
- i, N,imax,imin: Integer;
- max, min,k: Real;
- BEGIN
- Repeat
- Write('Введите N = ');
- readLn(N);
- Until N <= 20;
- For i := 1 to N do
- begin
- Write('A [ ', i, ' ] = ');
- ReadLn(A[i])
- end;
- writeln;
- imax:=1; max:=a[1];
- for i:=2 to N do
- if max<a[i] then
- begin
- max:=a[i]; imax:=i
- end;
- writeln;
- imin:=1; min:=a[1];
- for i:=2 to N do
- if min>a[i] then
- begin
- min:=a[i]; imin:=i;
- if min=a[i] then
- imin:=i;
- end;
- k:=a[imin];
- a[imin]:=a[imax];
- a[imax]:=k;
- writeln ('Максимальный элемент в массиве = ',max);
- writeln ('Его индекс в исходном массиве = ',imax);
- writeln ('Минимальный элемент в массиве = ',min);
- writeln ('Его индекс в исходном массиве = ',imin);
- For i:=1 to 10 do writeln(a[i],' ');
- end.
Листинг программы
- if min=a[i] then
- imin:=i;
Решение задачи: «В одномерном массиве поменяйте местами последний наименьший и первый наибольший элементы»
textual
Листинг программы
- uses Crt;
- type Tmass =array[1..20] of Real;
- var a: Tmass;
- i,n,imax,imin:integer;
- max,min,k: Real;
- begin
- ClrScr;
- repeat
- Write('N = ');
- Readln(n);
- until n <=20;
- for i := 1 to n do
- begin
- Write('A[ ', i, ' ] = ');
- Readln(a[i])
- end;
- Writeln;
- Writeln('Ishodniy massiv:');
- Writeln;
- for i:=1 to n do
- Write(a[i]:5:1);
- Writeln;
- Writeln;
- imax:=1; max:=a[1];
- for i:=2 to n do
- if a[i]>max
- then
- begin
- max:=a[i];
- imax:=i
- end;
- imin:=n; min:=a[n];
- for i:=(n-1) downto 1 do
- if a[i]<min
- then
- begin
- min:=a[i];
- imin:=i;
- end;
- k:=a[imin];
- a[imin]:=a[imax];
- a[imax]:=k;
- Writeln('Konecniy massiv:');
- Writeln;
- for i:=1 to n do
- Write(a[i]:5:1);
- Writeln;
- Writeln;
- if imax>imin
- then Writeln(imin,' i ',imax,' elementi menjajutcja mestami')
- else Writeln(imax,' i ',imin,' elementi menjajutcja mestami');
- ReadKey;
- end.
Объяснение кода листинга программы
- Создается тип данных Tmass, который представляет собой одномерный массив из 20 элементов типа Real.
- Создается переменная a, которая представляет собой этот массив.
- Создаются три переменные: i, n и k. Переменная i используется для итерации по элементам массива, переменная n используется для определения количества элементов в массиве, а переменная k используется для обмена элементов.
- В цикле while считывается количество элементов в массиве (n).
- Для каждого i от 1 до n считывается элемент массива a[i].
- Инициализируются переменные imax и imin. Переменная imax устанавливается равной i, а переменная imin устанавливается равной n.
- В цикле от (n-1) до 1 считывается, если текущий элемент массива a[i] больше max, то обновляется max и imax, иначе ничего не происходит.
- В цикле от (n-1) до 1 считывается, если текущий элемент массива a[i] меньше min, то обновляется min и imin, иначе ничего не происходит.
- Обмениваются местами элементов с индексами imin и imax.
- Выводится окончательный результат.
- Завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д