Сортировка в динамической памяти. Формирование списка в динамической памяти и запись его в файл, вывод на экран содержимого этого файла

Страницы работы

Содержание работы

ЛАБОРАТОРНАЯ РАБОТА №2

Тема: Сортировка в динамической памяти.

Цель работы:  Освоить сортировку элементов в динамической памяти.

Постановка задачи: Формирование списка в динамической памяти и запись его в файл, вывод на экран содержимого этого файла. Чтение содержимого файла в динамическую память, сортировка списка в динамической памяти, запись в файл, затем вывод на экран содержимого этого файла.

Псевдокод программы:

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.

Похожие материалы

Информация о работе