47
ЧУВАШСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ 2011 Паскаль Рабочая тетрадь Бельчусов А.А. Г . Ч ЕБОКСАРЫ

Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Embed Size (px)

Citation preview

Page 1: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

ЧУВАШСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ

2011

Паскаль Рабочая тетрадь

Бельчусов А.А.

Г . Ч Е Б О К С А Р Ы

Page 2: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

2

Система Pascal ABC

Система Pascal ABC предназначена для обучения программированию на языке Паскаль и

ориентирована на школьников и студентов младших курсов.

По мнению авторов первоначальное обучение программированию должно

проходить в достаточно простых и дружественных средах, в то же время эти

среды должны быть близки к стандартным по возможностям языка

программирования и иметь достаточно богатые и современные библиотеки

стандартных подпрограмм.

Язык Паскаль признан многими российскими преподавателями как один из

лучших именно для начального обучения. Однако, среда Borland Pascal,

ориентированная на MS DOS, устарела, а среда Borland Delphi с ее богатыми

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

обучение с написания событийной программы в Borland Delphi вызывает у

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

навыков.

Система Pascal ABC основана на языке Delphi Pascal и призвана осуществить

плавный переход от простейших программ к модульному, объектно-

ориентированному, событийному и компонентному программированию. Многие

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

на более ранних этапах обучения. Например, модуль графики обходится без

объектов, хотя его возможности практически совпадают с графическими

возможностями Borland Delphi. Простейшие событийные программы также можно

писать без объектов, пользуясь лишь процедурными переменными. Даже в

консольных программах можно создавать таймеры и звуки, которые реализованы

не в виде объектов. В модулях может отсутствовать разделение на секцию

интерфейса и секцию реализации; в этом случае модули устроены практически

так же, как и основная программа, что проще на ранних этапах обучения. Тела

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

создавать классы практически сразу после изучения записей, процедур и

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

сравнению с аналогичной библиотекой Borland Delphi. Имеется модуль

контейнерных классов (динамические массивы, стеки, очереди, множества). В

языке Pascal ABC имеются арифметические операции с типизированными

указателями (в стиле языка C), а также тип complex, предназначенный для работы с

комплексными числами.

Компилятор Pascal ABC является компилятором переднего плана (front-end). Это

означает, что он не генерирует исполняемый код в виде .exe-файла, а создает в

Page 3: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

3

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

с помощью встроенного интерпретатора.

В системе Pascal ABC ученик может выполнять так называемые проверяемые

задания, обеспечивающие постановку задачи со случайными исходными

данными, контроль операций ввода-вывода, проверку правильности решения, а

также ведение протокола решения задач.

Проверяемые задания реализованы в виде электронного задачника по

программированию Programming Taskbook, содержащего 1000 задач по

программированию разного уровня сложности (от простейших задач до задач на

файлы, указатели и рекурсию) а также в виде исполнителей Робот и Чертежник,

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

младших и средних классов.

В свободно распространяемую версию Pascal ABC & Programming Taskbook Mini

Edition входит мини-версия электронного задачника (200 задач) и урезанный

комплект задач для исполнителей Робот и Чертежник. Версия Pascal ABC &

Programming Taskbook Complete Edition содержит полный комплект задач.

Система Pascal ABC используется для обучения студентов первого курса физико-

математического факультета Чувашского государственного педагогического

университета.

Редактор Pascal ABC.

Горячие клавиши

F2, Ctrl-S - сохранить файл.

F3, Ctrl-O - загрузить файл.

F12 - сохранить файл под новым именем.

Ctrl-Shift-S - сохранить все открытые файлы.

Ctrl-Shift-0 ... Ctrl-Shift-9 - установить закладку с номером 0...9.

Ctrl-0 ... Ctrl-9 - перейти к закладке с номером 0...9.

Ctrl-Tab, Ctrl-Shift-Tab - перейти к следующему/предыдущему окну редактора.

Ctrl-Shift-I - увеличить отступ выделенного блока.

Page 4: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

4

Ctrl-Shift-U - уменьшить отступ выделенного блока.

Окно вывода

Под окном редактора расположено окно вывода. Оно предназначено для вывода

данных процедурами write и writeln, а также для вывода сообщений об ошибках и

предупреждений во время работы программы.

Окно вывода может быть скрыто. Клавиша F5 и кнопка показывают/скрывают

окно вывода. Для скрытия окна вывода используется также клавиша Esc.

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

Для очистки окна вывода следует нажать комбинацию клавиш Ctrl-Del или

кнопку .

Окно ввода

Окно ввода открывается при выполнении процедур read и readln в ходе работы

программы:

Ввод данных в в окно ввода сопровождается эхо-выводом в окно вывода (см. рис).

После нажатия клавиши Enter данные из окна ввода попадают в

соответствующие переменные, окно ввода закрывается, и программа продолжает

работать дальше.

Page 5: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

5

Запуск и остановка программы

Для запуска программы в текущем окне редактора следует нажать клавишу F9 или

кнопку панели инструментов.

Программа вначале компилируется во внутреннее представление, после чего,

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

программы кнопка запуска программы становится неактивной, кнопка останова

программы, наоборот, активной и в строке статуса отображается информация

"Программа выполняется".

Выполнение программы можно в любой момент прервать нажатием комбинации

клавиш Ctrl-F2 или кнопки . При этом в окне вывода появится сообщение

• Программа прервана пользователем

Если текущая программа не является модулем, то при ее запуске на вкладке

перед именем появляется жирная точка, что свидетельствует о том, что данную

программу запускали последней. Если текущая программа является модулем, то

компилируется не она, а программа, чье имя на вкладке помечено точкой.

При выводе в графическое окно модуля GraphABC программу можно прервать

нажатием клавиши Esc, при этом графическое окно будет закрыто.

Окна исполнителей Робот, Чертежник и электронного задачника Programming

Taskbook возникают лишь после завершения работы программы.

Пошаговое выполнение программы

