- •Структура описания лабораторной работы
- •Выполнение работы
- •Форма отчета
- •Основные сведения
- •Установка и запуск системы
- •Интерфейс системы
- •Меню и команды
- •Пункт File
- •Пункт Edit
- •Пункт Search
- •Пункт Run
- •Пункт Compile
- •Пункт Debug
- •Пункт Options
- •Пункт Window
- •Пункт Help
- •Страница Compiler Options окна свойств проекта
- •Страница Directories окна свойств проекта
- •Страница Preferences окна свойств проекта
- •Файлы проекта
- •Основные приемы работы в СП Borland Pascal
- •Создание новой программы
- •Работа с уже созданной программой
- •Использование средств отладки
- •Пошаговое выполнение программы
- •Просмотр значений переменных
- •Использование точек останова
- •Порядок выполнения работы
- •Контрольные вопросы
- •Основные сведения
- •Оператор присваивания
- •Составной оператор
- •Условный оператор
- •Оператор варианта
- •Ввод данных с клавиатуры
- •Вывод данных на экран
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 3. Программы с циклами
- •Основные сведения
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с возрастающим параметром
- •Оператор цикла с убывающим параметром
- •Оператор прерывания цикла
- •Оператор продолжения цикла
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 4. Использование массивов
- •Основные сведения
- •Описание массива
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 5. Обработка символьных строк
- •Основные сведения
- •Описание строковых переменных
- •Операции над данными типа string :
- •Стандартные функции для обработки строк
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 6. Использование процедур
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 7. Использование функций
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 8. Работа с текстовыми файлами
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 10. Использование данных ссылочного типа
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 11. Создание и использование модулей
- •Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Литература
– 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. Ввести неопределенное количество вещественных чисел и сформировать из них список. Найти число с наибольшей дробной частью и вставить его дробную часть в список после найденного числа. Вывести на экран полученный список.