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

SUBPROGRAME

Embed Size (px)

DESCRIPTION

SUBPROGRAME. Functii predefinite sau definite de utilizator. Filipoiu Ciprian Vicentiu && Nitescu Ovidiu Clasa a X-a B. Cum organizam o activitate complexa?. - PowerPoint PPT Presentation

Citation preview

Page 1: SUBPROGRAME

SUBPROGRAMESUBPROGRAME

Functii predefinite Functii predefinite sau definite de sau definite de utilizatorutilizator

Filipoiu Ciprian Vicentiu && Nitescu OvidiuClasa a X-a B

Page 2: SUBPROGRAME

Cum organizam o activitate Cum organizam o activitate complexa?complexa?

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

Page 3: SUBPROGRAME

Cum ne ajuta Cum ne ajuta descompunerea in descompunerea in

subactivitati?subactivitati?

Munca in echiapa aduce tot timpul rezultate mai bune

Sarcinile sunt bine impartite si fiecare stie exact ce trebuie sa face

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

Page 4: SUBPROGRAME

Spre exemplu proiectarea Spre exemplu proiectarea unei masini pare un lucru unei masini pare un lucru tare complicat.tare complicat.

Pentru piesele de acelasi tip se va

construi un sigur plan la care se va apela ori

de cate ori va fi nevoie.

Lucrurile s-ar mai clarifica si simplifica printr-o mai buna organizare, astfel:

Intreaga activitate poate fi impartita in

mai multe subactivitati.

Piesele care se gasesc pe piata se vor achizitiona.

Page 5: SUBPROGRAME

Cum se imapart Cum se imapart activitatile ?activitatile ?

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.

ROATA- a fost inventata ea trebuie doar folosita

Page 6: SUBPROGRAME

SubprogramulSubprogramul (subactivitate)(subactivitate) este o porţiune de cod este o porţiune de cod didintr-un ntr-un mare program care efectuează o mare program care efectuează o anumită sarcină şi este relativ anumită sarcină şi este relativ independent de restul independent de restul codului.codului.

Elementele unui subprogram:

Page 7: SUBPROGRAME

Clasificarea Clasificarea subprogramelor:subprogramelor:

In functie de autor subprogramele se impart in:

Subprograme standard (subprograme de sistem)

Subprograme nestandard

(subprograme utilizator)Sunt subprograme predefinite de autorii limbajului de programare, ele se gasesc in biblotecile acestuia si rezolva diferite probleme ca de exemplu:

• sin(), cos(), etc.:functii trigonometrice;

• sgrt(), exp(), etc.:functii matematice;

• strlen(), strcat(): op.siruri de caractere;

• fopen(), fclose(): op. cu fisiere;

Sunt subprograme create de programator care rezolva diferite sarcini specifice aplicatiei sale, exemple:

• intr-un program in care verificam daca trei numere sunt in progresie aritmetica putem creea un subprogram pentru inversarea a doua numere;

• In rezolvare C(n,k)=n!/(k!(n-k)) putem folosi un subprogram care sa calculeze factorialul unui numar

Page 8: SUBPROGRAME

Clasificarea Clasificarea subprogramelor: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

Apelare:

nume_subprogram(lista parametrii);

optional

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

Apelare:

nume_epresie=nume_functie(lista_parametrii); optional

Page 9: SUBPROGRAME

Parametrii de comunicareParametrii de comunicare

Legatura intre subprograme si blocul apelant se face prin Legatura intre subprograme si blocul apelant se face prin intermediul parametrilorintermediul parametrilor

scrisi intre paranteze rotunde:scrisi intre paranteze rotunde:

- In antetul subrpogramului- In antetul subrpogramului - - parametrii formaliparametrii formali

- La activarea subprogramului- La activarea subprogramului - - parametrii actualiparametrii actuali

Page 10: SUBPROGRAME

Transmiterea parametrilorTransmiterea parametrilor

În C++ exista doua posibilitati de transmitere aÎn C++ exista doua posibilitati de transmitere a parametrilor actuali catre o functie:parametrilor actuali catre o functie:A) A) Transmiterea prin valoareTransmiterea prin valoare  se utilizeaza atunci cand se utilizeaza atunci cand