Режим пошагового выполнения предназначен для отладки программы. Для выполнения

одного шага (одной строки) программы следует нажать клавишу F8 или кнопку (шаг

без входа в подпрограмму), либо клавишу F7 или кнопку (шаг со входом в

подпрограмму). Для выполнения программы до данной строки следует установить на

нее курсор и нажать клавишу F4 или кнопку .

Прервать программу, находящуюся в режиме пошагового выполнения, можно с

помощью комбинации клавиш Ctrl-F2 или кнопки . Если программа находится

в режиме пошагового выполнения, то ее можно выполнить до конца, нажав F9.

Если программа не запущена и в активном окне находится текст модуля, то при

нажатии клавиши F4 в активном окне начинает выполняться программа,

отмеченная точкой на вкладке.

Секции инициализации и финализации модулей трассируются только при

пошаговом выполнении со входом в подпрограмму. Таким образом, трассировка

Page 6: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

6

секций инициализации модулей начинается, если нажать F7 при запуске

программы, а трассировка секций финализации модулей - если нажать F8, когда

курсор стоит на заключительном end программы.

Трассировка обработчиков событий запрещена.

Окно отладки

Окно отладки позволяет просматривать во время пошагового исполнения программы

значения переменных. По умолчанию оно располагается в правом верхнем углу окна

редактора и имеет следующий вид:

Для добавления переменной или выражения в окно отладки следует нажать

комбинацию клавиш Ctrl-F5 или кнопку . Можно также перетащить из

редактора в окно отладки выделенное выражение или при активном окне отладки

нажать клавишу Ins. Допускаются выражения, содержащие функции, в т.ч. и

определенные в программе (такие функции не должны иметь побочного

эффекта, т.е.не должны менять значения глобальных переменных).

Окно отладки включается/выключается нажатием комбинации клавиш Ctrl-

Shift-W.

Для удаления строки из окна отладки следует выделить эту строку и нажать

клавишу Del или воспользоваться командой контекстного меню окна отладки.

Для изменения строки в окне отладки следует дважды щелкнуть на ней.

Для очистки окна отладки следует нажать комбинацию клавиш Ctrl-Del или

воспользоваться командой контекстного меню окна отладки.

Если выражение неверно, его вычисление вызывает ошибку или в данном

контексте недоступны некоторые переменные, то при выполнении программы в

столбце "Значение" появляется сообщение "нельзя вычислить".

Page 7: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

7

Редактор блок-схем FCEditor

Назначение программы FCEditor состоит в редактирование блок-схем программ и

конвертация из кода программы в блок-схему.

ОСНОВНАЯ ИДЕЯ - изобразить блок-схему с произвольным по величине

(имеется в виду текст) содержанием. В большинстве редакторов, если и имеется

возможность автоматически менять размер компонентов, то все стрелки и

переходы все равно надо расставлять вручную. В FCEditor это делается

автоматически.

Преимущества FCEditor:

* ИМПОРТ из кода языка Паскаль в блок-схему

* АВТО-определение размеров и расположения всех элементов

* АВТО-конвертация в программный код который демонстрируется

* возможность вставки только стандартных элементов алгоритмов

* многоязычный интерфейс (русский, английский и др.)

Принцип работы программы - работа с элементами как с объектами. При

наведении на область элемента можно изменить его содержимое (если

находимся в режиме "Изменение") либо при наведении на исходящую из

элемента стрелку указателя мыши можно произвести вставку новых элементов

(выбранных с помощью переключателей на панели инструментов либо из

контекстного меню). Переключится в один из режимов работы можно как из

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

текстовое содержимое элемента. При установке флажка - "автоматическое

обновление" размеры компонента будут подгоняться под его текст (только нужно

указать что текущий режим - редактирование). Программа может указывать

номера блоков (чтобы в описании можно было на них ссылаться). Для этого

нужно выставить в опциях переключатель "Нумеровать блоки". номера жестко

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

КОМАНДЫ МЕНЮ:

Через меню Файл схему можно

1. сохранить в старом формате fce

(ограничение текста блоков до 64 символов)

2. сохранить в новом формате fc2

(по сути текст кода на Паскале ограничение снято)

3. сконвертировать в код Паскаля

4. сконвертировать в формат *.bmp

Page 8: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

8

5. сконвертировать в формат *.gif

6. получить схемы из кода языка Паскаль

Кнопки панели инструментов

+ Добавить - режим добавления нового элемента. Чтобы добавить новый элемент

надо, дважды щелкнуть указателем мыши по стрелке, где предполагается

добавить новый элемент.

Х Удалить - режим удаления элементов.Дважды щелкаем по элементу и он

удалится.

Т Изменить - режим изменения содержания элемента. дважды щелкаем по

элементу, при этом его содержание становиться доступным для редактирвания и

его можно менять. Если при этом установить флажок "Обновлять при

редактировании",то сразу будет происходит перерисовка схемы.

Н Передвинуть - в этом режиме схему можно перемещать удерживая левую

клавишу мыши.

Замечания об импорте из кода

* файл программы должен(желательно)начинаться с program !!!

* конвертер импорта НЕ распознает блока case ... of ... end; более того, при его

наличии почти гарантировано импорт завесит редактор наглухо.. единственно,

что могу рекомендовать это заменять кейс вручную на структуру if .. else ..

* модуль не должен содержать синтаксических ошибок

* операторы Break, Continue, Exit, Hult НЕ обрабатываются.

ОГРАНИЧЕНИЯ НЕЗАРЕГИСТРИРОВАННОЙ ВЕРСИИ:

* дорисовывается ЛИШНЕЕ направление стрелки.

* некоторые блоки рисуются зачеркнутыми.

Page 9: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

9

СТРУКТУРА ПРОГРАММЫ НА ПАСКАЛЕ

По определению стандартного Паскаля программа состоит из

и (блока), за

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

содержит разделы описаний и раздел операторов.

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

