21297279-programare-procedurala

Upload: morena-vlaic

Post on 09-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 21297279-programare-procedurala

    1/60

    Elemente de C i C++

    Conceput de BJARNE STROUSTRUP de la laboratoarele BELL ,finalizat la sfritul anilor 80 pe baza limbajului C si completat cuelemente de programare orientat pe obiecte, C++ este unul din cele mai puternice i populare produse software.

    Un program n C++ este osecven de instruciuni de limbajintrodus printr-un editor de texte i apoi salvat ca fiier surs careconine:

    comentarii linii de program care ncep cu // directive de preprocesare sau comenzi pentru preprocesor

    care includ n fiierul surs fiiere antet necesare compilriicondiionate ale unor zone de program surs, fiiere care sunt precedate de #.

    declarri de variabile i funcii (nu cer rezervare de spaiu dememorie)

    definiii de variabile i funcii cer rezervare de spaiu dememorie pentru stocarea datelor sau a codului surs. Pe lngfuncii definite de programator, fiierul surs poate conine ifuncii din biblioteca limbajului. Fiierul surs are extensia.CPP. Acesta este inspectat de compilatorul C++ caresemnaleaz nerespectarea regulilor de programare C++ prinmesaje de eroare afiate pe ecran.

    Pentru corectarea erorilor este necesareditarea fiierului surs i apoio nou compilare a programului surs. Dup eliminarea erorilor desintax compilatorul transform instruciunile ncod main (succesiunide bii) obinndmodule obiect asociate. Acestea sunt completate cu

    module din biblioteca limbajului prineditorul de legturi , obinnd unfiier executabil cu extensia .EXE, fiier care este stocat pe disc.Programul se execut tastnd numele fiierului executabil i .Elementele de baz ale limbajului sunt:

    cuvinte cheie cuvinte rezervate pentru declararea tipurilor dedate i a instruciunilor,

  • 8/7/2019 21297279-programare-procedurala

    2/60

    - 174 - Elemente de algoritmic i limbaje de programare

    identificatori nume de constante, variabile, cmpuri ale unor structuri definite de utilizatori,

    constante valori fixe reprezentnd numere, caractere, iruri decaractere,

    operatori simboluri folosite pentru specificarea unor operaii, separatori caractere sau iruri de caractere care separ diferite

    entiti ca: blank-uri, tab-uri orizontale sau verticale, linie nou, pagin nou, comentarii, etc.

    Exemplu . #include void main(){cout

  • 8/7/2019 21297279-programare-procedurala

    3/60

    - 175 - Elemente de algoritmic i limbaje de programare

    Directiva #includeInsereaz n programul surs curent coninutul fiierului indicat de

    directiv. Cu aceasta putem modulariza scrierea programelor. Aceastdirectiv are trei sintaxe:

    #include#include fiier (se folosete cnd fiierul antet se afl n

    directorul curent)#include nume, (nume este numele unei macro-comenzi).Fiierele antet sunt fiiere text ASCII stocate n subdirectorul

    INCLUDE al directorului ce conine compilatorul C++.Exemplu. Fiierul antetiostream.h ofer funcia de bibliotec pentruoperaii de intrare/ieire n flux. Orice program C++ ncepe cu una saumai multe directive #include.Directiva #define Permite definirea constantelor i a pseudofunciilor numite imacrodefiniii cu parametri. Are sintaxele:

    #define macro text#define macro valoare#define nume(list_parametri) expresieunde macro=identificatorul

    text=secven de caracterevaloare=valoare numericnume=numele pseudofuncieiexpresie=expresia pseudofunciei

    La preprocesare, orice apariie a identificatorului macro senlocuiete cu definiia sa.Exemplu .

    #define EPS 0.001#define PI 3.1415

    Observaie. Pe o linie de cod nu pot exista mai multe directive #define.Macrodefiniiile cu parametri permit definirea pseudofunciilor care

    sunt mai rapide dect funciile obinuite, dar ocup mai mult memorie.O pseudofuncie accept ca argument un parametru i nlocuiete oriceapariie n program a acelui parametru prin valoarea furnizat la apelul pseudofunciei.Exemplu .

    #define PATRAT(x) ((x)*(x))#define CUB(x) (PATRAT(x)*(x))

  • 8/7/2019 21297279-programare-procedurala

    4/60

    - 176 - Elemente de algoritmic i limbaje de programare

    Aceste dou pseudofuncii calculeaz x2 respectiv x3 pentru x furnizat laapel.Directiva #define se mai poate folosi pentru:

    - nlocuirea cuvintelor rezervate sau a simbolurilor cu aliidentificatori definii de utilizator

    - crearea de identificatori pentru tipuri de date definite deutilizator cu ajutorul tipurilor standard

    - prescurtarea unor comenzi.

    Directiva #undef Este opusa directivei #define, permind anularea definirii curente a unuiidentificator, dac aceasta nu mai este necesar. Are sintaxa:

    #undef macroCu ea eliberm spaiul de memorie ocupat de macrodefinirea

    anulat i putem reutiliza numele identificatorului acestuia ntr-o altdirectiv #define.Exemplu .

    #undef EPS#undef PATRAT

    Operaii de intrare/ieire

    Se realizeaz prin funciile printf i scanf din biblioteca standardANSI.C specific limbajelor TC, BC, C. C++ include i bibliotecaIOSTREAM care realizeaz operaiile de intrare/ieire printr-o clasa deobiecte.

    Fluxuri de intrare/ieire

    Fluxul este o secven de octei de la o surs ctre o destinaie. Esteun model abstract pentru dispozitivele de intrare/ieire precum tastatur,ecran, fiiere pe disc i buffer de memorie. Biblioteca IOSTREAMconine fluxul de intrare (clasa ISTREAM), de ieire (clasa OSTREAM)i intrare/ieire (clasa IOSTREAM).Fluxurile predefinite din bibliotec sunt:

    cin flux de intrare conectat de regul la intrarea standard, careeste tastatura

    cout flux de ieire conectat la ieirea standard ecranul .

  • 8/7/2019 21297279-programare-procedurala

    5/60

    - 177 - Elemente de algoritmic i limbaje de programare

    Pentru folosirea bibliotecii IOSTREAM trebuie inclus n programulC++ fiierul antet IOSTREAM.h, echivalent lui STDIO.h din ANSI.C.

    Clasa IOSTREAM definete operatorii de intrare >> i ieire ) preia caracterele din bufferul asociat fluxului de intrarecin ile convertete n bii, iar al doilea (

  • 8/7/2019 21297279-programare-procedurala

    6/60

    - 178 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    7/60

    - 179 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    8/60

    - 180 - Elemente de algoritmic i limbaje de programare

    Exemplu .#include#includevoid main(){int i=45;j=200;k=7;cout

  • 8/7/2019 21297279-programare-procedurala

    9/60

    - 181 - Elemente de algoritmic i limbaje de programare

    manipulatori au argumente care conin: numele claseiios n care suntdefinite, urmat de operatorul de rezoluie global:: i de numele parametrilor care poate fi:

    skipws: elimin spaiile albe la intrare left: aliniere la stnga n cmpul de ieire right: aliniere la dreapta n cmpul de ieire scientific: folosete notaia siintific pentru numere reale n

    virgul mobil )exemplu -2.45e+03 fixed: folosete notaia zecimal (-31.67) dec: folosete notaia zecimal pentru ntregi hex: folosete notaia hexazecimal pentru ntregi oct: folosete notaia octal pentru ntregi uppercase: folosete litere mari la ieire: (exemplu -2.45E+03) showbase: indic baza sistemului de numeraie la ieire:

    o 0x pentru hexazecimal, ca prefixo 0 pentru octal, ca prefix

    showpoint: introduce un punct la ieirea n virgul mobil(exemplu .368)

    showpos: introduce + la afiarea valorii pozitive unitbuf: pentru golirea tuturor fluxurilor dup inserarea

    caracterelor ntr-un fluxExemplu.

    #include#include#includevoid main( ){int i=300;cout

  • 8/7/2019 21297279-programare-procedurala

    10/60

    - 182 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    11/60

    - 183 - Elemente de algoritmic i limbaje de programare

    Variabilele pot primi valori i prin citire cu operatorul de intrare >>aplicat dispozitivului standard de intrare (tastatura) prin fluxul cin.

    O alt caracteristic a variabilelor o constituiedurata de via , carereprezint timpul ct variabilei respective i este alocat spaiul dememorie i i este determinatclasa de memorie asociat. Clasele dememorie posibile sunt:

    auto datele se afl pe stiv register datele se afl ntr-un registru al calculatorului static datele sunt rezidente n modul de definiie extern datele sunt definite ntr-un modul extern

    Implicit, variabilele aparin clasei de memorare auto.Exist trei posibiliti de alocare a memoriei:

    variabilele statice, plasate n segmentul de dat al programului,au o durat de via egal cu timpul de execuie al programului,

    variabilele depuse pe stiva modulului de definiie sau ntr-unregistru al calculatorului, au durata de via egal cu cea aapelului funciei care le definete, memoria fiind alocatautomat,

    variabilele din memoriaheap (rezervat obiectelor dinamice),au durata de via controlat de program, memoria fiind alocat

    dinamic.Constantele sunt indentificatori de un tip anume care au o valoarefixat. Pot fi de tip: ntreg, real, caracter sau ir de caractere.

    Constanta de tip caracter este compus dintr-un caracter cuprinsntre apostrofuri. Constantele se folosesc pentru definirea altor constantesau pentru dimensionarea tablourilor.

    Prezena modificatoruluiconst n sintaxa declarrii unei variabileface ca valoarea acesteia s nu se poat modifica n timpul rulrii programului i astfel variabila devine o constant.

    Constantele se declar prin: const tip nume = valoare;Dactip lipsete, compilatorul atribuie constantei automat tipulint .

    Constantele se definesc i prin directiva de preprocesare#definecare este motenit de la limbajul C. Se definesc la nceputul programuluinume de constante simbolice la care se asociaz iruri de caractere particulare. Fiecare apariie n program a numelui unei constantesimbolice se nlocuie de ctre compilator cu irul de caractere asociat. Numele simbolice se scriu cu majuscule i definiia constantei simbolicenu se ncheie cu ;.

  • 8/7/2019 21297279-programare-procedurala

    12/60

    - 184 - Elemente de algoritmic i limbaje de programare

    Se recomand definirea constantelor prinmodificatorul const, care precizeaz i tipul constantei i mai puin prin constante simbolice.Exemplu.

    #include#define MAX 2const int x=5;const char y=$;cout

  • 8/7/2019 21297279-programare-procedurala

    13/60

    - 185 - Elemente de algoritmic i limbaje de programare

    Unsigned long 32 0 4294567195Unsigned long int 32 0 4294567195Float 32 [3.410-38,3.41038]Double 64 1.710-308,1.710308]Lond double 80 3.410-4932,1.1104932]

    Limbajul C++ face conversii ntre tipurile de date att implicit decalculator ct i explicit.

    Dac o expresie conine operanzi de tipuri diferite, nainteaexecutrii operaiilor prevzute n expresie,tipul inferior este convertit latipul superior.Pentru oriceoperator aritmetic regulile de conversie sunt:

    short se convertete laint , iar float la double dac un operand estedouble , atunci i al doilea este convertit la

    double i rezultatul este double dac un operand estelong , atunci i al doilea este convertit la

    long i rezultatul este long dac un operator esteunsigned atunci i al doilea este convertit

    la unsigned i rezultatul este unsigned.Conversia implicit se poate face i prinoperaia de atribuire .

    n expresia x=y, valoarea lui y este automat convertit la tipul lui xcare este i tipul rezultatului. Conversia de laint la float nu modificvaloarea afiat, ci doar reprezentarea intern a acesteia.

    Conversia de la float la int truncheaz partea fracionar.Conversia de ladouble la float se face prin rotunjire.Conversia de lalong la short duce la pierderea biilor de ordin

    superior care sunt n plus.Conversia explicit se face cu ajutorul unor funcii speciale.

    Conversia de la float la int se face cu funcia (int ) care are sintaxa:(int)var , unde var=variabil real.Conversia de laint la float se face cu funcia (float ) care are

    sintaxa:(float)var , unde var=variabil ntreag.Exemplu.

    #includevoid main( ){float x=15.34, y=7.6;int i=15, j=-24;

  • 8/7/2019 21297279-programare-procedurala

    14/60

    - 186 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    15/60

    - 187 - Elemente de algoritmic i limbaje de programare

    Varianta Spaiul de memorieocupat

    Domeniul de valori

    Signed char 8 bii -128 127Unsigned char 8 bii 0 255Char 8 bii -128 127

    Unele caractere au corespondent grafic.Variabilele de tip char pot primi valori prin atribuire astfel:var=c; c=caracter grafic (litere, cifre, operatori aritmetici, semne

    de punctuaie)var=xXY, X,Y=cifre n baza 16var=0xXY, unde X, Y sunt cifre sexazecimalevar=abc; abc=numr n baza 8

    Exemplu. v1=\x74; v2=t. Aici, v1 i v2 au ca valoare caracterul t,deoarece

    7416=11610 t.ntre datele de tipint i char acioneaz conversia implicit:

    unsigned char este convertit la tipulint ca un ntreg pozitiv reprezentat peun octet; signed char este convertit laint ca un ntreg pozitiv sau negativreprezentat pe un octet n care primul bit este rezervat pentru semn.

    Astfel, ordinea ntre caractere este dat de ordinea numerelor corespunztoare. Conversiachar-int-char nu duce la pierderea deinformaii.Exemplu.

    char a,b; int i;a=c; i=a; b=i;cout

  • 8/7/2019 21297279-programare-procedurala

    16/60

    - 188 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    17/60

    - 189 - Elemente de algoritmic i limbaje de programare

    int vect[ ]= {10, 20, 30, 40};Dac la declararea cu iniializare nu se specific dimensiunea,

    compilatorul aloc suficient spaiu pentru memorarea numrului deelemente care corespund valorilor de iniializare.

    Vectorii de tip char rein iruri de caractere prin atribuirea decaractere elementelor componente. C++ folosete caracterul NULLreprezentat de caracterul special \0 i avnd codul ASCII 0 pentru amarca ultimul caracter al unui ir de caractere.

    Pentru a declara un ir de caractere, se declar un vector de tip char cu o dimensiune suficient de mare pentru a reine caracterele irului.Ultimul element al vectorului este caracterul NULL.Constantele ir de caractere, plasate ntre ghilimele au ataat n modautomat de compilator caracterul NULL.

    La declararea vectorului de tip char este posibil i iniializareairului de caractere prin precizarea caracterelor incluse ntre ghilimele.Exemplu.

    char vect[40]=Acesta este un exemplu de ir;

    MatriceMatricea este un obiect caracterizat prin: tip, adres i valoare care

    coincide cu adresa primului su element.Matricea conine unul sau mai multe elemente de acelai tip, care

    este i tipul matricei.Matricea are un nume unic i dou dimensiuni care dau numrul

    liniilor i numrul coloanelor. Se memoreaz pe linii.Matricea se consider ca fiind tablou de tablouri i deci se declar

    prin:tip nume[dim1][dim2]; dim1=numrul liniilor; dim2=numrul

    coloanelor Numerotarea elementelor ncepe cu 0. Astfel, nume[0] indic prima

    linie, nume[1] a doua linie, etc. Adresa primei linii coincide cu adresamatricei. Ca i la vectori, matricele pot fi iniializate la declarare prin:tip nume[dim1][dim2]={exp 11,...,exp 1dim2 ,...,exp dim11 , ...,exp dim1dim2 }.

    Valorile iniiale se introduc pe linii.Exemplu.

    #includevoid main( ){int i,j;

  • 8/7/2019 21297279-programare-procedurala

    18/60

    - 190 - Elemente de algoritmic i limbaje de programare

    int mat[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};cout

  • 8/7/2019 21297279-programare-procedurala

    19/60

    - 191 - Elemente de algoritmic i limbaje de programare

    Identificatorii din list pot fi iniializai cu ntregi n mod explicit,iar valorile lor pot s i coincid.Exemplul 1.

    enum valori{adevrat,fals,indiferent}enum zile{luni,mari,miercuri,joi,vineri}enum calif{FB,B,S,NS}Astfel, FB=0,B=1,S=2,NS=3.

    Exemplul 2.enum numerotare{Mihai=3,Andrei=12,Vlad=7};

    Exemplul 3.

    enum anotimp{iarna,primvara=1,vara,toamna} se atribuie valoriunui singur membrun acest exemplu, compilatorul atribuie celorlali membri valorile

    2,3,respectiv 0 pentru iarna, n funcie de ordinea lor n list.Se pot defini tipurienumerare anonime (fr nume), care trebuie s

    includ i declararea variabilelor de tip enumerare anonim sub forma:enum{iarna,primvara,vara,toamna}anotimp;enum{nord,vest,sud,est}puncte_cardinale;Variabilele de tip enumerare se declar: prin includerea declarrii lor n declararea tipului enumerare prin neincluderea declarrii lor n declararea tipului enumerare

    adic sub formele echivalente:enum tipen{id1,id2,...}var 1,var 2,...;enum tipen{id1,id2,...};tipen var 1,var 2,...;

    Exemple.enum sporturi{fotbal,baschet,handbal,volei}tenis,polo; sauenum sporturi{fotbal,baschet,handbal,volei};sporturi tenis,polo;

    Structuri

    Structurile sunt colecii de date, eventual de tipuri diferite, care potfi referite att separat la nivelul membrilor coleciei, ct i mpreun lanivel de grup. Membrii colectiei pot fi tipuri predefinite sau alte structuri.Se declar prin:

    struct nume{tip1 membru1;

  • 8/7/2019 21297279-programare-procedurala

    20/60

    - 192 - Elemente de algoritmic i limbaje de programare

    tip2 membru2;.......................

    };Dac declararea nu este urmat de o list de variabile, ea nu

    produce alocare de memorie ci descrie doar organizarea structurii.Exemplu. struct persoana {

    char nume[10];char pren[10];char prof[10];unsigned vrsta;char localitatea[15];char adresa[40];};

    persoana elev={Popescu,Ion,Arhitect,40,Bucureti,IonManolescu 2};Variabilele de tip structur se declar prin:

    - includerea declarrii variabilelor la definirea structurii- neincluderea declarrii variabilelor la definirea structurii (ca n

    exemplul de mai sus).Exemplu.struct complex {

    float modul;float argument;}n1,n2;

    Variabilele n1 i n2 sunt de tip complex, avnd fiecare dou componente:modul i argument.

    Se pot declara i structuri anonime, care trebuie s includ ideclararea variabilelor de tip structur anonim.Exemplu.struct{

    float modul;float argument;}n1,n2;

    Variabilele de tip structur se pot iniializa chiar la declararea loar ca nexemplul de mai sus pentru variabila elev.

    Atribuirea de valori unui membru al unei structuri sau accesareaunui membru dintr-o structur se face cu operatorul . numitoperator de apartenen sub forma:

    nume-variabila-structura membru;Exemplu.

  • 8/7/2019 21297279-programare-procedurala

    21/60

    - 193 - Elemente de algoritmic i limbaje de programare

    Pentru structurile de mai sus avem:elev.vrsta=55;n1.modul=8.3;n2.argument=1.57;

    Uniuni

    Uniunile sunt structuri speciale, n care membrii, nu neaprat deacelai tip, folosesc n comun aceeai zon de memorie. Lungimea uneiuniuni este dimensiunea maxim a componentelor sale.

    Spre deosebire de structuri, o singur component a uniunii esteaccesibil la un moment dat.Se declar prin:

    union nume{tip1 nume1;tip2 nume2;.................};

    Variabilele se declar ca i la structuri n cele dou moduri precizate(definim variabilele la declararea structurii imediat dup acoladade nchidere sau separat).

    Cnd se atribuie valori unui mambru dintr-o uniune, are loc osuprascriere peste orice atribuire anterioar (fiind vorba de aceeai zonde memorie).

    Accesarea membrilor unei uniuni se face tot cuoperatorul apartenen .Exemplu.

    union valoare{int a; long b;}var;

    var.a=700;var.b=100000Se pot declarauniuni anonime . In acest caz referirea se face direct

    prin numele variabilei, fr operatorul . .Exemplu.

    union {int a; long b;}var;

    a=700; b=100000;

  • 8/7/2019 21297279-programare-procedurala

    22/60

    - 194 - Elemente de algoritmic i limbaje de programare

    Operatori

    Prinexpresie nelegem o combinaie logic ntre operanzi (date) ioperatori care pot fi: unari, binari i ternari.Operatorii pot fi:

    aritmetici de incrementare i decrementare de atribuire relaionali i logici la nivel de bit sizeof,virgul,condiional operatori specifici limbajului C++

    o de alocare a memorieio de eliberare a memorieio de rezoluie

    Mai muli operatori ntr-o expresie se evalueaz de la stnga ladreapta sau de la dreapta la stnga, conform ordinului de prioritate stabilit

    n funcie de nivelul de prioritate al operatorilor.Operatorii aritmetici sunt: semn +,- (unari) +,-,*,/ (binari) %(modulo) d restul mpirii a doi operanzi ntregiCu acetia se construiesc expresii artimetice care pot conine i

    apeluri de funcii. n acest caz evaluarea funciilor are prioritate fa decelelalte operaii ale expresiei.Operatorii de incrementare i decrementare sunt: ++ respectiv --Se aplic doar variabilelor i le mresc valoarea cu 1, respectiv le scadvaloarea cu 1.

    Au sintaxa: var++; respectiv var--;++var; --var;Se observ c ei pot fi prefixai cnd modific valoarea variabilei

    nainte de a fi folosit ntr-o expresie sau postfixai cnd modificvaloarea dup folosirea variabilei n expresie.

    Dac operatorul ++, respectiv - - este singur ntr-o expresie, atunciambele forme (prefixate sau postfixate) au acelai efect.

  • 8/7/2019 21297279-programare-procedurala

    23/60

    - 195 - Elemente de algoritmic i limbaje de programare

    Operatorul de atribuire este =.Operatorul = separ doi operanzi cu care formeaz expresia de

    atribuire:var=expresie;Aici var primete valoarea expresiei din dreapta. Expresia de

    atribuirevar=expresie are ca tip tipul variabilei din stnga (tipul lui var).C++ pune la dispoziie i operatori aritmetici de atribuire care

    combin operatorii aritmetici cu cel de atribuire i permit scrierea prescurtat a unor expresii aritmetice. Aceast form scurt a operatorilor aritmetici de atribuire permit ca n anumite instrucini de atribuire numeleunei variabile s apar o singur dat. Operatorii aritmetici de atribuiresunt +=,-=,*=,/=,%=.Exemplu. In loc de x=x%y scriem x%=y; lungime=lungime+5 devinelungime+=5;Operatorii logici i relaionali sunt:

    &&, ||, ! operatori logici (i, sau, non) =,==,!= - operatori relaionaliCu operatorii logici se construiesc expresii logice.Cu operatorii relaionali se construiesc expresii relaionale, care se

    evalueaz de la dreapta la stnga. Rezultatul evalurii este 1 dacexpresia este adevrat i 0 dac este fals.

    C++ nu dispune de un tip boolean predefinit. El consider valoarea0 ca fals i orice valoare diferit de 0 ca adevrat.

    Expresiile logice se evalueaz de la stnga la dreapta i evaluarease oprete atunci cnd se cunoate valoarea de adevr a rezultatului.

    Expresiile mixte sunt cele care conin att operatori relaionali, cti logici. Operatorii relaionali au prioritate fa de cei logici. Dacexpresia conine i operatori aritmetici acetia au prioritate la execuie.Operatorii la nivel de bit se folosesc pentru operatii de manipulare a biilor precum: comutare, iniializare, filtrare i deplasare.

    Acetia sunt: &,|,~ (i, sau, non bit cu bit), ^ (sau exclusiv bit cu

    bit), deplasare stnga, respectiv deplasare dreapta bit cu bit.Exemplu. x=x|ANT pune n x pe 1 biii care sunt 1 n ANT

    ^ sau exclusiv opereaz astfel:1 0

    1 0 10 1 0

  • 8/7/2019 21297279-programare-procedurala

    24/60

    - 196 - Elemente de algoritmic i limbaje de programare

    Operatorii > deplaseaz la stnga, respectiv la dreapta biiireprezentnd valoarea binar a operatorului din stnga cu un numr de poziii dat de operandul din dreapta.

    ay se scrie x>>=y, etc.Operatorul sizeof

    Acest operator ntoarce lungimea n octei a memoriei operandului,care poate fi variabil (scalar, tablou, nregistrare, etc.) sau un tip de date, pe baza declarrii elementelor acestuia. Are formatul:sizeof(variabil);sausizeof(tip_dat);Exemplu.

    cout

  • 8/7/2019 21297279-programare-procedurala

    25/60

    - 197 - Elemente de algoritmic i limbaje de programare

    ntoarce adresa obiectului sau valoarea NULL dac alocarea nu a avutsucces. Obiectul creat se poate initialize cu val_init.Operatorul de eliberare a memoriei : delete , elibereaz o zon dememorie alocat cu new cnd aceasta nu mai este necesar. Are sintaxa:delete pointer .Eliberarea zonei de memorie ncepe de la adresa coninut de pointer.Operatorul de rezoluie (scop) :: este folosit pentru definirea funciilor membre unei clase pentru a preciza clasa cu care este asociat o anumitfuncie. Dac operatorul nu are nume de clas, el indic o funcie sau ovariabil definit global.

    Reguli de prioritate a operatorilor [12] Nivelurile de prioritate ale operatorilor C++ i ordinea de

    evaluare( =dreapta-stnga, =stnga-dreapta) cnd operatoriconsecutivi au aceeai prioritate sunt:

    rezoluie :: 1 postincrementare ++ 2 postdecrementare - - 2 preincrementare ++ 2 predecrementare - - 2

    operator adres & 2

    redirectare * 2 plus + 2 minus 2 negaie pe bii ~ 2 negaie logic ! 2 sizeof 2 conversia tiptype 2 nmulire * 3 mprire / 3 modulo % 3 adunare + 4 scdere 4 deplasare stnga > 5 mai mare strict > 6 mai mare sau egal >= 6

  • 8/7/2019 21297279-programare-procedurala

    26/60

    - 198 - Elemente de algoritmic i limbaje de programare

    mai mic strict < 6 mai mic sau egal

  • 8/7/2019 21297279-programare-procedurala

    27/60

    - 199 - Elemente de algoritmic i limbaje de programare

    o if _ else cu dou alternativeo if _ else cu n 3 alternativeo instruciunea switch

    instruciuni de ciclareo instruciunea for o instruciunea whileo instruciunea do _ while

    instruciuni de salto instruciunea break o

    instruciunea continueo instruciunea gotoo instruciunea return

    instruciunea compusInstruciunea expresie are sintaxa: expresie; Aceasta atribuie valori variabilelor, incrementeaz/decrementeazvariabile, etc.Exemplu . Apelarea unei funcii urmat de ; este o instruciune expresie.Un caz particular de instruciune expresie este instruciunea vidcompus din ; (aceasta evit plasarea unei etichete n faa acoladei denchidere a unui bloc) .Un alt caz particular este instruciuneaexpresie condiional cu sintaxa :

    expr 1 ? expr 2 : expr 3 ;Dac expr 1 este adevrat ( 0) se evalueaz expr 2 i expresiacondiional ia valoarea lui expr 2 iar dac expr 1 este fals (= 0) seevalueaz expr 3 i expresia condiional ia valoarea lui expr 3 (aceasta poate substitui instruciunea de decizie if_else cu dou alternative).Exemplu .

    #include void main(){

    double a, b, max;cout b ;max = (a>b) ? a : b ;cout

  • 8/7/2019 21297279-programare-procedurala

    28/60

    - 200 - Elemente de algoritmic i limbaje de programare

    Instruciunea if cu o alternativ are sintaxa :if (condiie) instr ;|{secvena de instruciuni }

    undecondiie este orice expresie corect.Se evalueaz condiie i dac este adevrat( 0) se execut instruciunearespectiv secvena de instruciuni, din sintaxa lui if.Exemplu .

    #include #include void main (){int k;clrscr();cout k;if (k>0) {

    cout

  • 8/7/2019 21297279-programare-procedurala

    29/60

    - 201 - Elemente de algoritmic i limbaje de programare

    }else instr_2 ;

    Exemplu .#include #include void main ()

    {int i;clrscr();cout

  • 8/7/2019 21297279-programare-procedurala

    30/60

    - 202 - Elemente de algoritmic i limbaje de programare

    Are sintaxa : switch (expr){

    case cst1 :instr 1 ;|set1 de instr; break;

    case cst2 :instr 2 ;|set2 de instr; break;

    .case cstn :

    instr n ;|setn de instr; break;[default :

    instr n+1 ; | setn+1 de instr;]}

    unde: expr este o expresie cu valoare compatibil cu un ntreg (o

    constant, o variabil, apel de funcie, etc); nu poate fi double saufloat

    cst1, cst2,,cstn sunt constante de selecie cu valori diferite,convertibile la tipul lui expr. Fiecare etichetcase specific osingur constant,

    break ncheie instrucuineaswitch prin salt la sfritul blocului{}. In absena sa execuia programului continu cu urmtoareaetichetcase .

    default , dac apare , corespunde valorilor luiexpr ce nu apar nlista constantelor de selecie menionate explicit n instruciune.

    Setul de instruciuni corespunztor fiecarei etichetecase nu trebuie inclusintre { }.Pentru execuie se evalueaz expresiaexpr i se compar valoareaobinut cu constantele specificate de etichetelecase . Dac apare printreacestea se executa instruciunea corespunztoare eticheteicase n care aaprut. Dac nu apare printre aceste constante se execut instruciuneacorespunztoare luidefault , dac aceasta exist sau se trece la primainstruciune de dupswitch n caz contrar.

  • 8/7/2019 21297279-programare-procedurala

    31/60

    - 203 - Elemente de algoritmic i limbaje de programare

    Instruciunea forPermite repetarea uneia sau mai multor instruciuni de un numr

    fix de ori. Are sintaxa :for ( [expr 1] ; [expr 2] ; [expr 3])

    instr ; | {secvena de instr} Parantezele drepte indic opionalitatea coninutului lor. expr 1 se evalueaz o singur dat inaintea primei iteraii. Ea

    iniializeaz variabila sau variabilele de control (contoare). expr 2 se evalueaz i testeaz naintea fiecrei iteraii. Reprezint

    condiia de ieire din ciclu . expr 3 este evaluat la sfritul fiecrei iteraii. Ea incrementeaz

    sau decrementeaz variabilele de control ale ciclului .Se execut astfel: La nceput se iniializeaz contoarele i apoi setesteaz condiia de ieire. Dac aceasta este adevarat se executinstruciunile ciclului i se incrementeaz sau decrementeaz contoarele,repetnd testarea condiiei, altfel ciclulfor se ncheie .Exemplu .

    #include void main(){char c;for (c = z ; c >= a ; c--)

    cout

  • 8/7/2019 21297279-programare-procedurala

    32/60

    - 204 - Elemente de algoritmic i limbaje de programare

    Exemplu . Pentru inversarea unui ir de caractere :#include void main(){

    int i, j;char v[5] = { abcde } , ch;cout

  • 8/7/2019 21297279-programare-procedurala

    33/60

    - 205 - Elemente de algoritmic i limbaje de programare

    Are sintaxa :do

    instr ; | {secventa de instr.}while (conditie) ;

    Aceast instruciune se folosete n special pentru operaiile cu meniuri.Opiunile meniului sunt afiate cel puin o dat i dac se alege orice altopiune diferit de quit se execut comanda selectat , altfel se iese.Exemplu . #include

    void main(){

    char ch=a ;cout

  • 8/7/2019 21297279-programare-procedurala

    34/60

    - 206 - Elemente de algoritmic i limbaje de programare

    Intruciunea gotoAre sintaxa :goto etichet ;Aceasta ntrerupe secvena curent i continu execuia de lainstruciunea precedat de eticheta din sintaxa instruciunii goto i care seafl n cadrul aceleiai funcii .Eticheta precede instruciunea referit ieste separat de aceasta prin caracterul :. Ea este un identificator.Instruciunea returnIncheie execuia unei funcii i determin revenirea la funcia apelant .Are sintaxa :

    return ;

    return(expresie);A doua form transmite o valoare funciei apelante i anume valoareaexpresiei din sintax.Instruciunea compus(blocul)Blocul este un grup de declaraii urmat de instruciuni, toate incluse ntreacolade. El nu este urmat de ;.Exemplu de instruciuni compuse:

    corpul unei funcii, blocul ce urmeaz dup instruciunea if.

    Are sintaxa:{lista de declaraii;lista de instruciuni;

    }

    Pointeri

    Pointerul este un tip de date care stocheaz adresa unei zone dememorie. Diferena dintre un pointer i o variabil care are atribuit ovaloare este c variabila indic totdeauna aceiai zon de memorie (loculunde se afl valoarea variabilei) pe cnd un pointer poate fi modificatnct s adreseze zone de momerie diferite.

    Pointerul permite adresarea a dou valori diferite valoarea stocat n interiorul su (adresa unei zone) valoarea elementului indicat de pointer (valoarea coninut n

    zona indicat)Prima valoare, ce se obine prinafiarea pointerului , este adresa dememorie stocat n pointerul respectiv.

  • 8/7/2019 21297279-programare-procedurala

    35/60

    - 207 - Elemente de algoritmic i limbaje de programare

    A doua, este valoarea stocat n locaia precizat, accesul la ea fiindreferirea pointerului prin operatorului unar * numitreferin .Privind coninutul zonei de memorie adresate distingem :

    pointer de date, care conine adresa unui tip de date ca: variabil,constant, tablou, structur, clas

    pointer de funcii care conine adresa codului executabil al uneifuncii.

    Tipul de date asociat pointerilor poate fi: predefinit definit de utilizator

    Adresele obiectelor (datelor i funciilor) dintr-un program sunt nenule.Pointerul cu valoarea 0 nu conine adresa nici unui obiect sau funcie. Elreprezint pointerul NULL.Pointerii permit alocarea dinamic a memoriei stocnd adrese dememorie ale unor funcii fr nume sau a unor date a cror dimensiunenu este dinainte cunoscut.

    Pointeri la variabile simple

    Pointerii se declar ca i variabilele obinuite punnd * n faa numeluilor sub forma :tip *nume_pointer ;undetip este tipul datei a crei adres o va memora pointerul respectiv.La definire un pointer nu are valoare, el adreseaz un spaiu aleator.Compilatorul interpreteaz zona adresat de pointer ca un obiect de tipulspecificat prin declaraie cu atributele, dimensiunea i semnificaiainformaiei coninute n zona respectiv.Exemplu . int *a ; double *b ; float *c , y ;Deoarece o variabil pointer este un obiect putem declara pointer la pointer Exemplu . int **a;Aicia poate conine adresa unui pointer de obiecte de tipulint.

    Inainte de folosire o variabil pointer trebuie iniializat cu 0 sau cuadresa unui obiect, altfel pot aprea erori grave care pot chiar bloca programul.Pentru a atribui adresa unei variabile unui pointer compatibil, folosimoperatorul unar & pentru determinarea adresei, sub forma:

    pointer = &variabila ;Exemplu . int i,*p;

  • 8/7/2019 21297279-programare-procedurala

    36/60

    - 208 - Elemente de algoritmic i limbaje de programare

    p=&i;Aici se creaz pointerulp care apoi memoreaz adresa variabilei i.Pentru a accesa coninutul locaiei indicate de un pointer (referirea unui pointer) prin operatorul referin * folosim sintaxa :

    variabila = *pointer;Exemplu.

    # include void main(){

    int i,j,*p;cout > i;cout

  • 8/7/2019 21297279-programare-procedurala

    37/60

    - 209 - Elemente de algoritmic i limbaje de programare

    Pointeri la tablouri

    Numele unui tablou este un pointer constant de tipul elementelor tabloului.Valoarea sa este adresa primului element al tabloului. Astfel: pentru vectorulvect , expresiile vect i &vect[0] sunt echivalente pentru matriceamat , expresiile mat i &mat[0][0] sunt echivalentePointerii permit accesarea elementelor tabloului prin operaia de adunaredintre pointeri i ntregi. n acest caz adresa de baz a unui tabloutabeste locaia primului su element, dat s spunem de pointerul p. Adresa

    elementului tab[i] din tablou va fi dat de expresia p+i .Trebuie fcut diferena ntre pointeri la tablouri i tablouri de pointeri.Exemplu.

    int t[n][n] ; tablou cu nxn elementeint *p[n] tablou de pointeri la care se aloc n pointeri

    Fiecare din cei n pointeri ,indic (pointeaz) ctre un tablou de intregi ,cu lungimi care pot fi diferite. Accesarea unui element se face indirect printr-un pointer fr a fi necesar indexarea.Alocarea i dealocarea (eliberarea) dinamic a unui tablou folosetesintaxa:

    pointer-la-tablou = new tip-date-tablou[dim-tablou] ;delete pointer-la-tablou ;

    Exemplul 1.#include void main(){

    int v[10] = {1,2,3,4,5,6,7,8,9,10};int *pi, *pf, s=0, *ps; pi = &v[0];pf = &v[9];ps = &s;for( ; pi

  • 8/7/2019 21297279-programare-procedurala

    38/60

    - 210 - Elemente de algoritmic i limbaje de programare

    #include void main(){

    int k;double *p; p=new double[4];cout

  • 8/7/2019 21297279-programare-procedurala

    39/60

    - 211 - Elemente de algoritmic i limbaje de programare

    strncpy()- copiaz un numr specificat de caractere din fiierulsurs n cel destinaie

    strnicmp()- compar un numr specificat de caractere de lanceputul a dou iruri ignornd diferenele dintre majuscule iminuscule

    strnset() -suprascrie un numr specificat de caractere dintr-un ir cu copii ale unui singur caracter

    strrchr() -caut ultima apariie a unui caracter ntr-un ir strrev() -inverseaz ordinea caracterelor unui ir

    strset()-nlocuie toate caracterele unui ir, excepie terminatorul

    de ir, cu un caracter strspn()- d numrul caracterelor din prima parte a unui ir,

    similare cu unul din caracterele unui ir ablon strstr() -caut prima apariie a unui subir ntr-un ir dat strtod()- convertete un ir de caractere n double strtok() -caut anumite simboluri sau subiruri dintr-un ir;

    delimitatorii sunt dai printr-un al doilea ir de caractere strtol () -convertete un ir de caractere ntr-un ntreg de tip long

    zecimal, octal sau hexazecimal strupr() -convertete minusculele n majuscule

    Exemplu. Se definete i iniializeaz vectorul de pointerips prin carese ordoneaz alfabetic un ir de caractere ce conine numele unor persoane. Interschimbarea adreselor n vectorul de pointeri ps se face prinfuncia predefinitstrcmp () .#include #include #include void main(){

    clrscr();int i,j;char *temp;char *ps[]={Paul, Vlad, Andrei, Iancu, Gheorghe ,Ion, Bogdan,Dumitru,Radu,Dan };cout

  • 8/7/2019 21297279-programare-procedurala

    40/60

    - 212 - Elemente de algoritmic i limbaje de programare

    cout

  • 8/7/2019 21297279-programare-procedurala

    41/60

    - 213 - Elemente de algoritmic i limbaje de programare

    }Apare pe ecran mesajul:Mijlocul segmentului ab este punctul : (1.5,5.5).

    Funcii

    Un program n C++ este o succesiune de funcii, succesiune n carefiecare funcie ndeplinete o sarcin bine definit. Funcia este o coleciede declaraii i instruciuni care execut o aciune.Funciile :

    sunt eseniale n construcia blocurilor permit folosirea facilitilor oferite de programarea structurat permit elaborarea unor aplicaii proprii utilizatorului permit obinerea unor funcii mai complexe prin combinarea

    unora mai simple, care scriu, citesc, testeaz i depaneaz programe

    Un program C++ conine cel putin o funciemain() care este apelat lalansarea n execuie a programului, funcii predefinite (de bibliotec) ifuncii construite de programator.Inainte de utilizarea unei funcii ea trebuie fie definit, fie declarat.

    Definirea funciilor

    Funciile se definesc prin sintaxa :tip-rez nume(lista){decl-locale

    instr}

    unde:tip-rez = tipul reultatului ntors de funcie. Poate fi orice tip diferit detablou. Implicit se consider tipul int. Dac funcia nu ntoarce rezultate,se folosete cuvntulvoid .

  • 8/7/2019 21297279-programare-procedurala

    42/60

    - 214 - Elemente de algoritmic i limbaje de programare

    lista = o list de declaraii ale parametrilor separai prin ,. Ea areforma:tip1 np1, tip2 np2,., npi=parametru formal , i=1,2,...Daca lista este vid se pune ( ) sau (void). Nu este permis definirea unei funcii n blocul { } altei funcii. Nu este permis ieirea dintr-o funcie n afara ei prin instruciunea goto. Ofuncie se execut la apelarea ei prin una din formele:

    nume (lista_argumente);nume ( );

    undelista_argumente conine valorile parametrilor din lista parametrilor funciei. O funcie se poate apela ori de cite ori este nevoie. Dupexecutarea instruciunilor unei funcii se continu executarea programuluicu prima instructiune de dup cea de apel a funciei. Incheierea execuieiunei funcii i revenirea n funcia apelant se face prin instructiuneareturn care are una din sintaxele:

    return(expr);return expr;return;

    Valoarea expresieiexpr este rezultatul funciei. Ea este convertit la tipulfunciei nainte de a se transmite n funcia apelant. Funciile de tipvoidnu ntorc valoare i deci return are aici doar formareturn; .Exemplul 1.

    #include.void desen(void){cout

  • 8/7/2019 21297279-programare-procedurala

    43/60

    - 215 - Elemente de algoritmic i limbaje de programare

    float zece(float x){float y=1;for(int k=1; k

  • 8/7/2019 21297279-programare-procedurala

    44/60

    - 216 - Elemente de algoritmic i limbaje de programare

    for(k=1;k

  • 8/7/2019 21297279-programare-procedurala

    45/60

    - 217 - Elemente de algoritmic i limbaje de programare

    Funcii recursive

    Dac o funcie se autoapeleaz direct sau indirect se numeterecursiv .Astfel apelul unei funcii recursive poate aprea i n definiia sa.O funcie recursiv nu are sintax special. Ea implic existena uneistive care la fiecare apel al funciei recursive se ncarc cu valorile parametrilor, variabilelor locale i rezultatului. La fiecare revenire,aceast stiv este descarcat.Recursivitatea se aplic n special la prelucrarea structurilor de date de tiprecursiv cum ar fi liste, arbori, etc.Exemplu. Calculul nerecursiv i recursiv al factorialului unui numr natural.Calcul nerecursiv#include < iostream.h>int factorial (int n){

    int rez=1;for (int i=1; inum;cout

  • 8/7/2019 21297279-programare-procedurala

    46/60

    - 218 - Elemente de algoritmic i limbaje de programare

    void main (){int num;cout >num;cout

  • 8/7/2019 21297279-programare-procedurala

    47/60

    - 219 - Elemente de algoritmic i limbaje de programare

    # include < stdarg.h>void prod (char*mes,){int rez=1, par;va_list ap;va_start (ap,mes);while ((par=va_arg(ap,int))!=0)

    {rez*=par;}cout

  • 8/7/2019 21297279-programare-procedurala

    48/60

    - 220 - Elemente de algoritmic i limbaje de programare

    Exemplu.#include < iostream.h>void f(int, int=5);void main (){cout

  • 8/7/2019 21297279-programare-procedurala

    49/60

    - 221 - Elemente de algoritmic i limbaje de programare

    void main (){cout

  • 8/7/2019 21297279-programare-procedurala

    50/60

    - 222 - Elemente de algoritmic i limbaje de programare

    s + = p[i];return s;

    }Funcia calculeaz suma elementelor lui vector. Parametrulint* este tipulde baz al parametrului vector.

    Parametrul ir de caractereirurile de caractere n C + + sunt considerate tablouri de caractere. Dacun ir de caractere este parametrul unei funcii, pentru el sunt valabileaceleai reguli ca la parametrul tablou.Exemplu. Programul urmtor calculeaz numrul de caractere litere micidintr-un ir de caractere prin funciacontor care primete ca parametrurespectivul ir. Introducerea irului se face cu funcia de bibliotec predefinit gets () din fiierul antet stdio.h . Funciacontor atribuie adresa parametrului ir unui pointer local psir . Acesta este folosit de funcie pentru procesarea caracterelor din ir.

    #include < iostream.h>#include < stdio.h>int contor (char *sir){int k=0;char *psir = sir;while (*psir! = \0) {

    if (* psir >=a && * psir

  • 8/7/2019 21297279-programare-procedurala

    51/60

    - 223 - Elemente de algoritmic i limbaje de programare

    Sirul introdus UN907.12CD contine 0 caractere mici.

    Parametrul structurAcest parametru se poate transfera funciilor C ++ prin valoare sau prinreferin. Tipul structurii apare n prototip i n antetul funciei ca latipurile predefinite.Exemplu.

    #include < iostream.h>struct complex{float x;

    float y;};complex operatie (complex, complex);

    void main (){complex c1,c2;cout > c1y;cout > c2y;cout

  • 8/7/2019 21297279-programare-procedurala

    52/60

    - 224 - Elemente de algoritmic i limbaje de programare

    Parametrii transmii sunt: c1=(1,2) i c2=(-1,3)Rezultatul operaiei este: c=(-7,1)

    Transferul parametrilor prin referin

    Functiile C + + transfer n mod normal parametrii prin valoare. Ele primesc valorile efective ale parametrilor sub forma de copii ale datelor originale. Pot modifica n interiorul lor valorile parametrilor prin pointerifr a afecta datele originale. Modificarea valorilor parametrilor se poateface mai simplu prin transferul parametrilor nu prin valoare, ci prinreferin, eliminnd instruciunile care combin variabilele pointer cucele normale.O referina creaz un nume alternativ (alias ) pentru o variabil. Sedeclar prin sintax:

    tip& nume_alias = variabila;unde:& (ampersand) se pune imediat dupa tip.

    variabila = este cea pentru care referina este un aliasExemplu: int& intreg = n;

    double& precizie = eps;float& media_adm = media;

    Dup declararea uneireferine n program putem folosi atat variabila cti referina.Referina nu este o variabil. Ea nu mai poate fi modificat dup ce a fostasociat unei variabile. Folosirea unei referine ca identificator este utilcnd aceasta apare ca parametru formal al unei funcii. Spre deosebire de pointeri, referinele nu permit operaiile:

    atribuirea unui pointer o referin; obinerea adresei unei referine cu operatoruladresa ; compararea valorilor referinelor prin operatorii relaionali; operaii aritmetice cum ar fi adunarea unui deplasament(a unei

    adrese).

    Transferul parametrilor unei funcii prin referin este fcut decompilator, ceea ce simplific scrierea funciei i apelul ei.Transferul parametrilor de tip structur prin referin formale ca i cel prin pointeri este mai eficient dect transferul prin valoare, deoareceelimin copierea structurii pe stiv, conducnd astfel la creterea vitezeide execuie. Rezultatul unei funcii poate fi transferat prin valoare, pointer sau referin.

  • 8/7/2019 21297279-programare-procedurala

    53/60

    - 225 - Elemente de algoritmic i limbaje de programare

    Exemplu. Funcia operaie() are 3 parametrii referin, al treilea obineinformaii de la funcia apelat i ntoarace rezultatul funciei.

    #include < iostream.h>#include < conio.h>struct comp {

    float x;float y;};

    void operatie (comp& a, comp& b, comp& r){rx = ax * bx - ay * by;ry = ax * by + ay * bx;}void main ()comp c1, c2, c;cout >c1y;cout >c2y;cout

  • 8/7/2019 21297279-programare-procedurala

    54/60

    - 226 - Elemente de algoritmic i limbaje de programare

    lista_parametrii este de forma: tip_par 1, tip_par 2,.Exemplu. int(*pf) (int i); pf este pointer la o funcie care intoarce un

    rezultat ntreg i are un singur parametru de tip ntregdouble (*h) (double x, double y); h este un pointer la o funciecare

    ntoarce un rezultat de tip double iare 2 parametrii de tip double

    void (*sort) (char *); sort este un pointer la o funcie care nu ntoarcerezultate i are ca parametru un ir de caractere

    Inaintea folosirii unui pointer la o funcie acesta trebuie iniializat subforma:pointer_funcie = nume_funcie;unde nume_funcie este funcia atribuit pointerului la funcie, caretrebuie s ndeplineasc urmtoarele condiii:

    1. tipul rezultatului ntors de funcie s fie acelai cu cel ntors de pointer;

    2. lista parametrilor funciei s fie acceai cu cea a pointerului.Apelul pointerului la o funcie are sintaxa:

    (*pointer_funcie) (lista_argumente);Exemplu. Pointerului pf i este atribuit adresa funciei f () carecalculeaz suma a 2 ntregi.

    #include < iostream.h>int f(int i, int j){return i+j;}void main (){int x,y;int (*pf) (int, int);cout >y;cout

  • 8/7/2019 21297279-programare-procedurala

    55/60

    - 227 - Elemente de algoritmic i limbaje de programare

    Putem declara un tablou de pointeri ctre o funcie sub forma:tip_rez (*pointer_funcie [dim_tablou]) (lista_param.);

    Exemplu.int (*pf [3]) (int i); declar un tablou pf de 3 pointeri la o

    funcie. Fiecare element al tabloului pointeaz(indic) spre o funcie centoarce un rezultat de tip int

    i are un singur parametru de tip int.double (*pg [2]) (double x, double y);declar un tablou pg de 2pointeri la o funcie. Fiecare element al

    tabloului pointeaz (indic) ctre o funcie centoarce un rezultat de tip double i care are 2parametrii de tip double

    Pentru a atribui o funcie unui element dintr-un tablou de pointeri la ofuncie, folosim sintaxa:

    pointer_fct [indice] = nume_funcie;Fiecare pointer trebuie s ntoarc acelai tip de rezultat ca i funciaaccesat i s aib aceiai list de parametrii.Apelul unui tablou de pointeri la o funcie are sintaxa: (* pointer_fct [indice]) (lista_argumente);Exemplu. Un program ce conine tabloul de pointeri pf la o funcie,tablou cu dou elemente, fiecare indicnd ctre o funcie min () respectivmax () care ntorc un rezultat de tip int i au 2 parametrii de tip int, primul fiind un tablou unidimensional. Cu acest program calculm celmai mic i cel mai mare element al unui vector.

    #include < iostream.h>#include < conio.h>int min (int w[], int n){int minw = w[0], i;for (i=1; i w[i]) minw = w[i];cout

  • 8/7/2019 21297279-programare-procedurala

    56/60

    - 228 - Elemente de algoritmic i limbaje de programare

    {int maxw = w[0], i;for (i=1; i

  • 8/7/2019 21297279-programare-procedurala

    57/60

    - 229 - Elemente de algoritmic i limbaje de programare

    Printre fiierele antet, enumerm: assert.h diagnosticheaz programul complex.h declar clasacomplex pentru operaii cu numere

    complexe conio.h definete I/ E de la consol n MS DOS ctype.h declar funcii pentru clasificare i convertire de

    caractere graphics.h definete pachetul de funcii GRAPHICS float.h definete un domeniu de valori care pot fi stocate n

    tipurile virgul mobil fstream.h definete o clas ce reprezint fluxul de ieireofstream iostream.h definete fluxul de intrarecin i de ieirecout limits.h definete valorile limit pentru tipurile de date ntregi math.h definete funcii matematice pentru operaii cu numere

    reale search.h declar funcii de cutare signal.h definete simbolurile i rutinele pentru tratarea

    condiiilor excepionale stdarg.h definete macrocomenzi care furnizeaz acces la

    argumente fr nume dintr-o funcie cu numr variabil de parametrii

    stdlib.h declar rutinele de conversie de iruri, de alocare amemoriei, de control a proceselor i generatorul de numerealeatoare

    stdio.h declar funcii i tipuri de date necesare operaiilor de I/E

    string.h declar rutinele de manipulare a irurilor time.h definete tipuri de date i declar funcii care

    manipuleaz timpul.Printre funciile matematice cu argumente reale din fiierul antetmath.h enumerm:

    abs () cu prototipul:int abs (int x); d valoarea absolut a unuintreg

    acos () cu prototipul:double acos (double x); calculeazarccos x, x real

    asin () cu prototipul:double asin (double x); calculeaz arcsinx, x real

  • 8/7/2019 21297279-programare-procedurala

    58/60

    - 230 - Elemente de algoritmic i limbaje de programare

    atan () cu prototipul:double atan (double x); calculeaz arctgx ,x real

    atan2 () cu prototipul:double atan2 (double y, double x); calculeaz arctg y/ x ,x, y reali

    ceil () cu prototipul:double ceil (double x); d cel mai micntreg x

    cos () cu prototipul:double cos (double x); calculeaz cos x, cux real n radiani

    cosh () cu prototipul:double cosh (double x); d ch x, cu x real exp () cu prototipul: double exp (double x); calculeaz ex , x

    real fabs() cu prototipul :double fabs(double x); d |x|, pentru x

    real floor () cu prototipul:double floor(double x); d [x] , x real fmod() cu prototipul:double fmod(double x,double y) ;--d

    restul mpririi lui x la y cu ct ntreg frexp () cu prototipul:double frexp(double x, int *expptr);

    separ x n mantis i exponentul puterii lui 2 ldexp () cu prototipul: double ldexp(double x, int exp) ;--

    reconstruiete x din mantis i exponentul puterii lui 2 (calculeazx*2exp)

    log () cu prototipul: double log(double x) ; calculeaz lnx ,x>0 log10 () cu prototipul: double log10(double x) ; calculeaz

    lgx ,x>0 modf() cu prototipul:double modf(double x, double *intptr) ;--

    separ x n [x] i {x} pow() cu prototipul: double pow(double x, double y) ;--

    calculeaz xy sin() cu prototipul:double sin(double x) ;-- calculeaz sin x , x

    real n radiani sinh () cu prototipul:double sinh(double x ); calculeaz sh x, x

    real sqrt () cu prototipul:double sqrt(double x) ; calculeaz x

    ,x>=0 tan () cu prototipul:double tan(double x) ; calculeaz tg x, cu

    x n radiani tanh () cu prototipul:double tanh(double x) ; calculeaz th x,

    x real

  • 8/7/2019 21297279-programare-procedurala

    59/60

    - 231 - Elemente de algoritmic i limbaje de programare

    Exemplu.#include #include void main (){double x, y;cout >x>>y;cout

  • 8/7/2019 21297279-programare-procedurala

    60/60

    - 232 - Elemente de algoritmic i limbaje de programare

    {return (x*y);}void main (){double a, b;cout >b;cout