
- •С Кафедра моп эвм истема программирования Borland Pascal Методическая разработка к лабораторным работам фавт
- •Интерфейс системы
- •Меню и команды
- •Пункт File
- •Пункт Edit
- •Пункт Search
- •Пункт Run
- •Пункт Compile
- •Пункт Debug
- •Пункт Options
- •Пункт Window
- •Пункт Help
- •Страница Compiler Options окна свойств проекта
- •??? Страница Directories окна свойств проекта
- •??? Страница Preferences окна свойств проекта
- •Файлы проекта
- •Основные приемы работы в системе Паскаль Создание новой программы
- •Работа с уже созданной программой
- •Использование средств отладки
- •Пошаговое выполнение программы
- •Просмотр значений переменных
- •Использование точек останова
- •Порядок выполнения работы
- •If f then writeln('существует');
- •Var описание_переменных;
- •If условие then оператор1 else оператор2
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Оператор цикла с убывающим параметром
- •Контрольные вопросы
- •Var список_имен_массивов: array [тип_индекса1,тип_индекса2...] of базовый_тип;
- •Варианты заданий
- •Контрольные вопросы
- •Var список_имен_переменных:string[максимальная_длина_строки];
- •Var список_имен_переменных:string;
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 6. Использование процедур Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 7. Использование функций Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 8. Работа с текстовыми файлами Основные сведения
- •Var имя_файловой_переменной : text;
- •Пример выполнения
- •I : integer; {счетчик символов текущей строки выходного файла}
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 9. Работа с типизированными файлами и записями Основные сведения
- •Var имя_файловой_переменной : file of тип_записи_файла;
- •Var имя_переменной_записи:имя_типа_записи;
- •Пример выполнения
- •ICurs: integer {курс }
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 10. Использование данных ссылочного типа Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 11. Создание и использование модулей Основные сведения
- •Пример выполнения
- •Варианты заданий
- •Контрольные вопросы
- •Литература
- •Содержание
Контрольные вопросы
Отличие процедур reset для тестового и типизированного файлов.
Типичный фрагмент последовательного чтения всего файла.
Вывод числовых переменных.
Отличие файлов последовательного и прямого доступа.
Операции прямого доступа к записям файла.
В какой ситуации функция eof возвращает TRUE ?
Могут ли компоненты записи быть различных типов ?
Как осуществляется доступ к полям записей ?
Могут ли записи входить компонентами в другие переменные ?
* Что такое вариантная запись ?
* Что является селектором в операторе case при задании вариантной части записи ?
Лабораторная работа 10. Использование данных ссылочного типа Основные сведения
Переменная ссылочного типа (указатель, ссылка, адрес) предназначена для хранения адреса оперативной памяти, по которому расположена переменная (скалярная или структурированная) какого-либо другого типа. Описание ссылочной переменной производится следующим образом:
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 участков не должна превышать 65520 байт.
Пример выполнения
Ввести неопределенное количество строк символов и упорядочить их по алфавиту. Вывести упорядоченную последовательность строк на экран.
Следует организовать односвязный список строк.
program PRIMER;
type
ELPTR=^EL; { тип ELPTR – указатель на элемент списка }
EL= record { тип EL - элемент списка }
S: string; {поле данных элемента списка}
NEXT: ELPTR {поле связи элементов списка}
end;
var
pHEAD : ELPTR; {указатель на заголовок списка}
pV1,pV2: ELPTR;
C : char;
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.