Презентация "Обучающая презентация по языку программирования Pascal"

Подписи к слайдам:
Обучающая презентация по языку программирования Pascal
  • Что такое Pascal
  • История
  • Структура программы
  • Идентификаторы и ключевые слова
  • Комментарии
  • Описание переменных
  • Описание констант
  • Описание меток
  • Описание типов
  • Область действия идентификатора
  • Обзор типов
  • Размерные и ссылочные типы
  • Целые типы
  • Вещественные типы
  • Логический тип
  • Символьный тип
  • Перечислимый тип
  • Диапазонный тип
  • Строковый тип
  • Процедурный тип
  • Файловые типы
  • Арифметические операции
  • Логические операции
  • Побитовые операции
  • Операции сравнения
  • Операции с указателями
  • Оператор присваивания
  • Составной оператор
  • Пустой оператор
  • Условный оператор
  • Массивы
  • Статические массивы
  • Динамические массивы

СОДЕРЖАНИЕ

ЧТО ТАКОЕ PASCAL

Паскаль (Pascal) — один из наиболее известных языков программирования, используется для обучения программированию в старших классах и на первых курсах вузов, является базой для ряда других языков.

На главную

ИСТОРИЯ

Никлаус Вирт

Блез Паскаль

Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68.

Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.

На главную

ИСТОРИЯ

Первая публикация Вирта о языке датирована 1970 годом; представляя язык, автор в качестве цели его создания указывал построение небольшого и эффективного языка, способствующего хорошему стилю программирования, использующему структурное программирование и структурированные данные.

Последующая работа Вирта была направлена на создание на основе Паскаля языка системного программирования, с сохранением возможности вести на его базе систематический, целостный курс обучения профессиональному программированию. Результат этой работы — язык Модула-2.

На главную

Структура программы

Программа содержит ключевые слова, идентификаторы, комментарии. Ключевые слова используются для выделения синтаксических конструкций и подсвечиваются жирным шрифтом в редакторе. Идентификаторы являются именами объектов программы и не могут совпадать с ключевыми словами.

Программа на языке Pascal имеет следующий вид:

На главную

Структура программы

Первая строка называется заголовком программы и не является обязательной.

Раздел uses начинается с ключевого слова uses, за которым следует список имен модулей и пространств имен, перечисляемых через запятую.

На главную

Структура программы

Раздел описаний может включать следующие подразделы:

  • раздел описания переменных
  • раздел описания констант
  • раздел описания типов
  • раздел описания меток
  • раздел описания процедур и функций

Данные подразделы следуют друг за другом в произвольном порядке.

На главную

Структура программы

Раздел uses и раздел описаний могут отсутствовать

ИЛИ

На главную

Структура программы

Далее следует блок begin/end, внутри которого находятся операторы, отделяемые один от другого символом "точка с запятой".

Среди операторов может присутствовать оператор описания переменной, который позволяет описывать переменные внутри блока.

На главную

Идентификаторы и ключевые слова

Идентификаторы служат в качестве имен программ, модулей, процедур, функций, типов, переменных и констант.

Идентификатором считается любая последовательность латинских букв или цифр, начинающаяся с буквы. Буквой считается также символ подчеркивания "_".

С каждым идентификатором связана область действия идентификатора.

Например,

a1, _h, b123 - идентификаторы,

а 1a, ф2 - нет.

На главную

Идентификаторы и ключевые слова

Следующие слова являются ключевыми, служат для оформления конструкций языка и не могут использоваться как идентификаторы:

And, array, as, auto, begin, case, class, const, constructor, destructor, div, do, downto, else, end, event, except, file, finalization, finally, for, foreach, function, goto, if, implementation, in, inherited, initialization, interface, is, label, lock, mod, nil, not, of, operator, or procedure, program, property, raise, record, repeat, sealed, set, sequence, shl, shr, sizeof, template, then, to, try, type, typeof, until, uses, using, var, where, while, with, xor.

На главную

Идентификаторы и ключевые слова

Данный ряд слов является контекстно ключевыми (они являются ключевыми только в некотором контексте):

Abstract,default, external, forward, internal, on, overload, override, params, private, protected, public, read, reintroduce, unit, virtual, write.

Контекстно ключевые слова могут использоваться в качестве имен.

На главную

Идентификаторы и ключевые слова

Некоторые ключевые слова совпадают с важнейшими именами. Поэтому в Pascal предусмотрена возможность использовать эти имена без конфликтов с ключевыми словами.

