program lab_2;
type {Описание типов}
Ssyl = ^s; {Тип ссылка на запись}
s = record {Тип запись}
znach: integer; {Значение элемента списка}
next: Ssyl; {Ссылка на следующий элемент}
end;
var {Описание переменных}
nach, rab, rab2, A, B: Ssyl; {Переменные ссылки}
temp1, temp2: LongInt; otvet: Char; {Вспомогательные переменные}
schet, i, j: Integer; {Переменные счётчики}
f1: file of s; zap: s; {Переменная записи, и файла типа запись}
begin
{Формирование списка в динамической памяти и запись его в файл}
{Формирование 1-го элемента списка}
repeat
{Формирование следующих элементов списка}
{Запрос ответа на выход из цикла}
until (otvet = 'N') or (otvet = 'n');
{Вывод введённых значений из файла на экран}
while not Eof(f1) do
{Вывод записи на экран}
{Чтение записи в динамическую память}
{Сортировка данных в динамической памяти}
for i := 1 to schet-1 do
begin
{Задание значений вспомогательных перменных}
for j := 1 to schet-i do
{Перестановка ссылок}
{Или переход к следующей паре}
{проверка конца списка}
end;
while rab<>nil do
{запись отсортированных данных в файл}
while not Eof(f1) do
{вывод на экран из файла отсортированных данных}
end.
Введём в программу последовательность чисел: 10, 2, 35, -20, 0
Программа провела сортировку и вывела на экран результат:
-20, 0, 2, 10, 35, что является правильным результатом.
Рисунок 1 – Результат работы программы
program lab_2;
type
Ssyl = ^s;
s = record
znach: integer;
next: Ssyl;
end;
var
nach, rab, rab2, A, B: Ssyl;
temp1, temp2: LongInt;
otvet: Char;
schet, i, j: Integer;
f1: file of s;
zap: s;
begin
Writeln('Программа отсортирует введённые данные в динамической памяти');
Assign(f1, 'file1.dat'); //создание списка в дин. памяти
Rewrite(f1); //и запись его в файл
New(nach);
Write('Введите первое число: ');
Readln(nach^.znach);
nach^.next:=nil;
Write(f1,nach^);
rab:=nach;
repeat
New(rab^.next);
rab:=rab^.next;
Write('Число: ');
Readln(rab^.znach);
rab^.next:=nil;
write(f1, rab^);
Write('Ещё? Y/N: ');
Readln(otvet);
until (otvet = 'N') or (otvet = 'n');
Writeln('Данные в файле:');
Dispose(nach); Dispose(rab);
schet:=1;
Reset(f1); //чтение из файла на экран
New(nach); //и в динамическую память
Read(f1, zap);
Writeln(zap.znach);
nach^.znach:=zap.znach;
nach^.next:=nil;
rab:=nach;
while not Eof(f1) do
begin
New(rab^.next);
rab:=rab^.next;
Read(f1, zap);
Writeln(zap.znach);
rab^.znach:=zap.znach;
rab^.next:=nil;
Inc(schet);
end;
{end while}
for i := 1 to schet-1 do //сортировка в дин. памяти
begin
temp1 := nach^.znach;
temp2 := nach^.next^.znach;
rab := nach;
for j := 1 to schet-i do
begin
if temp1 > temp2 then
begin
rab2:=rab^.next;
B:=rab2^.next;
rab^.next:=B;
rab2^.next:=rab;
if j>=2 then
A^.next:=rab2;
{end If}
A:=rab2;
If J=1 then
nach:=rab2;
{end If}
end
else
begin
temp1 := temp2;
A:=rab;
rab := rab^.next;
end;
if rab^.next <> nil then
temp2 := rab^.next^.znach;
{end if}
end;
{end for}
end;
{end for}
Writeln;
Write('Счёт: '); Writeln(schet);
Writeln; Writeln('После сортировки:');
rab:=nach;
rewrite(f1);
while rab<>nil do //запись результатов в файл
begin
Write(f1, rab^);
rab:=rab^.next;
end;
{end while}
reset(f1);
while not Eof(f1) do //вывод из файла на экран
begin
read(f1, zap);
Writeln(zap.znach);
end;
{end while}
close(f1);
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.