Список рекомендуемой литературы



1. Свердлов С. З. Языки программирования и методы трансляции: учеб. пособие. СПб.: Питер, 2007. 638с.. + CD.

2. Гагарина Л.Г., Колдаев В.Д. Алгоритмы и структуры данных: учеб. пособие. М.: Финансы и статистика, 2009. 304 с.

3. Ершов А. П. Алгоритмический язык в школьном курсе основ информатики и вычислительной техники. // Микропроцессорные средства и системы. 1985. № 2. С. 48—51.

4. Википедия. Свободная энциклопедия [сайт]. URL: http://ru.wikipedia.org/wiki/Алгоритм (дата обращения: 30.01.2014).

Глава 3. Основы программирования на языке Паскаль

Основные понятия языка

3.1.1. История возникновения и развития языка Паскаль

Язык назван в честь Блеза Паскаля, известного французского философа, математика и физика, а разработан профессором Института Информатики Швейцарской высшей политехнической школы Никлаусом Виртом. Первое сообщение о нем поступило в 1971 г. Окончательный стандарт – в 1979 г. Паскаль - современный язык, он содержит все базовые конструкции структурного программирования.

Язык получил широкое распространение благодаря наглядности программ и легкости изучения. Он послужил основой для разработки других языков программирования (например, Ада, Модула−2).

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

Версия, называемая Турбо Паскаль, появился на рынке программных продуктов в 1984 году и совершил настоящую революцию в программировании. До этих пор при обучении программированию предпочтение чаще всего отдавалось Бейсику − простому, дешевому и легко осваиваемому. Паскаль же был аппаратно зависимым, дорогим и сложным. С появлением Турбо Паскаля положение изменилось. Турбо Паскаль состоит из языка программирования и среды, которая обеспечивает удобную и производительную работу.

В 1992 году фирма Borland International выпустила два пакета программирования на языке Паскаль − это Borland Pascal 7.0 и Turbo Pascal 7.0.

Версия Turbo Pascal 7.0 на два десятилетия вперед определила начало пути для тысяч будущих программистов, а всем знакомый синий экран, запечатлелся в памяти, наверное, миллионов разработчиков.

Важным шагом в развитии языка явилось появление свободных реализаций Паскаля Free Pascal и GNU Pascal, которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нём программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами, Free Pascal обеспечивает специальные режимы совместимости с различными распространёнными диалектами языка, такими как Turbo Pascal (полная совместимость), Delphi и другими).

На сегодняшний день основы Паскаля изучают для того, чтобы освоить базовые принципы структурного программирования и без проблем перейти к объектно-ориентированному программированию в среде Delphi.

Для обучения программированию на Паскале, существуют современные среды вроде FreePascal и PascalABC.

Ниже предлагается перечень наиболее популярных и удобных компиляторов Паскаля.

1) FreePascal — бесплатный компилятор паскаля, отвечающий современным требованиям и обладающий средой разработки похожей на Turbo Pascal. Работает под Windows и Linux.

Сайт русскоязычного сообщества http://www.freepascal.ru/

2) PascalABC — удобная среда разработки, работающая под Windows. С 2007 года разрабатывается версия PascalABC.net — та же среда, но написанная с использованием технологии .NET. По мнению многих программистов это самая удачная система для обучения программированию, которую можно найти.

Система создавалась на факультете математики, механики и компьютерных наук Южного Федерального Университета (ЮФУ) как учебная среда программирования.

Сайт разработчика: http://sunschool.math.rsu.ru/pabc/

3) Lazarus — среда разработки, использующая компилятор FreePascal, но при этом поддерживающая разработку современных оконных приложений.

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

В данном пособии предлагаемые примеры и упражнения ориентированы на транслятор Turbo Pascal 7.0 или на ABCPascal.

3.1.2. Алфавит и лексическая структура языка.

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

Текст программы на языке Паскаль может быть сформирован любым доступным текстовым редактором (в частности, встроенным редактором системы Turbo Pascal).

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

Алфавит - это совокупность допустимых в языке символов.

Алфавит языка Паскаль включает в себя:

1. Заглавные и строчные буквы латинского алфавита для записи программ.

2. Цифры – только арабские.

3. Знаки арифметических операций: +, -, *, /. Дополнительными являются две операции для целых данных (операндов):