Label <раздел меток>;

Const <раздел констант>;

Туре <раздел типов>;

Var <раздел переменных>;

Procedure (Function) <раздел подпрограмма-

Begin

<раздел операторов>

End.

Раздел операторов имеется в любой программе и является основным.

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

присутствуют в каждой программе.

Выделенные слова называются зарезервированными. Они используются

для описания конструкций языка и не могут использоваться в качестве имен. То

есть нельзя описать, скажем, переменную с именем begin, но можно - с

именем integer.

Конструкция Begin...End является составным оператором.

Зарезервированные слова Begin и End служат операторными скобками. Когда

Page 10: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

10

несколько операторов записаны в таких операторных скобках, они

обрабатываются как один оператор.

Пример составного оператора, используемого внутри оператора if:

If First < Last Then

Begin

Temp := First;

First := Last;

Last := Temp;

End;

Page 11: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

11

Целый тип данных INTEGER

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

программирования. С типом величины связаны три ее свойства:

Паскаль характеризуется разветвленной структурой типов данных.

Иерархия типов в языке Паскаль такая:

Простые o Порядковые

Целые Логические Символьные Перечисляемые Интервальные

o Вещественные Структурированные

o Массивы o Строки o Множества o Записи o Файлы

Указатели В данный момент нас будет интересовать только целый тип.

Имеется пять целочисленных типов, различающихся диапазоном

допустимых значений и размером занимаемой оперативной памяти.

Целочисленные типы обозначаются идентификаторами: Byte, ShortInt, Word,

Integer, LongInt; их характеристики приведены в следующей таблице:

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

(байт)

Диапазон значений Операции

integer 2 -32768..32767 +, -, /, *, Div, Mod, >=,

<=, =, <>, <, >

byte 1 0..255 +, -, /, *, Div, Mod, >=,

<=, =, <>, <, >

word 2 0..65535 +, -, /, *, Div, Mod, >=,

<=, =, <>, <, >

Page 12: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

12

shortint 1 -128..127 +, -, /, *, Div, Mod, >=,

<=, =, <>, <, >

longint 4 -

2147483648..2147483647

+, -, /, *, Div, Mod, >=,

<=, =, <>, <, >

Над данными целого типа можно производить арифметические действия (+, -, /,

*), операции сравнения (>=, <=, <>, <, >), присваивания ( := ), а также функции:

div -

mod -

abs(x) -

chr(b) -

dec(v,i) -

inc(v,i) -

sqr(x) -

Значения целых типов записываются в программе привычным способом:

123 4 -3 +345 -699

Наличие десятичной точки в записи целого числа недопустимо. Будет

ошибкой записать целое число следующим образом:

123.0

Для всех переменных величин, используемых в программе, должны быть

указаны их типы. Это делается в разделе переменных программы. Структура

раздела переменных показана на рис.:

Пример раздела переменных программы:

Var m,n,k: Integer;

Page 13: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

13

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

Строка —это . Каждый

символ занимает 1 байт памяти (код ASCII).

называется ее длиной. Длина строки может находиться в

диапазоне от 0 до 255. Строковые величины могут быть константами и

переменными.

Строковая константа есть последовательность символов, заключенная в

апострофы. Например:

'Язык программирования ПАСКАЛЬ',

'IBM PC - computer',

'33-45-12'.

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

следующим образом:

Var <идентификатор>: String*<максимальная длина строки>+

Например: Var Name: String[20]

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

подразумевается, что он равен максимальной величине — 255.

Например: Var slovo: String

Символы внутри строки индексируются (нумеруются) от единицы. Каждый

отдельный символ идентифицируется именем строки с индексом,

заключенным в квадратные скобки.

Например: Name[5], Name[i], slovo[k+l].

Индекс может быть положительной константой, переменной, выражением

целого типа. Значение индекса не должно выходить за границы описания.

Над строковыми данными допустимы операции сцепления и операции

отношения.

Page 14: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

14

Операция сцепления (+) применяется для

. Сцеплять можно как строковые

константы, так и переменные.

Например:

'ЭВМ' + ЧВМ' + ' Р С .

В результате получится строка:

'ЭВМ IBM PC .

Длина результирующей строки не должна превышать 255.

Операции отношения =, <, >, <=, >=, <> производят сравнение двух строк, в

результате чего получается логическая величина (true или false). Операция

отношения имеет более низкий приоритет, чем операция сцепления.

Сравнение строк производится слева направо до первого несовпадающего

символа, и больше считается та строка, в которой первый несовпадающий

символ имеет больший номер в таблице символьной кодировки.

Если строки имеют различную длину, но в общей части символы

совпадают, считается, что более короткая строка меньше, чем более длинная.

Строки равны, если

Пример: Выражение Результат

' c o s m l ' < ' c o s m 2 ' True

'pascal'>'PASCAL' True

Функция Copy (S, Poz, N) выделяет из строки s подстроку длиной в N

символов, начиная с позиции Poz .N и Poz — целочисленные выражения.

Пример:

Значение s Выражение Результат

'ABCDEFG' Copy(S,2,3) 'BCD'

'ABCDEFG' Copy(S, 4,4) 'DEFG'

Функция Concat (SI, S2, . . ., SN) выполняет сцепление (конкатенацию)

строк S1, . . . , SN в одну строку.

Page 15: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

15

Пример: Выражение Результат

Concat('АА', 'XX', 'Y') 'AAXXY'

Функция Length (S) определяет текущую длину строки S. Результат —

значение целого типа.

Пример: Значение s Выражение Результат

' t e s t - 5 ' Length (S) 6

1 (А+В) *С Length (S) 7

Функция Pos(si, S2) обнаруживает первое появление в строке S2 подстроки

si . Результат — целое число, равное номеру позиции, где находится первый

символ подстроки s i. Если в строке S2 подстроки s i не обнаружено, то

результат равен 0.

Пример: Значение S2 Выражение Результат

