Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемСтанислав Деменков
3 При создании программы для решения более или менее сложной задачи выполняется разделение этой задачи на подзадачи, этих подзадач – на более мелкие подзадачи и так далее до тех пор, пока подзадачи не станут легко программируемыми. Для такой организации используются подпрограммы.
4 В программах часто приходится повторять некоторые аналогичные действия многократно. Используя подпрограммы, можно единожды описать действия в подпрограмме, а затем лишь только вызывать ее. Такой принцип дефрагментации программы называется нисходящим программированием и соответствует принципам структурного программирования, в основу которого и положено понятие подпрограммы.
5 Подпрограмма – это самостоятельная часть программы, реализующая определенный алгоритм
6 Подпрограммы удобно использовать, когда в программе приходится выполнять одни и те же действия, но с разными данными.
7 Использование подпрограмм имеет следующие преимущества: – облегчение разработки больших и сложных программ; – экономия памяти: память для переменных выделяется только на время работы подпрограммы.
10 ВИДЫ ПЕРЕМЕННЫХ
13 Формальные параметры – это параметры, описываемые в заголовке процедуры. Фактические параметры – это значения, указываемые в вызове процедуры
15 Процедура это подпрограмма, которая имеет любое количество входных и выходных данных. Процедура может быть описана без параметров и с параметрами. Параметры в заголовке процедуры используются для обмена информацией между процедурой и вызывающей программой. Они определяют данные, передаваемые для обработки в процедуру, и данные, получаемые в виде результатов.
16 procedure ; {описание локальных переменных} begin {операторы} end;
17 Процедура без параметров может реализовывать любой алгоритм. Все переменные, с которыми проводят действия операторы процедуры, определяются в вызывающей программе, им присваиваются необходимые для выполнения процедуры значения. Для вызова процедуры без параметров просто указывается ее имя.
18 Составить программу для вычисления площади выпуклого 4-угольника, заданного длинами его сторон и диагональю. A B D C Диагональ делит 4-угольник на два 3-угольника, к которым применима формула Герона:
19 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 используется только внутри процедуры. Ее можно и описать в этой процедуре.
20 Переменные, которые описаны и используются внутри процедуры, называются – локальными. Переменные, которые описаны в основной программе, называются – глобальными. Локальные переменные действуют только внутри данной процедуры. Глобальные переменные действуют во всей программе и в каждой ее процедуре.
21 Рассмотрим пример вычисления наименьшего общего кратного двух натуральных чисел НОК(Х, У), которое можно найти, используя наибольший общий делитель (НОД) этих чисел, по формуле НОК(Х, У)=Х-У/НОД(Х, У).
22 Программа имеет вид: 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.
23 Program HelloAll; Procedure Hello (name: string); Begin writeln (Привет,, name, !); writeln (name,, как дела?); Readln; End; Begin Hello (Катя); Hello (Андрей); Hello (Лена) End.
24 Задача. Составить программу нахождения наибольшего элемента в линейном массиве, используя вспомогательные процедуры нахождения наибольшего из двух чисел и создания массива случайных чисел. Процедура создания массива случайных чисел содержит один параметр – массив. Т.к. – это результат работы процедуры, то этот параметр должен быть параметром-переменной. Процедура нахождения наибольшего из двух чисел содержит три параметра, один из которых должен быть параметром- переменной – результатом, и два – параметрами значениями – аргументами.
25 В ЯП Паскаль в описании процедур в списке параметров нельзя описывать массивы таким образом: 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);
26 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.
28 В Паскале помимо процедур можно использовать функции. Их еще называют функции пользователя ( в отличие от стандартных функций, таких как sin, random и др.) Обращение к функции приводит к вычислению ее значения – объекта типа real, integer или char. Function Имя(параметры):тип результата; var список локальных переменных begin Команды Имя:=выражение; end; Вызов функции пользователя осуществляется так же, как и стандартных функций в Паскале, т.е. их значения могут присваиваться переменным, входить в состав выражений.
29 Функции – это разновидность подпрограммы. Для использования функции в программе ее необходимо описать в разделе описаний главной программы.
30 Function ( ): ;
32 Вычисление модуля оформим в виде пользовательской функции 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.
34 Вычисление степени оформим в виде пользовательской функции 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.
35 Найти значение выражения. Величины а и b вводятся с клавиатуры.
36 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. Подпрограмма-функция Вычисления с помощью функции
37 Составить программу для вычисления площади выпуклого 4-угольника, заданного длинами его сторон и диагональю. A B D C Диагональ делит 4-угольник на два 3-угольника, к которым применима формула Герона: Рассмотрим пример:
38 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. Вызов функции
39 Для многих программ не важно, что изберет программист для их реализации: процедуру или функцию, но есть определенные правила, которые дают четкие отличия процедур и функций
40 Процедуры Функции 1Может иметь несколько результатов или выполнять некоторое действие Имеет только один результат, тип которого указывается отдельно при объявлении функции. 2Результатами могут быть значения любого типа массивы, строки, числа и т.д. Результат может быть только значением типа real, integer или char. 3Команда вызова процедуры – отдельная команда, которая употребляется самостоятельно Обращение к функции может использоваться только как компонент выражения соответствующего типа. 4В теле функции должен быть хотя бы один оператор присваивания, в левой части которого указано имя функции. Сравнение процедур и функций.
41 Написать программу вывода на экран компьютера таблицы тригонометрических функций sin x, cos x. tg x. Для вычисления функции tg x использовать функцию пользователя, а для вывода таблицы – процедуру. Мы с вами знаем много стандартных функций ЯП Паскаль. К ним относятся и функции sin x и cos x. А для вычисления такой распространенной функции, как тангенс, стандартной функции в Паскале нет. Поэтому мы напишем ее самостоятельно. Пример 1.
42 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.
43 Из данного примера видно, что стандартные функции и функции пользователя в программе используются совершенно одинаково. Для вывода информации на экран компьютера мы использовали процедуру, т.к. функция не может производить подобные действия – вывод чего-то на экран компьютера. В описании процедуры использованы 4 параметра – значения. Поэтому в качестве фактических параметров при вызове процедуры мы можем использовать имена переменных, выражения (в виде функций) и константы. Параметров– значений в этой процедуре нет, т.к. она ничего не вычисляет.
44 Пример 2 Написать программу, которая определяет, является ли билет «Счастливым», т.е. сумма правых трех цифр числа должна быть равна сумме левых трех цифр. Для написания этой программы нам надо вспомнить операции DIV целая часть от деления и MOD остаток от деления. 20 div 7 =2 123 div 10 = mod 7 =6 123 mod 100 = 23
45 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.
46 3 Написать программу для вычисления значения функции f(0.8,a)+f(a,b)-f(2a-1,ab), где a, b действительные числа и
47 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
48 Задача 1. Составить программу, которая каждому элементу массива присваивает значение суммы двух соседних с ним элементов массива: 1. Создания массива случайных чисел. 2. Вывода массива на экран компьютера. 3. Вычисления элементов массива Задача 2. Даны вещественные числа a и b. Вычислить: U=f(1.7,a)+f(b,a)+f(a+b,b-a), если
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.