DIV – деление нацело с отбрасыванием остатка (нахождение целой части результата);

MOD – нахождение остатка от деления.

4. Знаки логических отношений и логических операций: <, <=, =, <>, >=, >, AND, OR, NOT.

5. Специальные символы: ( ) [ ] . : , ; .. и т.д.

При записи алгоритма следует помнить правило: вся программа есть одна длинная строка. Разбиение ее на части необходимо лишь для нашего удобства. Многоэтажные формулы или переменные с индексами должны быть записаны в одну строку.

Лексическая структура языка.

Символы из алфавита языка используются для построения базовых элементов Pascal-программ - лексем.

Лексема - минимальная единица языка, имеющая самостоятельный смысл. Лексемы аналогичны словам естественного языка.

 

Классы лексем:

1. Служебные (зарезервированные, ключевые) слова.

Это ограниченная группа слов, построенных из букв. Каждое служебное слово представляет собой неделимое образование, смысл которого фиксирован в языке. Служебные слова нельзя использовать в качестве имен, вводимых программистом (т.е. в качестве идентификаторов переменных, констант и т.д.). Всего в языке 55 служебных слов, например, array , begin , case , else , end , for и др.

Некоторые из команд называются директивами. Директива – это команда для компилятора, она используются в тексте программы для задания параметров, определяющих режим и условия работы компилятора.

Директивы компилятора представляют собой своеобразные комментарии, заключенные в фигурные скобки. После открывающей фигурной скобки при задании директивы должен сразу же идти символ $, далее - имя директивы, а затем через один или несколько пробелов - параметр, если он в директиве необходим. Завершается директивы также фигурной скобкой. У переключающих директив после имени директивы должны стоять символы + или -, означающие, задано или нет данное условие.

Примеры директив компилятора:

· {$F+} {Переключающая директива (задает формирование "дальней адресации")}

·  {$L ASM.OBJ} {Директива параметра (подключение объектного файла)}

·  {$IFDEF DEBUG} {Директива условной компиляции ("Если происходит отладка...")}

 

 

2. Идентификаторы (имена).

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

Длина идентификатора может быть произвольной, однако компилятор воспринимает только первые 63 его символа.

Важно помнить, что в языке Turbo Pascal соответствующие заглавные и строчные буквы в идентификаторах и служебных словах не различаются. Таким образом, следующие три идентификатора обозначают одну и ту же переменную: Index=INDEX=Index.

3. Изображения.

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

4. Знаки операций формируются из одного или нескольких специальных символов и предназначены для задания действий по преобразованию данных и вычислению значений.

