Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BPlab (работы по паскалю).pdf
Скачиваний:
33
Добавлен:
01.06.2015
Размер:
1.04 Mб
Скачать

33 –

1 – ввод с клавиатуры данных о магазинах (данные об одном магазине: номер, адрес, фамилия, имя, отчество владельца, количество работников, среднесуточный оборот, телефон), 2 – ввод данных о магазинах из файла на диске, 3 – вывод данных о магазинах в файл на диске, 4

– по заданному пользователем номеру магазина вывести на экран всю информацию о нем, 5 – конец работы. Максимальное количество магазинов – 30. Для представления данных об одном магазине использовать тип данных record . Использовать типизированный файл, запись которого содержит данные об одном магазине.

9. Написать программу, которая выполняет следующие действия по выбору пользователя: 1 – ввод с клавиатуры данных о товарах (данные об одном товаре: наименование, дата изготовления, цена в долларах), 2 – ввод данных о товарах из файла на диске, 3 – вывод данных о товарах в файл на диске, 4 – по заданному пользователем обменному курсу вывести на экран информацию о товарах с указанием цены как в долларах, так и в рублях, 5 – закончить работу. Максимальное количество товаров – 20. Для представления данных об одном товаре использовать тип данных record . Использовать типизированный файл, запись которого содержит данные об одном товаре.

10. Написать программу, которая выполняет следующие действия по выбору пользователя: 1 – ввод с клавиатуры данных о жильцах дома (данные об одном жильце: фамилия, имя, отчество, год рождения, место работы/учебы, номер квартиры), 2 – ввод данных о жильцах из файла на диске, 3 – вывод данных о жильцах в файл на диске, 4 – по заданному пользователем номеру квартиры выдать на экран всю информацию о её жильцах, 5 – закончить работу. Максимальное количество жильцов – 25. Для представления данных об одном жильце использовать тип данных record . Использовать типизированный файл, запись которого содержит данные о жильце.

11. Написать программу, которая выполняет следующие действия по выбору пользователя: 1 – ввод с клавиатуры данных об абитуриентах, сдавших вступительные экзамены (данные об одном абитуриенте: фамилия, имя, отчество, год рождения, адрес, количество набранных баллов), 2 – ввод данных об абитуриентах из файла на диске, 3 – вывод данных об абитуриентах в файл на диске, 4 – по заданному пользователем проходному баллу выдать на экран всю информацию об абитуриентах, поступивших в вуз, 5 – закончить работу. Максимальное количество абитуриентов – 30. Для представления данных об одном абитуриенте использовать тип данных record . Использовать типизированный файл, запись которого содержит данные об одном абитуриенте.

Контрольные вопросы

1. Отличие процедур reset для тестового и типизированного файлов.

2.Типичный фрагмент последовательного чтения всего файла.

3.Вывод числовых переменных.

4.Отличие файлов последовательного и прямого доступа.

5.Операции прямого доступа к записям файла.

6.В какой ситуации функция eof возвращает TRUE ?

7.Могут ли компоненты записи быть различных типов ?

8.Как осуществляется доступ к полям записей ?

9.Могут ли записи входить компонентами в другие переменные ? 10.* Что такое вариантная запись ?

11.* Что является селектором в операторе case при задании вариантной части записи ?

Лабораторная работа 10. Использование данных ссылочного типа

Основные сведения

Переменная ссылочного типа (указатель, ссылка, адрес) предназначена для хранения адреса оперативной памяти, по которому расположена переменная (скалярная или структурированная) какого-либо другого типа. Описание ссылочной переменной производится следующим образом:

34 –

var имя_ссылочной_переменной : ^имя_базового_типа;

Для того чтобы получить доступ к данным, адрес которых содержится в ссылочной переменной, используется операция разыменования:

имя_ссылочной_переменной^

Ссылочной переменной может быть присвоен пустой адрес NIL или адрес какой-либо переменной, определенной в программе:

имя_ссылочной_переменной := @ имя_переменной

или

имя_ссылочной_переменной := ADR(имя_переменной)

Значения ссылочных переменных можно присваивать друг другу и сравнивать их на равенство и неравенство. Такое сравнение в Borland Pascal ненадежно из-за того, что один и тот же адрес может быть представлен различными способами. Надежным является лишь сравнение с пустым адресом NIL.

Процедуры и функции динамического распределения памяти кучи:

maxavail: longint – возвращает длину в байтах самого длинного непрерывного свободного участка памяти в куче;

memavail: longint – возвращает суммарную длину всех свободных участков памяти в куче;

sizeof( X ): word – возвращает длину в байтах переменной или типа X программы;

new( var P ) – захватывает участок памяти в куче для переменной P^ и присваивает ссылочной переменной P адрес этого участка;

dispose( var P ) – освобождает участок памяти в куче, ранее выделенный для переменной P^ функцией new ;

getmem( var P; Size: word ) – захватывает в куче участок памяти длиной Size байт и присваивает ссылочной переменной P его адрес;

freemem( var P; Size: word ) – освобождает в куче участок, начинающийся с адреса, хранящегося в ссылочной переменной P, длиной Size байтов.

Длина захватываемых функциями new и getmem участков не должна превышать 65 520 байтов.

Пример выполнения

Ввести неопределенное количество строк символов и упорядочить их по алфавиту. Вывести упорядоченную последовательность строк на экран.

Следует организовать односвязный список строк.

program PRIMER;

type

 

{тип ELPTR – указатель на элемент списка}

ELPTR=^EL;

EL= record

{тип EL - элемент списка}

S:

string;

{поле данных элемента списка}

NEXT:

ELPTR

{поле связи элементов списка}

end;

 

var

: ELPTR; {указатель на заголовок списка}

pHEAD

pV1,pV2: ELPTR;

C

: char;

35 –

sVST : string; bF : boolean;

begin

{*** Формирование списка ***}

pHEAD:=NIL; {инициализация списка}

pV2 :=NIL; {в каждый момент - последний добавленный элемент} repeat

new(pV1);

{добавляемый элемент}

writeln('Введите строку');

 

readln(pV1^.S);

 

if pHEAD=NIL then pHEAD

:=pV1 {в пустой список}

else

pV2^.NEXT:=pV1; {теперь pV1 стоит за pV2}

pV1^.NEXT:=NIL;

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

pV2

:=pV1;

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

writeln('Еще есть строка?(N-нет)'); readln(C)

until (C='N') or (C='n');

{*** Сортировка списка строк (пузырьком) ***}

repeat

bF:=FALSE; {перестановок не было} pV1:=HEAD;

while pV1^.NEXT<>NIL do begin

if pV1^.S > (pV1^.NEXT)^.S then begin sVST :=pV1^.S;

pV1^.S :=(pV1^.NEXT)^.S; (pV1^.NEXT)^.S:=sVST;

bF:=TRUE {была перестановка} end;

pV1:=pV1^.NEXT

end { while pV1^.NEXT<>NIL } until NOT bF;

{*** Печать отсортированного списка ***}

writeln('Отсортированная по алфавиту последовательность строк'); pV1:=pHEAD;

while pV1<>NIL do begin writeln(pV1^.S); pV1:=pV1^.NEXT

end;

{*** Освобождение памяти ***}

pV1:=pHEAD; {pV1 - текущий} while pV1<>NIL do begin

pV2:=pV1^.NEXT; {pV2 - следующий} dispose(pV1);

pV1:=pV2 end

end.

Варианты заданий

1. Ввести неопределенное количество вещественных чисел и сформировать из них список. Найти число с наибольшей дробной частью и вставить его дробную часть в список после найденного числа. Вывести на экран полученный список.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]