Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основы программирования на языке Pascal (История языка Pascal)

Содержание:

ВВЕДЕНИЕ

Современные технологии применяются практически повсеместно – в частной и профессиональной жизни, в деятельности малого бизнеса и крупных корпораций, в науке, медицине, политике и т.д. Действительно, сегодня сложно представить успешное развивающееся или развитое предприятие, которое не использовало бы в своих процессах хоть малую толику автоматизации. И то легко объясняется – грамотная и продуманная автоматизация тех или иных процессов позволяет значительно сэкономить время, а также другие ресурсы любой организации. Даже персональная жизнь значительно ускорилась благодаря новейшим технологиям и инновациям. Так, писк, обработка и анализ информации зачастую выполняется автоматически различными техническими средствами, благодаря чему пользователю остается лишь ознакомиться с запрашиваемыми данными. Это стало возможно благодаря пользовательскому интерфейсу.

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

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

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

Для достижения данной цели необходимо выполнить следующие задачи:

  • рассмотреть историю создания и развития Pascal;
  • привести особенности языка Pascal;
  • охарактеризовать типы данных языка Pascal;
  • проанализировать операторы языка Pascal;
  • подвести итоги исследования.

Объектом работы выступает сам язык Pascal, а предметом – основы программирования на языке Pascal.

В качестве методологической и теоретической базы работы используются научные работы российских и зарубежных исследователей, в частности таких авторов как Абрамов В. Г., Зуев. Е. А., Моргун А. Н., Фаронов В. В. и других. Авторы, чьи труды используются в работе, заслужили доверие и признание в научных трудах, в частности, в вопросах программирования и изучения языка Pascal, так что использование текстов их работ в исследовании целесообразно.

Структура работы включает две главы, каждая из которых, в свою очередь, содержит по два параграфа. Также включены содержание, введение, заключение и список использованных источников, а также 11 рисунков и 1 таблицу. Общий объем работы составляет 32 страницы.

1. Язык Pascal

1.1. История языка Pascal

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

В конце 60–х гг. было выдвинуто несколько предложений об эволюционном развитии Алгола. Самым успешным оказался Паскаль, определенный в 1970 г. профессором Никлаусом Виртом из ETH, швейцарского Федерального Технологического Института в Цюрихе. Наряду с очищением языка от некоторых непрозрачных средств Алгола, в Паскале была добавлена возможность объявления новых структур данных, построенных из уже существующих более простых. Паскаль также поддерживал динамические структуры данных, т.е. такие, которые могут расти или уменьшаться во время выполнения программы. Паскаль получил сильный импульс к распространению, когда в ETH был выпущен компилятор, порождавший простой промежуточный код для виртуальной машины (P–код) вместо кода для конкретного процессора. Это существенно упростило перенос Паскаля на другие процессорные архитектуры, т.к. для этого нужно было только написать новый интерпретатор для P–кода вместо всего нового компилятора [4].

Один из таких проектов был предпринят в Университете Калифорнии в Сан–Диего. Замечательно, что эта реализация не требовала большого компьютера и могла работать на новых тогда персональных компьютерах Apple II. Это дало распространению Паскаля второй важный импульс. Третьим был выпуск компанией Borland продукта ТурбоПаскаль, содержавшего быстрый и недорогой компилятор вместе с интегрированной средой разработки программ для компьютеров IBM PC. Позднее Борланд возродил свою версию Паскаля, выпустив среду быстрой разработки приложений Дельфи. Паскаль сильно повлиял на дизайн и эволюцию многих других языков, от Ады до Visual Basic [4].

Модула–2

