- •Система Pascal abc
- •Редактор
- •Горячие клавиши
- •Окно вывода
- •Окно ввода
- •Запуск и остановка программы
- •Программа прервана пользователем
- •Пошаговое выполнение программы
- •Окно отладки
- •Pascal abc Язык Pascal abc Структура программы
- •Идентификаторы и служебные слова
- •Выражения и операции
- •Арифметические операции
- •Операция @
- •Операции с указателями
- •Операции с множествами
- •Приоритет операций
- •Описание переменных и констант
- •Описание типов
- •Обзор типов
- •Все порядковые типы, а также типы boolean, real и complex называются простыми типами. Порядковые типы
- •Типы boolean, real и complex
- •Строковый тип
- •Массивы
- •Множества
- •Указатели
- •Процедурный тип
- •Эквивалентность типов
- •Неявное приведение типов
- •Явное приведение типов
- •Область действия идентификатора
- •Ввод и вывод. Форматы вывода
- •Оператор присваивания
- •Условный оператор
- •Составной и пустой операторы
- •Оператор выбора
- •Оператор цикла for
- •Оператор цикла repeat
- •Оператор вызова процедуры
- •Операторы break, continue и exit
- •Оператор with
- •Оператор безусловного перехода goto
- •Оператор try ... Except
- •Оператор try ... Finally
- •Оператор raise
- •Описание процедур и функций
- •Параметры процедур и функций
- •Локальные и глобальные переменные
- •Общие стандартные процедуры и функции
- •Стандартные процедуры и функции для работы со строками
- •Стандартные процедуры и функции для работы с файлами
- •Стандартные процедуры и функции для работы с памятью
- •Системные процедуры и функции
- •Стандартные константы
- •Обзор классов и объектов
- •Конструкторы и деструкторы
- •Свойства
- •Переменная Self
- •Наследование
- •Видимость членов класса
- •Переопределение методов
- •Приведение типов объектов
- •Операции is и as
- •Виртуальные методы и полиморфизм
- •Модуль crt
- •Модуль Timers
- •Модуль Sounds
- •Модуль Utils
- •Модуль PointRect
- •Модуль GraphAbc
- •Графические примитивы
- •Цветовые константы и функции для работы с цветом
- •Действия с пером
- •Действия с кистью
- •Действия со шрифтом
- •Действия с рисунками
- •Действия с графическим окном
- •Задание режимов вывода
- •Класс Picture
- •Описатели рисунков и класс Picture
- •Исполнитель Робот
- •Алгоритмизация
- •Алгоритм и его свойства
- •Способы описания алгоритмов
- •Линейные алгоритмы
- •Разветвляющиеся алгоритмы
- •Алгоритмы циклической структуры
- •Подчиненные алгоритмы
- •Системы программирования
- •Лабораторная работа № 1 Программирование линейных алгоритмов
- •Лабораторная работа № 2 Программирование разветвляющихся алгоритмов
- •Лабораторная работа № 4 Одномерные массивы - вектора
- •Литература Основная литература:
- •Дополнительная литература:
- •Лабораторная работа № 3 Программирование циклических алгоритмов
Указатели
Указатель хранит адрес памяти. В Pascal ABC имеются типизированные указатели (содержат адрес ячейки памяти данного типа) и бестиповые указатели (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа).
Тип указателя на тип T имеет форму ^T, например:
type pinteger=^integer; var p: ^record r,i: real end;
Бестиповой указатель описывается с помощью слова pointer.
Для доступа к ячейке памяти, адрес которой хранит типизированный указатель, используется операция разыменования ^:
var i: integer; pi: ^integer; ... pi:=@i; // указателю присвоили адрес переменной i pi^:=5; // переменной i присвоили 5
Операция разыменования не может быть применена к бестиповому указателю.
Типизированный указатель может быть неявно преобразован к бестиповому:
type preal=^real; var p: pointer; pr: ^real; ... p:=pr;
Обратное преобразование может быть выполнено только явно:
pr:=preal(p); pr^:=3.14;
Указатели можно сравнивать на равенство (=) и неравенство (<>). В дополнение к этому типизированные указатели можно сравнивать, используя операции <, >, <=, >=.
Для типизированных указателей доступны также операции p+i, p-i и p2-p1, где i - целое (см.п.Выражения и операции).
Для того чтобы отметить тот факт, что указатель никуда не указывает, используется стандартная константа nil (нулевой указатель) : p:=nil.
Файлы
Файл в Pascal ABC представляет собой последовательность элементов одного типа, хранящихся на диске. В Pascal ABC имеется два типа файлов - типизированные и текстовые. Текстовые файлы хранят символы, разделенные на строки символами #13#10.
Для описания текстового файла используется стандартное имя типа text, а для описания типизированного файла - конструкция file of тип элементов:
var f1: file of real; f2: text;
Процедурный тип
Переменные, предназначенные для хранения процедур и функций, называются процедурными. Тип процедурной переменной имеет вид:
procedure (список параметров)
или
function (список параметров): тип возвращаемого значения
При этом список параметров вместе с круглыми скобками могут отсутствовать. Например:
type proc=procedure(i: integer); var p1: proc; p2: procedure; f1: function: integer;
Процедурной переменной можно присвоить процедуру или функцию с совместимым типом:
procedure my(i: integer); begin ... end; function f: integer; begin end; ... p1:=my; f1:=f;
После этого можно вызвать процедуру или функцию через эту процедурную переменную, пользуясь обычным синтаксисом вызова:
p1(5); write(f1);
Обычно процедурные переменные передаются как параметры для реализации обратного вызова:
procedure foreach(var a: array [1..100] of real; n: integer; p: procedure(var r: real)); var i: integer; begin for i:=1 to n do p(a[i]); end;
procedure mult2(var r: real); begin r:=2*r end;
procedure print(var r: real); begin write(r,' '); end; ... foreach(a,10,mult2); // умножение элементов массива на 2 foreach(a,10,print); // вывод элементов массива
Эквивалентность типов
В Pascal ABC два типа считаются эквивалентными (равными), если совпадают их описания. Например, после описаний
type Arr=array [1..100] of integer; var a: Arr; b: array [1..100] of integer;
можно присваивать массивы друг другу:
a:=b;
В типах записей, помимо типов полей, должны совпадать имена:
type rec1 = record i,j: integer end; rec2 = record x,y: integer end; ... var r1: rec1; r2: rec2; ... r1:=r2; // ошибка!
В типах формальных параметров процедур и функций имена могут не совпадать:
type proc1 = procedure (i: integer); proc2 = procedure (x: integer); ... var p1: proc1; p2: proc2; ... p1:=p2; // все в порядке
Подобная расширенная трактовка эквивалентности (по сравнению с Borland Pascal и Borland Delphi) позволяет передавать параметры составного типа (массивы, записи, процедурный и указательный) в процедуры и функции, не определяя для этих параметров новый тип:
procedure foreach(var a: array [1..100] of real; n: integer; f: function(r: real): real); var i: integer; begin for i:=1 to n do a[i]:=f(a[i]); end;