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

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

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

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

Добавлен: 18.06.2023

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

Скачиваний: 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

ЗАКЛЮЧЕНИЕ

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

ВВЕДЕНИЕ

В настоящее время, несмотря на засилье си-подобных языков программирования в сфере прикладного программирования, однако, всё ещё сохраняет свою актуальность в рамках учебной и образовательной деятельности такой язык программирования как pascal. Эксперты в области образования подчёркивают его важность для обучения программирования, в виду семантики схожей с человеческой речью, а профессиональные программисты отмечают скорость разработки ПО с помощью данного языка программирования. Когда-то являющийся чуть ли не лидирующим языком программирования, он до сих пор продолжает развиваться в ногу со временем и привлекать к себе не только начинающих, но и уже состоявшихся программистов, но тем не менее, всё ещё находятся скептики, которые утверждают, что даже само существование этого языка в современных реалиях –ошибка. Подтвердить или опровергнуть слова этих скептиков и будет являться целью данной работы. Выдвинем гипотезу о том, что изучение этого языка программирования является академически верным решением для изучения основ программирования для людей, которые не планируют продолжить изучение программирования на более глубоком уровне или для тех, кто ещё мало знаком с программированием вообще. [3] Значение данного вопроса на сегодняшний день является достаточно важным, поскольку многие образовательные стандарты предполагают изучение этого языка, и, если окажется, что противники этого языка правы, то и все образовательные стандарты, в которых он содержится, окажутся несостоятельными. [2] Изучением данного вопроса занимались многие, однако, большинство этих исследований относились к знакомству с языками программирования для людей школьного возраста, мы же в ходе этой работы попробуем обобщить сведения о самом языке, ставя открытый вопрос перед самим читателем. [1] Исходя из этой логики могут быть сформированы задачи, которые должны быть решены в ходе данной работы:

  • Представить и изучить основные самодостаточные методичные данные для изучения программирования на языке pascal
  • Разобрать основные синтаксические конструкции языка с теоретической и практической стороны
  • Изучить основополагающие алгоритмы, необходимые для решения базовых задач по программированию
  • Попытаться решить ряд прикладных задач, для доказательства состоятельности языка

Методами исследования в данном случае будут выступать различные справочные материалы (актуальные на сегодняшний день, с учётом последних динамик развития языка) и разработанные в ходе данной работы программы. [4]


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

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

Program prog_name;

{раздел описаний}

Begin

{раздел операторов}

End.

Слова Program, begin и end выделяют две части программы - раздел описаний и раздел операторов. Такая структура обязательна для любой программы, что является следствием жесткого требования языка: любой нестандартный идентификатор, используемый в исполняемых операторах, должен быть предварительно описан в разделе описаний. [5] (Стандартные идентификаторы связаны с предварительно объявленными объектами и входят в стандартную библиотеку групп идентификаторов языка pascal. Стандартные идентификаторы, если они используются в программе, описывать не нужно). На первый взгляд требования предварительного описания идентификаторов кажется чрезмерно строгим и делающим язык менее свободным. [6] Однако, в нем проявляется тенденция развития языков программирования в сторону повышения надежности создаваемых программ. Обязательное предварительное описание идентификаторов в Паскале защищает программы от многих ошибок и повышает их надежность.

1.1 ОПЕРАЦИИ

Паскаль является языком высокого уровня, причём Тьюринг-полным, это означает в частности, что любую математически возможную операцию можно выполнить средствами языка Паскаль. [7] Однако, на этом преимущества этого языка программирования не заканчиваются – одними из главных парадигм этого языка служат максимальная приближённость к человеческому языку и удобство разработки прикладных программ. Обозначенное удобство определяется прежде всего большим количеством семантически-понятных операторов (как бинарных, так и унарных) имеющих интуитивно понятные перегрузки над соответствующим полем типов данных. [8] Язык pascal имеет ограничения в методах построения программ,которые связаны как со стремлением сделать программы на данном языке программирования более читаемыми и строгой типизацией языка, что повышает безопасность программ, так и с приближением паскаля к правилам классической математики. В частности, не существуют неявных преобразований типов, конструкции всех операторов имеют единообразный синтаксис, а все операторы имеют своё собственное значение приоритета выполнения. [9] Приоритеты операций, а также сами операции, удобнее всего представить в виде таблицы:


Уровень приоритета

Операции

0

[],.,^

1

Not,@

2

*, /,div,mod,and,shl,shr

3

+,-,or,xor

4

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

Таблица 1. Приоритет операций pascal

Условно операции можно разделить на унарные, мультипликативные и аддитивные, а также по степени приоритета. Рассмотрим каждую из групп операций в таблице.

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

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

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