Первый способ состоит в использовании квалифицированного имени. В этом контексте слово Array является именем внутри пространства имен System, и конфликта с ключевым словом array нет.

Второй способ состоит в использовании специального символа & перед именем. В этом случае имя может совпадать с ключевым словом.

На главную

Комментарии

Комментарии - это участки кода, игнорируемые компилятором и используемые программистом для пояснения текста программы.

В Pascal имеется несколько типов комментариев.

На главную

Комментарии

В Pascal имеется несколько типов комментариев.

Последовательность символов между фигурными скобками

{ } или символами (* и *) считается комментарием:

Комментарием также считается любая последовательность символов после символов // и до конца строки:

Комментарии разных типов могут быть вложенными:

На главную

Описание переменных

Переменные могут быть описаны в разделе описаний, а также непосредственно внутри любого блока begin/end.

Раздел описания переменных начинается с ключевого слова var, после которого следуют элементы описания вида.

Имена в списке перечисляются через запятую.

Переменные могут описываться непосредственно внутри блока. Такие описания называются внутриблочными и представляют собой оператор описания переменной.

На главную

Описание констант

Раздел описания именованных констант начинается со служебного слова const, после которого следуют элементы описания вида.

имя константы = значение;

или

имя константы : тип = значение;

На главную

Описание меток

Раздел описания меток начинается с зарезервированного слова label, после которого следует список меток, перечисляемых через запятую. В качестве меток могут быть использованы идентификаторы и положительные целые числа:

Метки используются для перехода в операторе goto

На главную

Описание типов

Раздел описания типов начинается со служебного слова type, после которого следуют строки вида

имя типа = тип.

Обычно описание используется для составных типов (статические массивы, процедурные переменные, записи, классы) чтобы дать имя сложному типу. Если для типа определена именная эквивалентность типов, это единственный способ передать переменные этого типа в подпрограмму.

На главную

Описание типов

Описание типов для классов использовать обязательно:

Описания типов могут быть обобщёнными, т.е. включать параметры-типы в угловых скобках после имени типа.

Если описание типа используется просто для того чтобы заменить одно имя на другое, то такие типы называются синонимами типов:

Использование такого типа с конкретным параметром-типом называется инстанцированием типа:

На главную

Описание типов

При описании рекурсивных структур данных указатель на тип может фигурировать раньше описания самого типа в определении другого типа:

При этом важно, чтобы определения обоих типов находились в одном разделе type.

Отметим, что для ссылочных типов (классов) разрешается описание поля с типом, совпадающим с типом текущего класса:

На главную

Область действия идентификатора

Любой используемый в программе идентификатор должен быть предварительно описан. Идентификаторы описываются в разделе описаний. Идентификаторы для переменных могут также описываться внутри блока.

Основная программа, подпрограмма, блок, модуль, класс образуют так называемое пространство имен - область в программе, в которой имя должно иметь единственное описание. Таким образом, в одном пространстве имен не может быть описано двух одинаковых имен (исключение составляют перегруженные имена подпрограмм).

На главную

Область действия идентификатора

Область действия идентификатора (т.е. место, где он может быть использован) простирается от момента описания до конца блока, в котором он описан. Область действия глобального идентификатора, описанного в модуле, простирается на весь модуль, а также на основную программу, к которой данный модуль подключен в разделе uses.

Кроме этого, имеются переменные, определенные в блоке и связанные с некоторыми конструкциями (for, foreach). В этом случае действие переменной i простирается до конца соответствующей конструкции. Так, следующий код корректен

На главную

Область действия идентификатора

Переменные, описанные внутри блока, не могут иметь те же имена, что и переменные из раздела описаний этого блока. Например, следующая программа ошибочна:

На главную

Область действия идентификатора

В производных классах, напротив, можно определять члены с теми же именами, что и в базовых классах, при этом их имена скрывают соответствующие имена в базовых классах. Для обращения к одноименному члену базового класса из метода производного класса используется ключевое слово inherited:

На главную

Обзор типов

Типы в Pascal подразделяются на простые, строковые, структурированные, типы указателей, процедурные типы и классы.

К простым относятся целые и вещественные типы, логический, символьный, перечислимый и диапазонный тип.

К структурированным типам относятся массивы, записи, множества и файлы.

Все простые типы, кроме вещественного, называются порядковыми. Только значения этих типов могут быть индексами статических массивов и параметрами цикла for. Кроме того, для порядковых типов используются функции Ord, Pred и Succ, а также процедуры Inc и Dec.

