Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Понятие процедуры и функции.Механизм параметров.

Содержание

Декомпозиция задачиВспомогательный алгоритмВспомогательный алгоритмЗадачаданныерезультат
Понятие процедуры и функции. Механизм параметров.  Лекция 6 Декомпозиция задачиВспомогательный алгоритмВспомогательный алгоритмЗадачаданныерезультат Преимущества использования подпрограммпоявляется возможность поблочной отладки больших программ, возможно, создаваемых несколькими программистами Способы использования подпрограмм:основная программа и подпрограммы располагаются в одном файле;тексты подпрограмм расположены ПодпрограммаПОДПРОГРАММАЗаголовок : (формальные параметры)Тело:  Begin     end;Фактические параметрыВозвращаемые значениявызов Локализация переменныхГлобальные переменные программыЛокальные переменные подпрограммы В•каждый идентификатор должен быть описаны перед Два типа подпрограмм:Function (): Описательная часть Begin  Тело функции  :=; Подпрограмма -функция Вычислить значение выражения a:=(3n!+2m!)/(m+n)! program fn2;Uses crt;Var m,n:integer; a:real;function fact(d:integer) :longint; Найти разность средних арифметических значений двух вещественных массивов из 10 элементов.program dif_average1; Подпрограмма -процедура Вывести таблицу умноженияprogram pif_table;  procedure Pifagor(n: integer);   Механизм параметров Карта распределения оперативной памятиСтруктурастраницы стека Параметры значенияprocedure P(x : integer);Тип выражения должен быть совместим по присваиванию с Параметры-переменныеprogram perest;   var a,b,c: integer;   procedure swap(var x,y: Процедура вычисления суммы двух чиселprogram pr1;Uses crt;Var a,b,s:real;procedure summa(x,y:real;var z:real);beginz:=x+y;end;beginclrscr;writeln('введите a,b'); readln(a,b);summa(a,b,s);writeln(' Параметры переменныеГлобальные переменныеЛокальные переменныеab3-3Адрес сabc48Адрес сc:=a+bc2458Ответ55a:=b+3;b:=3*a882424 Пример локализации переменныхОтветОтвет Механизм передачи параметров в функции и процедурыГлобальные переменныеЛокальные переменныеcb00Адрес acbd30a:=2b:=b+1d:=3a32d00f:=dОтветf3c:=b-a0 Ввод и вывод элементов одномерного массива   Разбить строку S на слова с учетом заданных разделителейType TWords = Array[1 .. Параметры-константыType matr=array[1..20,1..30] of byte;  Procedure vivod( n,m: byte; const a:matr); Нетипизированные параметрыFunction EQ (const x, y; size : word) : boolean; type Открытые массивыfunction sum(var x : array of real) : real; Найти количество элементов вектора x, попадающих в интервал [a, b] .procedure Input (n:integer; var ПРОЦЕДУРНЫЕ ТИПЫ. Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается Вывести на экран таблицу двух функций:  sin1(x) = (sin(x)+1)*ехр(-х) и Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограммtype Proc Предварительные и внешние описания подпрограмм Procedure A(X,Y: Real): Forward; Procedure B(A,B: Integer): Внешнее описание{$L ABC.OBJ} Procedure A(C,D,E: Real); External; Procedure B(I,F,J: Integer); External
Слайды презентации

Слайд 2 Декомпозиция задачи
Вспомогательный алгоритм
Вспомогательный алгоритм

Задача
данные
результат

Декомпозиция задачиВспомогательный алгоритмВспомогательный алгоритмЗадачаданныерезультат

Слайд 3 Преимущества использования подпрограмм
появляется возможность поблочной отладки больших программ,

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

возможно, создаваемых несколькими программистами с последующим объединением отлаженных подпрограмм

в единое целое;
экономится оперативная память, так как многократно используемые компоненты (подпрограммы) заносятся в память ЭВМ один раз;
облегчаются изменения программы, так как изменение одной программы не вызывает корректировку других.

Слайд 4 Способы использования подпрограмм:
основная программа и подпрограммы располагаются в

Способы использования подпрограмм:основная программа и подпрограммы располагаются в одном файле;тексты подпрограмм

одном файле;
тексты подпрограмм расположены в различных файлах и подключаются

директивами компилятора;
подпрограммы организуются как оверлейные структуры и поочередно загружаются на одно и то же место в оперативной памяти ЭВМ;
подпрограммы пишутся на другом языке программирования и подключаются одним из вышеописанных способов;
подпрограммы оформляются как внешние и вызываются из основной программы.


Слайд 5 Подпрограмма
ПОДПРОГРАММА
Заголовок :
(формальные параметры)
Тело:
Begin

ПодпрограммаПОДПРОГРАММАЗаголовок : (формальные параметры)Тело: Begin   end;Фактические параметрыВозвращаемые значениявызов


end;
Фактические параметры
Возвращаемые значения
вызов


Слайд 6 Локализация переменных
Глобальные переменные программы
Локальные переменные подпрограммы В
•каждый идентификатор

Локализация переменныхГлобальные переменные программыЛокальные переменные подпрограммы В•каждый идентификатор должен быть описаны

должен быть описаны перед использованием;
•областью действия идентификатора является та

подпрограмма, в которой они описаны;
•все имена в пределах подпрограммы, в которой они объявлены, должны быть уникальными;
•одноименные локальные и глобальные переменные – это разные переменные;
•при обращении к подпрограмме доступны объекты, которые объявлены в ней и до ее описания.

var i:integer;
    {глобальная переменная -
     описана вне всех подпрограмм}
Заголовок Подпрограммы;
var i:integer;
    {локальная переменная -
     описана после заголовка подпрограммы}
begin
 {Тело подпрограммы}
end;
 
begin
{Тело главной программы}
end.


Слайд 7 Два типа подпрограмм:
Function ():
Описательная

Два типа подпрограмм:Function (): Описательная часть Begin Тело функции :=; End;ФУНКЦИЯProcedure

часть
Begin
Тело функции
:=;
End;
ФУНКЦИЯ
Procedure (

формальных параметров>)
Описательная часть
Begin
Тело функции
End;

ПРОЦЕДУРА

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

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


Слайд 8 Подпрограмма -функция

Подпрограмма -функция

Слайд 9 Вычислить значение выражения a:=(3n!+2m!)/(m+n)!
program fn2;
Uses crt;
Var m,n:integer;

Вычислить значение выражения a:=(3n!+2m!)/(m+n)! program fn2;Uses crt;Var m,n:integer; a:real;function fact(d:integer) :longint;

a:real;
function fact(d:integer) :longint;
var i:integer; q:longint;
begin

q:=1;
for i:=1 to d do
q:=q*i;
fact:=q;
end;
Begin
clrscr;
writeln('введите значения n, m '); readln(n,m);
a:=(3*fact(n)+2*fact(m))/fact(m+n);;
writeln('значение выражения при m= ',m:4,' и n= ',n:4,'равно',a:8:3);
readln; end.

Слайд 10 Найти разность средних арифметических значений двух вещественных массивов

Найти разность средних арифметических значений двух вещественных массивов из 10 элементов.program

из 10 элементов.
program dif_average1;
const n = 3;
type

mas = array[1 .. n] of real;
var a, b : mas; i : integer; dif : real;
function average(x : mas) : real;
var i : integer; av : real;
begin
av := 0;
for i := 1 to n do
av := av + x[i];
average := av / n;
end;
Begin
for i := 1 to n do read(a[i]);
for i := 1 to n do read(b[i]);
dif := average(a) - average(b);
writeln('Разность значений ', dif:6:2)
end.

В заголовке подпрограммы нельзя вводить новый тип
Function av(x:array[1..10] of real): real;


Слайд 11 Подпрограмма -процедура

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

Слайд 12 Вывести таблицу умножения
program pif_table;
procedure Pifagor(n: integer);

Вывести таблицу умноженияprogram pif_table; procedure Pifagor(n: integer);   var i,j:integer;

var i,j:integer;
begin


writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(i*j:4);
writeln; writeln;
end;
end;
var m:integer;
begin
write ('введите размер таблицы Пифагора ');
readln(m);
Pifagor(m);
end.

Слайд 14 Механизм параметров

Механизм параметров

Слайд 15 Карта распределения оперативной памяти
Структура
страницы
стека

Карта распределения оперативной памятиСтруктурастраницы стека

Слайд 16 Параметры значения
procedure P(x : integer);
Тип выражения должен быть

Параметры значенияprocedure P(x : integer);Тип выражения должен быть совместим по присваиванию

совместим по присваиванию с типом параметра.
Если в вызывающей программе

описаны переменные
var x : integer; c : byte; y : longint;
то следующие вызовы подпрограммы Р будут синтаксически правильными:
P(x);
P(c);
P(y);
P(200);
P(x div 4 + 1);

Слайд 17 Параметры-переменные
program perest;
var a,b,c: integer;

Параметры-переменныеprogram perest;  var a,b,c: integer;  procedure swap(var x,y: integer);

procedure swap(var x,y: integer);

var t: integer;
begin
t:=x; x:=y; y:=t;
end;
begin
writeln(‘Введите три числа ');
readln(a,b,c);
if a>b then swap(a,b);
if b>c then swap(b,c);
if a>c then swap(a,c);
writeln(a,' ',b,' ',c);
readln; end.

Слайд 18 Процедура вычисления суммы двух чисел
program pr1;
Uses crt;
Var a,b,s:real;

procedure

Процедура вычисления суммы двух чиселprogram pr1;Uses crt;Var a,b,s:real;procedure summa(x,y:real;var z:real);beginz:=x+y;end;beginclrscr;writeln('введите a,b');

summa(x,y:real;var z:real);
begin
z:=x+y;
end;
begin
clrscr;
writeln('введите a,b'); readln(a,b);
summa(a,b,s);

writeln(' сумма чисел ',a:3:1,' и ',b:3:1,'

= ',s:3:1);
readln; end.

x,y,z – формальные параметры, локальные переменные

a,b,s – глобальные переменные

a,b,s – фактические параметры

х

y

z

a

b

s

Параметры-значения

Параметр-ccылка


Слайд 19 Параметры переменные
Глобальные переменные
Локальные переменные
a
b
3
-3
Адрес с
a
b
c
48
Адрес с
c:=a+b
c
24
5
8
Ответ
5
5
a:=b+3;
b:=3*a
8
8
24
24

Параметры переменныеГлобальные переменныеЛокальные переменныеab3-3Адрес сabc48Адрес сc:=a+bc2458Ответ55a:=b+3;b:=3*a882424

Слайд 20 Пример локализации переменных
Ответ
Ответ

Пример локализации переменныхОтветОтвет

Слайд 21 Механизм передачи параметров в функции и процедуры
Глобальные переменные
Локальные

Механизм передачи параметров в функции и процедурыГлобальные переменныеЛокальные переменныеcb00Адрес acbd30a:=2b:=b+1d:=3a32d00f:=dОтветf3c:=b-a0

переменные
c
b
0
0
Адрес a
c
b
d
3
0

a:=2
b:=b+1

d:=3



a
3
2
d
0
0
f:=d
Ответ
f
3
c:=b-a
0


Слайд 22 Ввод и вывод элементов одномерного массива

Ввод и вывод элементов одномерного массива

Слайд 23   Разбить строку S на слова с учетом заданных разделителей
Type TWords

  Разбить строку S на слова с учетом заданных разделителейType TWords = Array[1

= Array[1 .. 100] Of String[100];
TDel = Set

Of Char; 
Var i, count: BYTE; words: TWords;
DEL:Tdel; S:string;
Procedure vvodvivod(var s:string; flag:boolean);
Begin
If flag then Readln(s) Else writeln(s);
End;
Procedure del32(var s:string);
Var p:byte;
begin
Repeat
p := Pos(' ', s);
If p > 0 Then Delete(s, p, 1)
Until p = 0;

If s[1] = ' ' Then Delete(s, 1, 1);
If s[Length(s)] = ' ' Then Delete(s, Length(s), 1);
end;

Function GetWords(s: String; Var mas: TWords;
dels: TDel): Byte;
Var i, p: Byte;
Begin
For i := 1 to Length(s) Do
If s[i] In dels Then s[i] := #32;
Del32(s);
i := 0;
Repeat
p := Pos(' ', s); Inc(i);
If p > 0 Then
Begin mas[i] := Copy(s, 1, p-1); Delete(s, 1, p); End
Else mas[i] := s
Until p = 0;
GetWords := i
End;
Begin
Writeln(‘введите разделители’);
Vvodvivod(s,true);
Del:=[];
For I:=1 to length(s) do
Del:=del+s[i];
Count := GetWords(s, words, del);
For i := 1 To Count Do
vvodvivod(words[i],false);
End.

Заменяем все разделители пробелами

формирование множества разделителей

заполняем массив словами из строки

удаляем лишние пробелы

Удаляем пробелы в начале строки

Удаляем пробелы в конце строки


Слайд 24 Параметры-константы
Type matr=array[1..20,1..30] of byte;
Procedure vivod( n,m:

Параметры-константыType matr=array[1..20,1..30] of byte; Procedure vivod( n,m: byte; const a:matr);

byte; const a:matr);
Var i,j:

byte;
Begin
For i:=1 to n do
begin
For j:=1 to m do
Write(a[i.j]:5);
Writeln;
End;
End;
Var i,j: byte;
M:matr;
Begin
Randomize;
For i:=1 to 10 do
For j:=1 to 15 do
m[i,j]:=random(20); // 0<=m[i,j]<20
vivod( 10,15,m);
end.

Слайд 25 Нетипизированные параметры
Function EQ (const x, y; size :

Нетипизированные параметрыFunction EQ (const x, y; size : word) : boolean;

word) : boolean;
type mas_byte = array[0 .. MaxInt]

of byte;
//mas_byte = array[0 .. MaxInt] of byte absolute x;
var n : integer;
begin
n := 0;
while (n < size) and (mas_byte(x)[n] = mas_byte(y)[n]) do
// while (n < size) and (mas_byte[n] = mas_byte(y)[n])
inc(n);
EQ := n = size;
End;
С помощью функции EQ можно сравнить две любые величины.

var a, b : array [1 .. 10] of integer;

EQ(a, b, sizeof(a)) ; { сравнение двух массивов }
EQ(a[2], b[5], 4) ; { сравнение 2-5 элементов массива "a" с 5-8
элементами массива "b", соответственно }

Автоопределенное преобразование

Наложение переменной


Слайд 26 Открытые массивы
function sum(var x : array of real)

Открытые массивыfunction sum(var x : array of real) : real;

: real;
var i:word; s:real;

begin
  s:=0;
  for i:=Low(x) To High(x) Do s:=s+x[I];
 sum:=s;
end;
const a:array [1..5] of real=(1,2,3,4,5.5);
begin
 writeln (sum(a):6:1);
end.


Слайд 27 Найти количество элементов вектора x, попадающих в интервал

Найти количество элементов вектора x, попадающих в интервал [a, b] .procedure Input

[a, b] .
procedure Input (n:integer;
 var a:array of real);
var i:integer;
begin
 writeln ('Enter

',n,' items of array:');
 for i:=0 to n-1 do read (a[i]);
end;
 
function Kol (var a:array of real;
 x1,x2:real):integer;
var i,k:integer;
begin
 k:=0;
 for i:=Low(a) to High(a) do
  if (a[i]>=x1) and (a[i]<=x2) then k:=k+1;
 Kol:=k;
End;

var x:array [1..7] of real;
    y:array [1..5] of real;
    k1,k2,i:integer;

begin
 Input (7,x);
 Input (5,y);
 k1:=Kol(x,0,3);
 k2:=Kol(y,-1,1);
 writeln ('k1=',k1,' k2=',k2);
end.


Слайд 28 ПРОЦЕДУРНЫЕ ТИПЫ. 
Для объявления процедурного типа используется заголовок процедуры

ПРОЦЕДУРНЫЕ ТИПЫ. Для объявления процедурного типа используется заголовок процедуры (функции), в котором

(функции), в котором опускается ее имя
type
Proc1 =

Procedure (a, b, c: real; var d: real);
Proc2 = Procedure (var a, b);
РrосЗ = Procedure;
Func1 = Function: String;
Func2 = Function (var s: String): real;


Слайд 29 Вывести на экран таблицу двух функций: sin1(x) =

Вывести на экран таблицу двух функций: sin1(x) = (sin(x)+1)*ехр(-х) и cos1(x)

(sin(x)+1)*ехр(-х) и cos1(x) = (cos(x)+1)*ехр(-х).
Uses CRT;
type
Func = Function

(x: real): real;
Procedure PrintFunc(XPos: byte; F: Func);
const
np = 20;
var
x: real;
i: integer;
begin
for i := 1 to np do
begin
x := i * (2 * pi / np);
GotoXY (XPos, WhereY);
WriteLn (x:5:3, F(x):18:5)
end;
end;

Function Sin1(x: real): real; far;
begin
sin1 := (sin(x) + 1) * exp(-x)
end;
Function Cos1(x: real): real; far;
begin
cos1 := (cos(x) + 1) * exp(-x)
end;
begin
ClrScr;
{имя функции передается по адресу}
PrintFunc (1, @sin1);
{Переводим курсор в левый верхний угол}
GotoXY (1,1);
PrintFunc (40, @cos1)
end.


Слайд 30 Переменным процедурных типов допускается присваивать в качестве значений

Переменным процедурных типов допускается присваивать в качестве значений имена соответствующих подпрограммtype

имена соответствующих подпрограмм
type
Proc = Procedure (n: word; var

a: byte);
var
ProcVar: Proc;
x, у: byte;
Procedure Proc1(x: word; var y: byte); far;
begin
if x > 255 then
y := x mod 255
else
у := byte(x)
end;
begin {Главная программа}
ProcVar := @Proc1;
for x := 150 to 180 do
begin
ProcVar (x + 100, у);
Write (у:8)
end
end.

type
FuncType = Function (i: integer): integer;
var
VarFunc: FuncType;
i: integer;
Function MyFunc (count: integer): integer; far;
begin
. . . . .
end; {MyFunc}
begin {Основная программа}
. . . . .
i := MyFunc(1);
{использование результата функции}
. . . . .
VarFunc := @MyFunc;
{Присваивание переменной процедурного типа имени функции MyFunc}
end.


Слайд 31 Предварительные и внешние описания подпрограмм
Procedure A(X,Y: Real): Forward;
Procedure

Предварительные и внешние описания подпрограмм Procedure A(X,Y: Real): Forward; Procedure B(A,B:

B(A,B: Integer): Forward; . . . . . . .

. . 
Procedure A; Begin . . . . . .
В(3,5);
 . . . . . .
End;
Procedure B; Begin
. . . . . .
A(1,0); . . . . . . . . End;

  • Имя файла: ponyatie-protsedury-i-funktsiimehanizm-parametrov.pptx
  • Количество просмотров: 83
  • Количество скачиваний: 0
- Предыдущая Мир звёзд