Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий - Pascal

Узнай цену своей работы

Формулировка задачи:

Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий: наименьший элемент массива располагается на первом месте, наименьший из оставшихся элементов — на последнем, следующий по величине располагается на втором месте, следующий — на предпоследнем и т. д. (в результате график значений элементов будет напоминать холм). Массив A является входным и выходным параметром. С помощью этой функции преобразовать массивы A, B, C размера NA, NB, NC соответственно. ПАСКАЛЬ

Решение задачи: «Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий»

textual
Листинг программы
const nmax=100;
type mas=array[1..nmax] of real;
procedure Vvod(var a:mas;var n:integer;c:char);
var i:integer;
begin
repeat
write('Размер массива ',c,' до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
a[i]:=10*random;
clrscr;
end;
procedure Vyvod(a:mas;n:integer;c:string);
var i:integer;
begin
writeln(c);
for i:=1 to n do
write(a[i]:5:2);
writeln;
end;
procedure Hill(var a:mas;n:integer);
var i,j,k,imn,p:integer;
     x:real;
begin
k:=n div 2; //количество перестановок
for i:=1 to k do
 begin
  imn:=i; //найдем 1 минимальный в еще не отсортированных
  for j:=i+1 to n-i+1 do
  if a[j]<a[imn] then imn:=j;
  x:=a[imn];//нашли
  for p:=imn downto i+1 do //здвинем на него часть массива впереди
  a[p]:=a[p-1];
  a[i]:=x;//вставим элемент на место в первой части массива
  imn:=i+1;//ищем второй минимальный
  for j:=i+1 to n-i+1 do
  if a[j]<a[imn] then imn:=j;
  x:=a[imn];//нашли
  for p:=imn to n-i do //сдвинем на него часть массива впереди
  a[p]:=a[p+1];
  a[n-i+1]:=x;//вставим на место во второй части массива
 end;
end;
var a,b,c:mas;
    na,nb,nc:integer;
begin
randomize;
Vvod(a,na,'A');
Vvod(b,nb,'B');
Vvod(c,nc,'C');
Vyvod(a,na,'Исходный массив А');
Hill(a,na);
Vyvod(a,na,'Отсортированный массив А');
Vyvod(b,nb,'Исходный массив B');
Hill(b,nb);
Vyvod(b,nb,'Отсортированный массив B');
Vyvod(c,nc,'Исходный массив C');
Hill(c,nc);
Vyvod(c,nc,'Отсортированный массив C');
end.

Объяснение кода листинга программы

  1. const nmax=100;
    1. type mas=array[1..nmax] of real;
    2. procedure Vvod(var a:mas;var n:integer;c:char); var i:integer;
    3. begin repeat write('Размер массива ',c,' до ',nmax,' n='); readln(n); until n in [1..nmax]; for i:=1 to n do a[i]:=10*random; clrscr; end;
    4. procedure Vyvod(a:mas;n:integer;c:string); var i:integer; end; begin writeln(c); for i:=1 to n do write(a[i]:5:2); writeln; end;
    5. procedure Hill(var a:mas;n:integer); var i,j,k,imn,p:integer;     x:real; end; begin k:=n div 2; //количество перестановок for i:=1 to k do begin imn:=i; //найдем 1 минимальный в еще не отсортированных for j:=i+1 to n-i+1 do if a[j]<a[imn] then imn:=j; x:=a[imn];//нашли for p:=imn downto i+1 do //здвинем на него часть массива впереди a[p]:=a[p-1]; a[i]:=x;//вставим элемент на место в первой части массива imn:=i+1;//ищем второй минимальный for j:=i+1 to n-i+1 do if a[j]<a[imn] then imn:=j; x:=a[imn];//нашли for p:=imn to n-i do //сдвинем на него часть массива впереди a[p]:=a[p+1]; a[n-i+1]:=x;//вставим на место во второй части массива end; end; var a,b,c:mas;     na,nb,nc:integer; end; begin randomize; Vvod(a,na,'A'); Vvod(b,nb,'B'); Vvod(c,nc,'C'); Vyvod(a,na,'Исходный массив А'); Hill(a,na); Vyvod(a,na,'Отсортированный массив А'); Vyvod(b,nb,'Исходный массив B'); Hill(b,nb); Vyvod(b,nb,'Отсортированный массив B'); Vyvod(c,nc,'Исходный массив C'); Hill(c,nc); Vyvod(c,nc,'Отсортированный массив C'); end.

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы