А.С.

Цветков

Язык программирования PASCAL
Система программирования ABC Pascal

Учебное пособие для 7-го класса

2008-2009 гг.

Введение

2008-2009 учебный год

Справочник по системе ABC Pascal
Редактор
Горячие клавиши
• 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 - перейти к следующему/предыдущему окну редактора
Окно вывода
• Под окном редактора расположено окно вывода. Оно предназначено для вывода данных процедурами
write и writeln, а также для вывода сообщений об ошибках и предупреждений во время работы
программы.
• Окно вывода может быть скрыто. Клавиша F5 и кнопка
показывают/скрывают окно вывода. Для
скрытия окна вывода используется также клавиша Esc.
• Окно вывода обязательно открывается при любом выводе в него.
• Для очистки окна вывода следует нажать комбинацию клавиш Ctrl-Del или кнопку .
Окно ввода
• Окно ввода открывается при выполнении процедур read и readln в ходе работы программы:
• Ввод данных в окно ввода сопровождается эхо-выводом в окно вывода (см. рис). После нажатия
клавиши Enter данные из окна ввода попадают в соответствующие переменные, окно ввода закрывается,
и программа продолжает работать дальше.
Запуск и остановка программы
• Для запуска программы в текущем окне редактора следует нажать клавишу F9 или кнопку панели
инструментов.
• Программа вначале компилируется во внутреннее представление, после чего, если не найдены ошибки,
программа начинает выполняться. При выполнении программы кнопка запуска программы становится
неактивной, кнопка останова программы, наоборот, активной и в строке статуса отображается
информация "Программа выполняется".
• Выполнение программы можно в любой момент прервать нажатием комбинации клавиш Ctrl-F2 или

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

Пошаговое выполнение программы
• Режим пошагового выполнения предназначен для отладки программы. Для выполнения одного шага
(шаг без входа в подпрограмму),
(одной строки) программы следует нажать клавишу F8 или кнопку
(шаг со входом в подпрограмму). Для выполнения программы до
либо клавишу F7 или кнопку
.
данной строки следует установить на нее курсор и нажать клавишу F4 или кнопку
• Прервать программу, находящуюся в режиме пошагового выполнения, можно с помощью комбинации
. Если программа находится в режиме пошагового выполнения, то ее
клавиш Ctrl-F2 или кнопки
можно выполнить до конца, нажав F9.

-2-

Введение

2008-2009 учебный год

Окно отладки
• Окно отладки позволяет просматривать во время пошагового исполнения программы значения
переменных. По умолчанию оно располагается в правом верхнем углу окна редактора и имеет
следующий вид:
• Для добавления переменной или выражения в окно отладки следует нажать комбинацию клавиш CtrlF5 или кнопку . Можно также перетащить из редактора в окно отладки выделенное выражение или
при активном окне отладки нажать клавишу Ins. Допускаются выражения, содержащие функции, в т.ч. и
определенные в программе.
• Окно отладки включается/выключается нажатием комбинации клавиш Ctrl-Shift-W.
• Для удаления строки из окна отладки следует выделить эту строку и нажать клавишу Del или
воспользоваться командой контекстного меню окна отладки.
• Для изменения строки в окне отладки следует дважды щелкнуть на
ней.
• Для очистки окна отладки следует нажать комбинацию клавиш CtrlDel или воспользоваться командой контекстного меню окна отладки.
• Если выражение неверно, его вычисление вызывает ошибку или в
данном контексте недоступны некоторые переменные, то при
выполнении программы в столбце "Значение" появляется сообщение "нельзя вычислить".

Структура программы
Программа на языке Pascal ABC имеет следующий вид:
program имя программы;
раздел подключения модулей
раздел описаний
begin
операторы
end.




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

Идентификаторы и служебные слова
Идентификаторы служат в качестве имен программ, модулей, процедур, функций, типов, переменных и
констант. Идентификатором считается любая последовательность латинских букв или цифр, начинающаяся
с буквы. Буквой считается также символ подчеркивания "_".
Например, a1, _h, b123 - идентификаторы, а 1a, ф2 – нет.
Служебные слова служат для оформления конструкций языка и не могут быть использованы в качестве
имен. Список всех служебных слов языка Pascal ABC приведен ниже:
and array as begin break case class const constructor continue destructor div
do downto else end exit external external sync file finalization for forward
function if in inherited initialization is mod not of or private procedure
program property protected public record repeat set shl shr sizeof string
then to type unit until uses var while with xor

-3-

–4567. Примеры правильных записей чисел: 1. +012.Введение 2008-2009 учебный год Занятие №1 Целочисленные вычисления на языке Pascal Program Prog1. begin write('Введите число '). Целые числа записываются так же. а два числа. Цифрам может предшествовать знак "–" или "+" (последнее обычно не нужно). используемые в арифметических выражениях. Prog1 a. понять. b. Модифицировать программу так. вычитания и т. Оператор – инструкция языка Паскаль. целочисленный тип integer определяет диапазон целых чисел от –2 147 483 648 до +2 147 483 647. readln(a). Операторы можно объединить в составной оператор. -4- . Например.. заключив их в операторные скобки begin .. которые может принимать объект (чаще всего это переменная) данного типа. Пробелы между знаком и цифрами. end – идентификаторы (имена) различных объектов – переменные целочисленного (integer) типа – целочисленный тип – операторы вывода – оператор ввода – оператор присваивания (переменной b присваивается значение выражения a+1) – операторные скобки Переменная – это величина. writeln readln b:=a+1 begin .п. чтобы она: o вычисляла куб числа o вводила не одно. Операторы отделяются точкой с запятой друг от друга. 123. Переменная всегда должна быть явно описана как принадлежащая какому-либо типу данных.. Кроме множества значений тип данных задает множество допустимых операций. Тип данных – множество значений. как она работает. end. которая может менять свое значение. как и в математике.. в операторе b:=a+1 единица – это непосредственная константа. writeln('Квадрат этого числа = '.b). а также между цифрами недопустимы. в целочисленных выражениях можно применять операции сложения. 003. end. b integer write. b : integer. Задание: • • Набрать и выполнить программу. Например. Непосредственные константы – это числа. и вычисляла сумму их квадратов Термины: a. b:=a*a. var a. Правила записи целых чисел.

к нему прибавляется единица. Оператор присваивания обозначается двумя символами :=. что знак операции умножения * никогда не опускается в отличие от алгебры. Неправильные примеры: a+1:=a. Вычисление функций (см. Уровень вложенности скобок не ограничен. Вначале берется старое значение переменной. между которыми нет пробела. Примеры: a:=2. чем сложение и вычитание. Важно следить. Существует два способа задать переменной значение: оператор присваивания и оператор ввода (read или readln). знаков операций. a:=b*2+1. этот оператор увеличивает значение переменной a на единицу. используемые в правой части оператора присваивания были определены к моменту вычисления оператора. которые употребляются в математике. Т.Введение 2008-2009 учебный год Оператор присваивания. Общее правило таково: тип выражения в правой части оператора присваивания должен совпадать с типом переменной в левой части оператора присваивания. обозначаемые ключевыми словами div и mod. скобок и вызовов функций. Арифметическое выражение – целочисленное арифметическое выражение состоит из переменных. остаток от деления нацело: 5 mod 2 = 1 1 Бинарные операции – имеющие два операнда. Согласование типов в операторе присваивания. В остальном операции выполняются слева направо. Слева от знака оператора должна стоять переменная. для которого существуют две операции. чтобы все переменные. a:=2+3.е. констант. далее) выполняется еще раньше. Суть оператора заключается в вычислении выражения и присвоения получившегося значения переменной. В противном случае результат будет непредсказуем. Он не содержит ошибки. если переменная имеет тип integer. 2:=b+3. за исключением деления. Таким образом. Для изменения порядка операций используются круглые скобки. располагающиеся слева и справа от оператора -5- . Операции имеют обычный приоритет: умножение и деление выполняется раньше. Надо запомнить. Очень часто используется оператор вида a:=a+1. то справа должно быть выражение. а справа – выражение. и результат записывается в опять в переменную a. Бинарные1 арифметические операции над типом integer Операция сложение вычитание умножение деление нацело остаток от деления Обозначение + – * div mod Пример a+3 c–d 2*3 a div 2 a mod 2 Деление на цело: 5 div 2 = 2. Правила построения выражения очень похожи те. значение которого есть также целое число.