' a b c d e f' Pos (' c d ' , S2) 3

'abcdcdef' Pos('cd',S2) 3

' a b c d e f' Pos('k',S2) 0

Процедура Delete (S, Poz, N) выполняет удаление N символов из строки s,

начиная с позиции Poz.

Пример:

Исходное значение s Оператор Конечное значение S

'abcdefg' Delete (S,3,2) 'abefg'

'abcdefg' Delete(S,2,6) 'a'

В результате выполнения процедуры уменьшается текущая длина строки в

переменной S.

Процедура insert (SI, S2, Poz) выполняет вставку строки S1 в строку S2,

начиная с позиции Poz.

Пример:

Page 16: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

16

Начальное S2 Оператор Конечное S2

'ЭВМ PC' Insert('IBM-',S2,5) 'ЭВМ IBM-PC

' Р и с . 2 ' Insert('N',S2,6) 'Рис.N2'

Пример 1. Следующая программа получает из слова «ВЕЛИЧИНА » слово

«НАЛИЧИЕ»:

Program Slovo_l;

Var S11,S12: String[10];

Begin

S11:='ВЕЛИЧИНА';

S12:=Copy(S11,7,2)+Copy(S11,3,4)+S11[2];

WriteLn(S12)

End.

Пример 2. По следующей программе из слова «СТРОКА» будет получено

слово «СЕТКА».

Program Slovo_2;

Var S1: String[10];

Begin

S1:='СТРОКА';

Delete (S1,3,2);

Insert ('E',S1,2);

WriteLn(S1)

End.

Page 17: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

17

Оператор IF

Алгоритмическая структура ветвления программируется в Паскале с

помощью условного оператора.

Описывается оператор ветвления в таком виде:

Кроме того, возможно использование неполной формы условного

оператора:

Теперь дадим строгое описание условного оператора в форме

синтаксической диаграммы, представленной на рисунке:

То, что мы раньше называли условием, есть логическое выражение,

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

выполняться , если

для полной формы

или .

Page 18: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

18

Пример 1. По длинам трех сторон треугольника а, b, с вычислить его

площадь.

Для решения задачи используется формула Герона

где р = (а + b + с) /2 — полупериметр треугольника. Исходные данные

должны удовлетворять основному соотношению для сторон треугольника:

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

Имея возможность в одном условном операторе записывать достаточно

сложные логические выражения, мы можем сразу «отфильтровать» все

варианты неверных исходных данных.

Program Geron;

Var A,B,C,P,S: Real;

Begin

WriteLn('Введите длины сторон т р е у г о л ь н и к а : ' );

Write ('a ='); ReadLn(A)

Write('b ='); ReadLn(В)

Write('c ='); ReadLn(С)

If (A>0)And(B>0)And(C>0) And (A+B>C) And (B+C>A) And (A+C>B) Then

Begin

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)* (P-C));

WriteLn('Площадь=',S)

End

Else WriteLn('Неверные исходные данные')

End.

Page 19: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

19

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

Оператор выбора позволяет выбрать из

возможных продолжений программы.

Структура оператора выбора такова:

case <селектор> of

<альтернатива 1>: <операторы>;

<альтернатива 2>: <операторы>;

<альтернатива n>: <операторы>;

[else <операторы>]

end;

где селектор – переменная или выражение порядкового типа,

альтернатива – постоянная величина того же типа, что и селектор.

Формат оператора case описывается синтаксической диаграммой:

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

программы:

Page 20: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

20

Заполните пропуски:

Выполнение оператора выбора происходит так:

1. ;

2.

;

3.

.

Пример. По заданному значению вывести соответствующую оценку.

var

n: integer;

begin

writeln('Введите количество баллов');

readln(n);

case n of

0..2: writeln(‘неудовлетворительно’);

3: writeln(‘удовлетворительно’);

;

;

end;

end.

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

оператора case:

var

;

begin

;

;

Page 21: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

21

case of

;

;

;

;

end;

end.

Page 22: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

22

Цикл с параметром.

Рассмотрим следующую простую задачу: требуется вычислить сумму

целых чисел от М до N путем прямого суммирования. Здесь M и N — целые

числа.

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

циклом с параметром, или цикл-для. Здесь целая переменная i

последовательно принимает значения в диапазоне от М до N. При каждом

значении i выполняется тело цикла. После последнего выполнения цикла при

I = N происходит выход из цикла на продолжение алгоритма. Цикл выполняется

хотя бы один раз, если M ≤ N, и не

выполняется ни разу при М > N.

Program Summering;

Var i, M, N, Summa: Integer;

Begin

Write('M=');

ReadLn(M);

Write('N=');

ReadLn(N);

Summa:=0;

For i:=M To N Do

Summa:=Summa+i;

WriteLn('Сумма равна', Summa)

End.

В программе используется оператор цикла For, синтаксическая диаграмма

которого представлена:

Page 23: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

23

Выполнение оператора For в происходит по следующей схеме:

1.

2.

3.

4.

Как известно, результат суммирования целых чисел не зависит от порядка

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

и в обратном порядке, т.е. от N до М (N ≥ М). Для этого можно использовать

второй вариант оператора цикла For:

Summa:=0;

For i:=N DownTo M Do

Summa:=Summa+i;

Слово DownTo буквально можно перевести как «вниз до». В таком случае

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

параметр изменяет свое значение на предыдущее. Тогда ясно, что цикл не

выполняется ни разу, если N < М.

Page 24: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

24

Работая с оператором For, учитывайте следующие правила:

• параметр цикла не может иметь тип Real;

• в теле цикла нельзя изменять переменную «параметр цикла»;

• при выходе из цикла значение переменной-параметра является

неопределенным.

В следующем примере в качестве параметра цикла For используется

символьная переменная.

Пример 2. Требуется получить на экране десятичные коды букв латинского

алфавита.

For С : = ' а ' То ' z ' Do

Write(С, '-' , Ord(C));

Здесь переменная с имеет тип Char.