На главную

Размерные и ссылочные типы

Все типы в Pascal подразделяются на две большие группы: размерные и ссылочные. К размерным относятся все простые типы, указатели, записи, статические массивы, множества и строки. К ссылочным типам относятся классы, динамические массивы, файлы и процедурный тип.

Размерные типы более эффективны при вычислениях: они занимают меньше памяти и операции, выполняемые над небольшими размерными типами, максимально эффективны.

Ссылочные типы обладают большей гибкостью: память под них выделяется динамически в процессе работы программы и освобождается автоматически, когда объект ссылочного типа перестаёт использоваться.

На главную

Размерные и ссылочные типы

Выделение памяти

Память под переменную размерного типа распределяется на программном стеке в момент её описания. При этом переменная размерного типа хранит значение этого типа.

Переменная ссылочного типа представляет собой ссылку на объект некоторого класса в динамической памяти. Если она не инициализирована, то хранит специальное значение nil (нулевая ссылка). Для инициализации ссылочных переменных используется вызов конструктора соответствующего класса:

На главную

Размерные и ссылочные типы

Присваивание

При присваивании переменных размерного типа копируются значения этого типа. Если размерный тип имеет большой размер, эта операция может выполняться долго.

При присваивании переменных ссылочного типа осуществляется присваивание ссылок, в итоге после присваивания обе ссылки ссылаются на один объект в динамической памяти:

На главную

Размерные и ссылочные типы

Сравнение на равенство

Сравнение на равенство объектов размерного типа сравнивает их значения. В частности, две переменные типа запись равны если равны все поля этих записей.

При сравнении на равенство переменных ссылочного типа проверяется, что они ссылаются на один и тот же объект.

На главную

Размерные и ссылочные типы

Передача в подпрограммы

При передаче размерных типов по значению происходит копирование значения фактического параметра в переменную-формальный параметр. Если размерный тип имеет большой размер, это может занимать продолжительное время, поэтому размерный тип в этом случае передаётся по ссылке на константу:

На главную

Размерные и ссылочные типы

Передача в подпрограммы

Ссылочные типы передаются в подпрограмму, как правило, по значению. При передаче таких параметров происходит копирование ссылки, в результате формальный и фактический параметр будут ссылаться на один объект.

При этом в результате изменения формального параметра внутри подпрограммы меняется и содержимое соответствующего фактического параметра при вызове подпрограммы.

На главную

Целые типы

Ниже приводится таблица целых типов, содержащая также их размер и диапазон допустимых значений.

Тип

Размер, байт

Диапазон значений

shortint

1

-128..127

smallint

2

-32768..32767

integer, longint

4

-2147483648..2147483647

int64

8

-9223372036854775808..9223372036854775807

byte

1

0..255

word

2

0..65535

longword, cardinal

4

0..4294967295

uint64

8

0..18446744073709551615

BigInteger

переменный

неограниченный

Типы integer и longint, а также longword и cardinal являются синонимами.

На главную

Вещественные типы

Ниже приводится таблица вещественных типов, содержащая их размер, количество значащих цифр и диапазон допустимых значений:

Тип

Размер, байт

Количество значащих цифр

Диапазон значений

real

8

15-16

-1.8∙10308 .. 1.8∙10308

double

8

15-16

-1.8∙10308 .. 1.8∙10308

single

4

7-8

-3.4∙1038 .. 3.4∙1038

single

4

7-8

-3.4∙1038 .. 3.4∙1038

decimal

16

28-29

-79228162514264337593543950335 .. 79228162514264337593543950335

Типы real и double являются синонимами. Самое маленькое положительное число типа real приблизительно равно 5.0∙10-324, для типа single оно составляет приблизительно 1.4∙10-45.

На главную

Логический тип

Значения логического типа boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь).

На главную

Символьный тип

Символьный тип char занимает 2 байта и хранит Unicode-символ. Символы реализуются типом System.Char.

Операция + для символов означает конкатенацию (слияние) строк. Например: 'a'+'b' = 'ab'. Как и для строк, если к символу прибавить число, то число предварительно преобразуется к строковому представлению:

Над символами определены операции сравнения < > <= >= = <>, которые сравнивают коды символов:

'a'<'b' // True

'2'<'3' // True

На главную

Перечислимый тип

Перечислимый тип определяется упорядоченным набором идентификаторов.

