Методичка Паскаль
.pdfa.) y = ax2; b.) y = sin x; c.) y = 1/x; d.) y = tg x;
Построить и подписать также оси координат.
10.11.Дополнить программу, составленную для решения задачи 10.8, движе-
нием точки по построенному графику функции.
10.12.Составить программу построения графика функции, заданной парамет-
рически:
a.) астроида:
x = a cos3 t,
y = a sin3 t, где t [0, 2π)
b.) кардиоида
x = a cos t (1 + cos t),
y = a sin t (1+ cos t), где a>0, t [0, 2π)
c.) спираль:
x = R cos t ,
y = R sin t , где R=t/2, α<= t <= 2Nπ
d.) улитка Паскаля:
x = a cos2t + b cos t,
y = a cos t sin t + b sin t, где a>0, b>0, t [0, 2π) e.) строфоида:
x = a (t 2 – 1)/(t 2 + 1),
y = at (t 2 – 1)/(t 2 + 1), где a>0, t (-∞, +∞) f.) эпициклоида:
x = (a + b) cos t – a cos ((a + b)t/a), y = (a + b) sin t – a sin ((a + b)t/a),
где a>0, b>0, t [0, 2π), b/a должно быть целым положительным числом
g.) циссоида:
61
x = a t 2 /(1 + t 2),
y = a t 3 /(1 + t 2), где a>0, t (-∞, ∞)
10.13.Составить программу, изображающую на экране модель солнечной системы: в центре должно располагаться солнце, вокруг которого с разными угловыми скоростями вращаются две – три планеты, вокруг одной из них должен обращаться спутник.
62
Тема 11. Подпрограммы в языке Паскаль
Краткое изложение теоретического материала
Подпрограмма – это часть программы (составной оператор), имеющая собственное имя и вызываемая по этому имени из основной (головной) про-
граммы или других подпрограмм. В языке Паскаль реализованы подпро-
граммы двух видов: процедуры и функции. Действует правило – описание должно предшествовать вызову (т.е. подпрограмма должна быть сначала описана, а только после этого может быть вызвана).
Процедуры в языке Турбо Паскаль
1. Описание процедуры:
Procedure <имя> (<список параметров>); { заголовок процедуры } <блок описаний>
Begin { начало исполняемой части процедуры} <тело процедуры (исполняемая часть)>
End; { конец процедуры }
Структура процедуры почти полностью совпадает со структурой про-
граммы. исключения:
I. Заголовок: начинается с зарезервированного слова Procedure (а не
Program), кроме того содержит список параметров. Параметры – это «сред-
ство связи» процедуры с программой и с другими процедурами, механизм обмена данными. Параметры процедуры бывают двух видов:
- параметры-значения, или входные параметры – это исходные
(входные) данные, передаваемые в процедуру. Их значения после окончания работы процедуры остаются неизменившимися. Описание параметров-
значений: <имя> : <тип> .
- параметры-переменные, или выходные параметры – это результа-
ты работы процедуры, передаваемые обратно в программу или другую про-
цедуру. Их значения после окончания работы процедуры изменяются. Опи-
сание параметров-переменных: Var <имя> : <тип> . 63
Например, процедура может иметь такой заголовок:
Procedure Calculate ( x, y : integer; var z : integer; var f : real );
Имя этой процедуры Calculate. Она имеет 4 параметра: два входных (или параметра значения) – это параметры x и y целого типа; два выходных (или параметра-переменных) – z целого типа и f вещественного типа. Так как ти-
пы у них различны, перед описанием каждого указано зарезервированное слово Var.
Параметры, указанные при описании процедуры (т.е. в ее заголовке)
называются формальными, т.к. процедура – это по сути формальное прави-
ло получения некоторых результатов из некоторых исходных данных. Кон-
кретным смыслом формальные параметры наполняются при вызове процеду-
ры (см. ниже).
Можно использовать процедуры и без параметров.
II. Блок описаний может содержать те же разделы, что и блок описа-
ний программы (Const, Type, Var, Procedure, Function), за исключением опи-
сания подключения модулей библиотек Uses (модули подключаются только в блоке описаний в основной программе!).
Данные, описанные в блоке описаний процедуры, называются локаль-
ными и могут быть использованы только в этой процедуре.
Данные, описанные в блоке описаний программы, называются гло-
бальными и могут использоваться как в самой программе, так и во всех ее процедурах.
III. Тело процедуры также представляет собой составной оператор, но заканчивается End; (ставится точка с запятой, а не точка, как в конце про-
граммы).
2. Вызов процедуры:
может осуществляться из основной программы или процедуры, описанной после вызываемой. При вызове указывается имя процедуры и список фак-
тических параметров, т.е. тех, которые будут «подставлены» на место формальных. Количество, порядок и типы фактических параметров должны
64
совпадать с количеством, порядком и типами формальных параметров. На-
пример, процедуру Calculate, заголовок которой был описан выше, можно
вызвать следующим образом:
Calculate( a, b, c, d ); - при условии, что a, b, c имеют тип Integer, d – Real.
Calculate( 23, р+14, q, w ); - если p и q имеют тип Integer, а w – Real. (Исходя из всего вышесказанного следует, что команды языка (напри-
мер, Write, Readln) – это тоже процедуры, которые описаны в некоторых библиотеках и которые мы вызываем при написании наших программ.)
Функции в языке Турбо Паскаль
Практически все сказанное о процедурах верно и для функций. Отли-
чие функции от процедуры состоит в том, что функция не имеет выходных параметров, она возвращает единственное значение – это значение функции.
Входные параметры называются еще аргументами функции. 1. Описание функции
Function <имя> (<список аргументов>): <тип значения функции>; { заголовок }
<блок описания локальных данных>
Begin { начало исполняемой части функции } <тело функции (исполняемая часть)>
End; { конец описания функции }
В теле функции обязательно должна быть команда присваивания вида:
<имя функции> := <вычисленное значение>;
которая и позволит функции возвратить вычисленное значение.
Например, опишем функцию вычисления среднего арифметического двух целых чисел:
Function middle (a, b : integer) : real;
Begin
Middle := ( a + b ) / 2
End;
65
В данном примере тело функции – единственный оператор присваива-
ния, который присваивает имени функции нужное значение.
Примеры решаемых задач Пример 1. Составить программу, которая вычислит значение выраже-
ния
am+bn+(a-b)m+n.
Вычисление степени числа оформить в виде подпрограммы.
Пояснение. Составим и сравним две программы: с использованием процедуры и функции вычисления степени числа.
Программа: program calc_proc; uses crt;
var a, b, m, n, s1, s2, s3, s : integer;
procedure stepen (x, y : integer; var z : integer);
{процедура возводит число x в степень y, результат записывает в z} {т.е. в процедуре описано правило вычисления z=xy}
var i : integer; { локальная переменная для организации цикла } begin
z := 1;
for i := 1 to y do z := z * x end;
begin clrscr;
write(‘Введите a, b, m, n ’); readln(a, b, m, n);
{ три раза вызываем процедуру stepen для вычисления трех сла-
гаемых }
stepen(a, m, s1); { вычислили s1 как am } stepen(b, n, s2); { вычислили s2 как bn }
66
stepen(a-b, m+n, s3); { вычислили s3 как (a-b)m+n }
s := s1 + s2 + s3; { вычислили сумму трех слагаемых } writeln(‘Значение выражения ’, s);
readln end.
program calc_func; uses crt;
var a, b, m, n, s : integer;
function stepen (x, y : integer) : integer;
{функция возводит число x в степень y }
{т.е. описано правило вычисления stepen = xy }
var i ,z : integer; {локальные переменные:
i для организации цикла, z для вычисления произведения }
begin
z := 1;
for i := 1 to y do z := z * x;
stepen := z { присвоили имени функции вычисленное значение } end;
begin clrscr;
write(‘Введите a, b, m, n ’); readln(a, b, m, n);
{ три раза вызываем функцию stepen для вычисления трех слагае-
мых }
s := stepen(a, m) + stepen(b, n) + stepen(a-b, m+n, s3); writeln(‘Значение выражения ’, s);
readln end.
67
Контрольные задания
11.1. Составить программу, которая вычислит площадь треугольника,
заданного координатами своих вершин. Использовать формулу Герона. Вы-
числение расстояния между двумя точками оформить в виде процедуры или функции.
11.2. Составить программу определения НОД трех чисел (по алгорит-
му Евклида) с использованием процедуры нахождения НОД двух чисел (по алгоритму Евклида).
11.3. Составить программу, проверяющую гипотезу Гольдбаха. Она состоит в том, что любое четное число, большее 2, можно представить в виде суммы двух простых слагаемых. Программа должна вводить четное положи-
тельное число и выводить все его возможные представления в виде суммы двух простых слагаемых. Для определения, является ли число простым, ис-
пользовать подпрограмму.
11.4. Составить программу, которая изображает на экране:
a.лес
b.аллею
из елей и берез. Рисование ели и березки оформить в виде процедур.
11.5. «Диаграммы». Составить программу, которая вводит N числовых данных и интерпретирует их в виде столбиковой, круговой, линейной диа-
грамм. Программа должна в алфавитно-цифровом режиме предоставлять пользователю меню – список видов диаграмм, позволять выбрать (например,
ввести номер) нужной диаграммы, после чего в графическом режиме постро-
ить нужную диаграмму. Каждый из режимов работы программы (ввод дан-
ных, построение каждого вида диаграмм) оформить в виде отдельной проце-
дуры.
68
Тема 12. Тип данных запись (Record)
Краткое изложение теоретического материала
Тип данных запись позволяет объединять разнотипные данные.
Запись – это совокупность компонентов разного типа. Компонент за-
писи называется ее полем. Каждое поле имеет уникальное имя.
Обработка записей в языке Турбо Паскаль:
6.Описание нового типа данных - запись: a. Описание типа:
Type <имя типа> = Record
<имя поля 1> : <тип поля 1>;
…
<имя поля N> : <тип поля N>
End;
Если несколько полей имеют одинаковый тип, их имена можно перечислить через запятую.
b. Описание переменной типа запись:
Var <имя переменной> : <имя описанного выше типа>;
Например:
Type Book = Record { тип данных книга состоит из трех полей } Name, Author : String [ 30 ]; { название и автор } Year : Integer { год издания }
End;
Var Bk : Book; { Переменная Bk – запись с тремя полями }
7. Обращение к полям записи:
Для обращения к отдельному полю записи следует сначала указать имя переменной типа запись, затем через точку имя поля. Например: Bk.Name.
Для ввода значений полей описанной выше записи Bk может быть за-
писан следующий фрагмент программы:
Write (‘Введите название книги ’); Readln (Bk.Name);
69
Write (‘Введите фамилию автора ’); Readln (Bk.Author); Write (‘Введите год издания книги ’); Readln (Bk.Year);
При многочисленных обращениях к полям одной и той же записи мож-
но использовать оператор присоединения With.
With <имя переменной-записи> Do <составной оператор>;
Оператор With позволяет «вынести за скобки» имя переменной-записи.
Приведенный выше фрагмент программы можно переписать с использовани-
ем оператора присоединения:
With Bk Do
Begin
Write (‘Введите название книги ’); Readln (Name);
Write (‘Введите фамилию автора ’); Readln (Author);
Write (‘Введите год издания книги ’); Readln (Year)
End;
Примеры решаемых задач Пример 1. Составить программу, которая обрабатывает информацию о
студентах (фамилия, номер группы, рейтинг):
а) вводит такую информацию;
б) выводит список студентов заданной группы;
в) выводит список студентов в порядке убывания рейтинга.
Пояснение: Для хранения данных будем использовать массив записей
с информацией о студентах. (При решении этой задачи можно и не использо-
вать тип запись, а написать программу, обрабатывающую три массива. Без использования типа Record трудно обойтись при обработке файлов – см. сле-
дующую тему.)
Программа:
Program Record_Student;
Uses Crt;
70