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

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



Advertisements
Похожие презентации
Функции в Turbo Pascal Шутилина Л.А.
Advertisements

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

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

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

Подпрограмма – это самостоятельная часть программы, реализующая определенный алгоритм

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

Использование подпрограмм имеет следующие преимущества: – облегчение разработки больших и сложных программ; – экономия памяти: память для переменных выделяется только на время работы подпрограммы.

ВИДЫ ПЕРЕМЕННЫХ

Формальные параметры – это параметры, описываемые в заголовке процедуры. Фактические параметры – это значения, указываемые в вызове процедуры

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

procedure ; {описание локальных переменных} begin {операторы} end;

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

Составить программу для вычисления площади выпуклого 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 NOK; const c:array[1..5]of integer=(36,54,72,18,15); var x,у,i,m:integer; procedure NSD; {заголовок процедуры} var a,b:integer; {описание локальных переменных} begin a:=x; b:=у;{сохранение начальных данных} while a<>b do if a>b then a:=a-b else b:=b-a; m:=а {результат работы процедуры присваивается глобальной переменной} end; {конец процедуры} begin {начало главной программы} х:=с[1]; for i:=2 to 5 do begin у:=с[i]; NSD; {вызов процедуры без параметров} х:=х*у div m {div - деление нацело для целочисленных данных} end; writeln('HOK=',x) end.

Program HelloAll; Procedure Hello (name: string); Begin writeln (Привет,, name, !); writeln (name,, как дела?); Readln; End; Begin Hello (Катя); Hello (Андрей); Hello (Лена) End.

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

В ЯП Паскаль в описании процедур в списке параметров нельзя описывать массивы таким образом: procedure Tabl(var x: array[1..n] of integer); Поэтому в основной программе до описания массивов можно указать тип данных массив: type arr = array[1..n] of integer; И затем этот тип данных использовать при описании массивов в самой программе и в процедурах при описании формальных параметров type arr = array[1..n] of integer; var i, k, z: integer; а :arr; procedure Tabl(var x: arr);

Program max_tabl; Uses Crt; const n=10; type arr = array [ 1..n] of integer; var i, k, z: integer; а :arr; procedure Tabl(var x: arr); begin writeln ('Massiv'); for i:=1 to n do begin x[i]:=random(100); write (x[i]:5); end; writeln; end;{Tabl} procedure max(x1,x2 : integer; var x3:integer); begin if x1>x2 then x3:=x1 else x3:=x2; end;{max} {***** Main*****} begin clrscr; randomize; tabl (a); z:= a[1]; for i:=2 to n do max(z,a[i],z); writeln('max= ', z:6); readln; end.

В Паскале помимо процедур можно использовать функции. Их еще называют функции пользователя ( в отличие от стандартных функций, таких как sin, random и др.) Обращение к функции приводит к вычислению ее значения – объекта типа real, integer или char. Function Имя(параметры):тип результата; var список локальных переменных begin Команды Имя:=выражение; end; Вызов функции пользователя осуществляется так же, как и стандартных функций в Паскале, т.е. их значения могут присваиваться переменным, входить в состав выражений.

Функции – это разновидность подпрограммы. Для использования функции в программе ее необходимо описать в разделе описаний главной программы.

Function ( ): ;

Вычисление модуля оформим в виде пользовательской функции Modul: Program P1; Var x, y: real; Function Modul (x: real): real; begin if x<0 then x:=-x; Modul:=x; end; Begin writeln (Введите х); readln (x); y:=Modul (x+1)+Modul (x+2); writeln (y:6:3); End.

Вычисление степени оформим в виде пользовательской функции Deg: Program Degree; Var z, f: real; m: integer; Function Deg (n: integer; x: real): real; Var I: integer; y: real; begin I:=1; y:=1; while I<=n do begin y:=y*x; I:=I=+1; end; Deg:=y; End; Begin writeln (Введите z, m); readln (z,m); f:=Deg (m,z); writeln (f:8:3); End.

Найти значение выражения. Величины а и b вводятся с клавиатуры.

Program FFF; Var a,b,y:real; Function SB(s,n:real):real; Var s,n,z:real; Begin z:=sin(s)/cos(n); SB:=z; End; Begin Readln(a,b); y:=SB(a,b)/sqr(SB(a,b))-sqrt(SB(a,b))+(sqr(SB(a,b))*SB(a,b)); Writeln(y:3:2); Readkey; End. Подпрограмма-функция Вычисления с помощью функции

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

