Файл: "Программирование на языке Pascal".pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.06.2023

Просмотров: 164

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

ГЛАВА1. ИЗУЧЕНИЕ ОСНОВНЫХ СЕМАНТИК ЯЗЫКА

1.1 ОПЕРАЦИИ

1.1.1 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

1.1.2 ЛОГИЧЕСКИЕ ОПЕРАЦИИ

1.1.3 ОСТАЛЬНЫЕ ОПЕРАЦИИ

1.2 ОПЕРАТОРЫ

1.2.1 ОПЕРАТОР ПРИСВАИВАНИЯ

1.2.2 ОПЕРАТОР ПРОЦЕДУРЫ

1.2.3 ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА

1.2.4 СОСТАВНЫЕ ОПЕРАТОРЫ

1.2.5 УСЛОВНЫЙ ОПЕРАТОР

1.2.6 ОПЕРАТОРЫ ПОВТОРЕНИЙ

1.2.7 ОПЕРАТОР ВЫБОРА

1.3 ИДЕНТИФИКАТОРЫ

1.3.1 ПОРЯДКОВЫЕ ТИПЫ

1.3.1.1 ЦЕЛОЧИСЛЕННЫЙ ТИП

1.3.1.2 СИМВОЛЬНЫЙ ТИП

1.3.1.3 ПОЛЬЗОВАТЕЛЬСКИЙ ПЕРЕЧИСЛЯЕМЫЙ ТИП

1.3.1.4 ТИП-ДИАПАЗОН

1.3.2 ВЕЩЕСТВЕННЫЕ ТИПЫ

1.3.3 СТРУКТУРИРОВАННЫЕ ТИПЫ

1.3.3.1 МАССИВЫ

1.3.3.2 ЗАПИСИ

1.3.3.3 МНОЖЕСТВА

1.3.3.4 СТРОКИ

1.3.4 ФАЙЛЫ

ГЛАВА 2. ОСНОВНЫЕ АЛГОРИТМЫ ЯЗЫКА

2.1 МЕТОД ГРАНИЦ

2.2 МЕТОД ГОРНЕРА

2.3 МЕТОД ЛОГИЧЕСКОЙ ПЕРЕСТАНОВКИ ЭЛЕМЕНТОВ

2.4 МЕТОДЫ СОРТИРОВКИ МАССИВОВ

ГЛАВА 3. РАЗРАБОТКА ПРИКЛАДНЫХ ПРОГРАММ В СРЕДЕ FREE PASCAL

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

Function [имя функции] (список параметров): возвращаемое значение;

В случае объявления процедур требуется лишь заменить ключевое слово Function на procedure и опустить блок возвращаемых значений. [5]

1.2.3 ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА

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

Goto [метка]

Где под меткой подразумевается особый тип, данных, представляющий собой указатель на конкретный фрагмент программы. Метка должна быть объявлена в разделе описаний с помощью ключевого слова label. После того, как в программе будет встречен оператор безусловного перехода –выполнение программы продолжится с той строчки, куда указывает оператор безусловного перехода. Существуют также ограничения: при описании меток в теле отдельно взятой процедуры(функции) –они считаются локальными переменными, поэтому переход к этим меткам вне их области видимости невозможен. [2]

1.2.4 СОСТАВНЫЕ ОПЕРАТОРЫ

Составными операторами называют некоторую череду произвольных операторов, обрамлённых в операторные скобки – ключевые слова begin …end. [8] Такие операторы являются очень важным инструментом работы pascal, которые позволяют полностью отказаться от оператора безусловного перехода. Язык не накладывает никаких ограничений как на характер операторов, так и на уровни вложенности операторов. [1]

Составной или пустой оператор – это и есть блок begin..end, на практике его редко используют без каких-либо дополнительных уровней вложенности, но иногда это позволяет логически выделить какой-то блок кода, что делает программу более читаемой. [1]

1.2.5 УСЛОВНЫЙ ОПЕРАТОР

Условный оператор позволяет проверить какое-то условие и делает ветвление процесса выполнения в зависимости от проверки. Синтаксис описания условного оператора выглядит следующим образом:


If [условие] then [оператор1] else [оператор2]

Где оператор1 и оператор2 любые возможные операторы языка с любой степенью вложенности. Принцип работы условного оператора следующий: если при вычислении значения блока условия получается логическая переменная «истина» true, то выполняется оператор1, если же результат «ложь» false, то выполняется оператор2, причём часть после оператора1 является необязательной и может быть опущена, в этом случае, при результате false в блоке условия программа просто продолжит своё выполнение. По причине того, что в теле оператора1 и оператора2 может быть любой оператор, в том числе и условный, но не каждый условный оператор может содержать конструкцию else, следовательно может возникнуть ситуация неопределённости. Язык pascal решает эту ситуацию таким образом, что каждая встретившаяся часть else относится языком к самому ближайшему к ней фрагменту if. [1]

