funkcijos_proceduros20141002lr

Download Report

Transcript funkcijos_proceduros20141002lr

FUNKCIJOS IR PROCEDŪROS
Liutauras Ričkus
5 paskaita
PAPROGRAMĖS

Programa suskaldyta dalimis



Savarankiškos
Įvedimo duomenys
Rezultatai

Funkcijos
Procedūros
Pakartotinis panaudojimas

Informacijos keitimasis





Parametrais (kintamųjų reikšmės ir vardai)
Funkcijų vardai (rezultatų reikšmė)
Globaliais vardais (konstantų, tipų, kintamųjų, funkcijų ir
procedūrų vardai.)
STANDARTINĖS MATEMATINĖS FUNKCIJOS
PASCAL
Funkcija
Tikslas
Pavyzdžiai
sqrt(x)
Kvadratinė šaknis iš x
sqrt(900.0) yra 30.0
exp(x)
𝑒𝑥
exp(1.0) yras 2.718282
ln(x)
ln x , x turi būti teigiamas.
ln(2.718282) yra 1.0
sqr(x)
Kelia kvadratu, rezultato
reikšmė sutampa su x tipu.
sqr(5) yra 25
abs(x)
Absoliuti reikšmė, rezultato abs(-10) yra 10
reikšmė sutampa su x tipu.
trunc(x)
Atmetama trupmeninė
realiosios x reikšmės
dalis, neapvalinant.
Rezultato tipas – sveikasis.
trunc(1.2) yra 1
trunc(-1.2) yra -1
trunc(5.8) yra 5
trunc(-5.8) yra -5
round(x)
Apvalina x reikšmę iki
sveikojo skaičiaus.
round(4.1) yra 4
STANDARTINĖS MATEMATINĖS FUNKCIJOS C
Reikia naudoti #include <math.h>
Funkcija
Tikslas
Pavyzdžiai
sqrt(x)
Kvadratinė šaknis iš x
sqrt(900.0) yra 30.0
exp(x)
𝑒𝑥
exp(1.0) yras 2.718282
log(x)
ln x.
log(2.718282) yra 1.0
log10(x)
lg x
log10(1.0) yra 0.0
log10(10.0) yra 1.0
abs(m),
fabs(x)
Absoliuti reikšmė
abs(-10) yra 10
ceil(x)
Apvalina iki artimiausio nemažesnio
sveikojo skaičiaus
ceil(9.2) yra 10.0
ceil(-9.8) yra –9.0
floor(x)
Apvalina iki artimiausio nedidesnio
sveikojo skaičiaus
floor(9.2) yra 9.0
floor(-9.8) yra –10.0
pow(x,y)
𝑥𝑦
pow(2,7) yra 128.0
pow(9,0.5) yra 3.0
sin(x), cos(x),
tan(x)
Trigonometrinės funkcijos, x –
radianuose
sin(0.0) yra 0.0
Cos(0.0) yra 1.0
Tan (0.0) yra 0.0
PROCEDŪROS APRAŠYMAS PASCAL

Aprašymas
procedure <vardas> (<parametrų sąrašas>);
label ...;
const ...;
type ...;
var ;
procedure ...;
function ;
begin
<sakiniai>
end;
<vardas> - Keli_zodziai arba KeliZodziai
 <parametrų sąrašas>

procedure Skaito (x1, x2: real; k,l:integer; c1, c2: char);
PROCEDŪRŲ PARAMETRŲ TIPAI

Parametrai-reikšmės


Parametrai-kintamieji


procedure Raso (x1, x2: real; k,l:integer; c1, c2: char);
procedure Raso (var x1, x2: real; k,l:integer)
Parametrai masyvai