В середине 70–х гг., вдохновленный годичным академическим отпуском, проведенным в исследовательском центре PARC компании Xerox в Пало Альто, Вирт начал проект по созданию нового компьютера класса рабочая станция. Компьютер должен был полностью программироваться на языке высокого уровня, так что язык должен был обеспечить прямой доступ к аппаратному уровню. Далее, он должен был поддерживать коллективное программирование и современные принципы разработки программного обеспечения, такие как абстрактные типы данных. Эти требования были реализованы в языке программирования Модула–2 (1979). Модула–2 сохранила хорошо зарекомендовавшие себя средства Паскаля и добавила систему модулей, а также контролируемые возможности обойти систему типов языка для целей программирования низкого уровня (например, при написании драйверов). Модули могли добавляться к операционной системе непосредственно во время работы. На самом деле вся операционная система представляла собой набор модулей без выделенного ядра или подобного объекта. Модули могли компилироваться и загружаться раздельно, причем обеспечивалась полная проверка типов и версий их интерфейсов. Успех Модулы–2 был наиболее значителен в задачах с высокими требованиями на надежность, таких как системы управления движением [16].

Однако Вирт продолжал интересоваться прежде всего настольными компьютерами, и опять важный импульс пришел из центра PARC компании Xerox. В этом центре были изобретены рабочая станция, лазерный принтер, локальная сеть, графический дисплей и многие другие технологии, расширяющие возможности использования компьютеров человеком. Кроме того, в центре PARC были популяризированы некоторые более старые и малоизвестные технологии, такие как мышь, интерактивная графика и, наконец, объектно ориентированное программирование. Эта последняя концепция (хотя и не сам термин) была впервые использована в языке высокого уровня Simula – еще одним из семейства алголоподобных языков. Как и предполагает имя, язык Simula использовал объектные технологии прежде всего для целей моделирования. Однако язык Smalltalk, разработанный в центре PARC компании Xerox, использовал объектные технологии как универсальное средство. Проект Smalltalk был также пионерским в плане дизайна пользовательского интерфейса: графический пользовательский интерфейс, каким мы его теперь знаем, был разработан для системы Smalltalk [11].

В центре PARC эти идеи повлияли на другие проекты, например, паскалеподобный язык Cedar. Как и Smalltalk и позднее Оберон, Cedar представлял собой не только язык программирования, но и операционную систему. Операционная система Cedar была весьма впечатляющей и мощной, однако сложной и нестабильной.

Проект Оберон был начат в 1985 в ETH Виртом и его коллегой Юргом Гуткнехтом. Это была попытка выделить все существенное из системы Cedar в виде универсальной, но все же обозримой операционной системы для рабочих станций. Получившаяся система оказалась очень маленькой и эффективной, прекрасно работала в оперативной памяти размером всего 2 MB и требовала при этом лишь 10 MB пространства на диске. Важной причиной малого размера системы Оберон был ее компонентный дизайн: вместо интеграции всех желаемых средств в один монолитный программный колосс, менее часто используемые программные компоненты (модули) могли быть реализованы как расширение ядра системы. Такие компоненты загружались, только когда они были действительно нужны, и они могли совместно использоваться всеми приложениями [4].

Вирт понял, что компонентно–ориентированне программирование требовало некоторых средств объектно–ориентированного программирования, таких как упрятывание информации, позднее связывание и полиморфизм.

Упрятывание информации было сильной чертой Модулы–2. Позднее связывание поддерживалось в Модуле–2 посредством процедурных переменных. Однако там не было полиморфизма. По этой причине Вирт добавил расширенное переопределение типов: тип записей мог быть объявлен как расширение <потомок> другого типа записей <предка>. Тип–потомок можно было использовать всюду вместо его предков [16].

Но компонентно–ориентированное программирование выходит за рамки объектно–ориентированного. В системе, построенной из компонент, компонента может разделять свои структуры данных с произвольным числом других компонент, о которых она ничего не знает. Эти компоненты обычно также не знают о существовании друг друга. Такое взаимное незнание делает управление динамическими структурами данных, и в частности правильное освобождение уже ненужной памяти, принципиально более трудной проблемой, чем в закрытых программных системах. Следовательно, необходимо оставить на долю реализации языка всю работу по определению момента, когда какая–то область памяти более не нужна, чтобы повторно использовать ее без ущерба для безопасности системы. Системный сервис, выполняющий такую автоматическую утилизацию памяти, называется сборщик мусора. Сбор мусора предотвращает две из числа наиболее труднонаходимых и попросту опасных ошибок в программах: утечки памяти (когда более не используемая память не освобождается) и висячие ссылки (преждевременное освобождение памяти). Висячие ссылки позволяют одной компоненте разрушить структуры данных, принадлежащие другим. Такое нарушение защиты по типам должно быть предотвращено, т.к. компонентные системы могут содержать много независимо написанных компонент неизвестного качества (например, полученных из Интернета).

