Top Banner

of 21

Subprogram Ec

Oct 05, 2015

Download

Documents

EduardCostea

informatica cex
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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)