Операторы могут иметь произвольное число аргументов. Несмотря на простоту такого интерфейса3. Консольный ввод/вывод – исторически самый «древний» способ диалога с компьютером. Пример: write('Текстовая строка'). При достижении ввода или вывода последней строки все строки скроллируются на одну позицию вверх. подключенная к компьютеру. произойдет ошибка. разделенных запятыми.. Целочисленные типы языка ABC Pascal Тип integer byte word Размер в байтах 4 1 2 Диапазон -2147483648 … 2147483647 0 . В Windows-системах консоль обычно представляет текстовое окно шириной 80 символов. Компьютер отвечал. 2 Унарная операция – имеющая только один операнд. Операторы вывода– write и writeln выводят заданную информацию на консоль. а это число больше верхней границы типа word. Например. в выражении –2*(–a–b) минус перед переменной a является унарной операцией. завершая команду нажатием клавиши перевода строки (Enter). а первая строка исчезает. заставляя консоль печатать цифры и символы. 255 0 .. У первых ЭВМ консоль – это электрическая пишущая машинка. Например. если переменная a имеет тип word. так как значение выражения является 65536. строки символов) и переменные стандартных типов (в т. является допустимым. 4 В системе ABC Pascal отдельное окно консоли появляется только при использовании модуля CRT. Оператор writeln после этого еще и переводит курсор на следующую строку (при достижении последней строки осуществляется скроллинг). чтобы значение целочисленного выражения не вышло за допустимый диапазон целого числа. то в операторе a:=512*128. 3 -6- .b). writeln(a. а высотой 25 символов4. и целочисленные).ч. Отметим. что если бы переменная a описана как integer. печатающая на рулонной бумаге (как факс). а минус перед двойкой может рассматриваться и как унарная операция и как запись отрицательной константы.Введение 2008-2009 учебный год Пример: Выражение в математической записи: (a + 2b)(a − b) x+ y 2 Выражение на Паскале (в целых числах): (a+2*b)*(a–b) (x+y) div 2 Кроме бинарных операций в Паскале используются унарные2 операции – и + (в последнем особого смысла нет). Без особой необходимости не следует использовать типы byte и word. Интерфейс – в данном случае способ общения человека с компьютером. 65 535 При выполнении оператора присваивания следует следить за тем. то оператор a:=512*128. он весьма эффективен и до сих пор используется в самых современных операционных системах. Оператор мог вводить информацию в компьютер. В качестве аргументов могут выступать буквальные константы (например.

ожидая ввода данных от пользователя. readln(n). Встроенные функции – в языке Pascal предусмотрено большое число различных встроенных функций. Оператор интерпретирует введенные символы. Необходимо помнить о диапазоне возвращаемого значения. Функция sqr(n) abs(n) pred(n) succ(n) odd(n) even(n) chr(n) random(n) Описание Возвращает квадрат аргумента. Если это не удается (например. аргумент(ы) функции всегда заключаются в скобки. Функции можно применять в выражениях. Возвращает TRUE. Возвращает случайное число в диапазоне от 0 до n-1. Возвращает модуль (абсолютное значение) числа. на единицу меньшее аргумента. Ниже приведен список арифметических функций. По оператору readln программа приостанавливает свою работу. Оператор read при чтении данных с консоли используется крайне редко. на единицу большее аргумента. Обратите внимание на пробел перед вторым апострофом. иначе – FALSE Возвращает TRUE. Пример: readln(a. если аргумент четный. вместо целого числа введены буквы). разделяя их пробелами (или Enter) и нажимает Enter.Введение 2008-2009 учебный год Оператор ввода – read. Для того чтобы пользователь знал что «хочет» ввести программа. имеющих целочисленный аргумент . полезно перед оператором readln выводить подсказку с помощью оператора write или writeln. чтобы ввод пользователя отделялся от подсказки. readln. в основном используется оператор readln. например: x:=x-abs(x). Пользователь набирает желаемые значения переменных. если аргумент нечетный. программа аварийно завершает свою работу.b). Возвращает значение. Функции требуют аргументы определенных типов (например. -7- . Возвращает значение. иначе – FALSE Возвращает символ (тип char) с кодом n. целого типа) и возвращают значение также определенного типа (может не совпадать с типом аргумента). Он сделан для того. Недопустимо: readln(a+3). Например: write('Введите количество учеников в классе '). переводя их во внутреннее (машинное) представление соответствующих переменных. Параметры оператора – только переменные и только стандартных типов. возможно использование оператора вообще без аргументов для создания ситуации ожидания нажатия клавиши Enter.

которая решает следующую задачу Оплата Интернета в школе состоит из двух частей: 100 долларов в месяц за доступ и 5 долларов в месяц за поддержку школьного сайта. -8- . Напишите программу. Вычислить (в уме) значение выражения (a+1)*(–a). вычитая из него удвоенное значение введенного числа.Введение 2008-2009 учебный год Задание №1 1. Программа вводит два числа. (a+b)(a–b) (1+x)2 15 x y 2x·2y 2. и вычисляет его квадрат. функцию abs) 4. которая позволяла бы вводить отдельно количество оплачиваемых месяцев для доступа и поддержки и выводила бы сумму оплаты. если x=2 и если x=4 2*4 mod 3 2*(4 mod 3) –a*(–1). Платеж можно делать независимо за любое количество месяцев за доступ и за поддержку сайта. если a=10 (x+1) div (x–1). считая все переменные и действия целочисленными. Напишите программу. выводит сумму их модулей (см. если a=431 3. Записать следующие выражения на языке Pascal. Напишите и выполните программу на компьютере • • • Программа вводит одно число. выводит сумму квадратов этих чисел минус их произведение. Программа вводит два числа.

п. { Установить синий цвет фона } GotoXY(36. Рассмотрим использование подпрограмм этой библиотеки на примере создания заставки программы. TextColor(цвет) – устанавливает текущий цвет букв. { Подключить модуль CRT } begin ClrScr. ReadKey – ожидание нажатия на любую клавишу (далее мы рассмотрим другое применение этой подпрограммы). Uses CRT. { Ожидать нажатия любой клавиши } end. устанавливать курсор в желаемую позицию. осуществляемый последующим оператором write или writeln будет начинаться с этой позиции. TextBackgroud(цвет) – устанавливает текущий цвет фона. Она называется CRT5. Наберите текст этой программы и выполните её.) в текстовом окне не допустимы. Program Card. вывод. В каждой позиции может быть один символ (буква. цвет фона.13). GotoXY(колонка. Подключение библиотеки к программе осуществляется предложением Uses: Program Card. От английского Cathode Ray Tube – Электронно-лучевая трубка (ЭЛЧ) -9- . { Вывести текст } ReadKey. закрашивая его текущим цветом фона. который будет использоваться операторами write и writeln. затем begin и тело программы. Clear Screen). специальные знаки). Разберем действия отдельных процедур: • • • • • 5 ClrScr – очищает экран или текущее окно (от англ. строка) – переводит курсор в указанную позицию. окружности и т. Эта библиотека содержит набор подпрограмм. позволяющих задавать цвет выводимых букв. { Установить белый цвет букв } TextBackGround(Blue). { Это предложение вставляется сразу после Program } Далее могут идти описания переменных. { Поставить курсор в 36 колонку. { Очистить экран } TextColor(White). По умолчанию используется светло-серый цвет букв. Обычно экран в текстовом режиме содержит 80 колонок и 25 строк. 13 строку } write(' Привет '). цифра.Тема №2 – Использование модуля CRT 2008-2009 учебный год Занятие №2 Использование модуля CRT Язык Паскаль имеет специальную библиотеку работы с экраном в текстовом режиме. что окно содержит 25 строк по 80 колонок. установленным процедурой TextBackGround. который будет исполь– зоваться операторами write и writeln. В текстовом режиме считается. Модуль CRT эмулирует текстовый терминал первых персональных компьютеров. Uses CRT. Графические объекты (прямые. По умолчанию – черный.

Используйте разные цвета. PlaySound(n) – начинает проигрывание звука с описателем n.10 - .Тема №2 – Использование модуля CRT 2008-2009 учебный год В качестве цвета может использоваться число от 0 до 15. WhereX. В случае задания окна.WhereY+2). RewindSound(n) – "перематывает" звук с описателем n на начало. Задание №2*: Модуль Sounds содержит процедуры и функции для работы со звуком: n:=LoadSound(fname) – загружает звук из файла с именем fname в оперативную память и возвращает описатель звука в целую переменную n (звуковой файл должен может иметь любой формат). год рождения. процедура ClrScr будет очищать только это окно. end. Используйте его возможности для «улучшения» программы «Визитная карточка» Пример использования модуля sound: Program Player. адрес. begin n:=LoadSound('C:\WINDOWS\MEDIA\ringin. DestroySound(n) – удаляет звук с описателем n из оперативной памяти. фамилию. но лучше пользоваться определенными в модуле CRT константами: Таблица цветов Black Blue Green Cyan Red Magenta Brown LightGray Черный Синий Зеленый Небесно голубой Красный Малиновый Коричневый Светло-серый DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White Темно-серый Светло-синий Светло-зеленый Ярко-голубой Светло-красный Светло-малиновый Желтый Белый Рассмотрим еще несколько полезных подпрограмм. телефон. // укажите расположение файла PlaySound(n). Sleep(SoundLength(n)). позволяющие узнать координаты местонахождения курсора. • • Window(x1. которая выводила бы на экран хорошо оформленные ваши личные данные: имя.x2. все операторы write и writeln выводят только в него.wav'). DestroySound(n). WhereY – две функции. описатель звука при этом становится недействительным. Пример использования: GotoXY(WhereX+10. Задание №2: Напишите программу «Визитная карточка». хорошо скомпонуйте.y1. var n: integer. SoundLength(n) – возвращает длительность звука с описателем n в миллисекундах.y2) – создание окна вывода. StopSound(n) – останавливает проигрывание звука с описателем n. CRT. . Uses Sounds.

