Sunteți pe pagina 1din 18

SUBPROGRAME

Functii predefinite
sau definite de
utilizator
Filipoiu Ciprian Vicentiu && Nitescu
Ovidiu
Clasa a X-a B

Cum organizam o activitate


complexa?
Orice activitate, oricat de complexa ar fi ea se poate imparti in
mai
multe activitati cu un grad de complexitate mai scazut.

Cum ne ajuta
descompunerea in
subactivitati?
Sarcinile sunt bine impartite si
fiecare stie exact ce trebuie sa face
Munca in echiapa aduce tot timpul
rezultate mai bune
Depanarea si actualizarea
activitatii se face mai usor
Unele activitati pot fi preluate fara
efort prea mare in alte aplicatii in
care trebuie sa fie rezolvate sarcini
similare

Spre exemplu proiectarea


unei masini pare un lucru
tare complicat.
Lucrurile s-ar mai clarifica si simplifica printr-o mai buna organizare,
astfel:

Intreaga
activitate poate
fi impartita in
mai multe
subactivitati.

Pentru piesele de
acelasi tip se va
construi un sigur plan
la care se va apela ori
de cate ori va fi
nevoie.

Piesele care se gasesc pe piata se vor achizitiona.

Cum se imapart
activitatile ?
ROATA- a fost inventata ea trebuie doar folosita

Deci activitatile se
pot imparti in activitati
standard si activitati
definite de utilizator
Piesele unei masini se
pot proiecta dar exista si
piese ce pot fi folosite
gata proiectate gen
roata.

Subprogramul

(subactivitate)
este o poriune decoddintr-un
mareprogramcare efectueaz o
anumitsarcini
este unui
relativ
Elementele
subprogram:
independent de restul codului.

Clasificarea
subprogramelor:
In functie de autor subprogramele se
impart in:
Subprograme standard
Subprograme
(subprograme de sistem)
nestandard
Sunt(subprograme
subprograme utilizator)
create de
Sunt subprograme predefinite de
programator care rezolva diferite
autorii limbajului de programare,
sarcini specifice aplicatiei sale,
ele se gasesc in biblotecile
exemple:
acestuia si rezolva diferite
probleme ca de exemplu:
intr-un program in care verificam
sin(), cos(), etc.:functii
daca trei numere sunt in progresie
aritmetica putem creea un
trigonometrice;
subprogram pentru inversarea a
sgrt(), exp(), etc.:functii
doua numere;
matematice;
In rezolvare C(n,k)=n!/(k!(n-k))
strlen(), strcat(): op.siruri de
putem folosi un subprogram care
caractere;

Clasificarea
subprogramelor:
In functie de modalitate de apel
subprogramele se impart in:
Subprograme apelate ca
instructiuni procedurale

Subprograme apelate ca
operanzi

Functia procedurala este


subprogramul care returneaza una,
mai multe sau nicio valoare,
valorile sunt returnate prin
intermediul parametrilor

Functia operand este


subprogramul care returneaza
rezultat prin chiar numele sau, si
eventual si alte rezultate, prin
intermediul parametrilor

Apelare:

Apelare:

nume_subprogram(lista
parametrii);

nume_epresie=nume_functie(list
a_parametrii);
optional

Parametrii de comunicare
Legatura intre subprograme si blocul apelant se face prin
intermediul parametrilor
scrisi intre paranteze rotunde:
- In antetul subrpogramului - parametrii formali
- La activarea subprogramului - parametrii actuali

Transmiterea parametrilor
n C++ exista doua posibilitati de transmitere a parametrilor actuali catre o functie:
A) Transmiterea prin valoarese utilizeaza atunci cand suntem in teresati ca
subprogramul sa lucreze cu acea valoare, dar in prelucrare, nu ne intereseaza ca
parametrul efectiv (cel din blocul apelant) sa retina valoarea modificata in
subprogram.
B) Transmiterea prin referinta . Parametrii sunt transmisi prin referinta atunci
cand ne intereseaza ca la revenirea din subprogram, variabila transmisa sa retina
valoarea stabilita in timpul executiei subprogramului.
In cazul transmiterii prin referinta, parametrii efectivi trebuie sa fie referinte la
variabile. Exemplu:
void medie (int a, int b, float &ma, float &mg)
prin valoare
prin referinta

