- •Алгоритмы.
- •Условие
- •Типы данных.
- •Целые числа.
- •Вещественный тип данных.
- •Символьные и строковые типы данных.
- •Булевские данные.
- •Указатели.
- •Идентификаторы.
- •Операторы.
- •Операторы присваивания.
- •Арифметические операторы.
- •Побитовые операторы.
- •Операторы отношений.
- •Логические операторы.
- •Адресные операторы.
- •Операторы над множествами.
- •Строковые операторы.
- •Создание программ в среде turbo pascal Структура программ.
- •1: WriteLn(' I меньше 10 ');
- •Тип константы компилятор определяет по типу значения. Описание типов используется при создании типов данных, отличных от базовых.
- •Обзор управляющих структур языка pascal
- •Интегрированная среда turbo pascal Назначение и состав среды.
- •Строка статуса
- •Справочник.
- •Работа с блоками текста
- •Компиляция и выполнение
- •Выполнение по шагам и трассировка
- •Управляющие структуры языка Паскаль. Условные операторы.
- •Пустой оператор
- •Условный оператор
- •If Flag then Writeln(‘Истинно’)
- •If not Flag then Writeln(‘Ложно’)
- •Оператор выбора
- •Операторы цикла Оператор цикла с предусловием (while)
- •Оператор цикла с постусловием (repeat…until)
- •Оператор цикла с параметром (for...Do)
- •I : Integer; { описание параметров циклов}
- •Процедуры и функции.
- •Структура процедуры и функции.
- •Локальные и глобальные элементы.
- •I : Integer; {I - глобальная}
- •I : Integer; {I - локальная }
- •Параметры.
- •I : Integer; {I - локальная }
- •Var { описание переменных }
- •Var { описание внутренних переменных}
- •Структурированные типы данных языка паскаль Перечисляемый тип.
- •Структурированные типы
- •Массивы
- •If eq then Write(“Массивы одинаковы”);
- •Множества
- •Совместимость и преобразование типов.
- •Символы и строки Символы:
- •Строки.
- •Строка- это массив символов.
- •Доступ к файлам.
- •Логические устройства
- •Открытие файла
- •Процедуры и функции для работы с файлами.
- •Текстовые файлы.
- •Типизированные файлы.
- •Нетипизированные файлы.
- •Модуль graph.
- •Драйверы.
- •Координатная система.
- •Текущий указатель.
- •Фигуры и стили.
- •Окна и битовые образы.
- •Обработка ошибок.
- •Пример простой программы:
- •Справочник по модулю Graph
- •Модуль crt
- •Ввод данных с клавиатуры. Более подробно о cтандартных операторах ввода.
- •Функции crt.
- •Текстовый вывод на экран.
- •Некоторые процедуры модуля crt.
- •Программирование звукового генератора.
- •Указатели.
- •Динамические переменные.
- •Проблема ограничения памяти.
Некоторые процедуры модуля crt.
Процедура GotoXY(X,Y:Byte). Задает координаты вывода текста на экран.
Процедуры TextBackGround(Color:Byte) и TextColor(Color:Byte). Определяют цвет символов и цвет фона.
Цвет фона - 0..7.
Цвет символов - 0..15.
Процедура ClrScr. Очистка экрана. При очистке экрана он заполняется текущим цветом фона}
Процедура Window(x1,y1,x2,y2:Byte). Определение текстового окна. Область вывода на экран ограничивается установленными координатами.
Программирование звукового генератора.
Процедура Sound(F:Word). Включение звукового генератора с частотой F.
Процедура NoSound. Выключает звуковой генератор.
Процедура Delay(T:Word). Задержка выполнения программы на Т миллисекунд.
Пример:
uses Crt;
var
C : Char;
Str1 : String;
I : Integer;
begin
TextBackGround(Blue);
ClrScr;
TextColor(Yellow);
Write('Введите строку текста : ');
ReadLn(Str1);
for i := 1 to Length(Str1) do
begin
Sound(600);
Write(Str1[i]);
Delay(10);
NoSound;
Delay(2000);
if KeyPressed then Exit;
end;
end.
Указатели.
Операционная система MS - DOS все адресуемое пространство делит на сегменты. Сегмент - это участок памяти размером 64 К байт. Для задания адреса необходимо определить адрес начала сегмента и смещение относительно начала сегмента.
В TURBO PASCAL определен адресный тип Pointer - указатель. Переменные типа Pointer
var p: Pointer;
содержат адрес какого - либо элемента программы и занимают 4 байта, при этом адрес хранится как два слова, одно из них определяет сегмент, второе - смещение.
Переменную типа указатель можно описать другим способом.
type
NameType = ^Typ;
var
p: NameType;
Здесь p - переменная типа указатель, связанная с типом Тyp с помощью имени типа NameType. Описать переменную типа указатель можно непосредственно в разделе описания переменных:
var p: ^Typ;
Необходимо различать переменную типа указатель и переменную, на которую этот указатель ссылается. Например если p - ссылка на переменную типа Тyp, то p^ - обозначение этой самой переменной.
Для переменных типа указатель введено стандартное значение NIL, которое означает, что указатель не ссылается ни к какому объекту.
Константа NIL используется для любых указателей.
Над указателями не определено никаких операций, кроме проверки на равенство и неравенство.
Переменные типа указатель могут быть записаны в левой части оператора присваивания, при этом в правой части может находиться либо функция определения адреса Addr(X), либо выражение @X, где @ - унарная операция взятия адреса, X - имя переменной любого типа.
Динамические переменные.
Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к ней осуществляется по имени. Место в памяти для размещения статических переменных определяется при компиляции программы.
В отличие от таких статических переменных в программах, написанных на языке ПАСКАЛЬ, могут быть созданы динамические переменные. Основное свойство динамических переменных заключается в том, что они создаются и память для них выделяется во время выполнения программы.
Размещаются динамические переменные в динамической области памяти (heap - области).
Динамическая переменная не указывается явно в описаниях переменных и к ней нельзя обратиться по имени. Доступ к таким переменным осуществляется с помощью указателей и ссылок.
Работа с динамической областью памяти в TURBO PASCAL реализуется с помощью процедур и функций New, Dispose, GetMem, FreeMem, Mark, Release, MaxAvail, MemAvail, SizeOf.
Процедура New(var p:Pointer) выделяет место в динамической области памяти для размещения динамической переменной p^ и ее адрес присваивает указателю p.
Процедура Dispose(var p:Pointer) освобождает участок памяти, выделенный для размещения динамической переменной процедурой New, и значение указателя p становится неопределенным.
Процедура GetMem(var p:Pointer; size:Word) выделяет участок памяти в heap - области, присваивает адрес его начала указателю p, размер участка в байтах задается параметром size.
Процедура FreeMem(var p:Pointer; size:Word) освобождает участок памяти, адрес начала которого определен указателем p, а размер параметром size. Значение указателя p становится неопределенным.
Функция MaxAvail:Longint возвращает длину в байтах самого длинного свободного участка динамической памяти.
Функция MemAvail:Longint полный объем свободной динамической памяти в байтах.
Функция SizeOf(X):Word возвращает объем в байтах, занимаемый X, причем X может быть либо именем переменной любого типа, либо именем типа.
Рассмотрим некоторые примеры работы с указателями.
var
p1, p2: ^Integer;
begin
p1:=NIL; {начальные значения}
p2:=NIL;
New(p1); {выделение памяти}
New(p2);
p1^:=2; {работа с переменными}
p2^:=4;
p1^:=p2^;
p2:=p1; {оба указателя - адрес первого участка памяти}
end.
Переменные p1^, p2^ являются динамическими, так как память для них выделяется в процессе выполнения программы с помощью процедуры New.
Динамические переменные могут входить в состав выражений, например:
p1^:=p1^+8; Write('p1^=',p1^:3);