suntem in teresati ca subprogramul sa lucreze cu acea valoare, dar in suntem in teresati ca subprogramul sa lucreze cu acea valoare, dar in prelucrare, nu ne intereseaza ca parametrul efectiv (cel din blocul apelant) sa prelucrare, nu ne intereseaza ca parametrul efectiv (cel din blocul apelant) sa retina valoarea modificata in subprogram.retina valoarea modificata in subprogram.

B) B) Transmiterea prin referintaTransmiterea prin referinta. Parametrii sunt transmisi prin . Parametrii sunt transmisi prin referinta atunci cand ne intereseaza ca la revenirea din subprogram, variabila referinta atunci cand ne intereseaza ca la revenirea din subprogram, variabila transmisa sa retina valoarea stabilita in timpul executiei subprogramului.transmisa sa retina valoarea stabilita in timpul executiei subprogramului.

In cazul transmiterii prin referinta, parametrii efectivi trebuie sa fie referinte laIn cazul transmiterii prin referinta, parametrii efectivi trebuie sa fie referinte lavariabile. variabile. Exemplu:Exemplu:

void medie (int a, int b, float &ma, float &mg)void medie (int a, int b, float &ma, float &mg) prin valoare prin referintaprin valoare prin referinta

Page 11: SUBPROGRAME

UtilizareaUtilizarea stivei de catre un stivei de catre un subprogramsubprogram

In memoria interna, fiecarui subprogram iIn memoria interna, fiecarui subprogram i

se aloca o zona de memorie internase aloca o zona de memorie interna

numita stiva sistemuluinumita stiva sistemului

………………………………………………………………………………………………………………

………………………………………………………………………………………………………………

Întrerupere Întrerupere

fir execuţiefir execuţie

Salt la Salt la noua noua

adresaadresaFir Fir

execuţieexecuţie

Cod Cod executabil executabil subprograsubprogra

mm

RevenireRevenireContinuareContinuare

execuţieexecuţie

Page 12: SUBPROGRAME

Variabile locale si globaleVariabile 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).

Page 13: SUBPROGRAME

void schimba_valoare (int x, int y)void schimba_valoare (int x, int y){{

int z=x;int z=x;x = y;x = y;y = z;y = z;

}}void schimba_referinta (int &a, int &b)void schimba_referinta (int &a, int &b){{

int aux=a;int aux=a;a=b;a=b;b=aux;b=aux;

}}void main (void)void main (void){{

int M=1, N=5;int M=1, N=5;schimba_valoare(M,N);schimba_valoare(M,N);cout << "M="<<M<< " " << cout << "M="<<M<< " " << "N="<<N<<endl;"N="<<N<<endl;schimba_referinta(M,N);schimba_referinta(M,N);cout << "M="<<M<< " " << cout << "M="<<M<< " " << "N="<<N<<endl;"N="<<N<<endl;

}}

APEL PRIN VALOAREAPEL PRIN VALOARE

APEL PRIN REFERINAPEL PRIN REFERINŢĂŢĂ

Se va afişa:Se va afişa:M=1 N=5M=1 N=5M=5 N=1M=5 N=1

Transmiterea parametrilorTransmiterea parametrilor

Page 14: SUBPROGRAME

Exemplu 1: Exemplu 1: Se citeşte n, număr Se citeşte n, număr natural. Să se scrie programele care tipăresc natural. Să se scrie programele care tipăresc

valoarea calculată a expresiilor:valoarea calculată a expresiilor:

#include #include <iostream.h><iostream.h>double subp(int n)double subp(int n){{double s=0; int i;double s=0; int i;for (i=1;i<=n;i++) for (i=1;i<=n;i++)

s+=(float)1/i;s+=(float)1/i;return s;return s;}}main()main(){{int n;int n;cout<<“n=”;cin>>n;cout<<“n=”;cin>>n;cout<<cout<<subp(n)subp(n);;}}

;1

...3

1

2

111 n

E

Page 15: SUBPROGRAME

Exemplu 2:Exemplu 2: Se citeste un numar intreg n Se citeste un numar intreg n sa se verifice daca este prim.sa se verifice daca este prim.

# include <iostream.h># include <iostream.h># include <math.h># include <math.h># include <conio.h># include <conio.h>int prim (int x)int prim (int x){for (int i=2; i<=sqrt(x); i++){for (int i=2; i<=sqrt(x); i++)