Page 25: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

25

Оператор WHILE

Рассмотрим синтаксическую диаграмму оператора цикл- пока, или цикл с

предусловием:

Сначала вычисляется

.

Здесь <Оператор> может быть как простым, так и составным.

Пример 1. В следующем фрагменте программы на Паскале вычисляется

сумма конечного числа членов гармонического ряда:

Суммирование прекращается, когда очередное слагаемое становится

меньше е или целая переменная достигает значения Maxint.

S:=0;

I : = 1 ;

While (1/I>=Eps) And (I<MaxInt) Do

Begin

S:=S+1/I;

I:=I+1

End;

Page 26: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

26

Одномерные массивы

Массив – структурированный тип данных, образованный из

одного и того же типа.

В массивах целая группа чисел обозначается одним именем (чаще всего

буквой), а для обращения к каждому отдельному числу данной

последовательности используют различные (номера

элементов). В математике это может выглядеть, например, так:

nаааа ,...,,, 321

Одномерный массив можно представить в виде таблицы:

1 3 5 7 14 8

Массив а состоит из элементов: .

Массивы в среде Pascal объявляются следующим образом в разделе

описания переменных:

Var <идентификатор>: Array*<тип индекса>+ Of <тип элементов>;

В качестве индекса употребляется интервальный тип, например:

Var T: Array[1..12] Of Real;

то есть последовательные элементы этого массива располагаются

следующим образом: a*1], a[2], a*3+, … , a[12].

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

Var : Array[ ] Of ;

Var : Array[ ] Of ;

массива называется его размерностью.

a[1] a[4]

Page 27: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

27

Чаще всего массивы обрабатываются в цикле for. Так, для того, чтобы

считать с клавиатуры массив из 10 элементов, следует написать следующий

цикл:

for i:=1 to 10 do read(a[i]);

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

между элементами необходимо вставлять разделитель:

for i:=1 to 10 do write(a*i+, ‘ ’);

Пример 1. Заполнить массив чисел так, чтобы значения элементов

совпадали с их индексами.

var

: ; //количество элементов массива

: array [ ] of ; //массив

begin

;

;

for to do

;

end.

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

встроенного в язык программирования так называемого датчика случайных

чисел. Для этого используется функция random и процедура randomize.

Процедура randomize предназначена для задания первого значения в

данной последовательности.

Для получения целых случайных чисел из диапазона [0, n-1] используется

вызов функции random с параметром n: random(n).

Пример 2. Заполнить случайным образом целочисленный массив М,

состоящий из шести элементов от 0 до 9 включительно:

randomize;

Page 28: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

28

for i:=1 to 10 do М[i]:= random(10);

Пример 3. Циклически сдвинуть элементы массива на одну позицию

влево, а первый элемент поставить на последнее место.

var

, : ;

: array [ ] of ; //массив

: ;

begin

;

;

randomize;

for to do ;

;

for to do ;

;

for to do ;

end.

Пример 4. Циклически сдвинуть элементы массива на одну позицию

вправо, а первый элемент поставить на последнее место.

var

, : ;

: array [ ] of ; //массив

: ;

begin

;

;

for to do ;

;

for do ;

;

For to do ;

end.

Page 29: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

29

Двухмерные массивы (матрицы)

Массив – структурированный тип данных, образованный из

одного и того же типа.

Двухмерный массив можно представить в виде таблицы:

1 3 5 7 14

2 0 4 3 3

Массив R состоит из элементов: .

Если количество строк равно количеству столбцов массив называется

, в противном случае – .

Двухмерные массивы в среде Pascal объявляются следующим образом в

разделе описания переменных:

Var <идентификатор>: Array*<тип индекса>+ Of <тип элементов>;

В качестве индекса употребляется интервальный тип, например:

Var Н: Array[1..12, 1..4] Of Integer;

Приведите свои примеры задания двухмерного массива:

Var : Array[ ] Of ;

Var : Array[ ] Of ;

Как и одномерные массивы, матрицы обрабатываются в цикле for, но

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

элементов матрицы с клавиатуры:

for i:=1 to 5 do

begin

for j:=1 to 10 do

R[1,1]

R[2,4]

Page 30: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

30

begin

read(a[i, j]) ;

end;

readln;

end;

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

между элементами необходимо вставлять разделитель, а каждую новую строку

переносить:

for i:=1 to 5 do

begin

for j:=1 to 10 do

begin

write(a*i, j+, ’ ’) ;

end;

writeln;

end;

Пример 1. Дана матрица целых чисел размером 3х5. Вычислить сумму

элементов матрицы.

var

m, n, i, j, s: integer;

a: array[ ] of ;

begin

s:=0;

