Занятие 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=’ко’ |
Спасибо за внимание!