if (x%i==0)if (x%i==0)return 0;return 0;

return(1);}return(1);}void main (void)void main (void){int N;{int N;

cout << "N="; cin >> N;cout << "N="; cin >> N;if (if (prim(N)prim(N)) cout << ) cout << "PRIM";"PRIM";else cout << "NU E PRIM";else cout << "NU E PRIM";getch();getch();

}}

Page 16: SUBPROGRAME

Exemplu 3Exemplu 3: : SaSa se scrie o funcţie care se scrie o funcţie care calculează cel mai marecalculează cel mai mare divizor divizor comun dintre comun dintre două numere întregi nenuledouă numere întregi nenule ( (utilizînd algoritmul utilizînd algoritmul lui lui EuclidEuclid)) şi un apelator pentru testare. şi un apelator pentru testare.

#include <stdio.h>#include <stdio.h>/*definirea functiei cmmdc*//*definirea functiei cmmdc*/int cmmdc(int a, int b)int cmmdc(int a, int b){ int r,d=a,i=b;{ int r,d=a,i=b; do {r=d%i;do {r=d%i;

d=i; i=r;}d=i; i=r;} while(r<>0);while(r<>0); return i;}return i;}void main()void main(){ int n1,n2;{ int n1,n2; printf("Numerele pentru care se va calcula printf("Numerele pentru care se va calcula

cmmdc:");cmmdc:"); scanf("%d%d",&n1,&n2);scanf("%d%d",&n1,&n2); if(n1&&n2) printf("\ncmmdc=if(n1&&n2) printf("\ncmmdc=

%d",%d",cmmdc(n1,n2)cmmdc(n1,n2));); else printf("Numerele nu sint nenule!");else printf("Numerele nu sint nenule!"); }}

Page 17: SUBPROGRAME

ConcluziiConcluzii

– Programarea standard impune dezvoltarea de subprograme cu Programarea standard impune dezvoltarea de subprograme cu un grad de generalitate foarte ridicat. În primul rând, un grad de generalitate foarte ridicat. În primul rând, subprogramele trebuie să acopere o arie mai ridicată a subprogramele trebuie să acopere o arie mai ridicată a problemelor. problemelor.

– Programarea standard este programarea reutilizării de Programarea standard este programarea reutilizării de subprograme. Activitatea de programare este reorientată spre subprograme. Activitatea de programare este reorientată spre a dezvolta subprograme reutilizabile, iar comunicarea între a dezvolta subprograme reutilizabile, iar comunicarea între programatori este esenţială. În momentul în care activitatea programatori este esenţială. În momentul în care activitatea unui programator este analizată calculând raportul dintre unui programator este analizată calculând raportul dintre secvenţele originale de instrucţiuni şi lungimea programului, secvenţele originale de instrucţiuni şi lungimea programului, toată problematica efortului de programare, se rezolvă de la toată problematica efortului de programare, se rezolvă de la sine. Secvenţele originale se obţin dintr-un program, după ce sine. Secvenţele originale se obţin dintr-un program, după ce se elimină toate secvenţele pentru care există subprograme de se elimină toate secvenţele pentru care există subprograme de bibliotecă. bibliotecă.

– La un moment dat, programarea standard s-a constituit în La un moment dat, programarea standard s-a constituit în factor progres, impunând o componentă de bază în ingineria factor progres, impunând o componentă de bază în ingineria software, partea dedicată reutilizării de subprograme. software, partea dedicată reutilizării de subprograme.

Page 18: SUBPROGRAME

BibliografieBibliografie

– Irina ATHANASIU, Eugenia KALISZ, Valentin Irina ATHANASIU, Eugenia KALISZ, Valentin CRISTEA – CRISTEA – Iniţiere în TURBO PASCALIniţiere în TURBO PASCAL, Bucureşti, , Bucureşti, Editura Teora, 1995 Editura Teora, 1995

– Gheorghe BARBU, Ion VĂDUVA, Mircea Gheorghe BARBU, Ion VĂDUVA, Mircea BOLOŞTEANU – BOLOŞTEANU – Bazele Informaticii, Bazele Informaticii, Bucureşti, Bucureşti, Editura Tehnică, 1997 Editura Tehnică, 1997

– http://www.biblioteca-digitala.ase.ro– http://www.labsmn.pub.ro

– http://webcache.googleusercontent.com