Хотя алголоподобные языки всегда имели высокую репутацию в отношении безопасности, введение полной защиты типов (и, следовательно, сбора мусора) было квантовым прыжком. Именно по этой причине полная совместимость с Модулой–2 оказалась невозможной. Получившаяся модификация Модулы–2 была названа как и вся система – Оберон [12].

Система модулей в Обероне, как и в Модуле–2, обеспечивала упрятывание информации для целых семейств типов, а не только для отдельных объектов. Это позволило определять и гарантировать инварианты для нескольких взаимодействующих объектов. Другими словами, разработчики получили возможность разрабатывать механизмы защиты более высокого уровня, отталкиваясь от базовых средств защиты на уровне модулей и защиты по типам, обеспечиваемых хорошей реализацией Оберона.

Такие ортодоксальные объектно–ориентированные языка, как Smalltalk, пренебрегали как типизацией переменных, так и упрятыванием информации, что было большим шагом назад в технологии программирования. Оберон примирил миры объектно–ориентированного и модульного программирования.

Последнее требование компонентно–ориентированного программирования – возможность динамически загружать новые компоненты. В Обероне единица загрузки та же, что и единица компиляции – модуль.

В 1992 г. сотрудничество с профессором Х.П. Мёссенбёком привело к нескольким добавлениям к первоначальному языку Оберон («Оберон–2»). Так возник фактический стандарт языка [4].

В 1997 г. компания Oberon microsystems, Inc., отпочковавшаяся от ETH (с Виртом в составе совета директоров), сделала некоторые небольшие добавления к Оберону–2 и назвала его Компонентный Паскаль, чтобы четче выразить как его нацеленность (компонентно–ориентированное программирование), так и его происхождение (Паскаль). Это промышленная версия Оберона, являющаяся наследницей первоначального Паскаля и Модулы–2.

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

BlackBox

Компания Oberon microsystems разрабатывала компонентную библиотеку BlackBox Component Framework начиная с 1992 г. (сначала библиотека называлась Oberon/F). Эта библиотека написана на Компонентном Паскале и упрощает разработку компонент графического пользовательского интерфейса. Она поставляется с несколькими компонентами, включая текстовый редактор, систему визуального проектирования, средство доступа к базам данных SQL, интегрированную среду разработки, а также систему поддержки выполнения программ на Компонентном Паскале. Весь пакет представляет собой развитый, но весьма нетребовательный к системным ресурсам инструмент быстрой разработки компонентных приложений, названный BlackBox Component Builder. Он нетребователен к системным ресурсам, т.к. полностью построен из модулей Компонентного Паскаля – включая ядро со сборщиком мусора, а также самого компилятора для языка Компонентный Паскаль. Это – иллюстрация как мощи концепции компонентного программного обеспечения вообще, так и адекватности языка Компонентный Паскаль в частности.

Недавно диапазон приложений системы BlackBox Component Builder был значительно расширен за счет среды кросс–программирования Denia, которая является компонентой, расширающей BlackBox. Denia позволяет выполнять кросс–программирование на Компонентном Паскале для новой операционной системы реального времени JBed, которая тоже полностью реализована на Компонентном Паскале. JBed предназначен для встроенных систем и приложений с жесткими требованиями реального времени, например, в робототехнике и промышленной автоматизации [16].

1.2. Особенности языка Pascal

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

Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода–вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. [3]

