Вызов процедуры по имени

Занятие 4 «Процедуры. Локальные и глобальные, формальные и фактические переменные»

Ключевые слова:  подпрограмма, вспомогательный алгоритм, процедура, локальные переменные, глобальные переменные, формальные переменные, фактические переменные.

Вопросы для повторения
1. Как ввести и вывести данные на экран? 2. Что такое переменная? 3. Как описать переменные? 4. Какие типы данных вы знаете?
Найдите ошибки в записи команд. 1. var x,y:string; begin x:=’ток’; y:=-x; end. 2. var x,y:integer; begin x:=25; y:=x/5; end.
При каком начальном значении переменной после исполнения серии команд получится указанный ответ: y:=y+'ло'+y; y:=y+'л'; Ответ: y='колокол'

 

Давайте вспомним нашу программу, с прошлого занятия.

Компьютер: В каком году ты родился?
Человек:
2005
Компьютер:
Я думаю, тебе 15 лет
Компьютер:
В каком году родился твой отец?
Человек:
1980
Компьютер:
Я думаю, твоему отцу 40 лет
Компьютер:
В каком году родилась твоя мама?
Человек:
1982
Компьютер:
Я думаю, твоей маме 38 лет

 

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









Вопрос: Как сократить программу?

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

Цель:

· Научиться использовать процедуры в языке программирования Pascal и применять их на практике

 

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

Можно описать вспомогательный алгоритм или подпрограмму - процедуру, которая будет делать эти повторяющиеся действия. И в основной программе просто вызывать этот вспомогательный алгоритм.

А что делать, если части программы похожи, но не совсем одинаковые? Можно использовать переменные, передавая их в процедуру. Например, в одном случае мы спрашиваем про возраст отца, в другом - про возраст матери, и вот эта строка, которую мы выводим на экран, меняется. Будем передавать ее во вспомогательный алгоритм.

Величины, передаваемые во вспомогательный алгоритм, называются аргументами. А чтобы из вспомогательного алгоритма (подпрограммы, процедуры) что-то передать в основную программу, тоже используются переменные. Они называются результатами процедуры.

Где располагаются подпрограммы в программе?

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

Как работает компьютер по программе, имеющую подпрограммы?

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

Как оформляется подпрограмма?

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

Фактические и формальные параметры.


         Когда мы описываем вспомогательный алгоритм, мы используем так называемые формальные параметры. А когда будем использовать его - будем вместо формальных параметров подставлять фактические. Например, вместо параметра "год рождения человека" можно подставить "год рождения матери" или "год рождения отца".

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

При описании процедуры перед теми формальными параметрами, которые должны будут передаваться в основную программу, надо ставить служебное слово var.

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


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

procedure имя_процедуры(формальные параметры);

{раздел описания переменных}

begin    {начало процедуры}

        {раздел операторов}

end.    {конец процедуры}

Вызов процедуры по имени.

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

 

Пример:

program prim;

var name,s,s1:string;

     


procedure welcome (s:string; var s1:string);


Begin

writeln(s +' ');

readln(s1);

end;

{основная программа}

Begin

Вызов процедуры

welcome('Скажите Ваше имя?', name);

write(‘Ваше имя’, name);

End.

                                    

                                Давайте попробуем написать подпрограмму, которая будет вычислять возраст человека.
Подпрограмма будет называться age, что в переводе значит "возраст"
Какие у нее будут аргументы?

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

       Во-вторых, компьютер выводит каждый раз разные комментарии, кому именно столько лет, сколько компьютер вычислил: "тебе", "твоему отцу", "твоей маме". Обозначим эту величину s2.

 

Какого она типа, как вы думаете?

      В -третьих, еще один аргумент - это текущий год! Нельзя просто написать константу в программе, ведь иначе в следующем году программа будет работать неверно. Поэтому третий аргумент year - текущий год. Это целое число.
 

Какие же будут результаты у подпрограммы?

 

birth - год рождения человека (мы введем его с клавиатуры) и age - возраст человека

Что будет происходить в теле вспомогательного алгоритма?

 

Подсказка, в теле вспомогательного алгоритма, будет происходить вычисление возраста, как это делается, смотри прошлое занятие.

Давайте напишем нашу подпрограмму. Назовем ее
age_calculation - в переводе «вычисление возраста».

 

Надеюсь, у Вас все получилось.

 

Давайте теперь перепишем нашу программу.

Псевдокод программы.

{описать процедуру вычисления возраста по текущему году и году рождения}
 begin
{ввести текущий год}
{вызвать процедуру вычисления возраста для самого человека}
{вызвать процедуру вычисления возраста для отца человека}
{вызвать процедуру вычисления возраста для матери человека}
end.                      

 

Замените фразы в фигурных скобках на фрагменты программы.

 

Ответы на задания.

Найдите ошибки в записи команд. 1. var x,y:string; begin x:=’ток’; y:=-x; (К строковым типам данных не применима данная операция) end. 2. var x,y:integer; begin x:=25; y:=x/5; (Для операции деления нужен вещественный тип, а тут объявлен целочисленный) end.
При каком начальном значении переменной после исполнения серии команд получится указанный ответ: y:=y+'ло'+y; y:=y+'л'; Ответ: y='колокол' Ответ: y=’ко’

 

 

Спасибо за внимание!

 












Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: