subprogram ec
DESCRIPTION
informatica cexTRANSCRIPT
-
Lectie realizata de prof. ing. Preda O.1
DefiniDefiniie i aie i avantajevantajeNoiuni specificeNoiuni specificeComponenteComponenteClasificarea subprogramelorClasificarea subprogramelorVariabile globale i localeVariabile globale i localeConstruirea subprogramelorConstruirea subprogramelorCazuri particulare Cazuri particulare Alte eAlte exemplexemple
-
Lectie realizata de prof. ing. Preda O.2
Avantaje ale utilizAvantaje ale utilizrii subprogramelorrii subprogramelorPermite reutilizarea cu uurin a programelorPermite reutilizarea cu uurin a programelor (crete portabilitatea)
Elaborarea algoritmilor devine mai uoarElaborarea algoritmilor devine mai uoar (problema fiind descompus)
Detectarea i corectarea erorilor se face cu uurinDetectarea i corectarea erorilor se face cu uurin
Permite lucrul n echip la rezolvarea unor sarcini complexePermite lucrul n echip la rezolvarea unor sarcini complexe
Permite descompunerea unei probleme vastePermite descompunerea unei probleme vaste
Secven de instruciuni ce rezolv o anumit problem, este scris separat de funcia rdcin i poate fi pus n execuie ori de cte ori se dorete prin
procedeul apelrii (subprogramele n C++ sunt de tip FUNCIE)
DEFINIDEFINIIE subprogrameIE subprograme
Permite economisirea memoriei i timpului alocatPermite economisirea memoriei i timpului alocat
-
Lectie realizata de prof. ing. Preda O.3
Modul apelantModul apelant : blocul ce conine apelul funciei (subprogramului)
Prototipul Prototipul : linie de program plasat naintea modulului apelant prin care se comunic date despre subprogram. Dac definiia subprogramului precede funcia rdacin, prototipul poate lipsi
Modul apelatModul apelat : blocul ce conine funcia (subprogramul apelat)
Apelul Apelul : nseamn punerea n execuie a subprogramului. Apelul se poatea face de cte ori dorim. Apelul se face prin nscrierea n blocul apelant a numelui (i parametrilor) funciei apelate
Declarare Declarare : a nscrie n subprogram caracteristicile acestuia : tipul , numele, lista parametrilor funciei. Declararea se face n antet. Definiia subprogramului reprezint scrierea lui.
Parametrii Parametrii : date ce circul ntre modului apelat i apelant. Pot fi : de intrare, de ieire, de intrare-ieire. Ultimii doi se numesc i valori returnate de funcie
Noiuni Noiuni relativ la relativ la subprogramesubprograme
-
Lectie realizata de prof. ing. Preda O.4
ComponenteleComponentele unui program ce conine un subprogramunui program ce conine un subprogram
Directive de preprocesareDirective de preprocesare
Apelul subprogramuluiApelul subprogramului (n funcia main)
Antetul Antetul (definire)(definire)
Partea Partea declarativdeclarativ
Prototipul subprogramuluiPrototipul subprogramului
#include #include
void mesaj();
void main(){ mesaj();getche();
}
void mesaj()
{ // definiii de variabile, // constante , tipuri de datecout
-
Lectie realizata de prof. ing. Preda O.5
Clasificarea subprogramelorClasificarea subprogramelor
Subprograme standard Subprograme standard (subprograme de sistem) Utilizarea lor (subprograme de sistem) Utilizarea lor presupune includerea fiierului ce conine prototipul dorit (Ex. presupune includerea fiierului ce conine prototipul dorit (Ex. : #include : #include ) i apelarea subprogramului (funciei) ) i apelarea subprogramului (funciei)
Subprograme apelate ca instruciuni procedurale Subprograme apelate ca instruciuni procedurale Returneaz (sau nu) o valoare prin intermediul parametrilor. Apelul se face Returneaz (sau nu) o valoare prin intermediul parametrilor. Apelul se face prin nume i parametri. (Ex. : clrscr(), gotoxy(x,y)prin nume i parametri. (Ex. : clrscr(), gotoxy(x,y), etc., etc.))
Subprograme apelate ca operanzi Subprograme apelate ca operanzi ReReturneaz un rezultat chiar turneaz un rezultat chiar prin numele su i eventual alte rezultate prin parametri. Apelul se face n prin numele su i eventual alte rezultate prin parametri. Apelul se face n interiorul unei expresii (Ex. : coutinteriorul unei expresii (Ex. : cout
-
Lectie realizata de prof. ing. Preda O.6
Variabile globale Variabile globale i variabile localei variabile locale
Variabile globaleVariabile globale
Variabile localeVariabile locale
Variabilele pot fi definite n C++ n orice poziie a programului. Poziia (locul) unde a fost definit o variabil determin domeniul de vizibilitate a acesteia. Acest domeniu ncepe n locul unde variabila este definit i se sfrete n locul de ncheiere a blocului ce o conine.
Vizibilitatea unei variabileVizibilitatea unei variabile
Sunt declarare la nceputul programului, naintea oricrei funcii. Acestea sunt vizibile i pot fi utilizate n orice punct al programului. Sunt iniializate n mod automat cu zero. Durata lor de via este pe tot parcursul executrii programului. Memoria (segment de date) este alocat pe tot parcursul rulrii programului.
Sunt declarare n interiorul unei funcii. Acestea sunt vizibile doar n interiorul funciei i invizibile n orice alt punct al programului. Nu sunt iniializate n mod automat. Durata lor de via este pe tot parcursul executrii funciei n care au fost definite. Memoria (segment de stiv) este alocat doar pe timpul execuiei funciei.
-
Lectie realizata de prof. ing. Preda O.7
Variabile globale Variabile globale i variabile localei variabile locale
aa este variabila global este variabila global (este vizibil pe tot parcursul (este vizibil pe tot parcursul programului)programului)
cc este variabila local este variabila local (este (este vizibil vizibil doar doar n funcia n funcia mesaj()mesaj()))
bb este variabila local este variabila local (este (este vizibil vizibil doar doar n n blocul de blocul de program curentprogram curent))
#include #include int a;
void mesaj();void main(){ mesaj();
{ // instruciunifloat b;// instruciuni
}getche();
}void mesaj(){ int c;
courc;cout
-
Lectie realizata de prof. ing. Preda O.8
Recomandri variabile globale i localeRecomandri variabile globale i localeAtenie, variabilele globale pot fi modificate n interiorul subprogramelor. Se va acorda atenie mare prelucrrii acestora
Utilizarea variabilelor locale asigur portabilitatea programelor. Aceasta ncurajeaz tehnica TOP-DOWN de creare modular i iterativ a programarii
Utilizarea constantelor globale permit modificarea la nevoie ntr-un singur loc a unei valori ce afecteaz ntregul program (i toate subprogramele sale)
Utilizara variabilelor globale s fie limitat deoarece creeaz dependene ntre subprograme
Un program ce are mai muli parametri (folosete mai puine variabile globale) este mai flexibil i mai portabil
Un program ce are mai puini parametri (folosete mai multe variabile globale) este mai uor de neles, de depanat i de apelat
Se vor declara suprogramele prin prototip la nceputul fiierului surs iar definirea lor se va face dup funcia rdcin main().
-
Lectie realizata de prof. ing. Preda O.9
Construirea subprogramelor Construirea subprogramelor
CorpulCorpul
PrototipulPrototipul
Conine date despre : tipul rezultatului, nume i parametrii efectivi. Dac funcia nu returneaz nimic, tipul este void()AntetulAntetul
Este un bloc de instruciuni declarative i imperative (de execuie) ce definesc modul de aciune al subprogramului
Pentru a putea fi apelat, funcia este declarat. Conine date despre : tipul rezultatului, nume i parametrii efectivi.
ApelulApelul Este modul prin care subprogramul e pus n execuie. Apelul poate fi fcut ori de cte ori este nevoie.
ParametriiParametrii Datele ce circul ntre modulul apelant i apelat se introduc ntre paranteze, dup identificatorul (numele) subprogramului
-
Lectie realizata de prof. ing. Preda O.10
Construirea Construirea antetului subprogramuluiantetului subprogramuluiTipul rezultatuluiTipul rezultatului
Pentru funcii operand se precizeaz tipul rezultat. Dac nu e precizat, se consider tipul implicit, int. (Ex. int suma(), float media(), afisare(), etc.)
Pentru funcii procedurale se precizeaz tipul rezultat void (nu returneaz rezultate prin nume ci prin parametri). (Ex. void suma(s), void afisare(), afisare(), etc.)
Numele Numele (identificatorul)(identificatorul)Este unic, poate avea o lungime de maxim 32 caractere (literele A-Z, a-z, cifrele 0-9 i caracterul underscore _ ). Numele este case sensitive ! Numele va sugera funcionalitatea subprogramului.
ParametriiParametriiPentru fiecare parametru n parte se precizeaz numele i tipul de dat, separarea se face prin virgul. Este interzis gruparea lor (Ex. void suma (int a, int b, int c), float media(int a, float b) etc..)
Pot fi tip standard intreg (int, unsigned, long) real (float, double, long double) char, pointer, vector, matrice, string, nregistrare sau definii de utilizator.
Pentru ca o funcie s aib ca rezultat un tablou, el va fi declarat ca inregistrare nainte de declararea funciei. Ex.: struct mat { int n[99][99];}; . mat tablou(int a, int b);
-
Lectie realizata de prof. ing. Preda O.11
Construirea corpConstruirea corpului subprogramuluiului subprogramuluiEste un bloc de instruciuni declarative i imperative (de execuie) ce definesc modul de aciune al subprogramului
Variabilele declarate n corpul subprogramului sunt variabile locale.
Pentru funciile operand :Pentru funciile operand :Conin pe ultima linie a corpului, instruciunea return(). Aceasta definete valoarea pe care funcia o transmite blocului apelant.
Rezultatul returnat trebuie s fie de acelai tip cu tipul funciei (sau ce poate fi convertit implicit n tipul funciei).
Cnd compilatorul ntlnete instruciunea return(), execuia este transferat modulului apelant. Instruciunile ulterioare se executa
#include#includeint suma(int capat);void main(){ int n;
coutn;cout
-
Lectie realizata de prof. ing. Preda O.12
Construirea prototipului Construirea prototipului subprogramuluisubprogramului
Tipul rezultatuluiTipul rezultatului
Pentru a putea fi folosit (apelat), funcia trebuie declarat. Declararea se face prin prototip. Conine date despre : tipul rezultatului, nume i parametrii.
Pentru funcii procedurale se precizeaz tipul rezultat void (nu returneaz rezultate prin nume ci prin parametri). (Ex. void suma(s), void afisare(), afisare(), etc.)
Numele Numele (identificatorul)(identificatorul)Este unic, poate avea o lungime de maxim 32 caractere (literele A-Z, a-z, cifrele 0-9 i caracterul underscore _ ). Numele este case sensitive ! Numele va sugera funcionalitatea subprogramului.
ParametriiParametriiPentru fiecare parametru n parte se precizeaz tipul de dat, separarea se face prin virgul. Nu e necesar scrierea numelui tipului de dat (Ex. void suma (int , int, int); , float media(int, float);..)
Lista va conine tot atia parametri ci sunt declarai n antetul subprogramului. Se vor preciza n aceeai ordine ca n antet, toate tipurile de date utilizate n antet.
Scrierea prototipului de ncheie cu caracterul ; (punct i virgul) Prototipul poate lipsi dac subprogramul este definit naintea funciei main() (naintea funciei apelante)
-
Lectie realizata de prof. ing. Preda O.13
Construirea Construirea apeluluiapelului subprogramuluisubprogramului
#include#include#include#includeint n;int n;int suma();int suma(); // prototip func// prototip funcieievoid main()void main(){ coutn;{ coutn;
suma();suma(); } } // apel// apelint suma() int suma() // definirea func// definirea funcieiiei{ int i;{ int i;for (i=1;i
-
Lectie realizata de prof. ing. Preda O.14
Declararea i definirea unei funciiDeclararea i definirea unei funcii
DefinireDefinire ddupup funcia rdcin funcia rdcin mainmain,,cazcaz n care funcia e declarat prin n care funcia e declarat prin prototipulprototipul susu
DefinireDefinire nainte de funcia rdcin nainte de funcia rdcin mainmain,, cazcaz n care declararea funciei n care declararea funciei prin prin prototipulprototipul su, su, poate lipsi.poate lipsi.
#include #include #include #include
void mesaj();void mesaj();
void main()void main(){ { mesaj();mesaj();
getche();getche();}}
void mesaj()void mesaj(){ { coutcout
-
Lectie realizata de prof. ing. Preda O.15
nscrierea parametrilornscrierea parametrilor subprogramuluisubprogramuluiDatele ce circul ntre modulul apelant i apelat se introduc ntre paranteze, dup identificatorul (numele) subprogramului
n antetul funciei parametrii se nscriu prin tip i nume, separai prin virgul, fra a fi grupai. Acetia se numesc parametri formali
ObservaieObservaie
Numrul parametrilor formali poate s difere de cel al parametrilor efectivi n cazul funciilor cu numr de parametri variabili i n cazul suprancrcrii funciilor
n apelul funciei parametrii se nscriu separai prin virgul, n aceeai ordine ca n antet (regula de coresponden), prin valori concrete. Ei se numesc parametri efectivi (actuali)
Tipul parametrilor formali poate s difere de cel al parametrilor efectivi n cazul conversiei implicite a parametrilor efectivi n tipul parametrilor formali (ca o operaie de atribuire)
Tipul parametrilor formali poate s difere de tipul parametrilor efectivi i n cazul suprancrcrii funciilor
Numele parametrilor formali poate s difere de numele parametrilor efectivi
Regula de coresponden notific o anumit concordan ntre numrul, ordinea i tipul parametrilor formali i a parametrilor efectivi
-
Lectie realizata de prof. ing. Preda O.16
Transmiterea parametrilorTransmiterea parametrilorParametrii au rolul de a face transferul de date ntre modulul apelant i modulul apelat. Parametrii sunt memorai n segmentul de stiv n ordinea nscrierii lor.
Parmetrii pot fi transmii prin valoare sau pot fi transmii prin referin
Transmiterea prin referinTransmiterea prin referinEste utilizat la prelucarea unei variabile n interiorul unei funcii astfel nct la revenirea din funcie, variabila s rein valoarea modificat nu valoarea de intrare
Parametrii transmii prin referin vor fi precedai de caracterul ampersand & att la declararea ct i la definirea funciei
n apel, parametrii efectivi corespunztori parametrilor formali transmii prin referin trebuie s fie variabile de memorie.
#include#includevoid f(int &a); // prototipul funcieivoid main(){ int x;
coutx;cout
-
Lectie realizata de prof. ing. Preda O.17
Transmiterea parametrilorTransmiterea parametrilorParametrii au rolul de a face transferul de date ntre modulul apelant i modulul apelat. Parametrii sunt memorai n segmentul de stiv n ordinea nscrierii lor.
Parmetrii pot fi transmii prin valoare sau pot fi transmii prin referin
Transmiterea prin valoareTransmiterea prin valoareEste utilizat la prelucarea unei variabile n interiorul unei funcii. De reinut c la revenirea din funcie, variabila nu reine valoarea modificat ci valoarea de intrare
Parametrii transmii prin valoare se folosesc doar ca parametri de intrare. Pentru parametrii de ieire se va folosi instruciuniea return()
n apel, parametrii efectivi corespunztori parametrilor formali transmii prin valoare pot fi : valori, variabile, expresii sau alte funcii
#include#includevoid f(int a); // prototipul funcieivoid main(){ int x;
coutx;cout
-
Lectie realizata de prof. ing. Preda O.18
Subprograme cu numar variabil de parametriSubprograme cu numar variabil de parametriAntetul subprogramului conine n lista parametrilor formali cel puin un parametru fix urmat de expresia . Ex.: int int sumasuma(int n, )(int n, ) funcia suma are un numr variabil de parametri, n fix, fiind primul
n apel, lista variabil a parametrilor efectivi se poate implementa n dou moduri (A,B)
Parametrul fix n indic numrul de parametri variabili ai acelui apel. Ex. : suma(3,11,22,33)suma(3,11,22,33) n apel exista 3 parametri, ei fiind :11,22 i 33
Ultimul parametru din list are o valoare precizat, indicnd oprirea apelului. Ex.: suma(11,22,33,0)suma(11,22,33,0) se folosesc parametrii 11,22,33 pn la ntlnirea cu 0
#include #include #include // bibliorec necesar int suma (int n, ...){ va_list ap; int sum=0;
va_start(ap,n);for (int i=1; i
-
Lectie realizata de prof. ing. Preda O.19
SupraSuprancrcarea funciilorncrcarea funciilor
Suprancrcarea unei funcii se refer la declararea i utilizarea n acelai program a mai multor funcii ce au asociat acelai nume
Pentru a se evita situaiile ambigue, identificarea unei anumite funcii (chiar dac au acelai nume) se face dup:
Numrul diferit de parametri folosii
#include #include int max;int suma (int a, int b, int c){ if (a>b && a>c) max=a; if (b>a && b>c) max=b;
if (c>b && c>a) max=c; return max; }
int suma(float a, float b){ return (a+b); }
int suma(int a, int b){ return (a*b);}
void suma(){ int a, b, c;
couta; coutb;if (a>b) cout
-
Lectie realizata de prof. ing. Preda O.20
Exemple de aplicaii cuExemple de aplicaii cu subprogramsubprogramee
#include#include#include#include
float med(int ,int, int);float med(int ,int, int);void main()void main(){ int x, y, z;{ int x, y, z;
cout>x;cout>y;cout>z;cout
-
Lectie realizata de prof. ing. Preda O.21
Background song :
Enigma Return to Innocence(onmouseover meniu 1)