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

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

..pdf
Скачиваний:
11
Добавлен:
15.11.2022
Размер:
2.96 Mб
Скачать

Блок-схема:

 

Начало

__^

|— <Ч'

£ = 1 0 ,3 0

/

F = £*1.8+32

*

£ ,F

В блоке модификации (блок оператора For) ука­ зывается параметр цикла к, его начальное и конечное значения.

(^ ^ ^ К о н е ц ^ ^ )

Программа этого примера:

Program DemoFor;

 

Var к: integer;

 

F: real;

 

Begin

 

Writeln (‘ Температура

’);

For k:=10 to 30 do

 

Begin

{начало тела цикла}

F:=k*1.8+32;

 

Writeln(*no Целъсию=’,к:3,’По Фаренгейту=F:6:2);

End;

{конец тела цикла}

End.

 

Переменная цикла в операторе For может изменяться в противоположном направлении - убывать, т.е. с шагом h = - 1. Для этого зарезервированное слово То надо заме­ нить на DownTo.

Пример 5.5. Вывести на экран символы американского стандартного кода обмена информацией (ASCII) в порядке убывания кода.

Program DemoASCII;

Var i: integer;

Begin

 

 

Writeln (‘

Таблица

ASCII ’);

For i:=255

downto

0 do

Writeln(‘Kod символа-’,i:3,’ Символ-’, chr(i));

End.

Стандартная функция Chr(i:byte):char возвращает сим­ вол из ASCII с кодом i. Например, Chr(82)=R.

Тело цикла содержит единственный простой оператор Writeln, поэтов операторные скобки (Begin-End) необяза­ тельны. Результатом работы программы будет таблица:

Код символа-255 Символ-I

Код символа-148 Символ- Ф

Код символа-82 Символ- R

Пример 5.6. Найти наибольшее число из N вводимых с пульта чисел. Обозначим это максимальное число - Мах.

Алгоритм выбора наиболыпего/наименыпего из множе­ ства чисел основан на последовательном сравнении двух чисел. Наибольшее из них присваивается переменной Мах.

Первоначально за максимальное число принимается очень маленькое значение, например Мах = -1 Е + 5, так, чтобы на первом шаге переменная Мах приняла первое вводимое число.

Минимальное значение находится аналогично, в каче­ стве первоначального наименьшего значения принимается очень большое число, например Min = IE + 5.

Блок-схема:

Программа имеет вид

Program Мах;

Var i, N: integer;

A, Max: real;

Begin

Max:=-lE+5;

Write('Beedume количество чисел-);

Readln(N);

For i:=l to N do

Begin

Write('Beedume i=r, i:2,' число A=);

Readln(A);

I f A>Max then Max:=A;

End;

Writeln('max= \Max:6:2);

End.

Контрольные вопросы и задания

1.Понятие циклического алгоритма. Какие данные необ­ ходимы для организации цикла. Что такое параметр цикла?

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

3.В чем отличие операторов цикла While и Repeat?

4.В каких случаях предпочтительнее использовать для организации цикла оператор Fori Что записывается в заго­ ловке этого оператора?

5.Алгоритм табулирования функции. Вывод результа­ тов табулирования в формате таблицы.

6.Составить программу, вычисляющую значения к первых членов арифметической прогрессии: ai+1 = ai + 2,

аг = 5, к = 10.

Лекция 6

Подпрограммы

6.1.Подпрограммы, их назначение

иклассификация

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

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

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

-программа разбивается на множество мелких под­ программ;

-каждая подпрограмма отлаживается отдельно, неза­ висимо от других подпрограмм;

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

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

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

Важная характеристика подпрограммы - это возмож­ ность их повторного использования. Чтобы подпрограмма при обращении к ней выполнялась каждый раз с новыми данными, она записывается в общем виде. Имена (иденти­ фикаторы) в основной программе и в подпрограмме не за­ висят друг от друга.

В языке Паскаль существует два вида подпрограмм: процедура (Proctdure) и функция {Function).

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

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

предварительного описания. Стандартные

процедуры

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

написанные

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

Примеры вызова стандартных процедур и функций:

1.Write(xi, Х2, ...рсп) - стандартная процедура, в скоб­ ках записываются параметры вывода.

2.SIN(x) - стандартная функция, в скобках стоит один параметр (аргумент математической функции sin х).

3.ClrScr - стандартная процедура, параметры отсут­ ствуют.

Формат обращения к стандартной подпрограмме имеет вид <имя подпрограммы> [(<список параметров>)];

6.2.Подпрограммы пользователя

Наряду с возможностью использования встроенных подпрограмм Паскаль предоставляет возможность созда­ ния собственных, пользовательских подпрограмм. Правила «хорошего тона» в программировании предполагают ис­ пользование подпрограмм пользователя. Это обеспечивает возможность реализации принципов структурного про­ граммирования.

При вызове подпрограмм пользователя работа основ­ ной программы на некоторое время приостанавливается, и начинает работать вызванная подпрограмма. Она обраба­ тывает данные, переданные ей из основной программы. После завершения работы подпрограммы результаты счета явно (функция) или неявно (процедура) возвращаются в основную программу.

Передача данных из основной программы в подпро­ грамму и возврат результата выполнения в программу осуществляются с помощью параметров.

Параметр - это переменная, которой присваивается некоторое значение из определенного заранее диапазона значений.

Различают два вида параметров:

-формальные - параметры, определенные в заголов­ ке подпрограммы;

-фактические - это выражения, задающие конкрет­ ные значения при обращении к подпрограмме.

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

6.3.Оформление и вызов процедур

Процедура (Procedure) имеет такую же структуру, как и программа. А вот структура заголовка процедуры имеет другой синтаксис:

Procedure <имя>. (<список описаний формальных параметров>);

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

Вызов процедуры в основной программе осуществля­ ется по формату

<имя процедуры> (<список фактических параметров>);

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

Пример 6.1. Рассмотрим пример оформления и вызова процедуры для вычисления площади треугольника, задан­ ного длинами своих сторон а, Ь, с по формуле Герона:

s = VP (P - а)(р - Ь)(р - с),

(6.1)

а+Ь+с

где р = —

Назовем процедуру Surface. Имена переменных (иден­ тификаторы) выберем в соответствии с формулой (6.1).

Procedure Surface (a, b, с : real; Var S: real);

V__________

Y

J \____ ..____)

 

Y

входные выходные

Ч_______ ^ ________/

Формальные параметры

Var р: real; Begin

p:=(a+b+c)/2;

S:=SQRT(p*(p-a) *(p-b) *(p-c));

End;

Блок-схема подпрограммы оформляется следующим образом:

В нашем случае формальными параметрами являются

а, Ь, с, S.

Формальные параметры описываются в заго­ ловке процедуры с указанием типов и могут содер­ жать входные и выходные параметры.

Входные параметры - это параметры, значения кото­ рых передаются в процедуру из основной программы. У нас это длины сторон треугольника (а, Ь, с).

После выполнения процедуры результаты ее, называе­ мые выходными параметрами, передаются в основную программу в то место, откуда был сделан вызов процеду­ ры. А затем продолжается выполнение основной програм­ мы. Перед выходными параметрами в списке формальных параметров стоит зарезервированное слово Var. У нас вы­ ходной параметр один. Это S - площадь треугольника.

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

Между формальными и фактическими парамет­ рами устанавливается строгое соответствие по сле­ дующим пунктам:

-по количеству параметров;

-по типам соответствующих параметров;

-по расположению параметра в списке.

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