Помощь - Поиск - Пользователи - Календарь
Полная версия: 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.