Помощь - Поиск - Пользователи - Календарь
Полная версия: PascalABC. Массивы.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dadelin
Задан массив А(N).
Элементы массива, находящиеся между максимальным и минимальным элементами,
отсортировать в порядке убывания. Отсортированный массив вывести на печать.
Помогите с кодом. Голова уже не варит.
Федосеев Павел
Цитата(dadelin @ 20.10.2013 21:07) *
Помогите с кодом. Голова уже не варит.

Значит, есть наработки. Покажи, что наварил.
dadelin
uses crt;
var a:array [1..100]of integer;
n,i,j,k,x:integer;
begin
clrscr;
randomize;
write('Введите массив: n=');readln(n);
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(200);;
write(a[i],' ');
end;
writeln;
for i:=2 to n do
begin
x:=a[i];
j:=1;
while x>a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;
writeln('Отсортированный массив:');
for i:=1 to n do
write(a[i],' ');
readln
end.
Федосеев Павел
Ага, значит есть ввод, сортировка и вывод массива.
Остались "копейки" - найти индексы минимального и максимального элементов, а также сортировать в порядке убывания (причём не весь массив, а только его часть).
Ну вот смотри. Поиск минимального
  Imin:=1;
for i:=2 to n do
if a[Imin]>a[i] then
Imin:=i;

Похоже находится индекс максимального элемента массива - Imax.
Сортировка в порядке убывания - замени условие в while на (x<a[j]).
Может случится, что Imin>Imax, тогда поменяй местами
  if Imin>Imax then
begin
i:=Imin;
Imin:=Imax;
Imax:=i;
end;

Сортировка не всего массива а только его части от Imin до Imax
  for i:=Imin+1 to Imax do
begin
x:=a[i];
j:=Imin;
while x<a[j] do inc(j);
for k:=i-1 downto j do
a[k+1]:= a[k];
a[j]:=x;
end;

Ещё есть FAQ
dadelin
Так ведь?
Код
uses crt;
var a:array [1..100]of integer;
n,i,j,k,x,Imin,Imax:integer;
begin
clrscr;
randomize;
write('Введите массив: n=');readln(n);
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(200);;
write(a[i],' ');
end;
writeln;
Imin:=1;
  for i:=2 to n do
    if a[Imin]>a[i] then
      Imin:=i;
begin
x:=a[i];
j:=1;
while x<a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;
if Imin>Imax then
  begin
    i:=Imin;
    Imin:=Imax;
    Imax:=i;
  end;
  writeln('Отсортированный массив:');
for i:=Imin+1 to Imax do
  begin
    x:=a[i];
    j:=Imin;
   while x<a[j] do inc(j);
    for k:=i-1 downto j do
a[k+1]:= a[k];
a[j]:=x;
  end;
end.  
Федосеев Павел
Нет.

1. Нет нахождения Imax.
2. Нет вывода результата.
3. Странный кусок непонятного кода
begin
x:=a[i];
j:=1;
while x<a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;

Чтобы было лучше читать исходный код воспользуйся форматтером кода - в среде Lazarus он встроен (меню код - форматирование кода JEDI), или воспользуйся отдельной программой JCFGui (смотри здесь и здесь).
После форматтера лучше видна структупа проги. Например, твоя
program lab;

uses
crt;

var
a: array [1..100] of integer;
n, i, j, k, x, Imin, Imax: integer;
begin
clrscr;
randomize;
Write('Введите массив: n=');
readln(n);
WriteLn('Исходный массив:');
for i := 1 to n do
begin
a[i] := random(200);
;
Write(a[i], ' ');
end;
WriteLn;
Imin := 1;
for i := 2 to n do
if a[Imin] > a[i] then
Imin := i;
begin
x := a[i];
j := 1;
while x < a[j] do
Inc(j);
for k := i - 1 downto j do
a[k + 1] := a[k];
a[j] := x;
end;
if Imin > Imax then
begin
i := Imin;
Imin := Imax;
Imax := i;
end;
WriteLn('Отсортированный массив:');
for i := Imin + 1 to Imax do
begin
x := a[i];
j := Imin;
while x < a[j] do
Inc(j);
for k := i - 1 downto j do
a[k + 1] := a[k];
a[j] := x;
end;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.