Galima perduoti parametrai-reikšmė ar parametraikintamieji
var <vardų sąrašas> : array [(rėžio vardas>..<rėžio
vardas>:<diskrečiojo tipo vardas>] of <tipo vardas>;

var

Pvz:
rn : array [m..n:integer] of real;
kn : array [ma..na : integer] of spalva;
Panaudojimas
type masyvas = array [1..10 ] of integer;
var
mazas : masyvas;
didelis : array [-100..100] of integer;
procedure Tvarka (var m:array[x..y : integer] of integer);

Kvietimas
Tvarka (mazas);
Tvarka (didelis);
KREIPINYS Į PROCEDŪRĄ



<vardas>(<argumentai>);
<argumentai> - faktiniai parametrai
Pvz:

Procedūros aprašymas
procedure Max_min (a,b: real; {parametrai-reikšmės}
var max, min: real); {parametrai-kintamieji}
begin
if a < b then
begin
max := a;
min := b;
end
else
begin
max := b;
min := a;
end
end;

Kreipinys į procedūrą
var a,b,didz,maz: real;
I,j,k,l: integer;
begin
a:=10; b:=20; i:=15; j:=25;
Max_min(a,b, didz, maz);
Max_min(i,j,k,l); {klaida!!!}
End.
FUNKCIJOS PASKALYJE

Aprašymas
function <vardas> (<parametrų sąrašas>):<grąžinamos reikšmės tipas>
label ...;
Const ...;
type ...;
var ;
procedure ...;
function ;
begin
<sakiniai>;
<vardas>:=...;
end;


Gražinama reikšmė priskiriama funkcijos vardui
Pvz.:

Funkcijos aprašymas
function Sudeti(a,b:integer):integer;
begin
Sudeti := a + b
end;

Funkcijos kvietimas
suma := Sudeti(5,10)+Sudeti(k,l)
FUNKCIJOS C KALBOJE



Funkcijos negali būti funkcijose
Pagrindinė funkcija yra main()
<grąžinamos reikšmės tipas> <funkcijos vardas> (<parametrų
tipai>) { <sakiniai>};


Jei nieko negražina void
Pvz:
#include <stdio.h>
int main()
{
int x;
for (x=1; x<=10; x++) {
printf("%d ", square(x));
}
printf("\n");
return 0;
}
int square (int y)
{
return y*y;
}
GALIOJIMO SRITYS PASCAL


Kintamasis galioja bloke, kuriame apibrėžtas
Pascal


Procedūros funkcijos, kuriose yra kitos procedūros ar funkcijos
Pvz.:
program vardai;
var a,b,c,d: integer;
procedure r(a: integer; var e:integer);
var b: integer;
begin
b:=3;
c:=4;
writeln('Procedura. a=',a,' b=', b,' c=',c,' d=',d, ' e=', e);
e:=6;
end;
begin
a:=22;
b:=33;
c:=44;
d:=55;
writeln('Programa pries proc. a=',a,' b=', b,' c=',c, ' d=',d );
r(b,d);
writeln('Programa po proc. a=',a,' b=', b,' c=',c,' d=', d );
end.

Rezultatas
Programa pries proc. a=22 b=33 c=44 d=55
Procedura. a=33 b=3 c=4 d=55 e=55
Programa po proc. a=22 b=33 c=4 d=6
VIETINIAI IR IŠORINIAI KINTAMIEJI.
STATINIAI KINTAMIEJI

Vietiniai(local) kintamieji galioja bloke

Išoriniai arba globalieji kintamieji aprašomi viršuje



Galioja visą programos veikimą
extern – galima naudoti globalų arba bibliotekos kintamajį
Statiniai kintamieji

Pvz.:
#include <stdio.h>
int a=5;
int main()
{
void skaic(void);
int kiekis;
printf("main: a=%d\n", a);
for (kiekis=1; kiekis<=3; kiekis++)
{
printf("Iteracija %d\n", kiekis);
a--;
skaic();
}
printf("\n");
return 0;
}
void skaic (void)
{
int fa=1;
static int sta=1;
printf("funkcija: fa=%d ir sta=%d a=%d\n", fa++, sta++, a++);
}

Rezultatas
main: a=5
Iteracija 1
fa=1 ir sta=1 a=4
Iteracija 2
fa=1 ir sta=2 a=4
Iteracija 3
fa=1 ir sta=3 a=4