Процедура SetWindowSize устанавливает размер графического окна 256×256 пикселей.11 - . Green. WindowWidth. Процедура Line рисует линию из точки. Процедура SetPenColor определяет цвет рисования линий. заданный своими Red. 0) end. если вы поменяете размер окна в процедуре SetWindowSize. Для ее модключения после заголовка программы необходимо написать Uses GraphABC. в точку. Blue компонентами. Функция RGB возвращает цвет.256). WindowHeight) Line(0.255)).0. Line(0. Они подразделяются на несколько групп: • • • • Графические примитивы Действия с цветом Действия с точками и прямоугольниками Действия с пером • • • • Действия с кистью Действия со шрифтом Действия с рисунками Действия с графическим окном Рассмотрим сразу пример: Program Gr01.Тема №3. Оконные координаты • • Координата x растет слева на право от 0 до значения WindowWidth Координата y растет сверху вниз от 0 до значения WindowHeight 0 WindowWidth 0 WindowHeigth . Uses GraphABC. Графика в системе ABC Pascal 2008-2009 учебный год Занятие №3 Графический модуль GraphABC Система ABC Pascal обладает великолепной графической библиотекой. типы. SetPenColor(RGB(0. WindowWidth.0. заданной первой парой координат. begin SetWindowSize(256. процедуры и функции для рисования в графическом окне.WindowHeight. то линии все равно будут проводиться из угла в угол). Функции WindowWidth и WindowHeight возвращают текущие значения ширины и высоты графического окна (следовательно. Модуль GraphABC содержит константы. заданную второй парой координат.

12 - ломаных. прямоугольников. задаваемый параметром color. Пример: Program Gr02. соответствующее интенсивности зеленой компоненты • Blue – число от 0 до 255. Есть несколько предопределенных цветов: clBlack – черный clPurple – фиолетовый clWhite – белый clMaroon – темно-красный clRed – красный clNavy – темно-синий clGreen – зеленый clBrown – коричневый clBlue – синий clSkyBlue – голубой clYellow – желтый clCream – кремовый clAqua – бирюзовый clOlive – оливковый clFuchsia – сиреневый clTeal – сине-зеленый clGray – серый clLime – ярко-зеленый clLightGray – светло-серый clMoneyGreen – цвет зеленых денег clDarkGray – темно-серый Задание стиля и цвета пера • • • SetPenColor(цвет) – устанавливает цвет пера. эллипсов. Var i : integer. . SetPenWidth(ширина) – устанавливает ширину пера. begin SetWindowSize(512. Uses GraphABC. в графических библиотеках используется именно такое трехкомпонентное представление цвета. дуг и т. Circle(256. . которое может использоваться везде в графической библиотеке. SetPenStyle(psDash). рисования psDashDot psDashDotDot линий. пунктир и т.512).Blue) Здесь • Red – число от 0 до 255.).Тема №3.п.Green. Графика в системе ABC Pascal 2008-2009 учебный год Задание цвета Как известно восприятие цвета у человека трехцветное. соответствующее интенсивности красной компоненты • Green – число от 0 до 255. SetPenStyle(стиль) – устанавливает стиль пера (сплошной. SetBrushStyle(bsClear). возможные значения указаны в таблице (стиль применим только к ширине пера 1 пиксел) psSolid psClear psDash psDot Текущее перо используется для окружностей. Основываясь на этом.256. где требуется указание цвета. Цвет задается с помощью функции rgb(Red. соответствующее интенсивности синей компоненты Функция формирует целое число (integer).WindowHeight div 2). end.п.

Возможные стили кисти: bsSolid bsClear bsCross bsDiagCross bsHorizontal bsBDiagonal bsVertical bsFDiagonal Текущей кистью закрашиваются все замкнутые фигуры. выбранный для кисти. Circle(x. и т.y2. ограниченную дугой окружности и отрезком. задаются в градусах и отсчитываются против часовой стрелки).a2) – рисует фигуру.w.y2) – рисует эллипс. Var i. Pie(x. а w и h – ширину и высоту эллипса.y2).y1. используемого для скругления краев.y2) – рисует прямоугольник. хранящийся в файле. при этом текущий цвет кисти при закраске игнорируется. Rectangle(10.13 - .a1. что и в процедуре Arc). SetBrushStyle(bsDiagCross).r.y) и радиусом r.0.WindowWidth-10. begin SetWindowSize(512. SetBrushColor(rgb(128.WindowHeight-10). (x1. заданный координатами противоположных вершин (x1. Uses GraphABC.r) – рисует окружность с центром в точке (x.y. используйте SetBrushColor(bsClear). автомобиль.x2.x2.a2) – рисует сектор окружности.a1.y1) и (x2.a2) – рисует дугу окружности с центром в точке (x. end.a1. Графика в системе ABC Pascal 2008-2009 учебный год Задание стиля и цвета кисти • • • • SetBrushColor(цвет) – устанавливает цвет кисти SetBrushPicture(имя файла) – устанавливает в качестве образца для закраски кистью образец. Пример: Program Gr03. образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные. Arc(x. RoundRect(x1. Rectangle(x1. использующую не менее трех процедур рисования. SetBrushStyle(стиль) – устанавливает стиль кисти. ограниченный дугой (параметры процедуры имеют тот же смысл.j : integer.y.п. заключенной между двумя лучами. Некоторые графические примитивы6 • • • • • • • • Line(x1.x2. заданный своим описанным прямоугольником с координатами противоположных вершин (x1. раздел Стандартные модули – Модуль GraphABC.y2). Chord(x.y1) и (x2.) 6 Дополнительную информацию можно получить в справочной системе ABC Pascal. что и в процедуре Arc). .512).y2) – рисует отрезок с началом в точке (x1.Тема №3. соединяющим ее концы (параметры процедуры имеют тот же смысл.r.y) и радиусом r.y2).10. Чтобы нарисовать не закрашенную фигуру.y1.x2. ClearBrushPicture – очищает рисунок-образец.y1.255)).h) – рисует прямоугольник со скругленными краями.1 Задание: Напишите программу. задаваемый параметром bs.r. контур фигур рисуется текущим пером.y. которая рисовала бы несложный рисунок (домик.y1.y.y1) и концом в точке (x2.y2) задают пару противоположных вершин.y1) и (x2. Ellipse(x1.

50).764.25).775.51. // двери Line(250. setBrushColor (ClRed).375.600).10.475.500).550.425.350. end.25).300.395. // верхняя часть автомобиля setBrushColor (Clgreen).475. rectangle (250. Графика в системе ABC Pascal 2008-2009 учебный год Пример решения задания program avto.400.500.750.450.500). RoundRect (25. setBrushColor (Clgreen). Line (550.10). Circle (600. uses graphABC. . rectangle (35.400).250.345). setBrushColor (ClYellow).425).350.345).400). rectangle (405. // корпус rectangle (50.350. setBrushColor (ClLightGray).500.255.10). Circle (600. SetPenStyle (psSolid).500.500). Line(250. // бампер RoundRect (725.425). var i : integer.500.450. колеса setBrushColor (ClBlack). Line (400.10.250. setBrushColor (ClBlack).425. Line (550. // фары rectangle (749. begin SetWindowSize (800.545.50).550. Circle (200. setBrushColor (ClAqua).375. // Circle (200.255. setBrushColor (ClLightGray).Тема №3. SetPenStyle (psClear).14 - . setBrushColor (ClLightGray). // окна rectangle (255.500.250.75.500).351).

Индексу цикла присваивается значение выражения N1. j : integer.15 - .sqr(i):4).. end. Цикл for 2008-2009 учебный год Занятие №4 Цикл for Цикл for используется для повторения фрагментов программы заданное число раз. for i:=N1 to N2 do begin оператор1. отводимых для представления целого числа. определяющее верхнюю границу индекса цикла.. N1 – целочисленное выражение. то при выводе оно слева дополняется необходимым числом пробелов. var i: integer. Пример: Построить таблицу квадратов чисел от 1 до 10. 3. Program Square. N2 должно быть больше или равно N1. Переход к п. Конец цикла. Обратите внимание на указание формата вывода целого числа в операторе writeln. Проверяется условие i<=N2. writeln(i:4. 5. 2. Выполняются операторы тела цикла. 3. Алгоритм выполнения оператора такой: 1. оператор2. иначе к п. Значение индекса цикла увеличивается на единицу (автоматически!).. end. end. или Составной оператор – это группа операторов. 4.. var i. для того чтобы цикл выполнился хоть один раз. . begin for i:=1 to 10 do begin j:=sqr(i). то переход к п. 6. заключенная в операторные скобки begin . или проще: Program Square. Синтаксис оператора: for i:=N1 to N2 do оператор. Если условие истинно. Здесь i – индекс цикла (обязательно переменная целочисленного типа).Тема №4. . N2 – целочисленное выражение.. begin for i:=1 to 10 do writeln(i:4. 2.6. Если число занимает меньшее количество цифр. end.j:4).Число после двоеточия указывает на количество символов. определяющее нижнюю границу индекса цикла. end.

var i : integer. .Random(400)).. 40. end. Program Concentric. Ответьте на вопрос: «Почему используется цикл не for … to. . получаемым с помощью цикла for. Цикл for 2008-2009 учебный год Цикл for … downto Иногда возникает желание выполнить цикл for наоборот. // для цикла for begin SetWindowSize (400.i*10).0. Интересных эффектов можно добиться. end. как эта возможность применяется в следующей программе.200. for i:=20 downto 1 do begin SetBrushColor (RGB(10*i.400). Вот более сложный пример. Задание №5.Random(400). а убывал. а for … downto?» Program Concentric2. var i : integer. begin SetWindowSize (400.0))..16 - . Посмотрите. Circle(200.Тема №4. uses graphABC. end. // для цикла for begin SetWindowSize (400. 200 for i:=1 to 10 do Circle(200. var i : integer. Встроенная функция random(N) возвращает случайное число в диапазоне от 0 до N–1. uses graphABC. Дополните вашу графическую программу узором. Эту возможность реализует следующая конструкция: for i:=N2 to N1 do оператор. Использование цикла for для построения изображений Использование цикла for весьма эффективно при построении изображений.Random(400).200. Здесь подразумевается. uses graphABC. SetPenStyle(psClear). // строятся 10 окружностей с // радиусами 20. Например. Program RandomLines.400). используя так называемый «генератор случайных чисел».400). следующая программа строит набор концентрических окружностей. SetBrushStyle (bsClear). for i:=1 to 200 do Line(Random(400). что N2 должно быть больше или равно N1. так чтобы индекс цикла не возрастал. разберитесь с ним сами. end.i*20).

.. Обратите внимание на запись “лесенкой”. Их можно разделить на две группы: развилки и циклы. позволяющие изменить линейный ход программы. Паскаль будет интерпретировать8 точку с запятой перед end. Пример: if x>0 then z:=1 else z:=–1. Правило такое: end пишем под begin. иначе оператор-2.. end. x:=2*x. она не обязательна.... поскольку begin и end не являются операторами. Пример: if x>0 then begin z:=1. until for Развилки Оператор if Синтаксис7 оператора: if логическое условие then оператор-1 else оператор-2.. поскольку помогает наглядно увидеть алгоритмическую структуру программы. Интерпретировать – толковать.17 - .. как наличие пустого оператора между ней и end.Тема №5. end. end else begin z:=-1. Развилки if .. заключенная в операторные скобки begin . что перед else точка с запятой не ставится.. но весьма желательна. . Точка с запятой используется только для разделения операторов друг от друга. Оператор if 2008-2009 учебный год Занятие №5 Оператор if В языке Pascal существуют операторы. а являются скобками.. то выполняется оператор-1. если оно истинно.. x:=-x. 7 8 Синтаксис оператора – правила его записи. В качестве оператора может выступать простой оператор или составной оператор. if . else . then case Циклы while repeat . then . Выполнение оператора начинается с проверки логического условия. Составной оператор – это группа операторов. Обратите внимание. Можно было бы и не ставить запятую после операторов x:=2*x и x:=-x.

. Вложенные операторы if Иногда возникает необходимость устроить развилку на более чем две ветви. Если имеются вложенные операторы if. то таких ситуаций не будет. begin write('Введите число '). Например: if x<0 then x:=-x.Тема №5. помещая. как отражает запись данного примера. if odd(n) then writeln('Число нечетное') else writeln('Число четное'). { Определение знака числа } var n : integer. т. begin write('Введите число '). if n>0 then writeln('Число положительное') else if n=0 then writeln('Число ноль') else writeln('Число отрицательное') end. Оператор if 2008-2009 учебный год Оператор if (сокращенная форма) Часто встречается ситуация. readln(n). если вложенный оператор находится в ветви else. что else относится к ближайшему if. один из которых неполный. поскольку оператор if синтаксически рассматривается как один оператор. что точка с запятой ставится после оператора x:=-x в отличие от полной формы. вложенные операторы в ветвь else. readln(n). Пример программы с оператором if Program OddEven. что после вложенный оператор if можно не заключать в операторные скобки begin . Обратите внимание. .е. Обратите внимание. таки образом.18 - . Если следовать правилу. { Определение четного или нечетного числа } var n : integer. Принято.. С точки зрения алгоритмической корректности лучше. например: if n>0 then if n=0 then writeln('У вас ноль') else writeln('Число положительное') возникает неоднозначность: к какому if относится else. В этом случае ее можно опустить. когда ветвь else не нужна. В этом случае операторы if можно вкладывать один в другой. Приведем сразу пример программы Program Sign. по возможности. end. end.

