Подпрограммы - процедуры. Очень часто в процессе выполнения программы требуется многократное выполнение какой-либо ее части. Лучше всего повторяющуюся.

Презентация:



Advertisements
Похожие презентации
© М.Е.Макарова
Advertisements

Процедуры в Turbo Pascal Шутилина Л.А.
Шутилина Л.А. Процедуры в Turbo Pascal ( часть 1: процедуры с параметрами)
Процедуры и функции Вербицкая Ольга Владимировна, Заозерная школа 16.
Подпрограммы -это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Она записывается однократно, а в соответствующих.
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
Подпрограммы. Субкомпетенции: 1. Обработка данных с помощью стандартных подпрограмм и подпрограмм, определённых пользователем. 2. Организация передачи.
Все процедуры и функции делятся на стандартные встроенные определенные пользователем. Встроенные и стандартные вызываются без предварительного описания.
1 Программирование на языке Паскаль Процедуры. 2 Подпрограммы Задача: Построить фигуру: Особенность: Три похожие фигуры. общее: размеры, угол поворота.
Программирование на языке Паскаль Тема 13. Процедуры Тема 14. Функции.
ЗАПИСЬ ВСПОМОГАТЕЛЬНЫХ АЛГОРИТМОВ НА ЯЗЫКЕ Паскаль НАЧАЛА ПРОГРАММИРОВАНИЯ.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Подпрограмма – это самостоятельная часть программы, реализующая определенный алгоритм.
Процедуры и функции в Паскале. Рекурсия. Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы.
МЕТОД ПОСЛЕДОВАТЕЛЬНОЙ ДЕТАЛИЗАЦИИ. ПРОЦЕДУРЫ И ФУНКЦИИ Урок 1.
Научиться использовать структурный подход в программировании – разбиение сложной задачи на более простые. Узнать, как для этого можно использовать подпрограммы-процедуры.
Подпрограммы: процедуры и функции Информатика. 1. Подпрограммы При решении различных задач часто возникает необходимость проводить вычисления по одним.
Что такое структурный подход в программировании? Как он реализуется в ЯП Паскаль? Что такое процедура? Кто дает название процедуре? Где записывается процедура?
Транксрипт:

Подпрограммы - процедуры

Очень часто в процессе выполнения программы требуется многократное выполнение какой-либо ее части. Лучше всего повторяющуюся часть программы выделить, обозначить ее ИМЕНЕМ, Задать ей необходимые параметры и вызвать эту часть программы по ИМЕНИ. Для этого во всех языках программирования существуют средства организации подпрограмм.

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

4 Процедуры Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: выполнение одинаковых действий в разных местах программы разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Подзадача1Подзадача2Подзадача Задача

Использование подпрограмм позволяет, 1.сократить объем программы, 2.улучшает структуру программы с точки зрения ее читаемости и наглядности, делает программу более компактной и наглядной 3.уменьшает вероятность ошибок и облегчает процесс отладки.

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

ПРОЦЕДУРЫ и ФУНКЦИИ В языке Паскаль механизм подпрограмм реализуется в виде ПРОЦЕДУР и ФУНКЦИЙ, которые вводятся в программе с помощью своего описания, но их структура такая же, как и структура программы.

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

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

Procedure ( ); {эта часть заголовка может отсутствовать} Var Begin End; ПРОЦЕДУРЫ

Процедуры Процедуры предназначены для выполнения некоторой последовательности действий. Любая процедура начинается с заголовка, который является ее обязательной частью (в отличие от заголовка программы). Он состоит из служебного слова Procedure, за которым следует имя процедуры, а в круглых скобках - список формальных параметров, в конце ставим точку с запятой. После заголовка могут идти те же разделы, что и в программе. Таким образом, общий вид будет следующим:

Тело подпрограммы (процедуры или функции)- это блок, состоящий из двух частей: описания объектов и группы операторов.

Описание процедуры имеет следующий вид:

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

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

Фактические параметры это параметры, которые передаются процедуре при обращении к ней. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.

Формальные параметры это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Все формальные параметры делятся на два вида: параметры-переменные; параметры-значения.

Процедуры Без параметровС параметрами Параметры – переменные Параметры – значения

Р1 Р2 Р21 Процедуры без параметров

