Типизированный файл и сортировка - Pascal
Формулировка задачи:
Помогите, пожалуйста, написать программу для контрольной.
Условие: Ввести неупорядоченную последовательность из 20 элементов. Сохранить последовательность в файле. Написать процедуры упорядочивания последовательности методом шейкер-сортировки, вставки К новых элементов на правильное место в упорядоченную последовательность. Вывести результаты всех обработок последовательности.
Примечание: программа должна быть написана с использованием массива.
Решение задачи: «Типизированный файл и сортировка»
textual
Листинг программы
uses crt;
const n=20;
type mas=array[1..2*n] of integer;
procedure sheiker(var m:mas);
var d,i,j,k,x:integer;
begin
d:=1; i:=0;
for k:=n-1 downto 1 do { k - количество сравниваемых пар }
begin
i:=i+d;
for j:=1 to k do
begin
if (m[i]-m[i+d])*d>0 then
{меняем местами соседние элементы}
begin
x:=m[i];
m[i]:=m[i+d];
m[i+d]:=x;
end;
i:=i+d;
end;
d:=-d; {меняем направление движения на противоположное}
end;
writeln('Отсортированный массив');
for i:=1 to n do
write(m[i]:4);
writeln;
end;
procedure vstavka(var m:mas;var k:integer);
var b,i,j:integer;
begin
write('Введите число для вставки b=');
readln(b);
k:=k+1;
if b>=m[k-1] then m[k]:=b
else
begin
for i:=1 to k-1 do
if m[i]>=b then
begin
for j:=k downto i+1 do
m[j]:=m[j-1];
m[i]:=b;
break;
end;
end;
writeln('Всиавка числа ',b);
for i:=1 to k do
write(m[i]:4);
writeln;
end;
var f:file of integer;
m:mas;
i,a,k,p:integer;
begin
randomize;
assign(f,'chisla');
rewrite(f);
for i:=1 to n do
begin
a:=random(100);
write(f,a);
end;
writeln('Последовательность');
reset(f);
for i:=1 to n do
begin
read(f,a);
write(a:4);
m[i]:=a;
end;
close(f);
writeln;
sheiker(m);
repeat
write('Сколько чисел вставить от 1 до 5 k=');
readln(k);
until k in [1..5];
p:=n;
for i:=1 to k do
vstavka(m,p);
end.
Объяснение кода листинга программы
- Используемые библиотеки и константы:
uses crt;- используется для взаимодействия с экраном.const n=20;- объявление константы, значение которой равно 20.
- Объявление типа и переменных:
type mas=array[1..2*n] of integer;- объявляется тип массива.var f:file of integer;- объявляется файл для хранения целых чисел.m:mas;- объявляется массив m типа mas.i,a,k,p:integer;- объявляются переменные типа integer.
- Процедура сортировки методом шейкера:
- Происходит сортировка массива m методом шейкера.
- Процедура вставки:
- Пользователь вводит число b, которое затем вставляется в массив m.
- Основная часть программы:
- Генерируются случайные числа и записываются в файл 'chisla'.
- Эти числа читаются из файла и записываются в массив m.
- Производится сортировка массива m методом шейкера.
- Пользователь вводит количество чисел для вставки и эти числа вставляются в массив m с помощью процедуры вставки.