когда истины оба операнда.19 - . 9 Назван в честь Дж. у которых операнды могут быть самых разных типов (целые. . . Примеры операторов if со сложными условиями: if (x>=0) and (x<=1) then writeln('X находится в диапазоне от 0 до 1'). на которые действует эта операция. Операции сравнения имеют самый низший приоритет. Для составления сложных логических выражений могут использоваться две бинарные логические операции AND. Бинарные операции – имеющие два операнда. . имеющие тип boolean9. Про такие выражения можно сказать только являются ли они истинными (true) или ложными (false). когда истинен хотя бы один операнд. not – унарному минусу (т. иногда их использование оказывается очень эффективным решением. Обратите внимание на скобки. . . В операторе if используются логические выражения. b:=true. . . С точки зрения языка Pascal a>0 представляет собой логическое выражение (можно написать даже так: b:=a>0. < > = меньше больше равно <= >= <> меньше или равно больше или равно не равно Эти операции весьма часто используются для построения различных логических условий. and – результат операции истинен тогда и только тогда. not – имеет результат противоположный операнду. . or – результат операции истинен тогда. вещественные.Тема №5. 11 Унарная операция – имеющая только один операнд. самый высокий). Логические операции. поэтому заключены в скобки. Оператор if 2008-2009 учебный год Логические выражения. Например: if a>0 then a:=1 else a:=-1. . символьные строковые).е. Приоритет операции and соответствует операции умножения. Такие логические переменные называют флагами. Пример: var b : boolean. if (x<0) or (x>1) then writeln('X вне диапазона 0-1'). если b – переменная булевского типа). . OR и одна унарная11 NOT. if b then writeln('Все в порядке'). Операции сравнения. 10 . . Буля – основателя математической логики. if not ((x>=0) and (x<=1)) then writeln('X вне диапазона 0-1'). Существует шесть бинарных10 операций сравнения. Простейший случай логического выражения – логическая переменная. . or – сложению.

