Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Простейшие процедуры

Условный операторIF или как компьютер делает выбор | Правила записи оператора IF | Составной оператор | Вложенные операторы if. Сложное условие в операторе if. Логические операции | Символьный тип данныхChar | Оператор переходаGOTO. Цикл. Метки | Оператор цикла repeat | Отличия операторов repeat и while | Глава 7. Типичные маленькие программы | Вложенные циклы |


Читайте также:
  1. II. Порядок выплаты ежемесячной компенсации на оплату проезда до места проведения процедуры гемодиализа инвалидам, находящимся на постоянном диализном лечении.
  2. Административные процедуры как форма реализации компетенции органов внутренних дел.
  3. Административные регламенты как акты управления, устанавливающие административные процедуры.
  4. Внутренние процедуры
  5. Внутренние процедуры контроля над дискурсом (М.Фуко)
  6. Вопрос 15. Процедуры..
  7. Глава 13. Процедуры и функции с параметрами

Задача: Все вы слышали про азбуку Морзе, широко использовавшуюся раньше для радиосвязи с кораблями и не только с ними. Включив радиоприемник и покрутив ручку настройки, можно было услышать частую тоненькую дробь однотонных сигналов разной длительности: точки (очень короткие сигналы) и тире (сигналы подлиннее). Каждая буква алфавита кодируется в азбуке Морзе последовательностью точек и тире.

Вот таблица кодирования русских и латинских букв (латинские буквы показаны строчными, а русские - заглавными):

Аa .- Бb -… Вw .-- Гg --. Дd -.. Еe . Жv …- Зz --..
Иi .. Йj .--- Кk -.- Лl .-.. Мm -- Нn -. Оo --- Пp .--.
Рr .-. Сs Тt - Уu ..- Фf ..-. Хh …. Цc -.-. Ч ---.
Ш ---- Щq --.- Ъ,Ьx -..- Ыy -.-- Э ..-.. Ю ..-- Я .-.-    

 

Закодируем азбукой Морзе текст PIPING и заставим компьютер воспроизвести соответствующий набор звуков. Пусть продолжительность точки - 100 миллисекунд, тире - 200, пауза молчания после точки или тире - 80, пауза после буквы - 300. Частота звуков не играет роли, выберем наугад 900 гц.

 

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

Sound(900);Delay(100); NoSound; Delay(80)

А вот фрагмент, воспроизводящий тире:

Sound(900);Delay(200); NoSound; Delay(80)

 

Вот вся программа:

Программа 1

USES CRT;
BEGIN

{буква P:}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

{буква I:}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

{буква P:}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

{буква I:}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

{буква N:}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

{буква G:}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Delay(300); {пауза}

END.

Недостатки программы:

· Довольно большой объем, что обидно, так как в программе много одинаковых фрагментов.

· Если бы не комментарии, было бы совершенно непонятно, о чем эта программа.

 

А теперь я напишу ту же программу, но с использованием процедур:

Программа 2

USES CRT;

 

PROCEDURE tochka;

BEGIN Sound(900); Delay(100); NoSound; Delay(80) END;

 

PROCEDURE tire;

BEGIN Sound(900); Delay(200); NoSound; Delay(80) END;

 

BEGIN

{буква P:} tochka; tire; tire; tochka; Delay(300);

{буква I:} tochka; tochka; Delay(300);

{буква P:} tochka; tire; tire; tochka; Delay(300);

{буква I:} tochka; tochka; Delay(300);

{буква N:} tire; tochka; Delay(300);

{буква G:} tire; tire; tochka; Delay(300);

END.

Программа 2 гораздо короче и даже без комментариев понятнее программы 1. Поясним, как мы получили ее из предыдущей.

Сначала мы обнаружили в программе 1 часто повторяющиеся фрагменты. Их было два:

Sound(900); Delay(100); NoSound; Delay(80); {точка}

Sound(900); Delay(200); NoSound; Delay(80); {тире}