program Function_of_user; uses Crt; var AB,BC,CD,DA,AC,S1,S2,S:real; Function f(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; F:=Sqrt(p*(p-a)*(p-b)*(p-c)); end; begin readln (AB,BC,CD,DA,AC); S1:=f(AB,BC,AC); S2:=f(CD,DA,AC); s:=S1+S2; writeln (S:8:2); Writeln (f(AB,BC,AC)+ f(CD,DA,AC):8:2); readln; end. Вызов функции

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

Процедуры Функции 1Может иметь несколько результатов или выполнять некоторое действие Имеет только один результат, тип которого указывается отдельно при объявлении функции. 2Результатами могут быть значения любого типа массивы, строки, числа и т.д. Результат может быть только значением типа real, integer или char. 3Команда вызова процедуры – отдельная команда, которая употребляется самостоятельно Обращение к функции может использоваться только как компонент выражения соответствующего типа. 4В теле функции должен быть хотя бы один оператор присваивания, в левой части которого указано имя функции. Сравнение процедур и функций.

Написать программу вывода на экран компьютера таблицы тригонометрических функций sin x, cos x. tg x. Для вычисления функции tg x использовать функцию пользователя, а для вывода таблицы – процедуру. Мы с вами знаем много стандартных функций ЯП Паскаль. К ним относятся и функции sin x и cos x. А для вычисления такой распространенной функции, как тангенс, стандартной функции в Паскале нет. Поэтому мы напишем ее самостоятельно. Пример 1.

Program Table_of_function; uses CRT; var x, nx,kx: integer; function Tg(xx:integer):real; begin if cos(xx)<> 0 then Tg:=sin(xx)/cos(xx) else Tg:=-100; end; procedure output(a:integer;b,c,d:real); var i:integer; begin for i:=1 to 35 do write('_'); writeln; writeln (a:8,b:8:2,c:8:2,d:8:2); end; begin clrscr; writeln ('Zadayte diapason dlja x: nx, kx'); Readln (nx, kx); {*** zagolovok tablizy***} writeln (' x sinx cosx tgx'); for x:=nx to kx do output(x, sin(x), cos(x), tg(x)); readln; end.

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

Пример 2 Написать программу, которая определяет, является ли билет «Счастливым», т.е. сумма правых трех цифр числа должна быть равна сумме левых трех цифр. Для написания этой программы нам надо вспомнить операции DIV целая часть от деления и MOD остаток от деления. 20 div 7 =2 123 div 10 = mod 7 =6 123 mod 100 = 23

Program Bilet; uses Crt; var Nomer: longint; lev,prav:integer; function summa(x:integer):integer; var i,j,k:integer; begin i:=x div 100; { sothi} j:=x div 10 mod 10; {desjatki} k:=x mod 10; {edinizy} summa:=i+j+k; end; begin clrscr; writeln ( Zadayte nomer bileta-); writeln (zeloe 6-zn chislo'); readln (nomer); lev:= nomer div 1000; prav:= nomer mod 1000; if summa(lev)=summa(prav) then writeln ('Yes') else writeln ('No'); readln; End.

3 Написать программу для вычисления значения функции f(0.8,a)+f(a,b)-f(2a-1,ab), где a, b действительные числа и

Program F_X_Y; uses CRT; var a,b,z: real; function f(x,y:real):real; begin f:= (sqr(x)-sqr(y))/(sqr(x)-2*x*y+sqr(y)+6); end; begin clrscr; writeln ('Zadayte a,b'); readln(a,b); z:=f(0.8,a)+f(a,b)-f(2*a-1,a*b); writeln(z:8:2); readln; end. При а=1 и в=2 ответ –0,06 При а=2, в=3 ответ –0,15

Задача 1. Составить программу, которая каждому элементу массива присваивает значение суммы двух соседних с ним элементов массива: 1. Создания массива случайных чисел. 2. Вывода массива на экран компьютера. 3. Вычисления элементов массива Задача 2. Даны вещественные числа a и b. Вычислить: U=f(1.7,a)+f(b,a)+f(a+b,b-a), если