Подробный разбор недостатков языка Pascal того времени был выполнен Брайаном Керниганом в статье «Почему Pascal не является моим любимым языком программирования» (эта статья вышла в начале 1980–х, когда уже существовал язык Модула–2, потомок Pascal, избавленный от большинства его пороков, а также более развитые диалекты Pascal). Некоторые недостатки Pascal были исправлены в ISO–стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров [5].

Кроме того, исследователи выделяют несколько основополагающих особенностей языка Pascal

  1. Pascal является традиционным алгоритмическим языком программирования, продолжающим линию Algol-60. Это означает, что программа на языке Pascal представляет собой специально организованную последовательность шагов по преобразованию данных, приводящих к решению некоторой задачи. Это отличает Pascal от так называемых непроцедурных языков типа Prolog, по существу, представляющих собой формализмы для записи начальных условий некоторой задачи и синтезирующих решение посредством встроенных механизмов логического вывода.
  2. Язык Pascal содержит удобные средства для представления данных. Развитая система типов позволяет адекватно описывать данные, подлежащие обработке, и конструировать структуры данных произвольной сложности. Pascal является типизированным языком, что означает фиксацию типов переменных при их описании, а также строгий контроль к данным в соответствии с их типом ( как на этапе компиляции, так и при использовании программы)
  3. Набор операторов языка Pascal отражает принципы структурного программирования и позволяет записать достаточно сложные алгоритмы в компактной и элегантной форме. Pascal является процедурным языком с традиционной блочной структурой и статически определенными областями действия имен. Процедурный механизм сочетает в себе простоту реализации и пользования и гибкие средства параметризации.
  4. Синтаксис языка достаточно не сложен. Программы записываются в свободном формате, что позволяет сделать их наглядными и удобными для изучения [5].

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

2. Основы программирования на языке Pascal

2.1. Типы данных Pascal

Для обработки ЭВМ данные представляются в виде величин и их совокупностей. С понятием величины связаны такая важная характеристика, как ее тип.

Тип определяет:

  • возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу;
  • внутреннюю форму представления данных в ЭВМ;
  • операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу [15].

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

Иерархия типов в языке Pascal такая:

  • Простые
    • Порядковые
      • Целые
      • Логические
      • Символьные
      • Перечисляемые
      • Интервальные
    • Вещественные
  • Структуированные
    • Массивы
    • Строки
    • Множества
    • Записи
    • Файлы
  • Указатели [12]

Схематично иерархию типов данных в языке Pascal можно представить следующим образом (рисунок 1) [12]:

Структура типов данных

Рисунок 1. Структура стандартных типов данных языка

В таблице [8] приведены простые типы данных Pascal, объем памяти, необходимый для хранения одной переменной указанного типа, множество допустимых значений и применимые операции.

Таблица 1

Характеристики простых типов данных языка Pascal

Идентификатор

Длина (байт)

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

Операции

Целые типы

integer

2

–32768..32767

+, –, /, *, Div, Mod,

>=, <=, =, <>, <, >

byte

1

0..255

+, –, /, *, Div, Mod,

>=, <=, =, <>, <, >

word

2

0..65535

+, –, /, *, Div, Mod,

>=, <=, =, <>, <, >

shortint

1

–128..127

+, –, /, *, Div, Mod,

>=, <=, =, <>, <, >

longint

4

–2147483648..2147483647

+, –, /, *, Div, Mod,

>=, <=, =, <>, <, >

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

real

6

2,9x10–39 – 1,7x1038

+, –, /, *,

>=, <=, =, <>, <, >

single

4

1,5x10–45 – 3,4x1038

+, –, /, *,

>=, <=, =, <>, <, >

double

8

5x10–324 – 1,7x10308

+, –, /, *,

>=, <=, =, <>, <, >

extended

10

3,4x10–4932 – 1,1x104932

+, –, /, *,

>=, <=, =, <>, <, >

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

boolean

1

true, false

Not, And, Or, Xor,

>=, <=, =, <>, <, >

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

char

1

все символы кода ASCII

+,