Значения перечислимого типа занимают 4 байта. Каждое значение value представляет собой константу типа typeName, попадающую в текущее пространство имен.

К константе перечислимого типа можно обращаться непосредственно по имени, а можно использовать запись typeName.value, в которой имя константы уточняется именем перечислимого типа, к которому она принадлежит:

На главную

Перечислимый тип

Для значений перечислимого типа можно использовать функции Ord, Pred и Succ, а также процедуры Inc и Dec. Функция Ord возвращает порядковый номер значения в списке констант соответствующего перечислимого типа, нумерация при этом начинается с нуля.

Для перечислимого типа определена экземплярная функция ToString, возвращающая строковое представление переменной перечислимого типа. При выводе значения перечислимого типа с помощью процедуры write также выводится строковое представление значения перечислимого типа.

На главную

Диапазонный тип

Диапазонный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b, где a - нижняя, b - верхняя граница интервального типа, a<b:

Тип, на основе которого строится диапазонный тип, называется базовым для этого диапазонного типа. Значения диапазонного типа занимают в памяти столько же, сколько и значения соответствующего базового типа.

На главную

Строковый тип

Строки имеют тип string, состоят из набора последовательно расположенных символов char и используются для представления текста.

Над строками определены операции сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i]<s2[i] или все символы строк совпадают, но s1 короче s2.

Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение.

На главную

Строковый тип

Операция + для строк означает конкатенацию (слияние) строк. Например: 'Петя'+'Маша' = 'ПетяМаша'.

Расширенный оператор присваивания += для строк добавляет в конец строки - левого операнда строку - правый операнд

На главную

Процедурный тип

Тип, предназначенный для хранения ссылок на процедуры или функции, называется процедурным, а переменная такого типа - процедурной переменной. Основное назначение процедурных переменных - хранение и косвенный вызов действий (функций) в ходе выполнения программы и передача их в качестве параметров.

Описание процедурного типа совпадает с заголовком соответствующей процедуры или функции без имени.

Процедурной переменной можно присвоить процедуру или функцию с совместимым типом.

На главную

Файловые типы

Файл представляет собой последовательность элементов одного типа, хранящихся на диске. В Pascal имеется два типа файлов - двоичные и текстовые. Текстовые файлы хранят символы, разделенные на строки символами #13#10 (Windows) и символом #10 (Linux). Последовательность символов для перехода на новую строку хранится в константе NewLine. Двоичные файлы в свою очередь делятся на типизированные и бестиповые.

На главную

Файловые типы

Для описания текстового файла используется стандартное имя типа text, бестиповые файлы имеют тип file, а для описания типизированного файла используется конструкция file of тип элементов:

В качества типа элементов в типизированном файле не могут фигурировать указатели, ссылочные типы, а также тип записи, содержащий ссылочные поля или указатели.

На главную

Арифметические операции

К арифметическим относятся бинарные операции +, -, *, / для вещественных и целых чисел, бинарные операции div и mod для целых чисел и унарные операции + и - для вещественных и целых чисел. Тип выражения x op y, где op - знак бинарной операции +, - или *, определяется из следующей таблицы:

 

shortint

byte

smallint

word

integer

longword

int64

uint64

BigInteger

single

real

shortint

integer

integer

integer

integer

integer

int64

int64

uint64

BigInteger

single

real

byte

integer

integer

integer

integer

integer

longword

int64

uint64

BigInteger

single

real

smallint

integer

integer

integer

integer

integer

int64

int64

uint64

BigInteger

single

real

word

integer

integer

integer

integer

integer

longword

int64

uint64

BigInteger

single

real

integer

integer

integer

integer

integer

integer

int64

int64

uint64

BigInteger

single

real

longword

int64

longword

int64

longword

int64

longword

uint64

uint64

BigInteger

single

real

int64

int64

int64

int64

int64

int64

uint64

int64

uint64

BigInteger

single

real

uint64

uint64

uint64

uint64

uint64

uint64

uint64

uint64

uint64

BigInteger

single

real

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

BigInteger

-

-

single

single

single

single

single

single

single

single

single

-

single

real

real

real

real

real

real

real

real

real

real

-

real

real

Логические операции

К логическим относятся бинарные операции and, or и xor, а также унарная операция not, имеющие операнды типа boolean и возвращающие значение типа boolean. Эти операции подчиняются стандартным правилам логики: a and b истинно только тогда, когда истинны a и b, a or b истинно только тогда, когда истинно либо a, либо b, a xor b истинно только тогда, когда только одно из a и b истинно, not a истинно только тогда, когда a ложно.