writeln(‘введите значения элементов матрицы: ');

for to do //ввод матрицы с клавиатуры

for to do ;

for to do //подсчет суммы элементов

for to do ;

writeln(s);

end.

Пример 2. Сформировать квадратную матрицу следующего вида:

Page 31: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

31

var

n: integer;

a : array [ ] of ;

i,j: integer;

begin

writeln('введите размерность матрицы:');

read(n);

for to do begin

for to do begin

;

;

;

end;

;

end;

еnd.

Page 32: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

32

Задача нахождения максимума и минимума в массиве

Решим задачу поиска наибольшего элемента в таблице А из N

вещественных чисел. Найдем максимум и индекс этого элемента.

var

a:array[1..30] of real;

max: real;

j,i,n: integer;

begin

write('размерность массива =');

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do write(a[i], ' ');

max:=a[1]; //максимальным элементом считаем первый

j:=1; //запоминаем значение индекса первого

элемента

//сравниваем максимальный с очередным элементом массива

for i:=2 to n do if max<a[i] then

begin

//найдя элемент с большим значением запоминаем его и индекс

max:=a[i];

j:=i;

end;

writeln('Максимум=', max );

writeln('Индекс максимума =', j );

end.

Алгоритм поиска максимума:

1. . .

2. . .

Page 33: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

33

3. . .

4. . .

Пример 1. Найти минимум главной диагонали квадратной матрицы.

var a:array[ ] of real;

min: real;

j,i,n,k: integer;

begin

Write('Размерность матрицы = ');

;

for to do

for to do ;

;

;

for to do if then begin

;

;

end;

writeln('Минимум главной диагонали=', min );

end.

Page 34: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

34

Рекурсия.

Введем понятие рекуррентной последовательности: пусть известно k чисел

а1 ..., ак. Эти числа являются первыми числами числовой последовательности.

Следующие элементы данной последовательности вычисляются так:

ак+1 = F{a1 ..., ак); ак+2 = F(a2, ..., ак+1); ak+i= F(a3, ..., ак+2); ...

Здесь F— функция от k аргументов. Формула вида:

ai = F(ai-1, ai-2, … , ai-k)

называется . Величина k

называется .

Другими словами, можно сказать, что рекуррентная последовательность

— это

.

Примерами рекуррентных последовательностей являются арифметическая

(1) и геометрическая (2) прогрессии:

a1 = 1, а2=3, а3=5, а4=7, a5 = 9, (1)

а1 = 1, а2 = 2, a3 = 4, а4 = 8, а5 = 16, (2)

Рекуррентная формула для указанной арифметической прогрессии:

аi = ai-1 + 2.

Рекуррентная формула для данной геометрической прогрессии:

ai= .

Глубина рекурсии в обоих случаях равна единице (такую зависимость еще

называют одношаговой рекурсией). В целом рекуррентная последовательность

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

Page 35: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

35

это можно объединить в одну ветвящуюся формулу. Для арифметической

прогрессии:

.1,2

,1,1

1 iеслиa

iеслиa

i

i

Для геометрической прогрессии:

Следующая числовая последовательность известна в математике под

названием чисел Фибоначчи:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

Начиная с третьего элемента каждое число равно сумме значений двух

предыдущих, т.е. это рекуррентная последовательность с глубиной равной 2

(двухшаговая рекурсия). Опишем ее в ветвящейся форме:

.2,

2,1,1

21 iеслиff

iiеслиa

ii

i

Введение представления о рекуррентных последовательностях позволяет

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

факториал целого числа n! можно рассматривать как значение n-го элемента

следующего ряда чисел:

a0 = 1, а1 = 1!, а2 = 2!, a3 = 3!, а4 = 4!, ...

Рекуррентное описание такой последовательности выглядит следующим

образом:

.0,

,0,1

1 iеслиia

iеслиa

i

i

Пример 1. Вычислить n-й элемент арифметической прогрессии (1).

Var N, I: 0 ... Maxint;

A: Real;

Begin

Write('N = ');

Readln (N) ;

Page 36: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

36

A: = 1;

For I: = 2 to N do А:=А+2;

Writeln ('A(', N:1, ') = ', A)

End.

Рекуррентная формула ai= ai-1 + 2 перешла в оператор А:= А + 2.

Посмотрите на описание арифметической прогрессии в форме

рекуррентной последовательности. Из него непосредственно вытекает способ

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

Сделаем это для общего случая, определив арифметическую прогрессию с

первым членом а0 и разностью d:

.1,

,1,

1

0

iеслиda

iеслиaa

i

i

Соответствующая подпрограмма-функция выглядит так:

Function Progres(А0, D: Real; i: Integer): Real;

Begin

If i=1 Then Progres:=A0

Else Progres:=Progres(А0, D,i-1) + D

End;

Пример 2. Вывести на экран первые 20 чисел Фибоначчи.

Var К: integer;

Function Fibon(N: Integer): Integer;

Begin

If (N=1) Or (N=2) Then Fibon:=1

Else Fibon:=Fibon(N-1)+Fibon(N-2)

End;

Begin

For K:=1 To 20 do WriteLn(Fibon(K))

End.

Page 37: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

37

Требования к оформлению программ на языке PASCAL.

1. Соглашения по идентификаторам

1.1 Подбор идентификаторов

1.1.1 Все идентификаторы должны выбираться из соображений читаемости и

максимальной семантической

нагрузки.

Например:

const

Eps = 0.0001; { точность }

var

Sum : Integer;{ сумма }

Message: String; { сообщение }

Неудачными можно считать идентификаторы:

const

UU = 0.0001; { точность }

var

Kk : Integer;{ сумма }

Zz : String; { сообщение }

1.1.2. Идентификаторы рекомендуется подбирать из слов английского языка.

Например:

1) procedure Beep(Hertz, MSec: Word);

{ выдает звуковой сигнал заданной частоты и длительности }

2) function ExistFile(FName: String): Boolean;

{ выдает True, если файл с именем FName существует }

3) var

Done: Boolean; { признак окончания работы с программой }

Width, Height: Real; { размеры изделия (ширина, высота) }

Не очень удачными можно считать идентификаторы:

1) procedure Zvuk(Chast, Dlit: Word);

{ выдает звуковой сигнал заданной частоты и длительности }

2) function EstFile(Im: String): Boolean;

{ выдает True, если файл с именем Im существует }

3) var

Konec: Boolean; { признак окончания работы с программой }

Shirina, Vysota: Real; { размеры изделия (ширина, высота) }

Page 38: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

38

1.2 Написание идентификаторов

1.2.1 Зарезервированные слова языка Turbo Pascal писать только маленькими

буквами.

Например:

type, var, const; procedure, function; begin, end; if, then, else;

repeat, until; case; while; and, not, or; unit, uses, interface, implementation.

1.2.2 В любых идентификаторах каждое слово, входящее в идентификатор,

писать, начиная с большой

буквы, остальные буквы -- маленькие. В этом смысле символ подчеркивания

"_" между словами

идентификатора можно считать излишним.

Например:

1) var

NextX, LastX: Real; { следующая и предыдущая итерация }

BeepOnError: Boolean; { подавать ли звуковой сигнал при

неправильном вводе пользователя? }

