Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка Паскаль

.pdf
Скачиваний:
101
Добавлен:
30.04.2015
Размер:
592.26 Кб
Скачать

a.) 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