Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pesni_o_Paskale_2012-11-23.pdf
Скачиваний:
35
Добавлен:
19.03.2016
Размер:
5.16 Mб
Скачать

Глава 19 Процедуры и функции: разделяй и властвуй

Как действует такая процедура? В момент вызова в главной программе формальному параметру msg автоматически присваивается указанное в вызове фактическое значение, — оно и будет напечатано. Повторяю: присвоение формальному параметру фактического значения происходит автоматически, без участия программиста. Теперь наша программа станет такой.

{ P_19_2 – применение процедуры с параметром }

var Man : string;

{--- объявление процедуры с параметром msg ---} procedure Pause (msg : string);

begin

 

Write(msg);

Readln;

end;

 

begin

{--- главная программа ---}

Writeln(’Как тебя зовут?’); Readln(Man);

Writeln(’Здравствуй, ’, Man);

Pause(’Нажмите Enter…’);

Pause(’Еще раз…’);

Pause(’И еще разок!’);

end.

Здесь процедура Pause вызвана трижды с тремя разными фактическими параметрами, испытайте эту программу.

Итоги

С ростом размера программы стремительно растет её сложность. Для упрощения программ их разбивают на процедуры и функции.

Чтобы создать процедуру или функцию, необходимо поместить в программе её описание, состоящее из заголовка и тела.

Внутрь процедуры или функции можно передать один или несколько параметров. Для этого в заголовке процедуры объявляют формальные параметры, а при вызове указывают фактические.

Тип фактического параметра должен совпадать с типом формального параметра, объявленного в процедуре.

Аслабо?

А) Напишите еще одну версию процедуры Pause, выводящую сообщение либо на русском, либо на английском языке. Параметр этой процедуры должен быть булевым и работать она должна так.

125

Глава 19 Процедуры и функции: разделяй и властвуй

Pause(true);

{

печатается

«Нажмите Enter…» }

Pause(false);

{

печатается

«Press Enter…» }

 

 

 

 

Б) Напишите и испытайте процедуру (назовем её Line — «линия»), печатающую строку заданной длины, составленную из звездочек, например:

Line(3);

{

печатает

«***» }

Line(7);

{

печатает

«*******» }

 

 

 

 

Подсказка: внутри процедуры надо организовать цикл.

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

Г) Напишите и испытайте процедуру, принимающую два параметра — числа, и печатающую их сумму и их разность.

Задачи на темы предыдущих глав

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

начиная с первых цифр, например 112-345-1;

начиная с последних цифр, например 1-123-451.

Е) Почтальон разносит газеты по улице, состоящей из N домов. Четные и нечетные номера расположены по разные стороны улицы. В здравом уме почтальон не рискует лишний раз переходить её. Ваша программа должна напечатать последовательность номеров, по которым будут разнесена почта, когда почтальон начинает работу:

с первого дома;

со второго дома;

с N-го (то есть последнего) дома.

126