Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ЯСП.doc
Скачиваний:
5
Добавлен:
28.05.2015
Размер:
229.38 Кб
Скачать

Приложение 3 Пример выполнения контрольной работы

Задание:Дан текстовый файл содержащий целые числа. Считать данные из текстового файла в однонаправленный список. Удалить из списка первый нулевой элемент. Вывести список после удаления на экран.

Исходные данные:

f: filetext– файловая переменная для работы с текстовым файлом;

elem – запись, описывающая тип элементов однонаправленного списка;

ptr– новый тип - указатель на записьelem;

an: ptr– указатель начало однонаправленного списка.

Порядок выполнения задания.

  1. Создать в Блокноте текстовый файл file.txt, содержащий целые числа.

  2. Создать папку, в которой будет содержаться проект.

  3. Разместить файл file.txtв этой папке.

  4. Создать консольное приложение в среде Delphi(задание можно выполнить в любых версиях языка Паскаль).

Листинг программы:

type

type_inf = integer;{тип информационной части - integer}

ptr = ^elem; ;{тип указатель типа elem}

{тип запись элемент однонаправленного списка}

elem = record

inf: type_inf; {информационное поле}

next: ptr; {адресная часть}

end;

{описание переменных}

var k,an,ak,am,l:ptr;

val:type_inf;

f:textfile;

var fil:string;

flag:boolean;

begin

fil:='file.txt';{переменная, содержащая имя файла}

assignfile(f,fil); {связь файловой переменной с именем файла}

reset(f);{открытие файла для чтения}

read(f,val); {чтение первого числа}

{заполнение однонаправленного списка}

new(an); {выделение памяти для первого элемента списка}

an^.inf:=val; {заполнение информационного поля}

ak:=an; {задание адреса последнего элемента}

ak^.next:=nil; {задание адресной части последнего элемента}

while not(eof(f)) do {пока не закончились данные в файле}

begin

new(k); {выделение памяти для текущего элемента списка}

read(f,val); {чтение очередного числа из файла}

{заполнение информационного поля текущего элемента}

k^.inf:=val;

{запись адреса текущего элемента в адресную часть последнего

элемента}

ak^.next:=k;

{задание адресной части текущего элемента, как последнего элемента}

k^.next:=nil;

ak:=k; {переписать адрес текущего элемента в последний элемент}

end;

ывод информационной части элементов списка}

k:=an; {задать начало списка}

while k<>nil do {пока не закончились элементы списка}

begin

val:=k^.inf;

writeln(val); {вывод информационного поля текущего элемента}

k:=k^.next; {переход к следующему элементу списка}

end;

{Поиск первого нулевого элемента}

flag:=false; {логическая переменная, определяющая, найден ли нулевой элемент в списке}

k:=an; {задать начало списка}

{пока не закончились элементы списка или не найден нулевой элемент}

while(not flag) and ( k<>nil) do

begin

if (k^.inf=0) then {если найден нулевой элемент}

begin

am:=k; {запомнить адрес нулевого элемента}

flag:=true; {задать флаг, что нулевой элемент найден}

end;

k:=k^.next {переход к следующему элементу списка}

end;

if (flag=true) and (am^.next=nil) then

сли найденный нулевой элемент - последний}

begin

{находим элемент, предшествующий последнему}

k:=an; {задать начало списка}

{пока не дошли до элемента, стоящего перед последним}

while k^.next <> am do

k:=k^.next; {переход к следующему элементу списка}

l:=k; {запомнить адрес предпоследнего элемента}

{записать в адресную часть предпоследнего элемента nil}

l^.next:=nil;

dispose(am); {удалить из памяти нулевой элемент}

end

else

if am=an then {если нулевой элемент - первый}

begin

{переписать адрес второго элемента в первый}

an:=an^.next;

dispose(am); {удалить из памяти нулевой элемент}

end

else

if (flag=true) then

{если нулевой элемент в средине с писка}

begin

{находим элемент предществующий нулевому}

k:=an; {задать начало списка}

{пока не дошли до элемента, стоящего перед нулевым}

while k^.next <> am do

k:=k^.next; {переход к следующему элементу списка}

{запомнить адрес элемента, предшествующего нулевому

элементу}

l:=k;

{переписать в адресную часть элемента предшествующего

нулевому адресную часть нулевого элемента}

l^.next:=am^.next;

dispose(am); {удалить из памяти нулевой элемент}

end

else

writeln(‘Нулевого элемента нет’);

readln;

{вывод списка после удаления}

k:=an;

while k<>nil do

begin

val:=k^.inf;

writeln(val);

k:=k^.next;

end;

readln;

end.

Результат работы программы.

Файл file.txt:

Вывод данных