Затем мы придумали имена каждому фрагменту: tochka и tire. После этого можно было писать программу 2. Каждый фрагмент мы записали один раз в начале программы выше главного BEGIN, оформив его в виде так называемого описания процедуры:

PROCEDURE tochka;

BEGIN Sound(900); Delay(100); NoSound; Delay(80) END;

PROCEDURE tire;

BEGIN Sound(900); Delay(200); NoSound; Delay(80) END;

В результате программа “узнала”, что такое tochka и tire. С этого момента имена процедур tochka и tire можно употреблять, как обыкновенные операторы, ниже главного BEGIN. Паскаль выполняет программу, начиная с главного BEGIN, и когда он натыкается на имя процедуры, он подставляет вместо него соответствующий фрагмент, взятый из описания процедуры. Это событие называется вызовом процедурыили обращением к процедуре.

Синтаксис описания простейшей процедуры таков:

PROCEDURE имя; BEGIN оператор; оператор;... END

Слово PROCEDUREчитается “про’сидже”, переводится “процедура”. Имя процедуры создается по тем же правилам, что и имя переменной. Все, что идет после имени, будем называть телом процедуры.

Задание 64: Составьте программу с процедурами, которая исполнит мелодию “Чижик-пыжик” (ми-до-ми-до-фа-ми-ре-соль-соль-ля-си-до-до-до).

 

А теперь попробуем еще больше упростить нашу программу. Замечаем, что и в программе 2 тоже имеются одинаковые фрагменты:

{буква P:} tochka; tire; tire; tochka; Delay(300);

{буква I:} tochka; tochka; Delay(300);

Для экономии места их тоже выгодно оформить в виде процедур:

PROCEDURE P;

BEGIN tochka; tire; tire; tochka; Delay(300) END;

PROCEDURE I;

BEGIN tochka; tochka; Delay(300) END;

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

Программа 3

USES CRT;

 

PROCEDURE tochka;

BEGIN Sound(900); Delay(100); NoSound; Delay(80) END;

 

PROCEDURE tire;

BEGIN Sound(900); Delay(200); NoSound; Delay(80) END;

 

PROCEDURE P;

BEGIN tochka; tire; tire; tochka; Delay(300) END;

 

PROCEDURE I;

BEGIN tochka; tochka; Delay(300) END;

 

PROCEDURE N;

BEGIN tire; tochka; Delay(300) END;

 

PROCEDURE G;

BEGIN tire; tire; tochka; Delay(300) END;

 

 

BEGIN

P;I;P;I;N;G

END.

Эта программа понятна и без комментариев. От предыдущей она отличается тем, что процедуры вызываются не только из тела программы, но и из тел других процедур. Действительно, посмотрим на самое начало выполнения программы. Первое, на что натыкается Паскаль ниже главного BEGIN, это P. Заглянув выше главного BEGIN, Паскаль обнаруживает, что P - это имя процедуры, и начинает ее выполнять (вызывает на выполнение). При этом, первое, на что он натыкается, это tochka. Заглянув выше, Паскаль обнаруживает, что tochka - это имя процедуры, и тоже начинает ее выполнять (вызывает на выполнение). Обратите внимание, что

вызываемая процедура должна быть описана выше вызывающей.

Такая уж особенность у Паскаля. О том, что делать, если это требование выполнить невозможно, написано в 10.6. Закончив выполнять процедуру tochka, Паскаль возвращается в процедуру P (возвращает управление процедуре P). Там он идет к следующему оператору. Это оказывается tire. И т.д.

Задание 65: Компьютер печатает текст Песня «Чижик-пыжик». 1 куплет. После этого исполняется мелодия чижика-пыжика (см. выше). Затем компьютер печатает текст 2 куплет и мелодия чижика-пыжика исполняется еще раз.


Дата добавления: 2015-11-14; просмотров: 49 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Поиск максимального из чисел| Переключение между текстовым и графическим режимами

mybiblioteka.su - 2015-2024 год. (0.01 сек.)