>=, <=, =, <>, <, >

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

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

  • все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;
  • к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;
  • к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;
  • к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа [12].

В языке Pascal введены понятия эквивалентности и совместимости типов. Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий:

  • Т1 и Т2 представляют собой одно и то же имя типа;
  • тип Т2 описан с использованием типа Т1 с помощью равенства или последовательности равенств. Например:
  • type
  • T1 = Integer;
  • T2 = T1;
  • T3 = T2;

Менее строгие ограничения накладываются на совместимость типов. Так, типы являются совместимыми, если:

  • они эквивалентны;
  • являются оба либо целыми, либо действительными;
  • один тип – интервальный, другой – его базовый;
  • оба интервальные с общим базовым;
  • один тип – строковый, другой – символьный [1].

В Турбо Pascal ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция

Имя_Типа (переменная или значение)

Напрмер, Integer ('Z') представляет собой значение кода символа 'Z' в двухбайтном представлении целого числа, а Byte (534) даст значение 22, поскольку целое число 534 имеет тип Word и занимает два байта, а тип Byte занимает один байт, и в процессе приведения старший байт будет отброшен [12].

2.2. Операторы Pascal

Оператор является неделимым элементом программы, который дает возможность выполнять определенные алгоритмические действия. Отличием оператора, по отношению к другим элементам, является то, что под ним всегда подразумевается какое–то действие. В языке Pascal операторы состоят из служебных слов. Операторы, используемые в программе, отделяются между собой и от других элементов программы символом (;). Все операторы языка Pascal можно условно разбить на две группы:

  • простые;
  • структурированные [1].

Простые операторы – это операторы, не содержащие в себе других операторов. К ним относятся:

  • оператор присвоения (:=);
  • оператор процедуры;
  • оператор безусловного перехода (GOTO) [5].

Структурированные операторы – это операторы, которые содержат в себе другие операторы. К ним относятся:

  • составной оператор;
  • операторы условий (IF, CASE);
  • операторы цикла (FOR, WHILE, REPEAT);
  • оператор присоединения (WITH) [16].

Простые операторы

Оператор процедуры

Оператор процедуры служит для вызова процедуры.

Формат: [имя_процедуры] (список параметров вызова);

Оператор процедуры состоит из идентификатора процедуры, непосредственно за которым в скобках расположен список параметров вызова. В Паскале имеются процедуры без параметров. В этом случае, при вызове, список параметров отсутствует. Выполнение оператора процедуры приводит к активизации действий описанных в ее теле. В языке Pascal имеется два вида процедур:

  1. Стандартные, которые описаны в самом языке и являются принадлежностью языка;
  2. Процедуры пользователя, которые создает пользователь [8].

Для вызова стандартных процедур необходимо подключение в разделе USES имени модуля (библиотеки), где описана данная процедура. Ряд процедур, находящихся в модуле SYSTEM всегда подключается к программе автоматически и их подключение в разделе USES не нужно. Стандартные процедуры языка Pascal – READ, WRITE, REWRITE, CLOSE, RESET.

READ ([файловая_переменная], [список_ввода])

READ (x,y)

Процедуры пользователя (нестандартные) должны быть созданы перед их использованием в программе и находятся либо в разделе описания самой программы, либо в отдельные программные единицы модуля. Если процедура находится в модуле, то имя этого модуля необходимо упомянуть в приложении USES [11].

Оператор безусловного перехода GOTO

Формат: GOTO [метка];

GOTO – зарезервированное слово в языке Pascal . [метка] – это произвольный идентификатор, который позволяет пометить некий оператор программы и в дальнейшем сослаться на него. В языке Pascal допускается в качестве меток использовать целое число без знаков. Метка располагается перед помеченным оператором и отделяется от него (:). Один оператор можно помечать несколькими метками. Они так же отделяются друг от друга (:). Перед тем как использовать метку в разделе оператора ее необходимо описать в разделе LABEL (раздел описания). Пример проиллюстрирован на рисунке 2.

Оператор GOTO

Рисунок 2. Реализация оператора GOTO