Составить программу для вычисления площади выпуклого 4-угольника, заданного длинами его сторон и диагональю. A B D C Диагональ делит 4-угольник на два 3-угольника, к которым применима формула Герона:

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 используется только внутри процедуры. Ее можно и описать в этой процедуре.

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.

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

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

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

Локальные переменные Локальные переменные - это те, которые объявлены в процедуре. Эти переменные помешаются в стек при вызове подпрограммы и убираются из него при возвращении в точку вызова. Таким образом, локальные переменные существуют только тогда, когда работает подпрограмма, появляются при вызове и исчезают при завершении работы.

Переменные, которые описаны и используются внутри процедуры, называются – локальными. Переменные, которые описаны в основной программе, называются – глобальными. Локальные переменные действуют только внутри данной процедуры. Глобальные переменные действуют во всей программе и в каждой ее процедуре.

Пример: Составить программу, которая будет находить а n, то есть n-ую степень числа а, где а и n>0 - целые числа, вводимые с клавиатуры.

Решение Составим процедуру, которая вычисляет степень целого числа. Procedure Degree (x,y: Integer; Var st: Longint); {заголовок процедуры} Var i:Integer; {описательная часть} Begin {тело процедуры} st:=l; For i:=1 To y Do st:=st*x; End;

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 (для работы с циклом).

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

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.

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

Как происходит передача параметров? Пусть а=3 и n=4. Когда в программе встречается оператор Degiee(a,n,s), то ЭВМ выполняет следующие действия: 1.Выделяет память для переменных, описанных в процедуре Degree; 2.Присвоит формальным параметрам значения фактических: х:=а (х=3), у:=n (у=4), st:=s; 3.Выполняет операторы процедуры, то есть найдет З4; 4.Полученное значение присвоит переменной s, а переменные а и n остаются прежними, после этого переходит к выполнению следующих действий программы в точке вызова, то есть выполняется следующий оператор, стоящий за обращением процедуры. Переменные х, у, st, i - это локальные переменные.

Закрепление Задача 3: Даны два целых числа. Поменять местами их значения.

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.

Закрепление Найти НОД и НОК двух целых чисел (значение НОК вывести на экран).

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.

Повторение пройденного материала; 1.Что такое подпрограмма и как она записывается? 2.Какие подпрограммы существуют? 3.Что такое процедура и как она описывается? 4.Что такое параметры? Какие виды параметров вы знаете? 5.Какие виды переменных вы знаете?

Рассмотрим несколько готовых программ, с помощью которых разберём механизм передачи параметров. Задача: Вычислить сумму квадратов двух чисел

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.

Задача: Вычислить сумму и разность квадратов двух чисел

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.

Решим следующую задачу Дана строка символов. Написать процедуру удаления из строки всех кратных рядом стоящих символов.

Для решения задачи: формируем тело программы и описываем переменные; создаём описание процедуры SIM для обработки строки; вводим строку S и определяем её; вызываем процедуру SIM; завершаем работу программы.

Переменные: в процедуре SIM: S – вводимая строка(глобальная переменная); I – вспомогательная переменная цикла(локальная переменная); STR – вспомогательная строка(локальная переменная);

в основной программе: S – вводимая строка(глобальная переменная); L – длина строки(глобальная переменная).

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.

Задачи для самостоятельного решения 1.Найдите большее из трех заданных чисел, используя подпрограмму нахождения большего из двух чисел. 2.Вычислите значение выражения a=(3n! + 2m!)/(n+m)! Напоминаем, что факториалом числа называется произведение n чисел натурального ряда. Например 3!=1*2*3. 3.Вывести на экран все четные числа до указанного, используя подпрограмму определения числа на четность.

Дополнительные задания Напишите функцию, вычисляющую периметр прямоугольного треугольника, заданного длинами его катетов. Используйте ее в программе, определяющей больший по периметру треугольник из двух заданных. Напишите функцию, вычисляющую число слов в строке. Напишите функцию, вычисляющую сумму N первых элементов массива. Напишите функцию нахождения максимального элемента массива. Напишите процедуру, вычисляющую и печатающую сумму N первых элементов массива. Составьте процедуру, заменяющую в строке S букву А на О (строка подается на вход процедуры).