если введено число 2. выводящую текст «плохо».Тема №5. а остальные были синими. «хорошо» или «отлично». стр. таким образом чтобы каждая 3-я окружность выводилась красным цветом. считая ее координаты заданными переменными x. y. «удовлетворительно». Напишите программу. если введено число 1 или 2. модернизируйте программу Concentric (стр. 5). 4 или 5 соответственно. X 3. 16). Оператор if 2008-2009 учебный год Задание №5 1. Вычислите логические выражения: not true and not false not true or not false not (true or false) Y not (true and false) a 2.20 - . Напишите условие нахождения точки a в первом квадранте системы координат. Используя операцию определения остатка от деления (mod. выводящую слова «зачет». если введено число 3. 5. Напишите программу. 4 или 5 и «незачет». 3. . 4.

Обратите внимание. . 4 : writeln('Хорошо!'). обработать и эту ситуацию. то никаких действий выполняться не будет. Если пользователь введет отметку. end. readln(n). case n of 2. Кроме единичных значений переключателя n можно указывать диапазон значений. begin write('Введите вашу отметку ').. 4 : writeln('Хорошо').6 : writeln('Так держать!') else writeln('Вы ввели недопустимую отметку!') end. 4 : writeln('Хорошо'). 5 : writeln('Отлично') else writeln('Вы ввели недопустимую отметку!') end. Можно. end. 5 : writeln('Отлично'). 5. Program YourMark3. Program YourMark. begin write('Введите вашу отметку '). readln(n). что оператор case заканчивается скобкой end. 3 : writeln('Удовлетворительно').Тема №6. Обратите внимание на отсутствие точки с запятой перед else и двоеточия после else. end. { ваша отметка } var n : integer.. readln(n). Понять его работу поможет следующий пример. { ваша отметка } var n : integer.21 - . case n of 2 : writeln('Плохо'). конечно. Оператор case 2008-2009 учебный год Оператор case Оператор case используется для создания развилки на более чем 2 ветви. begin write('Введите вашу отметку '). Тогда синтаксис оператора case будет такой: Program YourMark2. case n of 2 : writeln('Плохо'). 3 : writeln('Удовлетворительно'). { ваша отметка } var n : integer. end.3 : writeln('Это все очень плохо!'). Обратите внимание на отсутствие точки с запятой перед else и двоеточия после else. не попадающую в диапазон 2-5.

1..2.4*.е. написанных на предыдущей странице. (2 балла) Задание № 6. Модифицируйте программу таким образом.Тема №6. то получить число десятков очень просто – d:=n mod 10. так чтобы она выводила число в диапазоне от 1 до 999. Оператор case 2008-2009 учебный год Задание № 6. (еще 4 балла) Запись чисел римскими цифрами: 1–I 2 – II 3 – III 4 – IV 5–V 6 – VI 7 – VII 8 – VIII 9 – IX 10 – X 20 – XX 30 – XXX 40 – XL 50 – L 60 – LX 70 – LXX 80 – LXXX 90 – XC 100 – C 200 – CC 300 – CCC 400 – CD 500 – D 600 – DC 700 – DCC 800 – DCCC 900 – CM Запись остальных чисел происходит просто «склеиванием» записей приведенных чисел. Для выделения числа десятков используйте хорошо знакомую вам операцию «остаток от деления». Например: 23 – XXIII 357 – CCCLVII 888 – DCCCLXXXVIII .22 - 901 – CMI 109 – CIX . По образцу программ. два.3. (еще 3 балла) Задание № 6. от 10 до 19.3 (даже в сторону упрощения). если уж сделали предыдущую задачу. Ну. Подсказка №2. записанное римскими цифрами. если в переменной n находится введенное число. и от 20 до 99. Подсказка №1. Модифицируйте программу 6. (5 баллов) Задание № 6. решите следующую задачу: Программа вводит число в диапазоне от 1 до 10 и выводит на экран значение числа русскими буквами (один. Т. чтобы она выводила название чисел в диапазоне от 1 до 99 (ну кассовый аппарат же это делает на чеках!). … десять). Надо рассмотреть по сути три диапазона чисел: от 1 до 9. то расширьте диапазон чисел до 999.

23 - . оператор2. until i>10. end. Если условие остается истинным всегда. Program SquareW. Цикл While используется для повторения оператора (группы операторов) произвольное число раз. . begin i:=1 repeat writeln(i:4.. несмотря на несколько операторов в теле цикла. Обратите внимание. var i : integer. которое может быть заранее и не известно. или while условие do begin оператор1. begin и end отсутствуют. затем проверяется условие. Цикл repeat … until похож на цикл while. Если условие истинно и перед выполнением цикла. Его синтаксис: repeat оператор1. то завершается. end. i:=i+1. то операторы цикла никогда не выполняются. . пока логическое условие не станет ложным. Если условие было ложным перед выполнением цикла. Суть выполнения оператора заключается в проверке логического условия. то цикл никогда не закончится. end... выполняются операторы тела цикла до тех пор. var i : integer. который используется в тех случаях. Если условие остается ложным всегда. либо сложно вычислимо. которые используются в тех случаях. а если истинно. Program SquareR. оператор2. Синтаксис оператора: while условие do оператор.sqr(i):4). то программа зацикливается.. В языке Pascal существуют еще два оператора цикла... Сам оператор представляет собой скобки. то цикл повторяется. если оно оказывается истинным. если оно ложно. причем проверка условия выполнения тела цикла происходит перед выполнением тела цикла. begin i:=1 while i<=10 do begin writeln(i:4. Говорят. когда число повторений цикла заранее не известно. Цикл начинается с выполнения операторов. Построим таблицу квадратов чисел от 1 до 10 с помощью цикла while и repeat … until.sqr(i):4). что.Программирование на языке Паскаль Занятие №4 Занятие №7 Операторы цикла While и Repeat … Until Мы уже познакомились с оператором цикла for. i:=i+1. когда число повторений тела цикла известно заранее. что программа зацикливается. end. until условие. то цикл выполняется один раз. .

Здесь используются несколько новых для нас приемов. end. Рассмотрим еще один пример.r). until keypressed. r:=r div 2. т.random(10)). while (r>=1) do begin circle(400. функция keypressed. можно сосчитать). r:=400. var r : integer. Напишите программу. repeat SetBrushColor(random($FFFFFF)). Модернизируете последний пример так. 1. Program Circles. r:=400. end. Для решения этой задачи разумно использовать цикл while или repeat until. 200. Во-первых.24 - . если пользователь нажал любую клавишу. Uses GraphABC. Program Circles. . end. end.Тема №7. until r<1.800).random(500). Program Circles. либо прямоугольники. Циклы while и repeat until 2008-2009 учебный год Рассмотрим следующий пример. Программа должна рисовать случайные расположенные окружности случайного цвета и случайного размера (но не больше 10 пикселей) до тех пор. Uses GraphABC. var r : integer. К таким обозначениям цветов мы вернемся во время изучения языка HTML.800). Необходимо построить вложенные друг в друга концентрические окружности. begin SetWindowSize(800. … Радиус последней – 1 пиксель.е. пока пользователь не ввел число 0. Uses GraphABC.400. которая вводила бы целые числа и суммировала их до тех пор. Задание №7. чтобы окружности не выводились слишком быстро. Оператор выбора цвета окружности SetBrushColor в качестве параметра использует значение random($FFFFFF). Мы ее используем для того. begin SetWindowSize(800. Она возвращает значение true.500). Аргумент функции random представляет максимально возможное числовое значение цвета. Функция delay(n) выполняет задержку выполнения программы на n миллисекунд.r). 100. 50. пока пользователь не нажмет на какую либо клавишу. а радиус каждой вложенной – в два раза меньше предыдущей. (5 баллов) 2. CRT. таким образом окружности будут заливаться случайным цветом от 0 (соответствует черному цвету) до $FFFFFF (соответствует белому цвету). определенная в модуле CRT. repeat circle(400. поскольку действительно сразу сложно понять сколько будет окружностей (хотя.400. r:=r div 2. circle(random(500). begin SetWindowSize(500. записанное в шестнадцатеричной системе исчисления. delay(10). Радиус самой большой окружности – 400 пикселей. конечно. чтобы выводились случайные линии. var r : integer.

71828. 35. Пример: 3. В языке Pascal вводится тип данных real.5 ⋅10−1 . 5/2 будет 2.s:8:2). К ним применимы операции сложения +. остаток от деления (mod) для вещественных чисел не определены! Запись вещественных чисел может быть в двух формах. Подмножеством вещественных чисел являются рациональные числа. переменные можно описывать и несколько в одном операторе (r.234E–10. 2. 65. вычитания –. как и целые. –2e+10.5. вместо ·10 в языке Pascal пишется буква E (большая или маленькая. связанными с измерениями. В языке Pascal такое число можно записать в следующем виде 6. Однако в физических вычислениях в вычислениях. умножения *. Деление выполняется обычным способом.6.25 ⋅102 . Вторая форма записи называется «с плавающей точкой». −0. // Радиус окружности s : real. −1. поэтому описали переменные в отдельных операторах. мы сталкиваемся с другим классом чисел.21⋅10−10 . Ввод вещественных чисел с клавиатуры ничем не отличается от ввода целых чисел. всё равно).25 - . writeln('Длина окружности: '. +1.67E21.6 ⋅108 .е. т. Задание 8 (часть 1) 1. s : real). 1. участвовать в арифметических выражениях. который является моделью вещественных чисел в математике. Вещественные числа могут. как в математике. Рассмотрим сразу пример: Program Krug. // Вычисление длины окружности var r : real. Деление на цело (div). +36. s:=2*3. а после буквы E – порядком или экспонентой. а также деления /. Первая форма называется «с фиксированной точкой». но мы захотели добавить комментарии к описанию.67 ⋅1021 ).123.е.99 ⋅1033 . Вещественные вычисления 2008-2009 учебный год Занятие №8 Вещественные вычисления на языке Pascal До сих пор мы оперировали целыми числами. Приведем еще примеры записи вещественных чисел с плавающей точкой: 3E1. В математике их называют вещественными (или действительными).Тема №8.000015 (5 баллов) 2. Часть числа до буквы E называется мантиссой. // Длина окружности begin write('Введите радиус: '). 0. end. т. readln(r). Запишите в языке Pascal в формате с плавающей точкой следующие числа: 2.2e+20.5. Uses CRT. что в качестве разделителя целой и дробной части используется точка. 1200000. Обратите внимание на описание переменных (тип real). а не запятая. Эта запись похожа на стандартизованное представление чисел в математике (например 6. –40. Конечно. Запишите в языке Pascal в формате с фиксированной точкой следующие числа: (3 балла) 2.1415926*r.0. Обратите внимание на то.

begin x:=1234. что для числа π используется встроенная константа pi): Program Table. Если в качестве формата вывода используется одно число. end.1. var x : real. отделяя их от переменной двоеточием. пример).s:6:2). вычисляла бы пройденный путь. writeln(x). writeln(x:12). (5 баллов) .Тема №8.1. Uses CRT. которая вводила бы с клавиатуры 10 вещественных чисел и вычисляла бы их среднее арифметическое. // Увеличение радиуса на 0. writeln(x:8:2). Если при выводе формат числа не указывать. вычисляющую площади круга (по формуле s = πr 2 ). begin r:=0. Рассмотрим еще одну программу. Проанализируйте пример и постройте аналогичную программу. так как под экспоненту отводится пять позиций и еще две позиции выделяется под знак числа и десятичную точку. При выводе мы можем применять форматы вывода.26 - .1 until r>1. то оно определяет число позиций. // Начальное значение repeat s:=2*pi*r. writeln(x:8:1). которая строит таблицу длин окружностей радиусами от 0. а второе – число позиций для дробной части. резервируемых для вывода всего числа. (3 балла) 5. Uses CRT.0. writeln(x:14). // Условие окончания цикла end. резервируемых для вывода всего числа. Формат вывода может состоять из одного или двух чисел. (2 балла) 4. var r. writeln(x:8:3). а само число выводится в формате с плавающей точкой. Напишите программу. В этом случае рекомендуется задавать значение формата не меньше 10. которая вводила бы с клавиатуры значения времени и скорости. При указании двух чисел первое определяет число позиций. то Pascal попытается вывести число наиболее компактным способом. s : real. Лучше уяснить действие форматов поможет следующий пример: Program Formats. Напишите программу.567. // Вывод r:=r+0. // Вычисление длины writeln(r:3:1. Задание 8 (часть 2) 3. Вещественные вычисления 2008-2009 учебный год Вывод вещественных чисел с помощью оператора write/writeln происходит обычным способом.1 (заметьте.1 до 1 см с шагом 0. разделенных двоеточием (см.

Параметры. Значение констант задается через знак равенства (а не присваивания). st = 0.sign(a):3). описанные в заголовке функции. требующихся в программе function cube(x:real):real.Тема №9. // блок описания переменных const a1 = -5.5. Функция получает информацию от вызывающей программы через свои параметры. . Следующий пример иллюстрирует работу функций. Есть два вида подпрограмм: процедуры и функции. не могут менять свое значение. // вычисление знака числа begin if x>0 then sign:=1 else if x=0 then sign:=0 else sign:=-1. // возведение в куб begin cube:=x*x*x. // ==== Начало главной программы ========== var a : real. называются формальными параметрами. В языке Pascal существуют специальные средства для этого – подпрограммы.cube(a):10:3. // блок описания констант (постоянных) a2 = +5. // имени функции присваивается значение end. – это константы. while (a<=a2) do begin writeln(a:4:1. end.27 - . Подпрограммы-функции 2008-2009 учебный год Занятие №9 Подпрограммы на языке Pascal Функции При решении сложных задач разумно разбить алгоритм на несколько более простых составляющих. Тип константы определяется из типа присваиваемого значения. указанные при вызове функции называют фактическими. что внутри тела функции (заключенного в операторные скобки begin … end) вы обязаны хотя бы один раз имени функции присвоить значение. не связанный с функциями. Константы. Uses CRT. Обратите внимание.0. end. Типы и число фактических параметров должны соответствовать типу и числу формальных параметров.0. begin a:=a1. end. Program Table. в отличие от переменных. function sign(x:real):integer. В этой программе также используется новый материал. // вызов функций a:=a+st. // Подключение модулей // Описания функций. Параметры.

// локальные переменные r : real. вычисляющую факториал числа n ! = 1 ⋅ 2 ⋅ 3 ⋅ … ⋅ n . (5-8 баллов) . end.i):6:0). (5 баллов) 2. но и отрицательные. Program Power2. Uses CRT.Тема №9. // ==== Начало главной программы ================ var i : integer. // блок описания переменных begin for i:=1 to 10 do writeln(i:2.power(2. а также две локальных переменных. в котором функция имеет два параметра разного типа. и переменная i внутри функции – это две разных переменных. а также функцию abs(n). Напишите функцию. // накопление произведения power:=r. Задание 9 1. В данном примере функция имеет два формальных параметра (типа real и типа integer). Подпрограммы-функции 2008-2009 учебный год Рассмотрим еще один пример.0. При вызове функции первый фактический параметр соответствует первому формальному параметру. begin r:=1. чтобы функция power вычисляла правильно не только натуральные степени. Подсказка: следует использовать оператор if.0. // результат присвоить имени функции end. function power(x : real. путем модификации функции power. Второй параметр – второму.28 - . x−n = Напоминание: 1 . xn которая вычисляет модуль числа. // возведение в степень var i : integer. for i:=1 to n do r:=r*x. Переменная i в главной программе. n : integer) : real. Имена локальных переменных действуют только внутри тела функции. Подсказка: ее несложно сделать. Модифицируйте последний пример таким образом.

30. line(x3. Как мы видим.29 - .150).y2. Давайте сразу проиллюстрируем работу процедуры на примере графической программы.y3). end.x3. рисующей треугольники.y3. Triangle(10.y1. Создав такую процедуру. Program UseProc.x3. В стандартной графической библиотеке нет процедуры. // Процедура рисует треугольник begin line(x1. Uses GraphABC. Они также могут принимать параметры. и т. Procedure Triangle(x1.) (по 3-4 балла за каждую) . сколько нам надо в главной программе.250.x2.50. Triangle(100.40.п.x2.Тема №10.300. Подпрограммы-процедуры 2008-2009 учебный год Занятие №10 Подпрограммы на языке Pascal Процедуры Для выполнения каких-либо действий (а не вычислений значений) существуют подпрограммы-процедуры.20.200. мы можем использовать ее столько раз.y1.400.500). как и подпрограммыфункции. Давайте создадим такую процедуру и проверим ее работу. end.y1). процедура Trianlge имеет шесть целочисленных параметров и вызывает функции трижды функции Line для соединения точек.x1. line(x2.y2. Создайте еще несколько новых графических процедур. которые бы расширили возможность стандартной библиотеки (ромб. Задание 10 1.10).y3:integer). // Главная программа begin SetWindowSize(500.y2). параллелограмм.

end. end.x3. // Этот оператор – завершение модуля. Задание 10 2.y1). а также описаний глобальных переменных. Подпрограммы-процедуры 2008-2009 учебный год Модули (Units) Вы. так и функции) размещаются перед главной программой. Поместим описание процедуры Triangle в модуль MyGraph. функций.150).y3.y3:integer).pas.300.y1. MyGraph.250. // Модули могут использовать другие модули Procedure Triangle(x1.y1.y2. связанное с тем. line(x2. наверное.Тема №10.y3). Теперь главная программа будет выглядеть так: Program UseProc.30 - . констант (об этом позже). Unit MyGraph. Такая возможность есть. line(x3. Сформируйте модуль с вашими собственными графическими процедурами (5 баллов) .200.x3. end. // Эта процедура описана в MyGraph Triangle(10. что все подпрограммы (как процедуры.30. её предоставляют модули.10). // Эта процедура находится в модуле MyGraph begin line(x1.x1. // Заголовок модуля.е.400. обратили внимание на неудобство. Имя файла модуля должно совпадать // с именем модуля! Т.500). Модули могут содержать неограниченное число процедур.x2.50. иначе главая программа его не найдет! Uses GraphABC.y2. // Эта процедура описана в GraphABC Triangle(100.y2).20. Uses GraphABC.40.x2. в нашем случае оно должно быть // MyGraph. Хотелось бы разместить их в отдельную библиотеку. // Использование стандартного и собственного модуля begin SetWindowSize(500.

возвращая через свое имя только одно значение.31 - . если надо вернуть из подпрограммы несколько значений? Для примера напишем подпрограмму. area). который мы использовали не подходит для решения нашей задачи. . // вычисление длины окружности и площади круга Procedure Pr(R.е. Суть его заключается в том. area). S:=PI*sqr(R). end. Uses CRT. area : real. что подпрограмма создает копии параметров (в другой терминологии – локальные переменные подпрограммы). readln(rad). по смыслу такие параметры являются входными. begin L:=2*PI*R. заданные в фактических параметрах в главной программе.S:real). len). А как поступить. Однако этот подход имеет тот плюс. Pr(rad. в которые помещаются значения. writeln('Площадь круга '. которая должна вычислить длину окружности ( L = 2πr ) и площадь круга ( S = πr 2 ) по заданному радиусу.L. len. Способ передачи параметров 2008-2009 учебный год Занятие №11 Способы передачи параметров Параметры-значения и параметры-переменные Каким образом подпрограмма может вернуть главной программе какую-либо информацию? До сих пор это могла делать только подпрограмма-функция. // ГЛАВНАЯ ПРОГРАММА var rad. результат будет один и тот же: длина окружности и площадь круга будут равны 0! В чем дело? Оказывается тот способ передачи параметров подпрограмме. но не наоборот. что подпрограмма гарантирует. Program ProcUse. т. Т.е. что она не изменит фактические параметры. Попробуйте выполнить данную программу. Вы обнаружите странный результат: какое бы значение радиуса вы не вводили. writeln('Длина окружности '. begin write('Введите радиус ').Тема №11. Используемый до сих пор способ называется передача параметров по значению. len. предназначенными для передачи информации из главной программы в подпрограмму. end.