1.2.6 ОПЕРАТОРЫ ПОВТОРЕНИЙ

В стандартном языке pascal существуют три оператора повторений. Операторы повторений –это инструменты, с помощью которых можно выполнить один и тот же участок кода заданное количество раз. Примером такого оператора служит оператор с заданным количеством итераций for, который имеет следующий вид синтаксиса:

For [параметр цикла]:=[начальное значение] to [конечное значение цикла] do [оператор]

Принцип работы этого оператора заключается в следующем: в начале оператор вычисляет аргумент начального значения, после чего осуществляет присваивание этого значения к параметру циклу, затем циклически повторяет следующие операции: осуществляется проверка текущего значения параметра цикла с вычисленным значением конечного значения, в случае, если параметр цикла<=конечного значения, то выполняется оператор и увеличивается значение параметра цикла на единицу, в ином случае оператор завершает свою работу. [2] Следует отметить, что шаг наращивания аргумента составляет ровно 1, это делает этот оператор менее мощным, чем в языках, где приращение аргумента может быть задано произвольно, однако, существует и другая запись этого оператора, которая выглядит следующим образом:

For [параметр цикла]:=[начальное значение] downto [конечное значение] do [оператор].

Данный оператор по логике выполнения практически идентичен предыдущему, однако шаг приращения аргумента в нём составляет -1, и, соответственно, условие выхода также отличается. Два прочих оператора связаны с проверкой условия выхода и не содержат в себе дополнительный счётчик. [2] Считается, что оператор for при схожих условиях выхода работает быстрее двух других, засчёт того, что условие выхода вычисляется лишь 1 раз, а каждая итерация лишь сравнивает очередное значение аргумента с этим условием.


Оператор цикла While с предпроверкой условия

Оператор цикла While имеет следующую конструкцию записи:

While [условие] do [оператор]

Принцип действия этого оператора следующий: если вычисленное значение выражения условие имеет значение true, то выполняется оператор, по завершению которого будет повторно проверено условие. Фактически, данный оператор является циклической формой записи оператора if. [3]

Оператор цикла Repeat..Until с постпроверкой условия.

Оператор Repeat..Until имеет следующий синтаксис:

Repeat [тело цикла] until [условие]

Принцип работы этого оператора заключается в следующем: выполняется тело цикла, после чего проверяется условие и, если его значение есть false, то тело цикла выполняется ещё раз, после чего будет повторно проверено условие. [3] На практике, данный оператор используют в случае, когда какой-то фрагмент кода нужно выполнить несколько раз, но всегда не менее 1. Для более гибкого управления циклами в языке pascal предусмотрены два оператора: break, который осуществляет безусловный выход из тела цикла и continue, которое насильно завершает текущую итерацию цикла и заставляет оператор перейти к следующей итерации.

1.2.7 ОПЕРАТОР ВЫБОРА

Иногда в программе требуется организовать ветвление из большого количества вариантов, специально для таких целей и существует оператор выбора. [3] В качестве параметра он принимает ключ выбора –элемент по которому и будет происходить ветвление исходной программы. Структура записи такого оператора выглядит следующим образом:

Case [ключ выбора] of [список выбора] else [операторы] end

Где под списком выбора понимают конструкцию вида

[констанста выбора]: [оператор];

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

Принцип работы у этого оператора следующий: вычисляется значение ключа выбора, а затем в порядке объявления аргументов списка выбора осуществляется поиск такого, который совпал бы с ключом выбора и выполняется его оператор, в случае, если такой константы выбора не нашлось управление передаётся оператору, следующему за else (эта часть является необязательной, её можно опустить) и затем осуществляется выход из оператора. [4]

1.3 ИДЕНТИФИКАТОРЫ

Теперь рассмотрим более подробно описания идентификаторов. Описать идентификатор - это значит указать тип связанного с ним объекта программы (константы или переменной). [4] Отсюда вытекает одно из фундаментальных понятий почти любого языка программирования - понятие типа. Чтобы не сильно забегать вперёд, укажем на данном этапе то, что тип определяет, во-первых, способ внутреннего для компьютера представления объекта и, во-вторых, действия, которые разрешается над ним выполнять. По способу представления и обработки типы данных можно подразделить на:


  • Простые
  • Структурированные
  • Указатели
  • Объекты
  • Процедуры

Сейчас же, необходимо ознакомиться с простыми типами языка pascal, поскольку их понимание лежит в основе понимания и всех прочих типов. [4] Для этого удобнее всего воспользоваться таблицей

Название типа

Назначение типа

Диапазон

Размер в байтах

Операции

Точность

Shortint

Целочисленный тип

1

Любые арифметические, в т.ч div и mod, кроме /

Целая часть

integer

Целочисленный тип

2

Любые арифметические, в т.ч div и mod, кроме /

Целая часть