Действие GOTO передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилами:

  • метка должна быть описана в разделе описаний и все метки должны быть использованы;
  • если в качестве меток используются целые числа, их не объявляют.

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

Структурированные операторы

Операторы условия IF. Условный оператор используется в программе для реализации алгоритмической структуры – ветвления. В данной структуре вычислительный процесс может продолжаться по одному из возможных направлений. Выбор направления обычно осуществляется проверкой какого–либо условия. Существует два вида структуры ветвления: структура вилка и обход (рисунок 3).

Структура ветвления

Рисунок 3. Структуры ветвления

В языке Pascal условный оператор IF это средство организации ветвящегося вычислительного процесса.

Формат: IF [логическое_выражение] Then [оператор_1]; Else [оператор_2];

IF, Then, Else – служебные слова. [оператор_1], [оператор_2] – обыкновенные операции языка Pascal . Часть Else является необязательной (может отсутствовать).

Оператор IF работает следующим образом: вначале проверяется результат логического выражения. Если результат Истина(TRUE), то выполняется [оператор_1], следующий за служебным словом Then, а [оператор_2] пропускается. Если результат Ложь(FALSE), то [оператор_1] пропускается, а [оператор_2] исполняется.

Если часть Else отсутствует, то оператор IF имеет не полную форму:

IF [логическое_выражение] Then [оператор];

В этом случае, если результат Истина(TRUE), то выполняется [оператор], если Ложь(FALSE), то управление передается оператору, следующему за оператором IF.

Пример использования оператора IF: имеются 2 числа A и B. Найти максимальное число [16].

Пример использования оператора IF

Рисунок 4. Пример использования оператора IF

Составной оператор – это последовательность произвольных операций в программе, заключенная в так называемые операторные скобки (Begin–End).

Формат: Begin [операторы]; End.

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

Оператор выбора CASE

Предназначен для реализации множественных ветвлений, поскольку оператор IF может реализовать всего два направления вычислительного процесса, использовать его для реализации множественных ветвлений не всегда удобно. Множественное ветвление реализуется оператором CASE [14].

Формат: CASE [ключ_выбора] OF

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

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

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

ELSE [оператор];

End;

CASE, OF, ELSE, END – служебные слова. [ключ_выбора] – это параметр одного из порядковых типов. [константы_выбора] – константы того же типа, что и ключ выбора, реализующие выбор. [оператор_1(N)] – обыкновенный оператор. ELSE может отсутствовать.

Оператор выбора работает следующим образом: до работы оператора определяется значение параметра ключ выбора. Этот параметр может быть либо выражен как переменная в программе, либо другим путем. Затем параметр ключ выбора последовательно сравниваем с константой выбора. При совпадении значения ключа выбора с одной из констант выбора, выполняется оператор, следующий за этой константой, а все прочие операторы игнорируются. В случае не совпадения ключа выбора ни с одним из констант, выполняется оператор, следующий за Else. Часто Else является не обязательной и в случае несовпадения ключа выбора ни с одной из констант выбора и при отсутствии Else, управление передается оператору, следующему за оператором CASE.

В операторе CASE нет явной проверки условия, характерного для оператора IF. В тоже время в неявном виде операция сравнения выполняется. CASE вносит диссонанс в программу на языке Pascal , поскольку данные оператор завершается служебным словом End, которому нет парного Begin.

Пример использования оператора CASE: составить алгоритм и программу задачи, моделирующей работу светофора. При вводе символа первой буквы цветов светофора, программа должна выводить сообщение о соответствующем цвете и действиях [14].

Пример использования оператора CASE

Рисунок 5. Пример использования оператора CASE

Программа работает следующим образом: с клавиатуры процедурой Read вводится символ буквы цвета светофора. Если введена буква «з» соответствующая зеленому цвету, то в операторе CASE введено значение в списке выбора найдет константу выбора «з» и будет выведено сообщение «Зеленый цвет, движение разрешено». При вводе символа букв «к» и «ж» буду выведены аналогичные сообщения. При вводе любого другого символа будет выведено сообщение «Светофор не работает», поскольку в этом случае работает часть Else, оператора CASE [14].