Выражения с and и or вычисляются по короткой схеме:

  • в выражении x and y если x ложно, то все выражение ложно, и y не вычисляется;
  • в выражении x or y если x истинно, то все выражение истинно, и y не вычисляется.

На главную

Побитовые операции

К побитовым относятся бинарные операции and, or, not, xor, shl, shr. Они производят побитовые манипуляции с операндами целого типа. Результирующий тип для and, or, xor будет наименьшим целым, включающим все возможные значения обоих типов операндов. Для shl, shr результирующий тип совпадает с типом левого операнда, для not - с типом операнда.

Побитовые операции осуществляются следующим образом: с каждым битом (0 принимается за False, 1 - за True) производится соответствующая логическая операция.

На главную

Операции сравнения

Операции сравнения <, >, <=, >=, =, <> возвращают значение типа boolean и применяются к операндам простого типа и к строкам.

Операции = и <> также применяются ко всем типам. Для размерных типов по умолчанию сравниваются значения, для ссылочных типов - ссылки. Можно переопределить это поведение, перегрузив операции = и <>. Аналогично можно перегрузить все операции сравнения для типов записей и классов, вводимых пользователем.

На главную

Операции с указателями

Ко всем указателям применимы операции сравнения = и <>.

К типизированным указателям применима операция разыменования ^: если p является указателем на тип T, то p^ - элемент типа T, на который указывает p. Указатели pointer разыменовывать нельзя.

На главную

Оператор присваивания

Оператор присваивания имеет вид:

переменная := выражение

В качестве переменной может быть простая переменная, разыменованный указатель, переменная с индексами или компонент переменной типа запись. Символ := называется значком присваивания. Выражение должно быть совместимо по присваиванию с переменной.

Оператор присваивания заменяет текущее значение переменной значением выражения.

На главную

Составной оператор

Составной оператор предназначен для объединения нескольких операторов в один. Он имеет вид:

begin

операторы

end

Операторы отделяются один от другого символом ";". Ключевые слова begin и end, окаймляющие операторы, называются операторными скобками.

На главную

Составной оператор

Перед end также может ставиться ";". В этом случае считается, что последним оператором перед end является пустой оператор, не выполняющий никаких действий.

Помимо операторов, в блоке могут быть внутриблочные описания переменных:

На главную

Пустой оператор

Пустой оператор не включает никаких символов, не выполняет никаких действий и используется в двух случаях:

Для пометки места, следующего за последним оператором в блоке:

Поскольку в языке Паскаль символ ";" разделяет операторы, то в приведенном выше коде считается, что после последней ";" находится пустой оператор. Таким образом, ";" перед end в блоке можно либо ставить, либо нет.

Для использования символа ";" после последнего оператора в блоке:

На главную

Условный оператор

Условный оператор имеет полную и краткую формы

Полная форма условного оператора выглядит следующим образом:

В качестве условия указывается некоторое логическое выражение. Если условие оказывается истинным, то выполняется оператор1, в противном случае выполняется оператор2.

Если условие оказывается истинным, то выполняется оператор, в противном случае происходит переход к следующему оператору программы.

Краткая форма условного оператора имеет вид:

if условие then оператор1

else оператор2

if условие then оператор

На главную

Массивы

Массив представляет собой набор элементов одного типа, каждый из которых имеет свой номер, называемый индексом (индексов может быть несколько, тогда массив называется многомерным).

Массивы в Pascal делятся на статические и динамические.

На главную

Статические массивы

Тип индекса должен быть порядковым. Обычно тип индекса является диапазонным и представляется в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа.

Тип статического массива конструируется следующим образом:

Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.

На главную

Динамические массивы

Тип динамического массива конструируется следующим образом:

Переменная типа динамический массив представляет собой ссылку. Поэтому динамический массив нуждается в инициализации (выделении памяти под элементы).

На главную

Динамические массивы

Элементы массива при этом заполняются значениями по умолчанию.

Процедура SetLength обладает тем преимуществом, что при ее повторном вызове старое содержимое массива сохраняется.

Второй способ выделения памяти под динамический массив использует стандартную процедуру SetLength:

Первый способ использует операцию new в стиле вызова конструктора класса:

Для выделения памяти под динамический массив используется два способа.

На главную