Предмет: Информатика, автор: Аноним

Решите задачи в Паскале, пожалуйста.
1)Дан массив, отсортировать все его элементы до максимального по возрастанию.
2)Дан массив, отсортировать все его элементы от минимального по возрастанию.
3)Дан массив, отсортировать все его элементы от максимального до минимального по убыванию.
МЕТОДОМ ПУЗЫРЬКА

Ответы

Автор ответа: petyaGavrikov
0
1.
const n=20; 
var
  a:array[1..n] of integer;
  max,imax,i,j,t:integer;
begin
  Randomize;
  Writeln('Исходный массив:');
  for i:=1 to n do begin
    a[i]:=Random(51)-25;
    Write(a[i],' ')
  end;
  Writeln;
  max:=a[1]; imax:=1;
  for i:=2 to n do
   if a[i]>max then begin max:=a[i]; imax:=i; end;
  writeln('max = ',max);
  for i:=1 to imax-1 do
    for j:=1 to imax-i do
      if a[j]>a[j+1] then
      begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
  Writeln('Отсортированный массив:');
  for i:=1 to n do Write(a[i],' ');
  Writeln;
end.

Пример:
Исходный массив:
-5 -17 -19 4 -10 16 21 -23 22 24 -5 19 11 -24 6 -25 13 3 9 0 
max = 24
Отсортированный массив:
-23 -19 -17 -10 -5 4 16 21 22 24 -5 19 11 -24 6 -25 13 3 9 0 

2.
const n=20; 
var
  a:array[1..n] of integer;
  min,imin,i,j,t:integer;
begin
  Randomize;
  Writeln('Исходный массив:');
  for i:=1 to n do begin
    a[i]:=Random(51)-25;
    Write(a[i],' ');
  end;
  Writeln;
  min:=a[1]; imin:=1;
  for i:=2 to n do
   if a[i]<min then begin min:=a[i]; imin:=i; end;
  writeln('min = ',min);
  for i:=1 to n-imin-1 do
    for j:=imin to n-i do
      if a[j]>a[j+1] then
      begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
  Writeln('Отсортированный массив:');
  for i:=1 to n do Write(a[i],' ');
  Writeln;
end.

Пример:
Исходный массив:
3 -24 -16 -9 -25 3 -25 17 -22 -3 8 2 -7 -8 -8 -24 -23 12 24 -24 
min = -25
Отсортированный массив:
3 -24 -16 -9 -25 -25 -24 -24 -23 -22 -8 -8 -7 -3 2 3 8 12 17 24 

3.
const n=20; 
var
  a:array[1..n] of integer;
  max,imax,min,imin,i,j,t:integer;
begin
  Randomize;
  Writeln('Исходный массив:');
  for i:=1 to n do begin
    a[i]:=Random(51)-25;
    Write(a[i],' ')
  end;
  Writeln;
  max:=a[1]; imax:=1;
  min:=a[1]; imin:=1;
  for i:=2 to n do
   begin
   if a[i]>max then begin max:=a[i]; imax:=i; end;
   if a[i]<min then begin min:=a[i]; imin:=i; end;
   end;
  writeln('max = ',max,'  min = ',min);
  if imax>imin then begin
  for i:=1 to imax-imin-1 do
    for j:=imin to imax-i do
      if a[j]>a[j+1] then
       begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end
  end else begin
  for i:=1 to imin-imax-1 do
    for j:=imax to imin-i do
      if a[j]<a[j+1] then
       begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end; end;
  Writeln('Отсортированный массив:');
  for i:=1 to n do Write(a[i],' ');
  Writeln;
end.

Пример:
Исходный массив:
-12 13 1 -17 -13 -10 23 5 8 -11 -9 -2 17 19 10 -5 14 10 -20 -9 
max = 23  min = -20
Отсортированный массив:
-12 13 1 -17 -13 -10 23 19 17 14 10 10 8 5 -2 -5 -9 -11 -20 -9 
Автор ответа: Аноним
0
PascalABC.NET 3.3.5, сборка 1650 от 01.04.2018
Внимание! Если программа не работает, обновите версию!

procedure BubbleSort(a:array of integer;
    descending:Boolean:=False; // нужна ли сортировка по невозрастанию
    u:integer:=-1; // начальный индекс
    v:integer:=-1); // конечный индекс
// Простая пузырьковая сортировка элементов с индексами с u по v
begin
  // обеспечим корректность параметров u и v
  if u<0 then u:=0;
  var n:=a.Length;
  if (v<0) or (v>=n) then v:=n-1;
  if u>v then Swap(u,v)
  else if u=v then Exit;
  // собственно, сортировка
  if descending then begin // по невозрастанию
    for var i:=v-1 downto u do
      for var j:=u to i do
        if a[j]<a[j+1] then Swap(a[j],a[j+1])
    end
  else begin
    for var i:=v-1 downto u do // по неубыванию
      for var j:=u to i do
        if a[j]>a[j+1] then Swap(a[j],a[j+1])
    end
end;

begin
  Write(': ');
  var a:=ArrRandom;
  a.Println;
  var (imin,imax):=(a.IndexMin,a.IndexMax);
  var b:=Copy(a);
  Write('1: '); BubbleSort(b,False,0,imax); b.Println;
  b:=Copy(a);
  Write('2: '); BubbleSort(b,False,imin); b.Println;
  b:=Copy(a);
  Write('3: '); BubbleSort(b,True,imax,imin); b.Println
end.

Пример
 : 70 61 10 72 17 84 19 35 83 47
1: 10 17 61 70 72 84 19 35 83 47
2: 70 61 10 17 19 35 47 72 83 84
3: 70 61 84 72 17 10 19 35 83 47
Похожие вопросы
Предмет: Английский язык, автор: oksanalitvin4uk1978
Предмет: Английский язык, автор: Аноним
Предмет: Математика, автор: parpulovarumana
Предмет: Геометрия, автор: ilimdar11