Слайд 1Обучающая презентация
по языку программирования
Pascal
Слайд 2Что такое Pascal
История
Структура программы
Идентификаторы и ключевые слова
Комментарии
Описание переменных
Описание констант
Описание
меток
Описание типов
Область действия идентификатора
Обзор типов
Размерные и ссылочные типы
Целые типы
Вещественные
типы
Логический тип
Символьный тип
Перечислимый тип
Диапазонный тип
Строковый тип
Процедурный тип
Файловые типы
Арифметические операции
Логические операции
Побитовые операции
Операции сравнения
Операции с указателями
Оператор присваивания
Составной оператор
Пустой оператор
Условный оператор
Массивы
Статические массивы
Динамические массивы
СОДЕРЖАНИЕ
Слайд 3Паскаль (Pascal) — один из наиболее известных языков программирования, используется для обучения
программированию в старших классах и на первых курсах вузов, является
базой для ряда других языков.
ЧТО ТАКОЕ PASCAL
На главную
Слайд 4ИСТОРИЯ
Никлаус Вирт
Блез Паскаль
Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после
его участия в работе комитета разработки стандарта языка Алгол-68.
Язык назван в
честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа.
Слайд 5ИСТОРИЯ
Первая публикация Вирта о языке датирована 1970 годом; представляя язык,
автор в качестве цели его создания указывал построение небольшого и
эффективного языка, способствующего хорошему стилю программирования, использующему структурное программирование и структурированные данные.
Последующая работа Вирта была направлена на создание на основе Паскаля языка системного программирования, с сохранением возможности вести на его базе систематический, целостный курс обучения профессиональному программированию. Результат этой работы — язык Модула-2.
Слайд 6Программа содержит ключевые слова, идентификаторы, комментарии. Ключевые слова используются для
выделения синтаксических конструкций и подсвечиваются жирным шрифтом в редакторе. Идентификаторы
являются именами объектов программы и не могут совпадать с ключевыми словами.
Структура программы
Программа на языке Pascal имеет следующий вид:
Слайд 7Структура программы
Первая строка называется заголовком программы и не является обязательной.
Раздел
uses начинается с ключевого слова uses, за которым следует список
имен модулей и пространств имен, перечисляемых через запятую.
Слайд 8Структура программы
Раздел описаний может включать следующие подразделы:
раздел описания переменных
раздел
описания констант
раздел описания типов
раздел описания меток
раздел описания
процедур и функций
Данные подразделы следуют друг за другом в произвольном порядке.
Слайд 9Структура программы
Раздел uses и раздел описаний могут отсутствовать
ИЛИ
Слайд 10Структура программы
Далее следует блок begin/end, внутри которого находятся операторы, отделяемые
один от другого символом "точка с запятой".
Среди операторов может
присутствовать оператор описания переменной, который позволяет описывать переменные внутри блока.
Слайд 11Идентификаторы и ключевые слова
Идентификаторы служат в качестве имен программ, модулей,
процедур, функций, типов, переменных и констант.
Идентификатором считается любая последовательность латинских
букв или цифр, начинающаяся с буквы. Буквой считается также символ подчеркивания "_".
С каждым идентификатором связана область действия идентификатора.
Например,
a1, _h, b123 - идентификаторы,
а 1a, ф2 - нет.
Слайд 12Идентификаторы и ключевые слова
Следующие слова являются ключевыми, служат для оформления
конструкций языка и не могут использоваться как идентификаторы:
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.
Слайд 13Идентификаторы и ключевые слова
Данный ряд слов является контекстно ключевыми (они
являются ключевыми только в некотором контексте):
Abstract,default, external, forward, internal,
on, overload, override, params, private, protected, public, read, reintroduce, unit, virtual, write.
Контекстно ключевые слова могут использоваться в качестве имен.
Слайд 14Идентификаторы и ключевые слова
Некоторые ключевые слова совпадают с важнейшими именами.
Поэтому в Pascal предусмотрена возможность использовать эти имена без конфликтов
с ключевыми словами.
Первый способ состоит в использовании квалифицированного имени. В этом контексте слово Array является именем внутри пространства имен System, и конфликта с ключевым словом array нет.
Второй способ состоит в использовании специального символа & перед именем. В этом случае имя может совпадать с ключевым словом.
Слайд 15Комментарии
Комментарии - это участки кода, игнорируемые компилятором и используемые программистом
для пояснения текста программы.
В Pascal имеется несколько типов комментариев.
Слайд 16Комментарии
В Pascal имеется несколько типов комментариев.
Последовательность символов между фигурными скобками
{ } или символами (* и *) считается комментарием:
Комментарием также
считается любая последовательность символов после символов // и до конца строки:
Комментарии разных типов могут быть вложенными:
Слайд 17Описание переменных
Переменные могут быть описаны в разделе описаний, а также
непосредственно внутри любого блока begin/end.
Раздел описания переменных начинается с ключевого
слова var, после которого следуют элементы описания вида.
Имена в списке перечисляются через запятую.
Переменные могут описываться непосредственно внутри блока. Такие описания называются внутриблочными и представляют собой оператор описания переменной.
Слайд 18Описание констант
Раздел описания именованных констант начинается со служебного слова const,
после которого следуют элементы описания вида.
имя константы = значение;
или
имя константы : тип = значение;
Слайд 19Описание меток
Раздел описания меток начинается с зарезервированного слова label, после
которого следует список меток, перечисляемых через запятую. В качестве меток
могут быть использованы идентификаторы и положительные целые числа:
Метки используются для перехода в операторе goto
Слайд 20Описание типов
Раздел описания типов начинается со служебного слова type, после
которого следуют строки вида
имя типа = тип.
Обычно описание используется
для составных типов (статические массивы, процедурные переменные, записи, классы) чтобы дать имя сложному типу. Если для типа определена именная эквивалентность типов, это единственный способ передать переменные этого типа в подпрограмму.
Слайд 21Описание типов
Описание типов для классов использовать обязательно:
Описания типов могут быть
обобщёнными, т.е. включать параметры-типы в угловых скобках после имени типа.
Если описание типа используется просто для того чтобы заменить одно имя на другое, то такие типы называются синонимами типов:
Использование такого типа с конкретным параметром-типом называется инстанцированием типа:
Слайд 22Описание типов
При описании рекурсивных структур данных указатель на тип может
фигурировать раньше описания самого типа в определении другого типа:
При этом
важно, чтобы определения обоих типов находились в одном разделе type.
Отметим, что для ссылочных типов (классов) разрешается описание поля с типом, совпадающим с типом текущего класса:
Слайд 23Область действия идентификатора
Любой используемый в программе идентификатор должен быть предварительно
описан. Идентификаторы описываются в разделе описаний. Идентификаторы для переменных могут
также описываться внутри блока.
Основная программа, подпрограмма, блок, модуль, класс образуют так называемое пространство имен - область в программе, в которой имя должно иметь единственное описание. Таким образом, в одном пространстве имен не может быть описано двух одинаковых имен (исключение составляют перегруженные имена подпрограмм).
Слайд 24Область действия идентификатора
Область действия идентификатора (т.е. место, где он может
быть использован) простирается от момента описания до конца блока, в
котором он описан. Область действия глобального идентификатора, описанного в модуле, простирается на весь модуль, а также на основную программу, к которой данный модуль подключен в разделе uses.
Кроме этого, имеются переменные, определенные в блоке и связанные с некоторыми конструкциями (for, foreach). В этом случае действие переменной i простирается до конца соответствующей конструкции. Так, следующий код корректен
Слайд 25Область действия идентификатора
Переменные, описанные внутри блока, не могут иметь те
же имена, что и переменные из раздела описаний этого блока.
Например, следующая программа ошибочна:
Слайд 26Область действия идентификатора
В производных классах, напротив, можно определять члены с
теми же именами, что и в базовых классах, при этом
их имена скрывают соответствующие имена в базовых классах. Для обращения к одноименному члену базового класса из метода производного класса используется ключевое слово inherited:
Слайд 27Обзор типов
Типы в Pascal подразделяются на простые, строковые, структурированные, типы
указателей, процедурные типы и классы.
К простым относятся целые и вещественные
типы, логический, символьный, перечислимый и диапазонный тип.
К структурированным типам относятся массивы, записи, множества и файлы.
Все простые типы, кроме вещественного, называются порядковыми. Только значения этих типов могут быть индексами статических массивов и параметрами цикла for. Кроме того, для порядковых типов используются функции Ord, Pred и Succ, а также процедуры Inc и Dec.
Слайд 28Размерные и ссылочные типы
Все типы в Pascal подразделяются на две
большие группы: размерные и ссылочные. К размерным относятся все простые
типы, указатели, записи, статические массивы, множества и строки. К ссылочным типам относятся классы, динамические массивы, файлы и процедурный тип.
Размерные типы более эффективны при вычислениях: они занимают меньше памяти и операции, выполняемые над небольшими размерными типами, максимально эффективны.
Ссылочные типы обладают большей гибкостью: память под них выделяется динамически в процессе работы программы и освобождается автоматически, когда объект ссылочного типа перестаёт использоваться.
Слайд 29Размерные и ссылочные типы
Выделение памяти
Память под переменную размерного типа распределяется
на программном стеке в момент её описания. При этом переменная
размерного типа хранит значение этого типа.
Переменная ссылочного типа представляет собой ссылку на объект некоторого класса в динамической памяти. Если она не инициализирована, то хранит специальное значение nil (нулевая ссылка). Для инициализации ссылочных переменных используется вызов конструктора соответствующего класса:
Слайд 30Размерные и ссылочные типы
Присваивание
При присваивании переменных размерного типа копируются значения
этого типа. Если размерный тип имеет большой размер, эта операция
может выполняться долго.
При присваивании переменных ссылочного типа осуществляется присваивание ссылок, в итоге после присваивания обе ссылки ссылаются на один объект в динамической памяти:
Слайд 31Размерные и ссылочные типы
Сравнение на равенство
Сравнение на равенство объектов размерного
типа сравнивает их значения. В частности, две переменные типа запись
равны если равны все поля этих записей.
При сравнении на равенство переменных ссылочного типа проверяется, что они ссылаются на один и тот же объект.
Слайд 32Размерные и ссылочные типы
Передача в подпрограммы
При передаче размерных типов по
значению происходит копирование значения фактического параметра в переменную-формальный параметр. Если
размерный тип имеет большой размер, это может занимать продолжительное время, поэтому размерный тип в этом случае передаётся по ссылке на константу:
Слайд 33Размерные и ссылочные типы
Передача в подпрограммы
Ссылочные типы передаются в подпрограмму,
как правило, по значению. При передаче таких параметров происходит копирование
ссылки, в результате формальный и фактический параметр будут ссылаться на один объект.
При этом в результате изменения формального параметра внутри подпрограммы меняется и содержимое соответствующего фактического параметра при вызове подпрограммы.
Слайд 34Целые типы
Ниже приводится таблица целых типов, содержащая также их размер
и диапазон допустимых значений.
Типы integer и longint, а также longword
и cardinal являются синонимами.
Слайд 35Вещественные типы
Ниже приводится таблица вещественных типов, содержащая их размер, количество
значащих цифр и диапазон допустимых значений:
Типы real и double являются
синонимами. Самое маленькое положительное число типа real приблизительно равно 5.0∙10-324, для типа single оно составляет приблизительно 1.4∙10-45.
Слайд 36Логический тип
Значения логического типа boolean занимают 1 байт и принимают
одно из двух значений, задаваемых предопределенными константами True (истина) и
False (ложь).
Слайд 37Символьный тип
Символьный тип char занимает 2 байта и хранит Unicode-символ.
Символы реализуются типом System.Char.
Операция + для символов означает конкатенацию
(слияние) строк. Например: 'a'+'b' = 'ab'. Как и для строк, если к символу прибавить число, то число предварительно преобразуется к строковому представлению:
Над символами определены операции сравнения < > <= >= = <>, которые сравнивают коды символов:
'a'<'b' // True
'2'<'3' // True
Слайд 38Перечислимый тип
Перечислимый тип определяется упорядоченным набором идентификаторов.
Значения перечислимого типа занимают
4 байта. Каждое значение value представляет собой константу типа typeName,
попадающую в текущее пространство имен.
К константе перечислимого типа можно обращаться непосредственно по имени, а можно использовать запись typeName.value, в которой имя константы уточняется именем перечислимого типа, к которому она принадлежит:
Слайд 39Перечислимый тип
Для значений перечислимого типа можно использовать функции Ord, Pred
и Succ, а также процедуры Inc и Dec. Функция Ord
возвращает порядковый номер значения в списке констант соответствующего перечислимого типа, нумерация при этом начинается с нуля.
Для перечислимого типа определена экземплярная функция ToString, возвращающая строковое представление переменной перечислимого типа. При выводе значения перечислимого типа с помощью процедуры write также выводится строковое представление значения перечислимого типа.
Слайд 40Диапазонный тип
Диапазонный тип представляет собой подмножество значений целого, символьного или
перечислимого типа и описывается в виде a..b, где a -
нижняя, b - верхняя граница интервального типа, a
Тип, на основе которого строится диапазонный тип, называется базовым для этого диапазонного типа. Значения диапазонного типа занимают в памяти столько же, сколько и значения соответствующего базового типа.
Слайд 41Строковый тип
Строки имеют тип string, состоят из набора последовательно расположенных
символов char и используются для представления текста.
Над строками определены операции
сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i]
Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение.
Слайд 42Строковый тип
Операция + для строк означает конкатенацию (слияние) строк. Например:
'Петя'+'Маша' = 'ПетяМаша'.
Расширенный оператор присваивания += для строк добавляет в
конец строки - левого операнда строку - правый операнд
Слайд 43Процедурный тип
Тип, предназначенный для хранения ссылок на процедуры или функции,
называется процедурным, а переменная такого типа - процедурной переменной. Основное
назначение процедурных переменных - хранение и косвенный вызов действий (функций) в ходе выполнения программы и передача их в качестве параметров.
Описание процедурного типа совпадает с заголовком соответствующей процедуры или функции без имени.
Процедурной переменной можно присвоить процедуру или функцию с совместимым типом.
Слайд 44Файловые типы
Файл представляет собой последовательность элементов одного типа, хранящихся на
диске. В Pascal имеется два типа файлов - двоичные и
текстовые. Текстовые файлы хранят символы, разделенные на строки символами #13#10 (Windows) и символом #10 (Linux). Последовательность символов для перехода на новую строку хранится в константе NewLine. Двоичные файлы в свою очередь делятся на типизированные и бестиповые.
Слайд 45Файловые типы
Для описания текстового файла используется стандартное имя типа text,
бестиповые файлы имеют тип file, а для описания типизированного файла
используется конструкция file of тип элементов:
В качества типа элементов в типизированном файле не могут фигурировать указатели, ссылочные типы, а также тип записи, содержащий ссылочные поля или указатели.
Слайд 46Арифметические операции
К арифметическим относятся бинарные операции +, -, *, /
для вещественных и целых чисел, бинарные операции div и mod
для целых чисел и унарные операции + и - для вещественных и целых чисел. Тип выражения x op y, где op - знак бинарной операции +, - или *, определяется из следующей таблицы:
Слайд 47Логические операции
К логическим относятся бинарные операции 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 не вычисляется.
Слайд 48Побитовые операции
К побитовым относятся бинарные операции and, or, not, xor,
shl, shr. Они производят побитовые манипуляции с операндами целого типа.
Результирующий тип для and, or, xor будет наименьшим целым, включающим все возможные значения обоих типов операндов. Для shl, shr результирующий тип совпадает с типом левого операнда, для not - с типом операнда.
Побитовые операции осуществляются следующим образом: с каждым битом (0 принимается за False, 1 - за True) производится соответствующая логическая операция.
Слайд 49Операции сравнения
Операции сравнения , =, =, возвращают
значение типа boolean и применяются к операндам простого типа и
к строкам.
Операции = и <> также применяются ко всем типам. Для размерных типов по умолчанию сравниваются значения, для ссылочных типов - ссылки. Можно переопределить это поведение, перегрузив операции = и <>. Аналогично можно перегрузить все операции сравнения для типов записей и классов, вводимых пользователем.
Слайд 50Операции с указателями
Ко всем указателям применимы операции сравнения = и
.
К типизированным указателям применима операция разыменования ^: если p является
указателем на тип T, то p^ - элемент типа T, на который указывает p. Указатели pointer разыменовывать нельзя.
Слайд 51Оператор присваивания
Оператор присваивания имеет вид:
переменная := выражение
В качестве переменной
может быть простая переменная, разыменованный указатель, переменная с индексами или
компонент переменной типа запись. Символ := называется значком присваивания. Выражение должно быть совместимо по присваиванию с переменной.
Оператор присваивания заменяет текущее значение переменной значением выражения.
Слайд 52Составной оператор
Составной оператор предназначен для объединения нескольких операторов в один.
Он имеет вид:
begin
операторы
end
Операторы отделяются один от другого символом ";". Ключевые слова begin и end, окаймляющие операторы, называются операторными скобками.
Слайд 53Составной оператор
Перед end также может ставиться ";". В этом случае
считается, что последним оператором перед end является пустой оператор, не
выполняющий никаких действий.
Помимо операторов, в блоке могут быть внутриблочные описания переменных:
Слайд 54Пустой оператор
Пустой оператор не включает никаких символов, не выполняет никаких
действий и используется в двух случаях:
Для пометки места, следующего за
последним оператором в блоке:
Поскольку в языке Паскаль символ ";" разделяет операторы, то в приведенном выше коде считается, что после последней ";" находится пустой оператор. Таким образом, ";" перед end в блоке можно либо ставить, либо нет.
Для использования символа ";" после последнего оператора в блоке:
Слайд 55Условный оператор
Условный оператор имеет полную и краткую формы
Полная форма условного
оператора выглядит следующим образом:
В качестве условия указывается некоторое логическое выражение.
Если условие оказывается истинным, то выполняется оператор1, в противном случае выполняется оператор2.
Если условие оказывается истинным, то выполняется оператор, в противном случае происходит переход к следующему оператору программы.
Краткая форма условного оператора имеет вид:
if условие then оператор1
else оператор2
if условие then оператор
Слайд 56Массивы
Массив представляет собой набор элементов одного типа, каждый из которых
имеет свой номер, называемый индексом (индексов может быть несколько, тогда
массив называется многомерным).
Массивы в Pascal делятся на статические и динамические.
Слайд 57Статические массивы
Тип индекса должен быть порядковым. Обычно тип индекса является
диапазонным и представляется в виде a..b, где a и b
- константные выражения целого, символьного или перечислимого типа.
Тип статического массива конструируется следующим образом:
Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.
Слайд 58Динамические массивы
Тип динамического массива конструируется следующим образом:
Переменная типа динамический массив
представляет собой ссылку. Поэтому динамический массив нуждается в инициализации (выделении
памяти под элементы).
Слайд 59Динамические массивы
Элементы массива при этом заполняются значениями по умолчанию.
Процедура
SetLength обладает тем преимуществом, что при ее повторном вызове старое
содержимое массива сохраняется.
Второй способ выделения памяти под динамический массив использует стандартную процедуру SetLength:
Первый способ использует операцию new в стиле вызова конструктора класса:
Для выделения памяти под динамический массив используется два способа.