Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тема 7. Основные принципы построения




Begin

Begin

<Тело процедуры>

End;

Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы (описание процедур и функций - в том числе). Однако все описанные здесь объекты "видимы" лишь в этой процедуре. Они здесь локальны также, как и имена формальных параметров. Объекты, описанные ранее в разделе описаний основной программы и не переопределенные в процедуре, называются глобальными для этой подпрограммы и доступны для использования.

Легко заметить схожесть структуры программы целиком и любой из ее процедур. Действительно, ведь и процедура и основная программа реализуют некий алгоритм, просто процедура не дает решения всей задачи. Отличие в заголовке и в знаке после End.

Формат описания функции:

Function <Имя функции> (<Имя форм. параметра 1>:<Тип>;

< Имя форм. параметра 2>:<Тип>): <Тип результата>;

<Раздел описаний>

<Тело функции>

End;

В теле функции обязательно должна быть хотя бы команда присвоения такого вида: <Имя функции>:=<Выражение>;

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

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

<Имя процедуры>(<Фактический параметр 1>, < Фактический параметр 2>);

Типы фактических параметров должны быть такими же, что и у соответствующих им формальных.

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

Отличие функции от процедуры:

1) Заголовок функции начинается со служебного слова Function и заканчивается указанием типа значения функции;

2) Раздел операторов функции должен содержать хотя бы один оператор присваивания имени функции;

3) Обращение к функции – не оператор, а выражение.

Приведем простейший пример использования подпрограммы.

Задача: "Найти максимальное из трех введенных чисел". Для решения воспользуемся описанием функции, принимающей значение максимального из двух чисел, которые передаются в нее в виде параметров.

Program Fn;

Uses Crt;

Var

A,B,C:Real; {глобальные переменные}

Function Max(x,y:Real):Real; {Описываем функцию Max с формальными параметрами x и y}

Begin

If x>y Then Max:=x Else Max:=y;

End;

Begin {начало основной программы}

Clrscr;

Writeln('Введите три числа');

Readln(A,B,C);

Writeln('Максимальным из всех является ', Max(Max(A,B),C));

End.

Обратите внимание на краткость тела основной программы и на прозрачность действий внутри функции. Формальным параметрам x и y при первом вызове передаются значения переменных А и В, а затем полученное и С.

Существует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке. В первом случае значение фактического параметра при вызове подпрограммы присваивается локальной переменной, являющейся формальным параметром подпрограммы. Что бы потом ни происходило с локальной переменной, это никак не отразится на соответствующей глобальной. Для одних задач это благо, но иногда требуется произвести в подпрограмме действия над самими переменными, указанными в качестве фактических параметров. На помощь приходит второй способ. Происходит следующее: при обращении к подпрограмме не происходит формирования локальной переменной - формального параметра. Просто на время выполнения подпрограммы имя этой локальной переменной будет указывать на ту же область памяти, что и имя соответствующей глобальной переменной. Если в этом случае изменить локальную переменную, изменятся данные и в глобальной.

Передача параметров по ссылке отличается тем, что при описании подпрограммы перед именем переменной - формального параметра ставится служебное слово Var.

Еще один классический пример. Задача: "Расположить в порядке возрастания три целых числа".

Program Pr;

Uses Crt;

Var

S1,S2,S3:Integer; {глобальные переменные}

Procedure Swap(Var A,B: Integer);

Var

C: Integer; {локальная переменная}

Begin

C:=A; A:=B; B:=C {меняем местами содержимое A и B}

End;

Begin {начало основной программы}

Clrscr;

Writeln('Введите три числа');

Readln(S1,S2,S3);

If S1>S2 Then Swap(S1,S2);

If S2>S3 Then Swap(S2,S3);

If S1>S2 Then Swap(S1,S2);

Writeln('Числа в порядке неубывания: ',S1,S2:4,S3:4)

End.

Контрольные вопросы

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

2. Отличие константы от переменной в языке Паскаль.

3. Перечислите базовые типы данных в языке Паскаль.

4. Перечислите арифметические операции и стандартные функции над данными целого типа.

5. Перечислите арифметические операции и стандартные функции над данными вещественного типа.

6. Какие арифметические операции невозможны над данными вещественного типа.

7. Сколько памяти занимают данные целого, вещественного и символьного типа.

8. Какие значения принимают данные логического типа и сколько места в памяти они занимают.

9. Привести таблицу истинности логических операций Not, And, Or.

10. Приведите формат оператора ввода. Приведите примеры оператора ввода.

11. Приведите формат оператора присваивания. Приведите примеры оператора присваивания.

12. Приведите формат оператора вывода. Приведите примеры оператора.

13. Для чего нужно указание формата числа в операторе вывода. Приведите примеры.

14. Приведите формат условного оператора. Приведите примеры.

15. Какие операторы цикла вы знаете?

16. Чем отличается цикл While от цикла Repeat?

17. Приведите формат оператора цикла While. Приведите пример оператора.

18. Приведите формат оператора цикла Repeat. Приведите пример оператора.

19. Приведите форматы оператора цикла For. Приведите пример оператора.

20. Чему равен шаг изменения параметр цикла (счетчика) в цикле For?

21. Что называется массивом?

22. Отличие одномерного массива от двумерного.

23. Как объявить одномерный массив?

24. Как объявить двумерный массив? Пример.

25. Приведите фрагмент ввода одномерного массива с клавиатуры.

26. Приведите фрагмент ввода двумерного массива с клавиатуры.

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

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

29. Приведите фрагмент вывода одномерного массива в строку.

30. Приведите фрагмент вывода двумерного массива в виде матрицы.

31. Какие виды подпрограмм вы знаете?

32. Когда используются подпрограммы?

33. Что должна иметь в своем составе любая подпрограмма?

34. Приведите формат процедуры.

35. Приведите формат функции.

36. Где объявляются локальные переменные, а где глобальные?

37. Что такое формальные и фактические параметры подпрограмм?

38. Что означает модификатор Var, стоящий перед формальным параметром?

39. Отличие процедуры от функции.

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 306; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.