2) function GraphErrorMsg(ErrCode: Word): String;

{ стандартная функция модуля Graph; выдает описание ошибки

использования графики по ее коду }

3) begin

Write('Введите целое число, большее 10 ==>_ ');

ReadLn(Num);

if Num > 10 then WriteLn('OK');

end. 4) var

FileName: String;{ а не File_Name }

type

ByteArray = array [0..65534] of Byte; { а не Array_Of_Byte }

1.2.3 Рекомендуется идентификаторы, состоящие из одной буквы, писать

большой буквой, если они

не являются счетчиками циклов.

Например:

1) A := A + B;

B := A - B;

A := A - B;

2) procedure DeleteNode(var L: List; I: Word);

{ удалить звено c номером I из списка L }

3) for i := 1 to N do

Page 39: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

39

for j := 1 to N do

A[i, j] := (i + j) / 2;

2. Соглашения по самодокументируемости программ

2.1 Комментарии

2.1.1 Комментарии в теле программы следует писать на русском языке и по

существу так, чтобы программист,

не участвовавший в разработке программы (но имеющий опыт работы на языке

Turbo Pascal), мог без

особого труда разобраться в логике программы, и, при необходимости,

сопровождать данный программный

продукт.

2.1.2 Рекомендуется комментарии программы писать внутри символов { и }, а (*

и *) использовать при отладке

программы как "заглушки" участков программного кода.

2.2 Спецификация пользовательской процедуры или функции

Для каждой пользовательской процедуры или функции должна быть описана в

виде комментария

спецификация, содержащая следующую информацию:

а) назначение процедуры или функции;

б) описание семантики параметров-значений (параметров, передаваемых по

значению), если она неочевидна;

в) описание семантики параметров-переменных (параметров, передаваемых по

ссылке), если она неочевидна.

г) для функции: описание семантики возвращаемого значения, если она

неочевидна.

Например:

1) семантика параметров и возвращаемого значения очевидна

function IsLeapYear(Y: Word): Boolean;

{ возвращает True, если год Y -- високосный }

2) семантика параметров очевидна, семантика возвращаемого значения

неочевидна

function DayOfWeek(D, M, Y: Word): Byte;

{ Возвращает день недели даты D/M/Y;

год Y должен быть в отрезке 1582..4902;

результат: ВСК = 0, ПНД = 1, ВТР = 2, ... СБТ = 6 }

3) семантика параметров и возвращаемого значения неочевидна

const

MaxN = 10;

Page 40: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

40

type

Matrix = array [1..MaxN, 1..MaxN] of Real;

Vector = array [1..MaxN] of Real;

procedure Gauss(A: Matrix; B: Vector; Eps: Real;

var X: Vector;

var HasSolution: Boolean;

var NumOfRoots: Integer;

var Det: Real;

var AForReverse: Matrix; var BForReverse: Vector);

{ Решение системы линейных алгебраических уравнений

методом Гаусса.

Входные данные:

A -- матрица коэффициентов системы;

B -- столбец свободных членов системы;

Eps -- точность вычислений.

Выходные данные:

X -- вектор решения;

HasSolution -- флаг, устанавливаемый в True, если решение

системы существует, и в False во всех

остальных случаях;

NumOfRoots -- число корней в решении системы, может

принимать значения:

0 -- если решение системы не существует,

MaxN -- если решение системы существует и

единственно,

MaxInt -- если существует бесконечное

множество решений;

Det -- значение определителя матрицы A;

AForReverse -- нижняя треугольная матрица, полученная из A в

в результате выполнения прямого хода алгоритма

Гаусса;

BForReverse -- столбец свободных членов, полученный из B в

в результате выполнения прямого хода алгоритма

Гаусса. }

Замечание:

Если процедура (функция) реализует какой-либо вычислительный метод

(например: нахождение площади

фигуры методом трапеций, поиск минимума функции методом Ньютона и т.п.),

рекомендуется в теле

процедуры (функции) поместить комментарий с кратким описанием метода,

либо ссылку на источник, где

описан метод.

Page 41: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

41

2.3 Спецификация пользовательского программного файла или модуля

Программный файл или модуль (unit) должен начинаться со спецификации в

виде комментария, содержащего

следующую информацию:

а) идентификация (имя) файла;

б) фамилия автора;

в) дата написания файла;

г) версия языка Turbo Pascal и -- если требуется -- замечания по компиляции

программы (модуля) в других

версиях языка;

д) назначение программы (модуля);

Например:

1) { PRIMES.PAS

--------------------------

(c)оздал: Иванов И.И.

дата : 01/09/93

для : Turbo Pascal 6.0

-------------------------------------------------------

Подсчет количества простых чисел в промежутке [1..200]. }

2) { MYMENU.PAS

--------------------------

(c)оздал: Иванов И.И.

дата : 01/09/93

для : Turbo Pascal 6.0

-------------------------------------------------------

Модуль экспортирует процедуры и функции, поддерживающие

горизонтальные и вертикальные меню. }

Замечание:

В программном файле после заголовка Program <имя программы>; (в файле с

пользовательским

модулем -- после заголовка unit <имя модуля>;) рекомендуется поместить

комментарий с указаниями

по запуску программы и работе с ней (указаниями по использованию модуля

другими программистами) или

ссылку на источник, который использован при составлении программы

(модуля).

Page 42: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

42

3. Соглашения по читаемости программ

3.1 Лесенка

"Лесенка" должна отражать структурную вложенность языковых конструкций.

Рекомендуется отступ не менее

2-х и не более 8-и пробелов. Принятого отступа нужно придерживаться во всем

тексте программы.

Правила написания конструкции begin ... end и других:

а1) if <условие> then

begin

<операторы>

end; а2) if <условие> then <оператор>;

а3) if <условие> then

<оператор>;

а4) if <условие> then

begin

<операторы>

end

else

begin

<операторы>

end; б1) while <условие> do

begin

<операторы>

end; б2) while <условие> do <оператор>;

б3) while <условие> do

<оператор>;

в1) for <счетчик> := <начальное значение> to <конечное значение> do

begin

<операторы>

end;

в2) for <счетчик> := <нач/знач> to <кон/знач> do <оператор>;

в3) for <счетчик> := <нач/знач> to <кон/знач> do

<оператор>;

г1) case <выражение> of

<выражение>: <оператор>;

.......

end; г2) case <выражение> of

Page 43: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

43

<выражение>: <оператор>;

.......

else

<оператор>;

end; г3) case <выражение> of

<выражение>:

begin

<операторы>

end;

.......

end; г4) case <выражение> of

<выражение>: begin

<операторы>

end;

.......

end; Например:

1) function Sign(X: Real): Integer;

{ выдает знак числа X }

begin

if X > 0 then Sign := 1

else

if X < 0 then Sign := -1

else

Sign := 0;

end; 2) procedure Equation(A, B, C: Real; var X1, X2: Real; var Num: Byte);

{ нахождение действительных корней квадратного уравнения;

A, B, C -- коэффициенты

X1, X2 -- корни (если действительного решения нет, то

полагаются равными 0);

Num -- число корней (0, 1, или 2) }

var

D: Real;

begin

D := Sqr(B) - 4 * A * C;

if D < 0 then

begin

Num := 0;

X1 := 0;

X2 := 0;

end

Page 44: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

44

else

begin

X1 := (- B + Sqrt(D)) / (2 * A);

X2 := (- B - Sqrt(D)) / (2 * A);

if X1 = X2 then Num := 1

else Num := 2;

end;

end;

3.2 Длина строк программного текста

Длина строк программы не должна превышать ширины экрана (80 символов).

3.3 Прочие рекомендации

3.3.1 Рекомендуется операнды бинарных операций (+, := и т.п.) отделять от

знака операции одним пробелом " ".

Например:

Sum := A + B;

3.3.2 Рекомендуется при перечислении идентификаторов после запятой ","

ставить один пробел " ".

Например:

1) WriteLn('Сумма: ', A + B, ';', 'Разность: ', A - B, '.');

2) var

Day, Month, Year: Word;

i, j, k, l, m, n: Integer;

3.3.3 Рекомендуется всегда писать символ-разделитель операторов ";" (сразу же

после оператора).

Например:

1) case Num of

1: WriteLn('один...');

2: WriteLn('два...');

3: WriteLn('три...'); { <-- здесь }

else

WriteLn('много!'); { <-- и здесь }

end; 2) if N < 0 then

begin

WriteLn('Введено неверное значение N, прерываем работу!');

Halt; { <-- здесь }

Page 45: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

45

end;

3.3.4 Рекомендуется после символа-спецификатора типа ":" ставить один

пробел " ".

Например:

1) var

i, j, k: Integer;

2) function SizeOfFile(FName : String) : LongInt;

{ выдает размер файла с именем FName в байтах; если файл не найден,

возвращает -1 }

3.3.5 Рекомендуется 16-ричные числа писать большими буквами.

Например:

1) const

BadDate = $FFFF;

kbEnter = $1D; { код клавиши <Enter> }

3.3.6 Рекомендуется директивы компилятора писать большими буквами, а

условные определения -- так же,

как идентификаторы (см. 1. Соглашения по идентификаторам).

Например:

1) type

{$IFOPT N+}

RealType = Extended;

{$ELSE}

RealType = Real;

{$END}

2) {$DEFINE Protect}

....

{$IFDEF Protect}

WriteLn('Программа защищена от копирования!');

{$ENDIF}

Page 46: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

46

Оглавление Система Pascal ABC .......................................................................................................................................... 2

Редактор Pascal ABC. ........................................................................................................................................ 3

Горячие клавиши ......................................................................................................................................... 3

Окно вывода ................................................................................................................................................. 4

Окно ввода ................................................................................................................................................... 4

Запуск и остановка программы .................................................................................................................. 5

Пошаговое выполнение программы ......................................................................................................... 5

Окно отладки ................................................................................................................................................ 6

Редактор блок-схем FCEditor .......................................................................................................................... 7

СТРУКТУРА ПРОГРАММЫ НА ПАСКАЛЕ .......................................................................................................... 9

Целый тип данных INTEGER .......................................................................................................................... 11

Строковый тип данных STRING ..................................................................................................................... 13

Оператор IF ..................................................................................................................................................... 17

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

Цикл с параметром. ....................................................................................................................................... 22

Оператор WHILE ............................................................................................................................................. 25

Одномерные массивы ................................................................................................................................... 26

Двухмерные массивы (матрицы) ................................................................................................................. 29

Задача нахождения максимума и минимума в массиве ........................................................................... 32

Рекурсия. ........................................................................................................................................................ 34

Требования к оформлению программ на языке PASCAL. .......................................................................... 37

1. Соглашения по идентификаторам ........................................................................................................ 37

1.1 Подбор идентификаторов ............................................................................................................... 37

1.2 Написание идентификаторов ......................................................................................................... 38

2. Соглашения по самодокументируемости программ .......................................................................... 39

2.1 Комментарии ................................................................................................................................... 39

2.2 Спецификация пользовательской процедуры или функции ....................................................... 39

2.3 Спецификация пользовательского программного файла или модуля ....................................... 41

3. Соглашения по читаемости программ ................................................................................................. 42

3.1 Лесенка ............................................................................................................................................. 42

3.2 Длина строк программного текста ................................................................................................. 44

3.3 Прочие рекомендации .................................................................................................................... 44

Page 47: Теоретические основы информатикиsemenov.21204s01.edusite.ru/1/DswMedia/rabochayatetrad-paskal-.pdf · концепции в Pascal ABC сознательно

Рабочая тетрадь по программированию. Паскаль

Турнир по программированию - http://compilers.infoznaika.ru/

47