Операторы цикла

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

В цикле с параметром всегда имеются так называемые параметры цикла: X, Xn, Xk, ∆X. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.

В итерационном цикле невозможно определить число циклов до его выполнения. Он выполняется до тех пор, пока выполняется условие продолжение цикла.

В языке Pascal имеются три оператора, реализующих циклические вычислительные структуры:

  • счетный оператор FOR. Он предназначен для реализации цикла с параметром и не может быть использован для реализации итерационного цикла;
  • оператор цикла с предусловием WHILE;
  • оператор цикла с постусловием REPEAT [7].

Последние два ориентированы на реализацию итерационного цикла, однако их можно использовать и для реализации цикла с параметром.

Оператор FOR

Формат: FOR [параметр_цикла] := [н_з_п_ц] To [к_з_п_ц] Do [оператор];

FOR, To, Do – служебные слова. [параметр_цикла] – параметр цикла. [н_з_п_ц] – начальное значение параметра цикла. [к_з_п_ц] – конечное значение параметра цикла. [оператор] – произвольный оператор.

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

Работу оператора рассмотрим на его алгоритме (рисунок 10):

Алгоритм оператора FOR

Рисунок 6. Работа оператора FOR

На первом шаге значение параметра цикла принимает [н_з_п_ц], затем осуществляется проверка параметр цикла меньше или равен [к_з_п_ц]. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу [7].

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

  • телом оператора For. Оператор может не выполниться ни разу, поскольку проверка условия продолжения цикла выполняется до тела цикла;
  • шаг изменения параметра цикла постоянный и равен 1;
  • тело цикла в операторе For представлено одним оператором. В том случае, если действие тела цикла требует более одного простого оператора, то эти операторы необходимо превратить в один составной оператор посредством операторных скобок (BEGIN–END);
  • параметр цикла может быть только переменой порядкового типа.

Пример использования оператора FOR: составить таблицу перевода рублей в доллары [2].

Пример использования оператор FOR

Рисунок 7. Пример использования оператора FOR

Оператор WHILE (оператор цикла с предусловием)

Формат: WHILE [условие] Do [оператор];

WHILE, Do – служебные слова. [условие] – выражение логического типа. [оператор] – обыкновенный оператор. Работа оператора (рисунок 8):

Алгоритм оператора WHILE

Рисунок 8. Работа оператора WHILE

Оператор While работает следующим образом: вначале работы проверяется результат логического условия. Если результат истина, то выполняется оператор, после которого осуществляется возврат на проверку условия с новым значением параметров в логическом выражении условия. Если результат ложь, то осуществляется завершение цикла.

При работе с While надо обратить внимание на его свойства:

  • условия, использованные в While, являются условием продолжения цикла;
  • в теле цикла всегда происходит изменение значения параметра входящего в выражение условия;
  • цикл While может, не выполнится ни разу, поскольку проверка условия в продолжение цикла выполняется до тела цикла [4].

Пример использования оператора WHILE: вычислить y=sin(x), где xn=10, xk=100, шаг равен 10 (рисунок 9).

Пример использования оператора WHILE

Рисунок 9. Пример использования оператора WHILE

Оператор REPEAT (оператор цикла с постусловием)

Формат: REPEAT [тело_цикла]; UNTIL [условие];

Алгоритм оператора REPEAT

Рисунок 10. Работа оператора REPEAT

Оператор REPEAT работает следующим образом: сначала выполняются операторы тела цикла, после чего результат проверяется логического условия. Если результат ложь, то осуществляется возврат к выполнению операторов очередного тела цикла. Если результат истина, то оператор завершает работу.

Оператор Repeat имеет следующие особенности:

  • в Repeat проверяется условие завершения цикла и если условие выполняется, то цикл прекращает работу;
  • тело цикла всегда выполняется хотя бы один раз;
  • параметр для проверки условия изменяется в теле цикла;
  • операторы тела цикла не надо заключать в операторские скобки (BEGIN–END), при этом роль операторных скобок выполняют Repeat и Until.

