Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемГалина Волокитина
1 Подпрограммы - процедуры
2 Очень часто в процессе выполнения программы требуется многократное выполнение какой-либо ее части. Лучше всего повторяющуюся часть программы выделить, обозначить ее ИМЕНЕМ, Задать ей необходимые параметры и вызвать эту часть программы по ИМЕНИ. Для этого во всех языках программирования существуют средства организации подпрограмм.
3 При создании программы для решения более или менее сложной задачи выполняется разделение этой задачи на подзадачи, этих подзадач – на более мелкие подзадачи и так далее до тех пор, пока подзадачи не станут легко программируемыми.
4 4 Процедуры Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: выполнение одинаковых действий в разных местах программы разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Подзадача1Подзадача2Подзадача Задача
5 Использование подпрограмм позволяет, 1.сократить объем программы, 2.улучшает структуру программы с точки зрения ее читаемости и наглядности, делает программу более компактной и наглядной 3.уменьшает вероятность ошибок и облегчает процесс отладки.
6 Подпрограммы имеют структуру, аналогичную главной программе. Они содержат заголовок со специальным словом - признаком подпрограммы, имя и, при необходимости, списки передаваемых на обработку и получаемых из подпрограммы данных. Затем могут располагаться все имеющиеся в главной программе разделы описаний: меток, констант, типов и переменных. В этих разделах описываются данные, используемые только внутри подпрограммы и являющиеся промежуточными при её выполнении.
7 ПРОЦЕДУРЫ и ФУНКЦИИ В языке Паскаль механизм подпрограмм реализуется в виде ПРОЦЕДУР и ФУНКЦИЙ, которые вводятся в программе с помощью своего описания, но их структура такая же, как и структура программы.
8 Они различаются назначением и способом их использования. Функции нужны для вычисления нового значения некоторого выражения. Процедуры служат для задания последовательности действий и определения новых значений переменных в программе.
9 Процедура - подпрограмма, имеющая любое количество входных и выходных данных. Параметры - это данные из заголовка процедуры, как передаваемые ей на обработку, так и получаемые в виде результатов. Таким образом, с помощью параметров происходит обмен информацией между процедурой и вызывающей её программой.
10 Procedure ( ); {эта часть заголовка может отсутствовать} Var Begin End; ПРОЦЕДУРЫ
11 Процедуры Процедуры предназначены для выполнения некоторой последовательности действий. Любая процедура начинается с заголовка, который является ее обязательной частью (в отличие от заголовка программы). Он состоит из служебного слова Procedure, за которым следует имя процедуры, а в круглых скобках - список формальных параметров, в конце ставим точку с запятой. После заголовка могут идти те же разделы, что и в программе. Таким образом, общий вид будет следующим:
12 Тело подпрограммы (процедуры или функции)- это блок, состоящий из двух частей: описания объектов и группы операторов.
13 Описание процедуры имеет следующий вид:
14 Обмен аргументами и результатами между основной программой и процедурой производится через формальные и фактические параметры
15 Результат выполнения процедуры - это одно или несколько значений. Оно (или они) передается в основную программу как значение ее параметра. При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования.
16 Фактические параметры это параметры, которые передаются процедуре при обращении к ней. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
17 Формальные параметры это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Все формальные параметры делятся на два вида: параметры-переменные; параметры-значения.
18 Процедуры Без параметровС параметрами Параметры – переменные Параметры – значения
19 Р1 Р2 Р21 Процедуры без параметров
20 Составить программу для вычисления площади выпуклого 4-угольника, заданного длинами его сторон и диагональю. A B D C Диагональ делит 4-угольник на два 3-угольника, к которым применима формула Герона:
21 program Prog1; uses CRT; var AB, BC, CD, DA, AC, S1, S2, S, a, b, c, p: real; Procedure Ploshad1; begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); end; begin Clrscr; Writeln('Задайте стороны 4-х угольника ABCD и его диагональ AC'); readln (AB, BC, CD, DA, AC); a:=AB; b:=BC; c:=AC; Ploshad1; S1:=s; a:=DA; b:=AC; c:=CD; Ploshad1; S2:=s; Writeln ('Площадь ABCD= ', S1+S2:8:2); readln; end. A B D C 2 обращения к процедуре Команды присваивания, задающие значения a, b, c перед каждым вызовом процедуры Команды присваивания для сохранения результатов Связь процедуры Ploshad1 с остальными операторами происходит с помощью переменных a, b, c и s. Переменная p используется только внутри процедуры. Ее можно и описать в этой процедуре.
22 program Prog2; var AB, BC, CD, DA, AC, S1, S2, S, a, b, c: real; Procedure Ploshad1; var p:real; begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); end; begin Writeln('Задайте стороны 4-х угольника ABCD и его диагональ AC'); readln (AB, BC, CD, DA, AC); a:=AB; b:=BC; c:=AC; Ploshad1; S1:=s; a:=DA; b:=AC; c:=CD; Ploshad1; S2:=s; Writeln ('Площадь ABCD= ', S1+S2:8:2); readln; end.
23 Параметры-переменные - это те формальные параметры, перед которыми стоит служебное слово Var. Они передаются по ссылке (передается адрес фактического параметра) тогда, когда необходимо передать некоторые новые значения в точку вызова процедуры из программы, то есть когда нужно, чтобы изменения в теле процедуры значений формальных параметров приводило к изменению соответствующих фактических параметров, таким образом, они и получают новое значение.
24 Параметры-значения – это параметры перед которыми слово Var не ставится и идет передача по значению, то есть передается только копия значения этих параметров, внутри процедуры можно производить любые действия с данными формальными параметрами (допустимые для его типа), но их любые изменения никак не отражаются на значениях соответствующих фактических параметров, то есть какими они были до вызова процедуры, то такими же и останутся после завершения ее работы.
25 Глобальные и локальные переменные В программе все переменные делятся на глобальные и локальные. Глобальные переменные - это те переменные, которые объявлены в описании основной части, их значения и подпрограмма, и главная программа берут из общей памяти.
26 Локальные переменные Локальные переменные - это те, которые объявлены в процедуре. Эти переменные помешаются в стек при вызове подпрограммы и убираются из него при возвращении в точку вызова. Таким образом, локальные переменные существуют только тогда, когда работает подпрограмма, появляются при вызове и исчезают при завершении работы.
27 Переменные, которые описаны и используются внутри процедуры, называются – локальными. Переменные, которые описаны в основной программе, называются – глобальными. Локальные переменные действуют только внутри данной процедуры. Глобальные переменные действуют во всей программе и в каждой ее процедуре.
28 Пример: Составить программу, которая будет находить а n, то есть n-ую степень числа а, где а и n>0 - целые числа, вводимые с клавиатуры.
29 Решение Составим процедуру, которая вычисляет степень целого числа. Procedure Degree (x,y: Integer; Var st: Longint); {заголовок процедуры} Var i:Integer; {описательная часть} Begin {тело процедуры} st:=l; For i:=1 To y Do st:=st*x; End;
30 Procedure Degree(x,y: Integer; Var st: Longint); {заголовок процедуры} Var i:Integer; {описательная часть} Begin {тело процедуры} st:=l; For i:=1 To y Do st:=st*x; End; В скобках записан список формальных параметров, то есть перечислены переменные с указанием их типа. Будем передавать три параметра: первый параметр - снование, то есть число, которое надо возвести в степень, второй параметр - то степень, а третий - то результат. Поэтому первые два формальные параметра - то параметры-значения, а третий - это параметр-переменная и перед ним надо написать слово Var. Обозначим их х, у и st, где st=xy. Все они описаны целым типом (х и у типом Integer, a st - Longint, так как степенная функция быстро возрастает). После заголовка идет описательная часть. В нашем примере она состоит только из раздела переменных, где имеется одна переменная i (для работы с циклом).
31 В программе процедуры и функции описываются после раздела ее переменных, но до начала ее основной части, то есть до Begin, начинающего эту часть. Вся программа для нашей задачи может иметь следующий вид:
32 Program Example; Var a, n: Integer; s: Longint; Procedure Degree(x,y: Integer; Var st: Longint); Var klnteger; Begin st:=l; For i:=l To y Do st:=st*x; End; Begin Writeln('Введите два числа'); {ввод значений} Readln(a,n); Degree(a,n,s); {обращение к процедуре} Writeln('Результат ',s); {вывод значения а} Readln; End.
33 Процедура вызывается как оператор, состоящий из имени процедуры. В круглых скобках передаются фактические параметры. В нашем примере, фактические параметры а, n и s передают свои значения соответственно формальным параметрам х, у и st. После завершения работы процедуры переменные а и n имеют те же значения, что и при вызове, a s получает новое значение.
34 Как происходит передача параметров? Пусть а=3 и n=4. Когда в программе встречается оператор Degiee(a,n,s), то ЭВМ выполняет следующие действия: 1.Выделяет память для переменных, описанных в процедуре Degree; 2.Присвоит формальным параметрам значения фактических: х:=а (х=3), у:=n (у=4), st:=s; 3.Выполняет операторы процедуры, то есть найдет З4; 4.Полученное значение присвоит переменной s, а переменные а и n остаются прежними, после этого переходит к выполнению следующих действий программы в точке вызова, то есть выполняется следующий оператор, стоящий за обращением процедуры. Переменные х, у, st, i - это локальные переменные.
35 Закрепление Задача 3: Даны два целых числа. Поменять местами их значения.
36 Program ex5; var a,b:integer; procedure Mesto(var x,y:integer); var z:integer; begin z:=x; x:=y; y:=z; end; begin writeln('Введите два целых числа '); {ввод значений} readln(a,b); Mesto(a,b); {Обращение к процедуре} writeln('a=', a, ' b=', b); {Вывод новых значений} readln; end.
37 Закрепление Найти НОД и НОК двух целых чисел (значение НОК вывести на экран).
38 Program Example2; Const c:= arrey[1..5] of integer = (36,54,72,18,15); Var x, y, i,m: Integer; Procedure NOD(a,b: Integer; Var k: integer); Begin While ab do If a>b then a:= a-b else b:=b-a; K:=a End; Begin x:=c[1]; for i:=2 to 5 do begin y:=c[i]; NOD(x,y,m); X:=x*y div m End; Writeln(НОК =,x); End.
39 Повторение пройденного материала; 1.Что такое подпрограмма и как она записывается? 2.Какие подпрограммы существуют? 3.Что такое процедура и как она описывается? 4.Что такое параметры? Какие виды параметров вы знаете? 5.Какие виды переменных вы знаете?
40 Рассмотрим несколько готовых программ, с помощью которых разберём механизм передачи параметров. Задача: Вычислить сумму квадратов двух чисел
41 1. Program ex 1; {Параметры- значения} Var A,B : real; {Процедура вычисления квадратов двух чисел и вывода на экран их суммы} Procedure Sum_ Sqare(X,Y:real) {X,Y- формальные параметры} Begin X:=X*X: Y:=Y*Y; Writeln(Сумма квадратов =, X+Y); End; {конец процедуры} Begin {Начало основной программы} A:=1.5; B:= 3.4; Sum_Square(A,B); {Вызов процедуры Sum_Square с передачей ей значений фактических параметров А и В} End.
42 Задача: Вычислить сумму и разность квадратов двух чисел
43 Program ex 2; Var A,B:real; { Параметры- переменные } SumAB,SubAB:real; {Процедура с параметрами- переменными Sum, Sub} Procedure Sum_Sub(X,Y:real; var Sum,Sub:real); Begin Sum:=X*X+Y*Y; Sub:=X*X-Y*Y; End;{Конец процедуры} Begin {Начало основной программы} A:=1.5; B:=3.4; Sum_Sub(A, B, SumAB, SubAB); {Вызов процедуры с передачей ей фактических параметров- значений А, В и параметров переменных SumAB, SubAB} Writeln(Сумма квадратов чисел, A, и,B,=,SumAB); Writeln(Разность квадратов чисел,A,и,B,=, SubAB); End.
44 Решим следующую задачу Дана строка символов. Написать процедуру удаления из строки всех кратных рядом стоящих символов.
45 Для решения задачи: формируем тело программы и описываем переменные; создаём описание процедуры SIM для обработки строки; вводим строку S и определяем её; вызываем процедуру SIM; завершаем работу программы.
46 Переменные: в процедуре SIM: S – вводимая строка(глобальная переменная); I – вспомогательная переменная цикла(локальная переменная); STR – вспомогательная строка(локальная переменная);
47 в основной программе: S – вводимая строка(глобальная переменная); L – длина строки(глобальная переменная).
48 PROGRAM EX4; VAR S:STRING; L:INTEGER; PROCEDURE SIM; VAR I:INTEGER; STR: STRING; BEGIN STR:=S[1]; FOR I:=2 TO L DO IF S[I] S[-1] THEN STR:=STR+S[I]; S:= STR END; BEGIN WRITELN(ВВЕДИТЕ СТРОКУ СИМВОЛОВ,); READLN(S); L:= LENGTH(S); SIM; WRITELN(S); END.
49 Задачи для самостоятельного решения 1.Найдите большее из трех заданных чисел, используя подпрограмму нахождения большего из двух чисел. 2.Вычислите значение выражения a=(3n! + 2m!)/(n+m)! Напоминаем, что факториалом числа называется произведение n чисел натурального ряда. Например 3!=1*2*3. 3.Вывести на экран все четные числа до указанного, используя подпрограмму определения числа на четность.
50 Дополнительные задания Напишите функцию, вычисляющую периметр прямоугольного треугольника, заданного длинами его катетов. Используйте ее в программе, определяющей больший по периметру треугольник из двух заданных. Напишите функцию, вычисляющую число слов в строке. Напишите функцию, вычисляющую сумму N первых элементов массива. Напишите функцию нахождения максимального элемента массива. Напишите процедуру, вычисляющую и печатающую сумму N первых элементов массива. Составьте процедуру, заменяющую в строке S букву А на О (строка подается на вход процедуры).
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.