longint

Целочисленный тип

4

Любые арифметические, в т.ч div и mod, кроме /

Целая часть

Byte

Целочисленный тип

1

Любые арифметические, в т.ч div и mod, кроме /

Целая часть

word

Целочисленный тип

2

Любые арифметические, в т.ч div и mod, кроме /

Целая часть

Real

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

6

Почти все, кроме div и mod

11-12 цифр

single

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

4

Почти все, кроме div и mod

7-8

Double

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

8

Почти все, кроме div и mod

15-16

Extended

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

10

Почти все, кроме div и mod

19-20

Comp

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

8

Почти все, кроме div и mod

19-20

Char

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

В зависимости от компилятора и используемой кодировки или 0..255 или 0..127

1

Могут выступать входными аргументами для некоторых функций и операторов.

Целая часть

Boolean

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

True или false

1

Логические операции, такие как not,and,or,xor

Состояние

Таблица 2. Типы данных в языке pascal

Как видно из таблицы простые типы можно условно поделить на порядковые и вещественные типы. Рассмотрим каждый из типов отдельно.

1.3.1 ПОРЯДКОВЫЕ ТИПЫ

Порядковые типы отличаются прежде всего конечным количеством возможных значений, которые можно определённым образом упорядочить, а следовательно, составить некоторое целое число, обозначающее порядковый номер элемента. [5] Если говорить строго, то вещественные типы также имеют конечное число элементов (оно определяется внутренним представлением числа, которое состоит из фиксированного количества бит, а также диапазоном значений), однако, возможное количество значений настолько велико, что сопоставление каждого значения числа вещественного типа с определённым порядковым номером не представляется возможным. Следствием этого факта является то, что над полем порядкового типа определены операции по работе с порядковым номером, примером таких операций могут служить такие стандартные функции языка паскаль, как Ord(X)-возвращающая порядковый номер элемента X, если он принадлежит простому перечисляемому типу данных, Pred(X)-возвращающее предыдущее значение порядкового типа, Succ(X)-возвращающее следующее значение порядкового типа. [5] Причём, функция Pred(X) и Succ(x) не определены для левого и правого конца отрезка порядкового типа соответственно.


1.3.1.1 ЦЕЛОЧИСЛЕННЫЙ ТИП

Использование процедур и функций с целочисленными параметрами обычно руководствуется логикой «вложенности», в частности, это означает, что везде, где допускается использование Byte (но не наоборот), в тип longint «входит» Integer, а тот, соответственно, включает в себя Shortint. Также к возможным операциям с любыми целочисленными типами относятся арифметические операции *,+,-,div (т.е взятие целочисленной части деления одного числа на другое), mod (т.е взятие остатка от деления одного числа на другое). [5] Существует также перечень стандартных процедур и функций, применимых только к целочисленным типам, они также приводятся в таблице ниже:

Вызов

Выходной параметр

Результат

Abs(x)

X

Модуль числа x

Char(byte)

Char

Возвращает символ по коду

Dec(vx[,i])

-

Уменьшает значение vx на I, при отсутствии i на 1

Inc(vx[,i])

-

Увеличивает значение vx на I, при отсутствии i на 1

Hi(integer) или Hi(word)

Byte

Возвратить старший байт аргумента

Lo(integer) или Lo(word)

Byte

Возвращает младший байт аргумента

Odd(longint)

Boolean

Истина, если аргумент нечётный

Random(x)

X

Вернёт псевдослучайное число,равномерно распределённое в диапазоне 0..(w-1)

Sqr(x)

X

Вернёт квадрат аргумента

Swap(integer) или swap(word)

Word

Поменяет местами байты в слове

Таблица 3. Целочисленные функции

При любом действии с типом целых чисел результат соответствует типу операндов, а если операнды относятся к различным целым типам, - типу операнда наибольшей мощности. [6] Переполнение программно не контролируется и должно учитываться при составлении программы. Логический тип может принимать только 2 значения из объявленных констант FALSE(ложь) и TRUE(истина). В логическом типе справедливы следующие равенства:

Ord(false)=0,ord(true)=1,false<true,succ(false)=true,pred(true)=false. Логический тип также можно использовать в операторах счетного типа

1.3.1.2 СИМВОЛЬНЫЙ ТИП

Значением символьного типа служит множество всех символов. Символы же в памяти компьютера служат целые числа в диапазоне от 0 до 255. Кодировкой по умолчанию считается кодировка ASCII, в некоторых компиляторах по умолчанию используют кодировку ANSII. [6] Общая черта этих кодировок заключается в том, что коды от 0 до 31 относят к служебным командам, интерпретация этих команд в тексте программы зависит от компилятора, однако при использовании в операциях ввода-вывода или при обращении напрямую к этим командам через специальный оператор # они могут иметь следующие значения (далее описываются только наиболее часто употребимые команды в виде таблицы)