Пример использования оператора REPEAT: вычислить y=sin(x), где xn=10, xk=100, шаг равен 10 (рисунок 11) [15].

Пример использования оператора REPEAT

Рисунок 11. Пример использования оператора REPEAT

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

ЗАКЛЮЧЕНИЕ

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

  • рассмотрена история создания и развития Pascal.
  • приведены особенности языка Pascal.
  • охарактеризованы типы данных языка Pascal.
  • проанализированы операторы языка Pascal.

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

Тем не менее, время не стоит на месте, и к сегодняшнему дню уже создано немало современных средств программирования – новых языков программирования, специальных сред с использованием шаблонов и т.д. В связи с этим в перспективе дальнейшее распространение Pascal как языка программирования не просматривается, так как, перестав развиваться, он скоро окончательно уступит место современным технологиям. Несмотря на это, использование Pascal в учебных целях для знакомства с основами программирования является неотъемлемой частью обучения любого веб–программиста.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Абрамов, В. Г. Введение в язык Pascal / В. Г. Абрамов, Н. П. Трифонов, Г.Н. Трифонова. – М.: Наука, 2018. – 320 c.
  2. Бек, Л. Введение в системное программирование / Л. Бек. – М.: Мир, 2016. – 448 c.
  3. Гавриков, М. М. Теоретические основы разработки и реализации языков программирования: Учебное пособие / М. М. Гавриков, А. Н. Иванченко, Д. В. Гринченков. – М.: КноРус, 2016. – 184 c.
  4. Гергель, В. П. Современные языки и технологии параллельного программирования: Учебник/ предисл.: В. А. Садовничий, В. П. Гергель. – М.: Изд. МГУ, 2016. – 408 c
  5. Грызлов, В. И. Турбо Pascal 7.0 / В. И. Грызлов, Т. П. Грызлова. – М.: ДМК, 2016. – 416 c.
  6. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.–Ж. Леви. – М.: ДМК, 2016. – 134 c.
  7. Епанешников, А. М. Программирование в среде Turbo Pascal 7.0 / А. М. Епанешников, В. А. Епанешников. – М.: Диалог–Мифи, 2017. – 368 c
  8. Зуев, Е. А. Язык программирования Turbo Pascal / Е. А. Зуев. – М.: Унитех, 2017. – 304 c.
  9. Касторнова, В. А. Структуры данных и алгоритмы их обработки на языке программирования Pascal / В. А. Касторнова. – М.: БХВ–Петербург, 2016. – 304 c.
  10. Кетков, А. Практика программирования: Бейсик, Си, Pascal . Самоучитель (+ дискета) / А. Кетков, Ю. Кетков. – М.: БХВ–Петербург, 2016. – 480 c.
  11. Климова, Л. М. Pascal 7.0. Практическое программирование. Решение типовых задач / Л. М. Климова. – М.: КУДИЦ–Образ, 2015. – 528 c.
  12. Мельников, С. Delphi и Turbo Pascal на занимательных примерах / С. Мельников. – М.: БХВ–Петербург, 2017. – 419 c.
  13. Моргун, А. Н. Программирование на языке Pascal . Основы обработки структур данных / А. Н. Моргун, И. А. Кривель. – М.: Вильямс, 2015. – 576 c.
  14. Рапаков, Г. Turbo Pascal для студентов и школьников / Г. Рапаков, С. Ржеуцкая. – М.: БХВ–Петербург, 2016. – 352 c.
  15. Семашко, Г. Л. Программирование на языке Pascal / Г. Л. Семашко, А. И. Салтыков. – М.: Главная редакция физико–математической литературы издательства «Наука», 2015. – 128 c.
  16. Фаронов, В. В. Программирование на персональных ЭВМ в среде Турбо–Pascal / В.В. Фаронов. – М.: МГТУ, 2017. – 448 c.