Данные операции отдельно определены над полем перечисляемых типов и полем логических типов. С логическими типа данные операции работают согласно их имени – к примеру оператор не (not) возвращает значение обратное исходному, оператор больше (>) возвращает истину, когда левый операнд больше правого, оператор и (and) возвращает истину только когда левый и правый операнд истина –и так далее. [1] Данное предназначение операторов также не вызывает вопросов даже у людей малознакомых с программированием. Единственное замечание, которое необходимо сделать – это политика вычисления логических операторов. В частности, если имеется бинарный логический оператор и его конечное значение может быть найдено без вычисления второго операнда, то он не будет вычислен компилятором. [5] Например, запись (a>b)and (b>c) не будет вычислять значение аргумента b>c, если на этапе вычисления аргумента a>b выяснилось, что он принимает значение false. Более интересны поведения этих же операторов над полем перечисляемого типа (важное замечание: логический тип также является перечисляемым, и всё что будет описано далее применимо и для него, но это вырожденный случай, который ведёт себя точно так же как и случай, описанный выше, а потому, на этом факте не стоит заострять внимание). В частности, при применении логических операторов к числу –берётся во внимание его побитовое представление, а далее уже путём поразрядного применения логического оператора получается новое число. Например, при применении логического оператора и (and) к числу 8, чья побитовая картинка выглядит как 1000 с числом 6, чья побитовая картинка выглядит как 110 –будет применена поразрядная конъюнкция и в результате получится число 0. Важно понимать, что если мы возьмём менее удобный оператор для приведения примера (например не (not)), то нам было бы необходимо построить побитовую картинку числа исходя из его типа, т.е взять все биты, содержащие информацию о числе и, в случае с оператором не (not) –инвертировать. [2] В этой логике также существуют операторы логического сдвига, которые уже не определены для логического типа, а существуют только для целых чисел. Shl и shr –это соответственно логический сдвиг влево и логический сдвиг вправо. Если мы построим побитовую картинку для какого-то целого числа, например для числа 2 –это 10 и применим к нему оператор shl 1, то исходное число преобразуется к 100, т.е числу 4, в случае с оператором shr 1 – соответственно к числу 1. По сути, данные операторы являются более быстрым аналогом умножения и деления числа на 2, но во многих случаях работающих быстрее. [9]


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

Оператор включения in, взятия индекса, обращения к полю записи и переход по ссылке также будет рассмотрен более подробно в соответствующих типах, где их поведение было бы наиболее интересно. Оператор получения адреса @ редко употребим и используется одинаковым образом - в качестве унарного оператора который получает адрес в памяти компьютера, соответствующего его аргументу. [3] В частности, язык паскаль является тьюринг-полным и без работы непосредственной работы с памятью компьютера (хотя, язык достаточно мощный, чтобы не только располагать богатым инструментарием для работы с памятью, но и обладает возможностью модульных вставок на языке ассемблера), и чаще всего такой подход используется для обхода строгих правил, предъявляемых языком или для увеличения быстродействия работы программы (иногда даже для экономии места), но поскольку мы рассматриваем лишь основы работы на языке pascal, то данная тема затронута не будет.

1.2 ОПЕРАТОРЫ

Понятие операций имеет семантическую связь с понятием операторов. Под операторами языка Паскаль подразумевают неделимые элементы программы, которые позволяют выполнять алгоритмы. Наличие операторов в программе всегда подразумевают наличие какого-то действия. [8] Операторы представляют собой некоторые зарезервированные слова с особой конструкцией, отделяемых друг от друга с помощью символа ‘;’. Операторы условно можно подразделить на простые и структурированные. К простым операторам относят

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

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

  • Составной оператор (begin-end);
  • Оператор условий (if then, case of);
  • Оператор цикла (for,while,repeat)
  • Оператор присоединения (with)

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

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


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

Процедуры и неразрывно связанное с ними понятие функции – крайне важный инструмент Pascal, которые позволяют придавать чёткие формы программе и привносить в работу структуру. [4] Чем более структурированная программа, тем, чаще всего, легче понять её любому читателю и тем меньше вероятность возникновения ошибок. Каждая такая структурная единица (процедура или функция) представляет собой, фактически, отдельный самостоятельный блок программы, который может быть связан с основной лишь через небольшой список параметров. Самостоятельность процедур (функций) делает возможным вынести реализацию очередного блока в локальную среду, из-за чего изменение основной программы не будет затрагивать эти участки кода, что делает программы более гибкими в построении. [6] Процедурой (функцией) в pascal называют обрамлённый специальной конструкцией блок программы, имеющий собственное имя. При обращении к этому имени в любом месте программы называется вызовом. После вызова начинает выполняться тот участок кода, который описан в теле функции (процедуры), а после в вызывающей программе будет переданы указанные параметры (если таковые имеются), после чего выполнение программы продолжится с той же строчки. [10] Для обмена информацией между вызывающей программой и вызываемым куском кода существует целое множество различных механизмов, некоторые из которых будут рассмотрены далее в этой работе. Одним из таких механизмов считают список входных параметров, перечисляемых в круглых скобках при объявлении функции (процедуры). Отличие же функций от процедур в языке pascal заключается лишь в том, что результат работы функции возвращается в вызывающую её программу, синтаксически означая, что можно пользоваться именем функции внутри тела этой же функции словно очередным контейнером, процедуры же больше напоминают просто вынесенный участок кода. [1] Процедуры и функции можно подразделить на пользовательские и библиотечные (стандартные). Библиотечные функции содержатся в модулях, подключаемых в разделе описаний с помощью ключевого слова uses, и в исходном модуле программы (в основном это процедуры для ввода-вывода например Read,Write и функции преобразования типов, например ord,chr). Часто функции содержащиеся в исходном модуле называются стандартными, поскольку созданы одновременно с системой pascal и являются неотъемлемой ее частью (даже если не используются в тексте конкретно взятой программы). Синтаксис описания же пользовательских функций имеет следующий вид: