Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Мо...
119 downloads
207 Views
528KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Московский государственный институт электроники и математики (технический университет)
Кафедра «Управление и информатика в технических системах»
Алгоритмический язык Паскаль Учебное пособие по дисциплине «Программирование и основы алгоритмизации»
Москва 2010 г.
Составитель ст. преп. В.Г. Кулаков
Учебное пособие по дисциплине «Программирование и основы алгоритмизации» предназначено для студентов первого курса дневного отделения. Основной целью пособия является освоение студентами правил элементарного программирования на языке Паскаль. Учебное пособие составлено в соответствии с программой и планом для специальности «Управление и информатика в технических системах» - 220100. УДК 004.451.9 Алгоритмический язык Паскаль. Учебное пособие по дисциплине «Программирование и основы алгоритмизации» / Моск. гос. ин-т электроники и математики; Сост. В.Г. Кулаков. М., 2010, 41 с. Библиогр.: 6 назв.
2
Содержание
Стр.
1. Язык программирования Паскаль 2. Описание языка 3. Основные символы 4. Элементарные конструкции 5. Концепция типа данных 6. Стандартные типы данных 7. Константы 8. Перечисляемый тип данных 9. Интервальный тип данных 10. Переменные 11. Структура программы 12. Выражения 13. Операторы 14. Структурированные типы данных 15. Процедуры и функции 16. Стандартные математические функции 17. Рекурсия 18. Операторы выхода 19. Модули 20. Множества 21. Записи 22. Файлы 23. Последовательный и прямой доступ к данным 24. Указатели 25. Динамические переменные 26. Подпрограммы для работы в графическом режиме
4 4 5 5 6 7 9 10 10 11 11 12 12 18 21 23 25 25 26 27 28 29 33 35 35 37
Список использованной литературы
40
3
1. Язык программирования Паскаль Язык Паскаль разработан Никлаусом Виртом в 1970 году как язык для обучения процедурному программированию. Название языку дано в честь выдающегося французского ученого и философа Блеза Паскаля, а в качестве прототипа был использован алгоритмический язык Алгол-68. Огромную роль в массовом распространении языка Паскаль сыграла компания Borland International, которая создала Turbo-среду для разработки программного обеспечения на персональных компьютерах. Turbo Pascal работал под управлением операционных систем CP/M и MS-DOS на компьютерах с процессорами Intel серии x86. Первая версия языка Turbo Pascal была выпущена в 1983 г. В настоящее время язык Паскаль продолжает использоваться с целью обучения основам алгоритмизации и программирования. Имеется множество различных компиляторов, предназначенных для работы под управлением операционных систем Windows, Unix и Linux.
2. Описание языка Описание любого языка программирования должно включать описания символов, элементарных конструкций, выражений и операторов. Описание символов заключается в перечислении допустимых символов языка. Под описанием элементарных конструкций понимают правила их образования. Описание выражений – это правила образования любых выражений, имеющих смысл в данном языке. Описание операторов состоит из рассмотрения всех типов операторов, допустимых в языке. Описание каждого элемента языка задается его синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка. Семантика определяет смысл и правила использования тех элементов языка, для которых были даны синтаксические определения. Символы языка – это основные неделимые знаки, в терминах которых пишутся все тексты на языке. Элементарные конструкции – это минимальные единицы языка, имеющие самостоятельный смысл. Они образуются из основных символов языка. Выражение в алгоритмическом языке состоит из элементарных конструкций и символов, оно задает правило вычисления некоторого значения. Оператор задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия может потребоваться группа операторов. В этом случае операторы объединяются в составной оператор или блок. Действия, заданные операторами, выполняются над данными. Предложения алгоритмического языка, в которых даются сведения о типах данных, называются описаниями или неисполняемыми операторами. Объединенная единым алгоритмом совокупность описаний и операторов образует программу на алгоритмическом языке.
4
3. Основные символы Основные символы языка – буквы, цифры и специальные символы составляют его алфавит. Язык Паскаль включает следующий набор основных символов: 1) латинские буквы; 2) арабские цифры; 3) пробел; 4) подчеркивание; 5) знаки операций; 6) ограничители; 7) спецификаторы; 8) служебные слова.
4. Элементарные конструкции Элементарные конструкции языка Паскаль включают в себя имена, числа и строки. Имена (идентификаторы) присваивают называния элементам программы – константам, меткам, типам, переменным, процедурам, функциям, модулям и объектам. Имя – это последовательность букв и цифр, начинающаяся с буквы. В именах может использоваться подчеркивание. Имя может содержать произвольное количество символов, но значащими являются 63 символа. В отличие от компилятора языка Си, компилятор Паскаля не различает строчные и прописные буквы. Не разрешается в языке Паскаль использовать в качестве имен служебные слова и стандартные имена, которыми названы стандартные константы, типы, процедуры, функции и файлы. Примеры имен: b12 SIGMA gamma I80_86
Числа в языке Паскаль обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например: 217 -45
Действительные числа записываются в форме с десятичной точкой или в форме с использованием десятичного порядка, который изображается буквой Е: 38.7 -0.019 5Е12 73.1Е-16
5
Паскаль допускает запись целых чисел в шестнадцатеричной системе счисления: $40 $ABC0
Строки в языке Паскаль – это последовательность символов, записанная между апострофами. Примеры строк: 'STRING' 'ПРОГРАММА'
Строка может содержать ноль и более символов из расширенного набора символов кода ASCII. Строка, ничего не содержащая между апострофами, называется нулевой или пустой. Два последовательных апострофа в строке символов обозначают один символ – апостроф.
5. Концепция типа данных В математике принято классифицировать переменные в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными, между переменными, представляющими отдельные значения и множество значений и так далее. При обработке данных на ЭВМ такая классификация еще более важна. В любом алгоритмическом языке каждая константа, переменная, выражение или функция бывают определенного типа. В языке Паскаль существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языка Паскаль имеет следующие основные свойства: любой тип данных определяет множество значений, к которому принадлежит константа, которые может принимать переменная или выражение, или вырабатывать операция или функция; тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию; каждая операция или функция требует аргументов фиксированного типа и выдает результат фиксированного типа. Транслятор использует информацию о типах для проверки вычислимости и правильности различных конструкций. Тип определяет: возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу; внутреннюю форму представления данных в ЭВМ; операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу. Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных
6
алгоритмических языков высокого уровня. В языке Паскаль существуют скалярные и структурированные типы данных. К скалярным относятся стандартные типы и типы, определяемые пользователем. Стандартные типы включают целые, действительные, символьный, логические и адресный типы. Типы, определяемые пользователем: перечисляемый и интервальный. Структурированные типы имеют четыре разновидности: массивы, множества, записи и файлы. В языке Паскаль введены понятия эквивалентности и совместимости типов. Два типа Т1 и Т2 являются эквивалентными, если Т1 и Т2 представляют собой одно и то же имя типа или тип Т2 описан с использованием типа Т1 с помощью равенства. Менее строгие ограничения определены совместимостью типов. Например, типы являются совместимыми, если: они эквивалентны; являются оба либо целыми, либо действительными; один тип – интервальный, другой – его базовый; оба интервальные с общим базовым; один тип – строковый, другой – символьный. Ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция Имя_Типа(переменная или значение).
Например, Integer('Z') преобразует код символа Z в целое число.
6. Стандартные типы данных К стандартным относятся целые, действительные, логические, символьный и адресный типы. Целые типы определяют константы, переменные и функции, значения которых реализуются множеством целых чисел, допустимых в данной ЭВМ. Целые типы данных перечислены в таблице 1. Таблица 1. Целые типы данных Тип Диапазон значений Shortint Integer Longint Byte Word
Требуемая память, байт 1 2 4 1 2
-128 … 127 -32768 … 32767 -2147483648 … 2147483647 0 … 255 0 … 65535
7
Над целыми операндами можно выполнять следующие арифметические операции: + – сложение, – вычитание, * – умножение, div – деление, mod – получение остатка от деления. Результат арифметической операции над целыми операндами есть величина целого типа. Операции отношения, примененные к целым операндам, дают результат логического типа TRUE (истина) или FALSE (ложь). В языке Паскаль имеются следующие операции отношения: = – равенство, – неравенство, >= – больше или равно, – больше, < – меньше. Действительные типы определяет те данные, которые реализуются подмножеством действительных чисел, допустимых в данной ЭВМ. Действительные типы данных перечислены в таблице 2. Таблица 2. Действительные типы данных Тип Диапазон значений Real Single Double
Количество цифр мантиссы 11 7 15
2.9e-39 … 1.7e+38 1.5e-45 … 3.4e+38 5.0e-324 … 1.7e+308
Требуемая память, байт 6 4 8
Над действительными операндами можно выполнять следующие арифметические операции, дающие действительный результат: сложение, вычитание, умножение, деление. К величинам действительного типа применимы все операции отношения, дающие булевский результат. Один из операндов, участвующих в этих операциях, может быть целым. Логический тип (Boolean) определяет данные, которые могут принимать логические значения TRUE и FALSE. К булевским операндам применимы логические операции not, and, or и xor. Логический тип определен таким образом, что FALSE < TRUE. Это позволяет применять к булевским операндам все операции отношения. Символьный тип (Char) определяет упорядоченную совокупность символов, допустимых в данной ЭВМ. Значение символьной переменной или константы – это один символ из допустимого набора.
8
Символьная константа может записываться в тексте программы тремя способами: как один символ, заключенный в апострофы (например, 'A'); с помощью конструкции вида #K, где K – код соответствующего символа, при этом значение K должно находиться в пределах 0 … 255; с помощью конструкции вида ^C, где C – код соответствующего управляющего символа, при этом значение C должно быть на 64 больше кода управляющего символа. К величинам символьного типа применимы все операции отношения. Адресный тип (Pointer) определяет переменные, которые могут содержать значения адресов данных. Для хранения адреса требуются два слова (4 байта), одно из них определяет сегмент, второе – смещение. Для получения значения адреса какой-либо переменной введена унарная операция @.
7. Константы Константа – это идентификатор, отмечающий значение, которое не может изменяться. Тип констант в языке Паскаль определяется по их виду. Константы целого типа – это целые числа; константы действительного типа – действительные числа; логические константы – логические значения TRUE и FALSE; символьные константы – строки длиной в один символ. Язык Паскаль допускает использовать синонимы для обозначения констант. В этом случае текст программы содержит раздел описания констант, который размещается в программе или подпрограмме перед первым словом begin и начинается с зарезервированного слова const. Объявления констант имеют следующий формат: идентификатор = значение;
В стандартном Паскале допускается использовать только простые константы, например 100 или 'A'. Турбо Паскаль позволяет использовать выражения-константы. Выражение-константа представляет собой выражение, которое может вычисляться компилятором без необходимости выполнения программы. Приведем примеры выражений-констант: 256 - 1 (2.5 + 1) / (2.5 - 1) 'Borland' + ' ' + 'Pascal'
Приведем некоторые примеры использования выражений в описаниях констант: const Min = 0; Max = 100; Center = (Max - Min) div 2; Message = 'Out of memory'; ErrStr = 'Error:' + Message + '.';
9
8. Перечисляемый тип данных Перечисляемый тип представляет собой упорядоченную последовательность констант. Имена отдельных констант отделяются друг от друга запятыми, а вся совокупность констант заключается в круглые скобки. Программист объединяет в одну группу в соответствии с каким-либо признаком совокупность значений, составляющих перечисляемый тип. Например, перечисляемый тип Rainbow (радуга) объединяет скалярные значения RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET. Перечисляемый тип Traffic_Light (светофор) объединяет значения RED, YELLOW, GREEN. Перечисляемый тип описывается в разделе описания типов, который начинается со служебного слова type, например: type Rainbow = (RED,ORANGE,YELLOW,GREEN,LIGHT_BLUE,BLUE,VIOLET);
Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля. Каждое значение является константой и может принадлежать только одному из перечисляемых типов, заданных в программе. Например, перечисляемый тип Traffic_Light не может быть определен в одной программе с типом Rainbow, так как оба типа содержат одинаковые константы. Описание переменных, которые объявлены в разделе описания типов, производится с помощью имен типов. Например: type Traffic_Light = (RED, YELLOW, GREEN); var Section: Traffic_Light;
Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN. К переменным перечисляемого типа может быть применим оператор присваивания: Section:= YELLOW;
9. Интервальный тип данных Отрезок скалярного (целочисленного или символьного) типа может быть определен как интервальный тип. Отрезок задается константами, указывающими минимальное и максимальное значения и разделенными двумя точками. Константы могут принадлежать к целому, символьному, логическому или перечисляемому типам. Скалярный тип, на котором строится отрезок, называется базовым типом. Пример: type ABC = ’A’..’Z’; Digits = ’0’..’9’;
Минимальное и максимальное значения называются нижней и верхней границами отрезка. Нижняя граница должна быть меньше верхней. Над переменными, относящимися к интервальному типу, могут выполняться все операции и применяться все стандартные функции, которые допустимы для соответствующего базового типа. 10
При использовании интервальных типов в программе может осуществляться контроль за тем, чтобы значения переменных не выходили за границы, введенные в описании типа.
10. Переменные Переменная – это величина, которая может изменять свое значение во время выполнения программы. При описании переменной необходимо указать ее тип. Тип переменной описывает набор значений, которые она может принимать, и действия, которые могут быть над ней выполнены. Тип переменных определяется пользователем в разделе описания переменных, который размещается в программе или подпрограмме после раздела описания констант и перед первым словом begin. Раздел описания переменных начинается с зарезервированного слова var. Для описания переменных используется следующий формат: список переменных : тип;
Список содержит идентификаторы однотипных переменных, разделенные запятыми. Пример описания переменных: var F, G: Real; I, J, K: Integer; C: Char;
В откомпилированной программе для всех переменных отведено место в памяти, и всем переменным присвоены нулевые значения. Для задания начальных значений переменным (инициализации переменных) Паскаль позволяет присваивать начальные значения переменным одновременно с их описанием. Для этого используется конструкция имя переменной: тип = значение;
которая должна быть размещена в разделе описания констант, например: const Weight: real = 0.4;
11. Структура программы Программа на языке Паскаль состоит из заголовка, разделов описаний и раздела операторов. Заголовок программы содержит имя программы, например: Program PRIM;
Описания могут включать в себя раздел подключаемых библиотек (модулей), раздел описания меток, раздел описания констант, раздел описания типов, раздел описания переменных, раздел описания процедур и функций. Раздел описания модулей определяется служебным словом USES и содержит имена подключаемых модулей (библиотек). Раздел описания модулей должен быть первым среди разделов описаний. Имена модулей отделяются друг от друга запятыми: uses CRT, Graph; 11
Любой оператор в программе может быть помечен меткой. В качестве метки используются произвольные целые без знака, содержащие не более четырех цифр, либо имена. Метка ставится перед оператором и отделяется от него двоеточием. Все метки, используемые в программе, должны быть перечислены в разделе описания меток, например: label 3, 471, 29, Quit;
Описание констант позволяет использовать имена как синонимы констант, их необходимо определить в разделе описаний констант: const K= 1024; MAX= 16384;
В разделе описания переменных необходимо определить тип всех переменных, используемых в программе: var P,Q,R: integer; A,B: char; F1,F2: boolean;
Описание типов, процедур и функций будет рассмотрено ниже. Отдельные разделы описаний могут отсутствовать, но следует помнить, что должны быть обязательно описаны все компоненты программы. Раздел операторов представляет собой составной оператор, который содержит между служебными словами begin и end последовательность операторов. Операторы отделяются друг от друга точкой с запятой. Текст программы заканчивается точкой. Кроме описаний и операторов программа может содержать комментарии, которые представляют собой произвольную последовательность символов, расположенную между открывающей фигурной скобкой и закрывающей фигурной скобкой.
12. Выражения Выражение состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке Паскаль принят следующий приоритет операций: 1) унарная операция not, унарный минус, взятие адреса (@); 2) операции типа умножения (*, /, div, mod, and, shl, shr); 3) операции типа сложения (+, -, or, xor); 4) операции отношения (=, , , =, in, {}). Выражения могут состоять из более простых выражений. Выражения входят в состав операторов языка Паскаль, а также могут быть аргументами встроенных функций.
13. Операторы Оператором называют специальную совокупность служебных слов, идентификаторов и специальных знаков выполняющих определенные действия. Операторы отделяются друг от друга точкой с запятой.
12
Оператор Паскаля состоит из выражений. Выражения оператора могут состоять из операндов и операций. Обычно в выражениях выполняется сравнение либо арифметические, логические или булевские операции. Оператор присваивания состоит из двоеточия и знака равенства: :=
Справа от оператора записывают выражение, слева указывают имя переменной, которой присваивается значение выражения: имя:= выражение;
Примеры: x:=1; a:=5.02; b:=32*a+Sin(x); S:='Иван Иваныч';
Тип переменной и тип выражения должны совпадать кроме случая, когда выражение относится к целому типу, а переменная – к действительному. При этом происходит преобразование значения выражения к действительному типу. Составной оператор начинается с ключевого begin, за которым следуют операторы языка Паскаль, и заканчивается ключевым словом end: begin операторы end;
Составной оператор объединяет операторы в группу. Этим оператором начинается и заканчивается раздел выполнения основной программы или подпрограммы. После последнего оператора end основной программы ставится точка. Для ввода исходных данных используются операторы ввода: Read(A1, A2, … AK); ReadLn(A1, A2, … AK); ReadLn;
Первый из них реализует чтение К значений исходных данных и присваивание этих значений переменным А1, А2, …, АК. Второй оператор выполняет чтение К значений исходных данных, пропуск остальных значений до начала следующей строки, присваивание считанных значений переменным А1, А2, …, АК. Третий оператор выполняет пропуск строки данных. При вводе исходных данных происходит преобразование из внешней формы представления во внутреннюю, определяемую типом переменных. Переменные, образующие список ввода, могут принадлежать к целому, действительному или символьному типам. Чтение данных логического типа в языке Паскаль не предусмотрено. Операторы ввода при чтении значений переменных целого и действительного типа пропускает пробелы, предшествующие числу. В то же время эти операторы не пропускают пробелов, предшествующих значениям символьных переменных, так как пробелы являются равноправными символами строк. Пример записи операторов ввода: var V, S: Real; W, J: Integer; C, D: Char;
13
... Read(V, S, W, J); Read(C, D);
Значения исходных данных могут отделяться друг от друга пробелами и нажатием клавиш табуляции и Enter. Для вывода результатов работы программы на экран используются операторы вывода: Write(A1, A2,… AK); WriteLn(A1, A2,… AK); WriteLn;
Первый из этих операторов реализует вывод значений переменных А1, А2, …, АК в строку экрана. Второй оператор выполняет вывод значений переменных А1, А2, …, АК и переход к началу следующей строки. Третий оператор выполняет пропуск строки и переход к началу следующей строки. Переменные, составляющие список вывода, могут относиться к целому, действительному, символьному или булевскому типам. В качестве элемента списка вывода кроме имен переменных могут использоваться выражения и строки. Вывод каждого значения в строку экрана происходит в соответствии с шириной поля вывода, определяемой конкретной реализацией языка. Форма представления значений в поле вывода соответствует типу переменных. Оператор вывода позволяет задать ширину поля вывода для каждого элемента списка вывода. В этом случае элемент списка вывода имеет вид А:К, где А – выражение или строка, К – выражение либо константа целого типа. Если выводимое значение занимает в поле вывода меньше позиций, чем К, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля К, то для этого значения будет отведено необходимое количество позиций. Для величин действительного типа элемент списка вывода может иметь вид А:К:М, где А – переменная или выражение действительного типа, К – ширина поля вывода, М – число цифр дробной части выводимого значения. К и М – выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой. Пример записи операторов вывода: var A, B: real; P, Q: integer; ... writeln(A, B:10:2); writeln(P, Q:8);
Пример простой программы, которая запрашивает у пользователя три числа, вычисляет сумму введенных чисел и выводит полученный результат на экран: PROGRAM SUM; var A,B,C,S: real; begin read(A,B,C); S:= A+B+C; writeln('S=', S:8:3) end. 14
Битовая арифметика введена в Паскаль для обеспечения возможности работы с двоичными разрядами (битами). Операции битовой арифметики применимы только к целым типам. Первая группа битовых операций – логические операции not (отрицание), and (И), or (ИЛИ) и xor (исключающее ИЛИ). Операция not является унарной, она изменяет каждый разряд целого числа на обратный. Операции and, or и xor – бинарные, операнды этих операций – целые величины одинаковой длины. Операции выполняются поочередно над всеми двоичными разрядами операндов. Вторая группа операций – это операции сдвига влево shl и вправо shr: I shl N I shr N
Эти операции сдвигают двоичную последовательность значения I влево или вправо на N двоичных разрядов. При этом биты, уходящие за пределы разрядной сетки, теряются, а освободившиеся двоичные разряды заполняются нулями. При сдвиге вправо отрицательных значений освободившиеся разряды заполняются единицами. Условный оператор включает в себя операторы, которые выполняются или не выполняются в зависимости от записанного в операторе условия. Оператор имеет вид: If условие Then оператор1 Else оператор2;
Условие – выражение логического типа. Оператор1 выполняется, если условие верно (TRUE); оператор2 выполняется, если условие не верно (FALSE). В условном операторе может отсутствовать блок Else т. е. условный оператор может иметь вид: If условие Then оператор;
Поскольку операции сравнения имеют низший приоритет, то при проверке нескольких условий эти условия заключаются в скобки. Условный оператор может применяться для идентификации объекта по определенным признакам составляющих его элементов. Если объектом является треугольник, то элементами могут быть три его угла a, b и c: if (a>90) or (b>90) or (c>90) then writeln('Треугольник - тупоугольный'); if (a