- •Система 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 Программирование циклических алгоритмов
Массивы
Массив представляет собой набор элементов одного типа, каждый из которых имеет свой номер, называемый индексом (индексов может быть несколько, тогда массив называется многомерным). Тип массива конструируется следующим образом:
array [тип индекса1, ..., тип индексаN] of базовый тип
Тип индекса обязательно представляет собой интервальный тип и обязательно должен задаваться в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа. Например:
type enum=(w1,w2,w3,w4,w5); var a1,a2: array [1..10] of integer; b: array ['a'..'z',w2..w4] of string; c: array [1..10] of array [1..5] of real;
Базовый тип может быть любым (в частности, он может быть типом массива, как для переменной c).
Переменные-массивы одного типа можно присваивать друг другу, при этом будет производиться копирование содержимого одного массива в другой:
a1:=a2;
При передаче по значению параметра типа массив в подпрограмму также производится копирование содержимого массива-фактического параметра в массив-формальный параметр:
procedure p(arr: array [1..10] of integer); ... p(a1);
Как правило, в этой ситуации копирование содержимого массива не требуется, поэтому массив рекомендуется передавать по ссылке:
procedure r(var arr: array [1..10] of integer); ... r(a1);
К элементам массива обращаются при помощи переменных с индексами:
a1[3]:=a2[5]; b['f',w3]:='Hello'; c[3][4]:=3.14;
Наиболее часто встречающаяся ошибка при работе с массивами - выход за границы изменения индекса. В Pascal ABC возникновение этой ошибки приводит к завершению работы программы.
Записи
Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи. Тип записи конструируется следующим образом:
record список полей1: тип1; ... список полейN: типN; end
Последний символ ";" не является обязательным. Например:
type Date=record Day: 1..31; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Year: Integer; end;
Теперь можно объявить переменные типа Date:
var d1,d2: Date;
Чтобы получить доступ к полям записи, следует воспользоваться точечной нотацией, указав имя переменной-записи и поле, разделенные точкой:
d1.Day:=9; d1.Month:=Sep; d1.Year:=2004;
Как и для массивов, можно скопировать содержимое полей одной переменной-записи в другую:
Множества
Множество представляет собой набор элементов одного порядкового типа. Элементы множества считаются неупорядоченными; каждый элемент может входить во множество не более одного раза. Тип множества описывается следующим образом:
set of базовый тип
В качестве базового может быть любой порядковый тип с элементами, для которых функция Ord возвращает значения в диапазоне от 0 до 255. Например:
type ByteSet = set of byte; CharSet = set of char; Digits = set of '0'..'9'; SeasonSet = set of (Winter,Spring,Summer,Autumn);
Переменная типа множество занимает 16 байт и может содержать несколько значений базового типа. Чтобы сконструировать значение типа множество, используется конструкция вида
[список значений]
где в списке могут перечисляться через запятую либо выражения базового типа, либо их диапазоны в виде a..b, где a и b - выражения базового типа. Например:
var bs: ByteSet; bestdays: (Mon,Tue,Wed,Thi,Thr,Sat,Sun); ... bs:=[1,3,5,20..25]; bestdays:=[Wed,Thr..Sun];
Значения в списке могут отсутствовать, тогда множество является пустым:
bs:=[];
Операция in проверяет принадлежность элемента множеству:
if Wed in bestdays then ...
Для множеств определены операции + (объединение), - (разность), * (пересечение), = (равенство), <> (неравенство), <= (вложено) и и >= (содержит). Примеры этих операций приведены в пункте Выражения и операции.
Множества с совместимыми базовыми типами неявно преобразуются одно к другому (см. пункт Неявное приведение типов). При присваивании множеству при необходимости происходит усечение его элементов до значений базового типа. Например:
var st: set of 3..9; ... st:=[1..5,8,10,12]; // в st попадут значения [3..5,8]
Чтобы вывести значения элементов множества, необходимо перебрать всевозможные значения в цикле и проверить их на принадлежность множеству с помощью операции in:
for i:=0 to 255 do if i in st then write(i,' ');