5. Разделители также формируются из специальных символов и в основном используются для повышения наглядности текстов программ. Примеры разделителей: ; : = ( .

В текстах Pascal-программ допускаются фрагменты пояснительного характера - комментарии. Наличие комментариев не изменяет смысл программы и не влияет на ее выполнение.

В Turbo Pascal комментарии представляют собой произвольную последовательность символов (не обязательно из алфавита языка; то есть допускаются и русские буквы), заключенную в фигурные скобки '{' и ')' или в разделители вида ' (*' и '*)’ например: {Это комментарий}.

Комментарий может находиться между любыми двумя лексемами программы.

3.1.3. Структура программы на Паскале

Структура программы:

Program <имя программы>; [1]

Раздел описания [2]

Begin

Раздел операторов [3]

End.

Операторы в разделе операторов отделяются друг от друга точкой с запятой.

Раздел описаний состоит из подразделов:

1. Описание модулей.

Модуль — это подключаемая к программе библиотека ресурсов (подпрограмм, констант и т. п.). Раздел описания модулей, если он присутствует, должен быть первым. Описание начинается с ключевого слова uses, за которым через запятую перечисляются все подключаемые к программе модули, как стандартные, так и собственного изготовления, например: uses crt, graph, my_modul.

2. Описание типов.

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

type имя_типа = описание_типа

...

var имя_переменной : имя_типа

Детально вопрос описания типов и дальнейшего использования их в программе раскрыт в соответствующем разделе данного пособия.

3. Описание переменных.

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

 Например, var x:integer- описание переменной x целого типа.

4. Описание констант.

Напомним, что константа это величина, которая в процессе работы программы не меняет своего значения. Раздел описания констант нужен для того, чтобы вместо значений констант можно было использовать в программе их имена. Такие константы называют именованными, например: const M = 100; g = 9.8; x = 5.

Применение именованных констант при осмысленном выборе имен улучшает читабельность программы и облегчает внесение в нее изменений. Иногда в разделе описания констант описываются переменные, которым требуется присвоить значение до начала работы программы: const weight : real = 61.5.

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

5. Описание меток.

Раздел описания меток начинается с ключевого слова label, за которым через запятую следует перечисление всех меток, встречающихся в программе. Метки служат для организации перехода на конкретный оператор с помощью оператора безусловного перехода goto. Метка — это либо имя, либо положительное число, не превышающее 9999. Метка ставится перед любым исполняемым оператором и отделяется от него двоеточием:

label 1, 2, error;

6. Описание процедур и функций.

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

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

Пример простейшей программы на Паскале.

Program Example_1;

Var a,b,rez: Integer;

Begin

Writeln('Введите два числа через пробел');

Readln(a, b);

rez:=a+b;

Writeln('Их сумма равна ',rez);

Writeln('Нажмите <Enter>');

Readln;

End .

Имя этой программы Example_1. Нужно помнить, что в имени программы не должно быть пробелов, оно должно начинаться с буквы, состоять только из латинских букв, цифр и некоторых специальных символов (в примере использован символ "подчеркивание").

Из разделов описаний имеется лишь один − раздел описания переменных – Var.

Далее идет раздел операторов, начинающийся со служебного слова Begin, после которого расположены операторы языка. Оператор − Writeln('текст') − записать (вывести) на экран текст, заключенный между апострофами, Readln(a,b) − читать данные с клавиатуры. В данном случае необходимо ввести два целых числа через пробел, тогда переменной а присваивается значение, равное первому введенному числу, а переменной b присваивается значение, равное второму введенному числу. Оператор присваивания: rez:=a+b; (:= − это знак присваивания в языке Паскаль). При выполнении этого оператора переменная rez получит значение, равное сумме чисел а и b. Так как в результате суммирования двух целых чисел получается целое число, то переменная rez описана как целая (integer). В конце раздела операторов стоит служебное слово End, после которого ставится точка.

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

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

Важной частью исходного текста программы являются комментарии. Комментарий представляет собой текст, который находится между фигурными скобками { } или между парами символов, состоящими из круглой скобки и звездочки (* *). Комментарии позволяют включить подробное описание программы и пояснения к ней прямо в исходный текст. Грамотное и уместное применение комментариев упрощает понимание программы, облегчает жизнь ее автору и программистам, работающим с уже готовым текстом. У фигурных скобок есть и нестандартное применение - во время отладки программы часто возникает необходимость временно убрать из программы какие-то операторы, сохранив, тем не менее, их запись. Простейший способ − заключить соответствующий фрагмент программы в фигурные скобки.

3.1.4. Оператор присваивания

Присваивание — это занесение значения в память. В общем виде оператор присваивания записывается так: переменная:= выражение

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

Примеры операторов присваивания:

a := b + c / 2;

b := a ;

a := b ;

x := 1;

x := x + 0.5.

Обратите внимание: b := a и a := b — это совершенно разные действия!

Нельзя воспринимать присваивание как аналог равенства в математике. Например, абсурдное с точки зрения математики действие x = x + 0.5, в программировании вполне допустимо x:= x + 0.5 (только нужно не забыть что знак операции присваивания := )

Чтобы не перепутать, что чему присваивается, можно пользоваться мнемоническим правилом: присваивание — это передача данных 'налево'.

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

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

Упражнение 1.

Выяснить какое значение примет переменная b после выполнения последовательности операторов.

a:=5; b:=7; a:=a+b; b:=2*b; b:=b–a;

Решение:

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

№ шага Значение a Значение b
1 5 7
2 12 7
  12 14
  12 2

Ответ: переменная b получит значение 2.

Упражнение 2.

В результате работы алгоритма

y:=x + 5

x:=y

y:=x + y

Вывод y

переменная Y приняла значение 14. Укажите число, которое являлось значением переменной X до начала работы алгоритма.

Решение:

Формируем трассировочную таблицу и решаем получившееся уравнение.

№ шага Значение X Значение Y
1 ??? X + 5
2 X + 5 X + 5+ X + 5

В результате получаем 2*X+10=14, т.е. X = 2.

Ответ: переменная X до начала работы алгоритма имела значение 2.

 

Упражнение 3.

Поменять местами значения двух переменных, т.е. если переменная X имела значение 5, а переменная Y значение 20, после выполнения программы X должна иметь значение 20, а Y 5.

Решение:

Начинающие программисты обычно допускают такую ошибку:

1. Ввод x, y

2. x:=y

3. y:=x

Если сформировать трассировочную таблицу становится понятно, что в результате мы имеем переменные с одинаковыми значениями.

№ шага Значение X Значение Y
1 5 20
2 20 20
3 20 20

Для решения такой задачи, достаточно ответить на вопрос: что нужно сделать, чтобы перелить находящийся в стакане сок в кружку, в которой в данный момент чай? J Правильно, использовать дополнительную, третью, емкость.

Т.е. один из способов правильного решения - использовать дополнительную (буферную) переменную. Алгоритм теперь будет таким:

1. Ввод x, y

2. buf:=x

3. x:=y

4. y:=buf

№ шага Значение X Значение Y Значение buf
1 5 20 -
2 5 20 5
3 20 20 5
4 20 5 5

Кстати, существует и другое решение, без использования дополнительной переменной. Попробуйте найти его самостоятельно.

3.1.5. Операторы ввода-вывода

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

Ввод с клавиатуры

Для ввода с клавиатуры определены процедуры read и readln.

read(список); readln[(список)];

В скобках указывается список имен переменных через запятую. Квадратные скобки указывают на то, что список может отсутствовать. Например: read ( a , b , c ); readln ( y ); readln ;

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

Особенность ввода символов и строк состоит в том, что пробельные символы в них ничем не отличаются от всех остальных, поэтому разделителями являться не могут. Например, пусть определены переменные var a : integer ; b real ; d : char ; и в программе есть процедура ввода read(a, b, c). Допустим, переменной а надо задать значение, равное 2, переменной b — 3,78, а в d записать символ # . Любой вариант расположения исходных данных приведет к неверному результату, потому что после второго числа требуется поставить пробельный символ для того, чтобы его можно было распознать, и этот же символ будет воспринят как значение переменной d.

Правильным решением является ввод чисел и символов в разных процедурах и размещение символов в отдельной строке, например:

readln(a, b);

readln(d);

Ввод данных выполняется через буфер — специальную область оперативной памяти. Фактически данные сначала заносятся в буфер, а затем считываются оттуда процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с ее кодом (#13 #10). Процедура read, в отличие от readln, не очищает буфер, поэтому следующий после нее ввод будет выполняться с того места, на котором закончился предыдущий, то есть начиная с символа конца строки.

read(a); {считывается целое}

write(' Продолжить? (y/n) ');

readln(d); {вместо ожидания ввода символа считывается символ #13 из предыдущего ввода}

Чтобы избежать подобной ситуации, следует вместо read использовать readln.

Вывод на экран

При выводе выполняется преобразование из внутреннего представления в символы, выводимые на экран. Для этого определены стандартные процедуры: write(список); writeln[(список)];.

Общие правила записи процедур вывода можно сформулировать так:

· Список вывода разделяется запятыми.

· Список содержит выражения, а также их частные случаи — переменные и константы логических, целых, вещественных, символьного и строкового типов.

· После любого значения можно через двоеточие указать формат, то есть количество отводимых под него позиций. Если значение короче, оно 'прижимается' к правому краю отведенного поля, если длиннее, поле 'раздвигается' до необходимых размеров.

· Для вещественных чисел можно указать второй формат, указывающий, сколько позиций из общего количества отводится под дробную часть числа. Необходимо учитывать, что десятичная точка также занимает одну позицию. Если второй или оба формата не указаны, вещественное число выводится в форме с порядком.

· Если форматы не указаны, под целое число, символ и строку отводится минимально необходимое для их представления количество позиций. Под вещественное число всегда отводится 17 позиций, причем 10 из них — под его дробную часть.

· Форматы могут быть выражениями целого типа.

 


Дата добавления: 2018-09-22; просмотров: 369; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!