что два последних параметра процедуры будут являться изменяемыми. Выполним теперь программу. что в качестве формальных параметров. Первый параметр мы оставили. обычным параметром.a. как и раньше. Способ передачи параметров 2008-2009 учебный год Второй способ называется передача параметров по ссылке.6. В связи с этим необходимо запомнить. (3 балла) 2. аналогичную процедуре Pr. вызов Pr(5.b). где a и b – вещественные переменные. но не константы! Т. соответствующих параметрам переменным. (2 балла) .Тема №11. могут использоваться только переменные.32 - . Изменим заголовок процедуры Pr на следующий: Procedure Pr(R: real. Обратите внимание на появившееся ключевое слово var. которая вычисляла бы периметр и площадь квадрата со стороной r и а также объем куба с тем же самым ребром r.е. Проверьте ее работу. var L. возможно. передаваемым по значению.7) ошибочен. Напишите процедуру.S:real). Для таких параметров используется другой способ сопоставления с фактическими (передаются на самом деле адреса параметров). Напишите процедуру с двумя целочисленными параметрами. лишь Pr(5. Оно говорит о том. которая бы меняла местами их значения. Работает! Задание 11 1.

В Pascal’е в качестве диапазона индекса может выступать любой отрезок перечислимого типа. в квадратных скобках указан диапазон первого и единственного индекса. либо 0. Массив – это регулярная структура данных. или как говорят. Описание одномерного массива. каталоги библиотек и т. так как необходимо будет изменить всего лишь одну строчку! . разница лишь в том. двумерными): A11 A12 A13 A14 A21 A22 A23 A24 A31 A32 A33 A34 С точки зрения машинной реализации. результаты наблюдений. проекции векторов. Для работы с такими данными практически во всех языках программирования существует понятие массива. если считать его элементы целыми числами выглядит следующим образом: A : array [1. ошибка выхода индекса за допустимый диапазон. Одной из самых неприятных ошибок программирования – является ошибка обращения к несуществующему элементу массива. Массивы 2008-2009 учебный год Занятие №12 МАССИВЫ Тема имеет исключительно важное значение В практике программирования часто встречаются задачи.7.N] of integer.д. Var A : array [1. кроме того. которые определяют диапазон индексов. программу можно будет легко модифицировать для работы с массивом другой размерности. Однако на практике чаще всего удобнее в качестве индексов использовать отрезок целого типа.. в которых требуется применение регулярных.33 - . и в дальнейшем в программе при работе с массивом использовать не конкретные числа. здесь array – ключевое слово.8] of integer. которая состоит из пронумерованных компонент одного и того же типа. как пронумерованы элементы массива. пронумерованных данных: таблицы. причем нижний (меньший) индекс разумно выбирать единицей или нулем. например ‘A’.. которое и обозначает собственно массив. Массивы могут быть одномерными: A1 A2 A3 A4 A5 A6 A7 A8 и многомерными (например. числовые матрицы.Тема №12.. а константы..’H’. Поэтому предыдущее определение массива A лучше переписать так: Const N = 8. Этот тип мы будем называть базовым типом. все массивы – одномерные.

1.. допустим массив массивов: Const M = 5.N] of integer.N] of integer.. в том числе и массив. N = 8. Var A : array [1. N = 8.. Подобная ситуация встречается довольно часто. Например. Массивы 2008-2009 учебный год Иногда формальность описания следует развить. как осуществляется доступ к элементам массива – после имени массива в квадратных скобках указывается индекс.N] of integer. т. который может быть произвольным выражением. даже при небольших диапазонах индексов имеют тенденцию занимать много памяти..N] of integer. выделив описание типа отдельно.B : array [1. Следует учесть. что массивы. поэтому для нее существует разумное сокращение: Const M = 5. описанные в разных местах как массивы типа TA. Самая простая задача – заполнение всех элементов одним и тем же значением: {Инициализация массива} for i:=1 to N do A[i]:=0. Основные приемы работы с массивами Рассмотрим выполнение элементарных манипуляций с массивами. если вы собираетесь использовать в процедурах и функциях параметры-массивы. здесь A и B – массивы будут считаться разных типов. А здесь: Const N = 8. что многомерные массивы. Var A. это будет абсолютно необходимо. Const N = 8. Var A : array [1. Var B : array [1. но без объявления типамассива..N] of integer. Подобная конструкция допустима везде. TA. лишь бы его значение не выходило за указанный при описании диапазон.M] of array [1. = array [1. . TA.. Обратите внимание..Тема №12. Var A : TA. Хотя следующее описание определяет массивы одинаковых типов: Const N = 8.N] of integer.. Var A : array [1. Дополнительные удобства этого подхода заключаются в том.N] of integer.. будут являться совместимыми по типу.е. они будут считаться несовместимыми. а в случае описания массивов A и B одинаковым способом. Type TA = array [1.34 - . где допустима простая переменная. В качестве базового типа допустим абсолютно любой тип. Const N Type TA Var A : Var B : = 8.M. здесь A и B – массивы одного и того же типа.

. Поступим следующим образом: пусть максимальный элемент массива – первый.i. Теперь рассмотрим самую первую нашу задачу на обработку массива – поиск максимального элемента. end. Если два массива одного типа. Оператор вида for i:=1 to N do – можно «переводить» как «выполнить для всех элементов массива». // Поиск максимального значения for i:=2 to N do if A[i]>max then max:=A[i].N] of integer. то заменим его на этот элемент массива. writeln('Maximum='.max). Следующие два примера показывают.']='). writeln('Maximum='. Из этого примера видно. чем уже определенное число. затем будем просматривать поочередно последующие элементы. окажется. max : integer. что наша переменная содержит искомое значение: {определение максимального значения} max:=A[1]. как осуществить ввод-вывод с небольшим сервисом: {ввод массива} for i:=1 to N do begin write('Ввeдите '.max). когда мы просмотрим весь массив. использовав полученные знания: Program Massiv.i.35 - . Напишем теперь целиком программу. и как организовать нехитрый сервис. заведем для него специальную переменную. readln(A[i]) end. Const N = 10. for i:=2 to N do if A[i]>max then max:=A[i]. readln(A[i]) max:=A[1]. Массивы 2008-2009 учебный год Цикл for – чрезвычайно удобная и полезная вещь при работе с массивами. что массив вводится поэлементно. и если окажется. Таким образом. i. что нам встретится элемент больший. Var A : array [1.i. begin for i:=1 to N do // Ввод массива begin write('Ввeдите '. end. Вывод производится аналогично: {вывод массива} for i:=1 to N do write('A['.'-й элемент: ').Тема №12. . то допустимо присваивание одного массива другому одним оператором: B:=A.'-й элемент: ').

это будет вещественная величина типа real) (* 3 балла) 7. (2 балла) 5. * Напишите программу. отмеченные *. . Модифицируйте предыдущий пример. (2 балла) 3. Модифицируйте предыдущую программу. Внимательно прочитать текст. радиусы которых бы равнялись введенным значениям. которая бы вводила значения элементов целочисленного массива. * Напишите программу. так чтобы программа определяла максимальный и минимальный элемент массива. 35 напишите программу. (2 балла) 2. (1 балл) 4. Знать определение массива и способы его описания. (1 балл) 6. так чтобы она выводила элементы массива в обратном порядке (используйте цикл for i:=N downto 1 do) . а затем рисовала бы N окружностей. находящую минимальный элемент массива и выводящую его значение. которая бы определяла среднее арифметическое значение элементов массива (конечно. состоящего из 10 элементов. а затем выводит его. (* 3 балла) Задачи.Тема №12. Напишите программу. По аналогии с примером на стр. являются необязательными и их баллы – дополнительными. Массивы 2008-2009 учебный год Задание 12 1.36 - . которая вводит с клавиатуры значения массива.

37 - . 13. с которой сталкивается начинающий программист – это задача сортировки массива. 4 2 3 1 2 4 Рис 13. но не экономичен. Самый простой алгоритм – это линейная сортировка.е. Сортировка массивов 2008-2009 учебный год Занятие №13 СОРТИРОВКА МАССИВОВ Тема имеет исключительно важное значение Первой серьезной задачей программирования.4).6 3 1 Рис 13.6 2 3 4 Рис 13. 13. «на месте»). что элементы стоят в «неправильном» порядке – переставим их местами.5 1 2 4 2 4 3 Рис 13.7). 2 . Рассмотрим рис. среднее число N2 просмотров и перестановок пропорционально квадрату числа элементов (точнее ∼ ).3 3 2 Рис 13. Проведем последовательно сравнение первого элемента со всеми последующими. 13. Под сортировкой понимается упорядочивание элементов массива по возрастанию (или по убыванию) без создания копии массива (т. можно сказать. 13.2). что в первом элементе массива находится минимальный элемент (Рис.1 2 4 3 3 1 Рис 13.2 1 1 4 Рис 13.6-13. при если при очередном сравнении (например сразу 4 и 2) выяснится. 1 4 3 2 1 Рис 13.1.7 Алгоритм линейной сортировки очень прост.4 Далее применим указанную процедуру к неотсортированному «остатку» массива (рис. пока не переставим два последних элемента (рис.Тема №13. По окончании одного прохода. затем продолжим сравнение (рис.5) до тех пор. 13.

procedure print(m : Massiv). Обратите внимание. заголовок процедуры print мог бы выглядеть следующим образом: procedure print(var m : Massiv). // Перестановка элементов print(a). end. // Вывод отсортированного массива end. Const N = 10. 32). Внимательно прочитать текст. 100. (3балла) . begin for i:=1 to N do write(m[i]:5).38 - . . которые позволил ли бы узнать сколько раз происходят перестановки в процессе сортировки.Тема №13. x:=y. // Вывод массива var i : integer. // Определение типа Massiv procedure swap(var x. y:=z.y: integer). i. Для этого необходимо создать тип Massiv (стр. // Вывод массива for i:=1 to N-1 do // Внешний цикл до N-1 (обратите внимание!) for j:=i+1 to N do // Внутренний цикл от i+1 (обратите внимание!) if (a[i]>a[j]) then swap(a[i]. writeln.N] of integer. что мы использовали массив в качестве параметра процедуры. Выясните этот вопрос для N=10. begin z:=x. // Число элементов массива Type Massiv = array [1. print(a). даже если не предполагается его модифицировать в подпрограмме. // Новая строка end. Program LinerSort. begin // Заполнение массива случайными числами в диапазоне от 0 до 99 for i:=1 to N do a[i]:=random(100). (2 балла) 2.е. // Переменные главной программы Var a : Massiv. Сортировка массивов 2008-2009 учебный год Приведем программу сортировки.a[j]). Часто для экономии памяти массив передают через var-параметр (стр.j : integer. Оформите сортировку массива в виде отдельной процедуры (здесь уже применение var-параметра будет обязательным). 34). Добавьте в процедуру сортировки операторы. Задание 13 1. // Перестановка элементов местами var z : integer.. Т. 1000.

Sign up to vote on this title
UsefulNot useful