- •1.Массивы.
- •2.Строковые массивы.
- •4.Процедура без параметров.
- •5.Процедура с параметрами.
- •6.Использование параметров-значений и параметров-переменных в качестве входных. Параметры константы.
- •7. Ограничения, наложенные на формальные и фактические параметры.
- •8.Аппарат функций.
- •9. Побочный эффект в процедурах и функциях.
- •10)Рекурсия
- •11.Опережающее описание процедур
- •12.Параметры процедурного типа:
- •13.Внешние модули, реализованные на других языках программирования. Структура основной программы, вызывающей процедуру. Присоединение текстового файла.
- •14. Структура tpu- модуля и программы.
- •15.Ссылочные типы данных, работа со связанным списком.
- •16.Ссылочные типы данных, формирование списка студентов из файла.
- •17.Поиск элемента в списке.
- •18.Исключение и добавление
- •19.Включение в список.
- •20.Типизированный файл.
- •21.Текстовые файлы
- •22.Файлы прямого доступа:
- •1.Особенности языка Си. Программа печати текста.
- •2.Программа печати таблицы с циклом «пока».
- •3.Программа печати таблицы с арифметическим циклом.
- •4.Программа печати таблицы с арифметическим циклом при использовании символических констант.
- •5.Ввод, вывод символов. Копирование файла.
- •6.Подсчет числа символов в файле
- •7.Подсчет числа строк в файле.
- •8.Подсчет числа символов, строк и слов в файле.
- •9.Подсчет числа каждой цифры, символов пустых промежутков и всех остальных символов.
- •10.Функции
- •11.Методы передачи параметров в функциях
- •12.Заполнение массива одинаковыми значениями.
14. Структура tpu- модуля и программы.
Модули, организованные на Паскале
Структура модуля
Unit имя;
{имя модуля обязательно совпадает с именем файла, в который записан этот модуль}
Uses имена других модулей; {возможность подсоединения других модулей}
Interface
Procedure имя1 (список параметров);
Function имя2 (список параметров): имя типа;
…
Описание необходимых типов, констант, переменных
…
{это поле не завершается служебным словом End и служит для работы транслятора. Сюда входит описание констант, типов, переменных, используемых в данном модуле, а также процедуры и функции с полными заголовками, но без тела.}
Implementation
End.
{обязательно}
Поле Imlementation
Implementation
Procedure имя1; {используются сокращенные заголовки для подпрограмм}
begin
тело1
end; {здесь; пропускать нельзя}
Function имя2;
begin
тело2
end; {здесь ; пропускать нельзя}
(*)
End. {точка как признак конца трансляции}
(*) – здесь может стоять поле инициализации, где задаются начальные значения. Оно не завершается словом end.
Пример поля инициализации, которое можно поместить вместо (*)
begin
For i:=1 to n do
M[i]:=0;
Структура основной программы
Program OSN_PR;
Uses имя, crt, graph; {важен порядок следования, если в одном модуле используется другой}
Поля описаний для ОП (основной программы)
Begin
…
имя1 (а, с);
…
y:=имя2(x);
…
End.
Трансляция F9:
имя.pas -> F9 -> имя.tpu
При работе с модулями желательно иметь и основную программу, и модуль в своем каталоге. В противном случае в меню опции следует указать путь, где хранятся модули.
Для обеспечения работы с массивами любого размера нельзя описывать массив внутри tpu-модуля, который хранит подпрограмму по его обработке, так как этот модуль уже в машинных кодах, и изменить размер массива нельзя. Именно поэтому константы и сам массив удобно описать в отдельном модуле с пустым полем Implementation, и этот маленький модуль хранить с расширением pas.
15.Ссылочные типы данных, работа со связанным списком.
Переменные, описанные в поле var, определяются на этапе трансляции и называются статистическими. Динамические переменные не описываются в поле var, а создаются и освобождаются во время создания программы. Данный тип удобен при работе с деревьями и списками. Динамические переменные позволяют сэкономить место в памяти и время работы, что повышает эффективность.
Создаются динамические переменные с помощью процедуры New(p), а удаляется с помощью процедуры Dispose(p). Отсутствие ссылки на элемент записывается с помощью служебного слова NIL.
p – переменная ссылочного типа, указывающая абсолютный адрес динамической памяти, которая создавалась (закрывалась) процедурой (абсолютный адрес занимает 4 байта).
Переменная ссылочного типа связывается с типом переменной, под которую отводится память, следующим образом: н - ^ -тип –k.
Type
P1 = ^integer;
P2 = ^real;
P3 = ^string[6];
Var
S:P1; {при использовании процедуры New(S) у нас будет отводится место только под целое, т.к. integer}.
Q:P2; {при использовании процедуры New(Q) отведётся 6 байт, т.к. real}.
A:P3; {при использовании процедуры New(A) отведётся 7 байт, т.к. string}.
Операции с переменными ссылочного типа
При работе с переменными типа «ссылка» определяются три основные операции:
1.присваивание, но для ссылок на один и тот же тип.
2.операции отношения(<,>,=,<>).
3.переменная ссылочного типа может быть параметром в подпрограммах.
Динамическая переменная создаётся с помощью процедуры New(p).
Команда New(p) осуществляет три действия:
1)В ОЗУ отводит столько места, сколько требует тип переменной р(например если строковая 256+4=300)
2)Когда отведено место, в ту переменную, которая служит параметром, записывается начальный адрес
p:= 10; (который занимает 4 байта).
3)У этой переменной появляется имя. И это имя p^
Var p:integer;
P^=128;
Если имеем массив, то обращаемся P^[i]:
Type mas=array [1..N] of integer;
Var p:mas;
………………….
P^[i]=128;
Наибольшее распространение получили списковые структуры, в которых каждый элемент является записью:
Type
Ссылка=^запись;
Запись=record
Содержимое:string[12];
Адрес:ссылка;
End
При описании записи с полем ссылочного типа в Паскале позволено описать сначала ссылку на еще неопределённую запись, а затем запись, и только в таком порядке! Это единственный случай в Паскале, когда можно ссылаться на что-то неопределённое.