Utilizarea stivei de catre un


subprogram

In memoria interna, fiecarui subprogram i


se aloca o zona de memorie interna
numita stiva sistemului

Fir
execuie

Continuare
execuie

Salt la
noua
adresa

ntrerupere
fir execuie

Revenire

Cod
executabil
subprogra
m

Variabile locale si globale


Programele si subprogramele lucreaza cu date, aceste date
sunt introduse in programe prin intermediul variabilelor, astfel exista
variabile care sunt vazute in intregul program si in subprogramele
acestuia (numite variabile globale), dar si variabile vazute in
cadrul unui anumit subprogram (numite variabile locale).

Transmiterea parametrilor

void schimba_valoare (int x, int y)


{
int z=x;
x = y;
y = z;
}
void schimba_referinta (int &a, int &b)
{
int aux=a;
a=b;
b=aux;
}
void main (void)
{
int M=1, N=5;
schimba_valoare(M,N);
cout << "M="<<M<< " " <<
"N="<<N<<endl;
schimba_referinta(M,N);
cout << "M="<<M<< " " <<
"N="<<N<<endl;
}

APEL PRIN VALOARE

APEL PRIN REFERIN

Se va afia:
M=1 N=5
M=5 N=1

Exemplu 1: Se citete n, numr

natural. S se scrie programele care tipresc


1 1
1
E 1 ... ;
valoarea calculat a expresiilor:
2 3
n
1

#include <iostream.h>
double subp(int n)
{
double s=0; int i;
for (i=1;i<=n;i++)
s+=(float)1/i;
return s;
}
main()
{
int n;
cout<<n=;cin>>n;
cout<<subp(n);
}

Exemplu 2: Se citeste un numar intreg n


sa se verifice daca este prim.

# include <iostream.h>
# include <math.h>
# include <conio.h>
int prim (int x)
{for (int i=2; i<=sqrt(x); i++)
if (x%i==0)
return 0;
return(1);}
void main (void)
{int N;
cout << "N="; cin >> N;
if (prim(N)) cout << "PRIM";
else cout << "NU E PRIM";
getch();
}

Exemplu 3: Sa se scrie o funcie care

calculeaz cel mai mare divizor


comun dint
dou numere
#includentregi
<stdio.h> nenule (utiliznd algoritmu
/*definirea functiei cmmdc*/
lui Euclid
) i un a,apelator
pentru testare.
int cmmdc(int
int b)
{ int r,d=a,i=b;
do {r=d%i;
d=i; i=r;}
while(r<>0);
return i;}
void main()
{ int n1,n2;
printf("Numerele pentru care se va calcula
cmmdc:");
scanf("%d%d",&n1,&n2);
if(n1&&n2) printf("\ncmmdc=%d", cmmdc(n1,n2));
else printf("Numerele nu sint nenule!");
}

Concluzii
Programarea standard impune dezvoltarea de subprograme cu un
grad de generalitate foarte ridicat. n primul rnd, subprogramele
trebuie s acopere o arie mai ridicat a problemelor.
Programarea
standard
este
programarea
reutilizrii
de
subprograme. Activitatea de programare este reorientat spre a
dezvolta subprograme reutilizabile, iar comunicarea ntre
programatori este esenial. n momentul n care activitatea unui
programator este analizat calculnd raportul dintre secvenele
originale de instruciuni i lungimea programului, toat
problematica efortului de programare, se rezolv de la sine.
Secvenele originale se obin dintr-un program, dup ce se
elimin toate secvenele pentru care exist subprograme de
bibliotec.
La un moment dat, programarea standard s-a constituit n factor
progres, impunnd o component de baz n ingineria software,
partea dedicat reutilizrii de subprograme.

Bibliografie
Irina ATHANASIU, Eugenia KALISZ, Valentin
CRISTEA Iniiere n TURBO PASCAL, Bucureti,
Editura Teora, 1995
Gheorghe BARBU, Ion VDUVA, Mircea
BOLOTEANU Bazele Informaticii, Bucureti,
Editura Tehnic, 1997
http://www.biblioteca-digitala.ase.ro
http://www.labsmn.pub.ro
http://webcache.googleusercontent.com

S-ar putea să vă placă și