book basics of programming in c++ tudor 2010.pdf

Upload: speaker26

Post on 07-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    1/80

    See discussions, stats, and author profiles for this publication at: http://www.researchgate.net/publication/256780425

    Bazele programãrii în limbajul C++

    BOOK · JANUARY 2010

    CITATION

    1

    READS

    873

    1 AUTHOR:

    Nicoleta Liviana Tudor

    Petroleum - Gas University of Ploiesti

    27 PUBLICATIONS  17 CITATIONS 

    SEE PROFILE

    Available from: Nicoleta Liviana Tudor

    Retrieved on: 07 December 2015

    http://www.researchgate.net/profile/Nicoleta_Tudor2?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_7http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/profile/Nicoleta_Tudor2?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_5http://www.researchgate.net/?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_1http://www.researchgate.net/profile/Nicoleta_Tudor2?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_7http://www.researchgate.net/institution/Petroleum-Gas_University_of_Ploiesti?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_6http://www.researchgate.net/profile/Nicoleta_Tudor2?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_5http://www.researchgate.net/profile/Nicoleta_Tudor2?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_4http://www.researchgate.net/?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_1http://www.researchgate.net/publication/256780425_Bazele_programrii_n_limbajul_C?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_3http://www.researchgate.net/publication/256780425_Bazele_programrii_n_limbajul_C?enrichId=rgreq-0f8a6876-b1a2-4642-90cb-16ec681454d1&enrichSource=Y292ZXJQYWdlOzI1Njc4MDQyNTtBUzoxMDEzMTQwODAwMTg0NTJAMTQwMTE2NjU2NzgzNw%3D%3D&el=1_x_2

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    2/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    3/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    4/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    LIVIANA TUDOR

    Bazele programãrii în limbajul C++

    Editura MATRIX ROM

    Bucureşti 2010

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    5/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Referent ştiinţific

    prof. dr. ing. Mircea Petrescu

    Universitatea POLITEHNICA Bucureşti

    Tehnoredactare computerizatã

    lect. dr. Tudor Nicoleta Liviana

    Universitatea Petrol-Gaze din Ploiesti

    [email protected]

    [email protected]

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    6/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Bazele programãrii în limbajul C++

    1. Sisteme de calcul. Reprezentarea datelor în memoria calculatorului

    1.1.  Componenta hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    1.2. 

    Componenta software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    1.3.  Reprezentarea datelor în memoria calculatorului . . . . . . .

    9

    9

    12

    17

    2. Principiile programãrii structurate. Metode de reprezentare a

    algoritmilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.1.

     

    Principiile programãrii structurate . . . . . . . . . . . . . . . . . . .

    2.2. 

    Reprezentarea algoritmilor . . . . . . . . . . . . . . . . . . . . . . . . . .

    2.3.  Aplicaţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    2122

    23

    28

    3. Limbajul C++. Alfabet şi vocabular . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    3.1.  Alfabetul limbajului C++ . . . . . . . . . . . . . . . . . . . . . . . . . . .

    3.2. 

    Vocabularul limbajului C++ . . . . . . . . . . . . . . . . . . . . . . . . .

    33

    33

    35

    4. Tipuri de date. Operaţii de intrare-ieşire . . . . . . . . . . . . . . . . . . . . . . . .

    4.1. 

    Tipuri fundamentale de date . . . . . . . . . . . . . . . . . . . . . . . .

    4.2.  Structura programelor în limbajul C++ . . . . . . . . . . . . . . .

    4.3.  Funcţii uzuale de intrare-ieşire . . . . . . . . . . . . . . . . . . . . . .

    4.4. 

    Operaţii cu consola ( header ) . . . . . . . . . . . .

    47

    47

    50

    52

    57

    5. Structuri decizionale: if, switch, operatorul ?: . . . . . . . . . . . . . . . . . . .

    5.1. 

    Instrucţiunea if şi directiva #if . . . . . . . . . . . . . . . . . . . . . . .5.2.

     

    Instrucţiunea switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    5.3.  Operatorul ?: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    59

    5964

    69

    6. Structuri iterative. Instruciuni pentru transferul execuţiei . . . . . . . .

    6.1. 

    Instrucţiunea for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    71

    71

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    7/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    6.2. 

    Instrucţiunea while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    6.3. 

    Instrucţiunea do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    6.4.  Instrucţiuni pentru transferul execuţiei . . . . . . . . . . . . . . .

    76

    81

    84

    7. Tablouri ( vectori, matrice, şiruri de caractere) . . . . . . . . . . . . . . . . . . .7.1. Tablouri unidimensionale ( vectori) . . . . . . . . . . . . . . . . . . .

    7.1.1. Cãutare în vectori . . . . . . . . . . . . . . . . . . . . . . . . . . .

    7.1.2. Sortarea unui vector . . . . . . . . . . . . . . . . . . . . . . . . .

    7.1.3. Interclasarea a doi vectori ordonaţi . . . . . . . . . . . .

    7.2. Tablouri bidimensionale ( matrice) . . . . . . . . . . . . . . . . . . .

    7.3. Şiruri de caractere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    8990

    96

    99

    102

    105

    109

    8. Structuri şi uniuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.1.  Structuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    8.2. 

    Uniuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    117117

    126

    9. Funcţii C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    9.1. 

    Prototipul, definiţia şi apelul unei funcţii . . . . . . . . . . . . . .

    9.2. 

    Transferul parametrilor unei funcţii . . . . . . . . . . . . . . . . . .

    9.2.1. 

    Transferul parametrilor prin valoare . . . . . . . . . .

    9.2.2. 

    Transferul parametrilor prin referinţã . . . . . . . . .9.2.3.

     

    Transferul parametrilor de tip tablou . . . . . . . . .

    9.2.4. 

    Transferul parametrilor de tip structurã . . . . . . .

    9.3.  Funcţii cu un numãr neprecizat de parametri . . . . . . . . . .

    9.4. 

    Pointeri la funcţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    9.5. 

    Funcţii recursive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    9.5.1. 

    Funcţii direct recursive . . . . . . . . . . . . . . . . . . . . . .

    9.5.2. 

    Recursivitatea şi metoda reluãrii (backtracking)

    129

    129

    132

    133

    136138

    142

    145

    146

    148

    150

    155

    10. Structuri de date alocate dinamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    10.1. Operaţii cu variabile de tip pointer . . . . . . . . . . . . . . . . . .

    10.2. Pointeri cãtre tablouri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    159

    159

    165

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    8/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    9/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Capitolul 1

    Sisteme de calcul. Reprezentarea datelor

    în memoria calculatorului

    Un sistem de calcul este un ansamblu de componente hardware(echipamente fizice) şi componente software (componente logice), cecoordoneazã şi controleazã executarea operaţiilor prin intermediul programelorşi oferă servicii utilizatorului:•  componenta hardware (echipamente de calcul, dispozitive) asigurã prelucrarea

    automatã a informaţiei, precum şi comunicarea utilizatorului cu sistemul de calcul;•  componenta software (sistem de operare şi programe specializate).

    Programele realizeazã prelucrarea automatã, folosind echipamentele decalcul. Sistemul de operare [Boian F. M., 1994] este un ansamblu de proceduri şiprograme care oferã unui grup de utilizatori posibilitatea de utilizare eficientã asistemului de calcul.

    În funcţie de metoda de reprezentare a informaţiei, sistemele de calcul aufost clasificate în:

    •  sisteme de calcul analogice ( informaţia este codificată sub forma unormărimi fizice);

    • 

    sisteme de calcul numerice, care codifică informaţia sub formă discretă(numerică).

    Un sistem de calcul numeric prelucrează automat informaţia codificatăsub formă de valori discrete, conform unui program ce indică o succesiunedeterminată de operaţii aritmetice şi logice, având la bază un algoritm deprelucrare. Structura unui calculator numeric a fost definită în anul 1945 de cătrevon Neumann, ca fiind constituitã din: UI (unitate de intrare), M (memorie),UAL (unitate aritmetico-logicã), UC (unitate centralã) şi UE (unitate de ieşire).

    1.1. Componenta hardware

    Schema de principiu a unui sistem de calcul este prezentatã în figura 1:

    Unitatea centralã (UC)  gestioneazã activitatea componentelor sistemuluide calcul, asigurã execuţia programelor din memoria centralã şi executãoperaţiile de prelucrare automatã a informaţiilor.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    10/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    UC = CPU (unitate centralã de prelucrare ) + MI ( memorie internã )

    CPU = UCC ( unitate de comandã şi control ) + UAL ( unitate aritmetico-logicã)

     Fig. 1. Schema unui sistem de calcul.

    Unitatea centralã conţine memoria centralã, unitatea aritmetico-logicã şiunitatea de comandã şi control.

    Memoria centralã conţine regiştrii pentru memorarea temporarã a datelorprogramului care se executã şi pãstreazã datele în locaţii codificate binar,identificate prin adrese de memorie.

    Dispozitivele aritmetico-logice executã operaţiile aritmetice şi/sau logicesau alte operaţii specificate de instrucţiunile executate.

    Unitatea de comandã şi control coordoneazã activitatea celorlaltecomponente ale sistemului de calcul şi asigurã buna funcţionare a unitãţiicentrale.

    Unitãţile de schimburi multiple  permit comunicarea între sistemul decalcul şi exterior, coordonând funcţionarea dispozitivelor periferice.

    Dispozitivele periferice  sunt imprimanta, monitorul (display – ecran),unitãţile de discuri, tastatura, mouse, scanner, plotter, boxe, camerã Web.

    Unitatea de memorie : Unitatea fundamentalã de mãsurã a memoriei estebitul.

    Bit (binary digit) = cantitatea de informaţie ce poate fi memoratã într-ocelulã binarã.

    O locaţie de memorie = o succesiune de celule binare folosite în timpuloperaţiilor de citire din memorie sau scriere în memorie.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    11/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Un octet (byte) 1o = 1 B = 8 biţi = cantitatea de informaţie memoratã într-olocaţie.

    Capacitatea totalã a memoriei reprezintã numãrul maxim de octeţi ce potfi înregistraţi.

    Un Kilo-octet 1 Ko = 1 Kb (kilo-byte) = 1024 o = 210 o

    Un Mega-octet (1 Mo) = 1024 Ko = 210 KoUn Giga-octet = 1024 Mo = 210 MoUn Tera-octet = 1024 Go = 210 Go

    Memoria este de douã tipuri :•  memorie internã pãstreazã datele şi instrucţiunile programelor în locaţii dememorie identificate prin adrese sub formã de cifre binare, grupate în octeţi(byte), date care sunt prelucrate de procesor.

    Din punct de vedere logic, memoria internă este organizată în blocuri dememorie, 1 bloc = 64 Kb.

    Se cunosc urmãtoarele tipuri de memorii interne:-  memoria RAM (Random Access Memory) este memoria cu acces aleator,ce conţine datele programului ce este executat la momentul curent,procedurile/programele sistemului de operare. Este volatilã (conţinutul eidispare la închiderea calculatorului) şi asigurã accesul rapid la date, prinoperaţii de citire şi scriere. Din punct de vedere  fizic, memoria RAM este uncircuit integrat alcãtuit din milioane de tranzistoare şi condensatoare.Memoria RAM poate fi: SRAM şi DRAM:SRAM (static) – utilizeazã mai mulţi tranzistori pentru o celulã de memorieşi este folositã în special în memoria CACHE. Memoria cache stocheazãdatele refolosite de către procesorDRAM (dinamic) – utilizeazã o pereche tranzistor/condensator pentrufiecare celulã de memorie şi necesitã un refresh continuu deoarecetranzistorul se descarcã foarte rapid. O celulã stocheaza 1 bit. Celulele suntdispuse într-o matrice de linii şi coloane la intersecţia cãrora se aflã adresade memorie.-  memoria ROM (Read Only Memory) din care se pot doar citi date, nu şiscrie. Nu este volatilã. Include:PROM (Programmable Read Only Memory)EPROM (Eraseable Programmable Read Only Memory) – permite în plusştergerea datelorEEPROM (Electricaly Eraseable Programmable Read Only Memory) – pot fiatât citite cât şi şterse în mod selectiv şi programate de cãtre sistemul care leutilizeazã.-  memoria CMOS conţine informaţii despre caracteristicile fizice alecalculatorului (configuraţia calculatorului, tipul şi capacitatea HDD,capacitatea memoriei interne, data calendaristicã, parola de acces etc.),informaţii utilizate de BIOS (Basic Input Output System). Memoria CMOS

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    12/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    are capacitate foarte micã (64B), permite operaţii de citire şi scriere a datelorşi este nevolatilã.

    •  memorie externã constituitã din suporturi electromagnetice sau opticereutilizabile, pe care se pãstreazã datele codificate în formã binarã. Memoria

    externã este mai lentã decât memoria internã, dar conţine cantitãţi mari de date.Memoria externã utilizeazã:

    - suporturi electromagnetice (floppy-disk, hard-disk HDD) – suprafaţadiscului este împãrţitã în piste (cercuri concentrice), care sunt împãrţite însectoare egale. Pistele care au aceeaşi razã formeazã un cilindru. Locaţia dememorare de pe disc este sectorul, care are o capacitate de 512 octeţi- suporturi optice – discurile optice (discuri compact-CD si discuri DVD-disc video digital). Suprafaţa discului este împãrţitã în piste continue, înformã de spiralã. Spaţiul de memorare este divizat în blocuri pentruadresarea unei locaţii.

    - suporturi electronice – cardurile de memorie flash. Celulele binare (biţii)utilizaţi corespund stãrii anumitor circuite (închis-deschis, prezenţa sauabsenţa curentului electric în circuite).

    Hard Disk-ul  ( disc dur, rigid) conţine un strat magnetic pe un suportrigid. Disk-ul hard este construit dintr-un metal dur şi uşor, de obicei dinaluminiu, fiind singura componentã a unui PC care nu este 100% electronicã. Dinaceastã cauzã, ea este şi mai înceatã, în comparaţie cu restul componentelorcalculatorului personal.

    1.2. Componenta software

    Componenta software  este formatã din sistemul de operare ( S.O.) şiprogramele pentru aplicaţii.

    Definiţie 1 – Sistemul de operare este un set de proceduri manuale şiautomate care oferã unui grup de utilizatori posibilitatea sã foloseascã în acelaşitimp şi în mod eficient sistemul de calcul.

    Definiţie 2 – Sistemul de operare este un ansamblu de programe carefaciliteazã accesul la sistemul de calcul unuia sau mai multor utilizatori şi asigurão exploatare eficientã a echipamentului de calcul.

    Caracteristicile sistemului de operare:-  este rezident în memoria internã (RAM) a calculatorului (se încarcã automatla fiecare deschidere sau resetare a calculatorului)-  conţine un încãrcãtor (care se aflã pe prima pistã a fiecãrui disc de boot)- 

     în memoria ROM, existã un preîncãrcãtor care este folosit la iniţializarealucrului cu calculatorul (iniţializarea echipamentelor periferice, identificareaconfiguraţiei sistemului de calcul, cãutarea unui disc de boot (cu sistemul de

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    13/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    operare). Acesta încarcã în RAM nucleul sistemului de operare şi îl lanseazã înexecuţie. Nucleul va încãrca programele de aplicaţie şi utilitarele. 

    Componentele sistemului de operare sunt:-  nucleul ( Kernel )

    interfaţa ( shell )

    Nucleul ( Kernel) conţine programele necesare pentru gestionarearesurselor calculatorului şi pentru controlarea activitãţii echipamentelor.

    Funcţiile nucleului constau în:-  administrarea resurselor fizice: procesorul, memoria internã şi sistemul I/O(Input/Output)-  depistarea şi tratarea evenimentelor deosebite (inexistenţa hârtiei laimprimantã, citirea dintr-un fişier inexistent, rezultatul unei operaţii aritmetice cedepãşeşte capacitatea zonei de memorie alocatã)

    asigurã operaţiile de I/O la nivel fizic (cu echipamentele periferice)-  asigurã operaţiile de I/O la nivel logic (unitatea logicã de acces laechipamentele periferice este fişierul)-  gestionarea fişierelor de pe disc.

    Interfaţa sistemului de operare (SHELL)-  defineşte modul în care utilizatorul interacţioneazã cu S.O.-  interfaţa poate folosi: un limbaj de comandã (ex. s. o. MS-DOS) sau interfaţagraficã (G.U.I. - graphical user interface, ex. s. o. Windows ).

    Funcţiile sistemului de operare sunt:

    -  pregãtirea şi lansarea în execuţie a programelor de aplicaţii ( figura 2):-  funcţia de gestiune a memoriei ( stabilirea procesului cãruia i se alocãmemorie, momentul de timp şi cantitatea, în cazul multiprogramãrii, alocarearesursei asigurând accesul şi protecţia proceselor solicitante şi dezalocarearesursei)-  funcţia de gestiune a procesorului ( U. C. ) – alocã resursele procesorului laun proces, prin pregãtirea şi încãrcarea unor regiştrii hardware şi dezalocãresursa-  funcţia de gestiune a dispozitivelor periferice, a unitãţilor de control şi acanalelor ( I/O Traffic Controller) – alocã resura şi iniţiazã operaţia de I/O şi

    dezalocã resursa-  funcţia de gestiune a informaţiei constã în:

    •  localizarea informaţiei, starea, utilizarea ( File System)•  metode de acces şi protecţie

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    14/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

     Fig. 2. lansarea în execuţie a unui program.

    • 

    alocarea resursei prin deschiderea fişierului ( OPEN)• 

    dezalocarea resursei prin închiderea fişierului ( CLOSE).

    Programele S. O.Componentele majore ale unui S.O. sunt:

    •  programe de comandã şi control ( PCC ) - coordoneazã şi controleazãfuncţiile S.O., fiind programe supervizoare, monitoare şi executive). Aucomponente

    -  rezidente ( sunt încãrcate în memoria internã încã de la generarea

    S.O. şi pãstrate acolo pe tot parcursul execuţiei lucrãrilor de cãtreS.O., ele formeazã nucleul S.O.)-  tranzitorii ( componente ce rãmân în memoria auxiliarã, fiind apelate

    şi executate de cãtre nucleul S.O.)•  programe de servicii ( folosite pentru dezvoltarea programelor de aplicaţie,fiind executate sub supravegherea PCC ). Ele pot fi clasificate în:

    -  translatoare (asamblor, macroasamblor, compilator, interpretor )-  editoare de legãturi-   încãrcãtoare-  editoare de texte- 

    programe pentru organizarea colecţiilor de date ( fişiere, baze dedate)-  alte utilitare.

    Translatoarele de limbaje•  traduc programele sursã în programe obiect, ale cãror instrucţiuni în limbajmaşinã pot fi executate de sistemul de calcul•  sunt douã categorii de translatoare:

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    15/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    -  compilative ( realizeazã numai traducerea programului sursã înprogram obiect), de exemplu:

    -  asambloare – traduc programele sursã, scrise în limbaje deasamblare specifice S.C.-  compilatoare – traduc programele sursã scrise în limbaje

    evoluate; unele compilatoare efectueazã şi lansarea în execuţie aprogramelor ( LOAD and GO)

    -  interpretative (odatã cu compilarea, are loc si execuţia programului ).

    Compilatoarele  creeazã o formã intermediarã arborescentã ainstrucţiunilor din programul sursã, astfel:-  orice variabilã este un nod terminal al arborelui-  orice operator creeazã un arbore binar a cãrui ramurã stângã este primul

    operand, iar cea din dreapta este operandul 2.Exemplu: Sã se construiascã arborele binar corespunzator acţiunii unui

    compilator, pentru calculul expresiei x ( figura 3):x = a * ( b – c ) + d * ( e + 10)

     Fig. 3. arbore binar corespunzãtor ac  iunii unui compilator.

    Etapele unui proces de compilare şi componentele implicate suntevidenţiate în figura 4:

    Analiza lexicalã – descompune programul sursã în atomi lexicali(identificatori, cuvinte rezervate, constante, operatori ) şi îi introduce în tabela desimboluri sub formã codificatã.

    Analiza sintacticã – şirul de atomi lexicali este analizat pentru depistareaunor structuri sintactice, cum ar fi expresii, liste, proceduri, plasându-le într-unarbore de derivare.

    Analiza semanticã – genereazã un grup de instrucţiuni simple cu formatfix (cod intern); dacã arborele sintactic nu respectã gramatica limbajului, sesemnaleazã eroare.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    16/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    17/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    •  sistemul de operare Netware, utilizat pentru administrarea serverelor defişiere, stocarea fişierelor, asigurând prelucrarea distribuitã şi centralizatã adatelor, securitatea sistemului (exemplu, reţele Novell Netware).Comunicarea este asiguratã de:

    -  folosirea de protocoale şi drivere LAN

    -   încãrcarea lui Netware Dos Requester pe fiecare client al reţelei-  folosire Link Support Layer (LSL)-  exemple de tipuri de clienţi acceptaţi de S.O. Netware 3.12. sunt:

    clientul DOS, OS/2, Macintosh, UnixProtocolul de comunicaţie este un set de reguli ce determinã modul de

    comunicare în reţea, între staţii de lucru şi server.

    1.3. Reprezentarea datelor în memoria calculatorului

    Fie p ∈  N, p ≥  2.Definiţie. Se defineşte o bazã de numeraţie: Bp={ bi / 0 ≤   i < p},

    corespunzãtoare primelor p numere naturale [Perjeriu E., Vaduva I., 1986]:Np = {0, 1, …. , p-1}.

    Funcţia f: Np →  Bp asociazã fiecãrui numãr i ∈  Np →  simbolul bi = f( i ) ∈  ∈Bp,

    f( i ) = bi.Observaţie: Sistemele de calcul utilizeazã bazele de numeraţie 2 şi 16:

    B2 = { 0, 1}

    B16

    = { 0, 1, 2, ...., 9, A, B, C, D, E, F}.

    Reprezentarea numerelor întregi intr-o bazã de numeraţie datãFie x ∈ N şi p ∈ N, p ≥  2, p este o bazã de numeraţie. Ne propunem sã

    reprezentãm numãrul întreg x în baza p.Prin împãrţiri repetate ale numãrului x la p se obţin :x = p * co + ro, co < x, 0 ≤  ro < pco = p * c1 + r1, c1 < co , 0 ≤  r1 < p…………………………………..cn-1 = p * cn + rn, cn = 0 < cn-1, 0 ≤  rn < p

    ⇒  x se poate reprezenta ca un polinom:x = p * co + ro = p * (p * c1 + r1 ) + ro = ... = pn rn + ... + p1r1 + p0r0. 

    În şirul resturilor : rn, rn-1, ... , r1 , r0, se aplicã funcţia f :

    f( ri) = fi  ∈   Bp  (0 ≤   ≤   i < n) şi se concateneazã ⇒   se obţine reprezentareanumãrului x în baza p:

    xp = fn … f1f0 

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    18/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    x co  c1  … cn = 0ro  r1  … rn f0  f1  … fn 

    Exemplul 1: Sã se reprezinte numãrul x = 27 în baza 2

    x = 27 co = 13 c1 = 6 c2 = 3 c3 =1 c4 = 0r0 = 1 r1 = 1 r2 = 0 r3 = 1 r4 = 11 1 0 1 1

    Reprezentarea numãrului 27 în baza 2 este: 272 = 11011= 1*2o+1*21 + 0*22 +1* 23+ 1*24 = 1 + 2 + 8 + 16 = 27

    Exemplul 2: Sã se reprezinte numãrul x = 6 în baza 2

    x = 6 co = 3 c1 = 1 c2 = 0r0 = 0 r1 = 1 r2 = 10 1 1

    Reprezentarea numãrului 6 în baza 2: 62 = 110 = 0*2o+1*21 + 1*22 = 6

    Exemplul 3: Sã se reprezinte numãrul x = 27 în baza 16

    x = 27 co = 1 c1 = 0r0 = 11 r1 = 1B 1

    Scrierea numãrului 27 în baza 16: 2716 = 1B = B*160 + 1*161 = 11 + 16 = 27

    Reprezentarea numerelor reale intr-o bazã de numeraţie datã

    Fie x ∈  R+ şi p ∈  N, p ≥  2, p este o bazã de numeraţie. Atunci numãrulreal x se poate scrie:

    x = [x] + {x}, 0 ≤  {x} < 1,

    unde [x] este partea întreagã a lui x şi {x} este partea fracţionarã a lui x.Reprezentarea numãrului real x în baza p se reduce la reprezentarea

    numãrului {x} în baza p şi foloseşte urmãtorul algoritm:• 

    se înmulţeşte în mod repetat partea fracţionarã a lui x cu baza p• 

    se descompune în parte întreagã şi parte fracţionarã, ş.a.m.d.Notãm x1 = p * {x} = [x1] + {x1} = r -1 + {x1}, 0 ≤  r -1 < p

    x2 = p * {x1} = [x2] + {x2} = r -2 + {x2}, 0 ≤  r -2 < p

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    19/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    x3 = p * {x2} = [x3] + {x3} = r -3 + {x3}, 0 ≤  r -3 < p

    ……………………………………………………..

    xn = p * {xn-1} = [xn] + {xn} = r -n + {xn}, 0 ≤  r -n < p.

    Se obţine reprezentarea polinomialã a lui {x}:

    {x} = p-1 r-1 + p-2 r-2 + ... + p-nr-n + ...

    Notãm f( r -i) = f -i ∈ Bp (1 ≤  i < n) ⇒  reprezentarea aproximativã a lui {x}p cu n cifre la partea zecimalã este:

    {x}p = p-1 r-1 + p-2 r-2 + ... + p-nr-n + ... = f( r –1) f( r –2) … f( r -n) = f –1 f –2 … f -n

    {x} x1  x2  … xn r -1  r -2  … r -n 

    f –1  f –2 … f -n Exemplu: Sã se reprezinte x = 27.513 cu 4 cifre zecimale în baza 16

    x = 27.513 = 27 + 0.513 = [x] + {x}

    [x] = 27 1 011 1B 1

    [x] 16 = [ 27 ]16 = 1B

    {x} = 0.513 0513*16 = 8.228 0.228*16 = 3.648 0.648*16 = 10.368 5.888

    8 3 10 58 3  A 5

    { x } 16 = { 0.513 } 16 = 0.83A5

     x 16 = [x] 16 + { x } 16 = 1B + 0.83A5 = 1B.83A5

    Reprezentarea numerelor întregi în memoria calculatorului

    Pe un cuvânt-memorie ( 4o = 32 biti), se pot înregistra numere întregi

    pozitive cu maximum 32 cifre binare sau 8 cifre hexazecimale < 232 – 1.Se partiioneazã intervalul [ 0, 232 – 1] în: [ 0, 231 – 1] U [231, 232 – 1]

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    20/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    y = 

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    21/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Capitolul 2

    Principiile programãrii structurate.

    Metode de reprezentare a algoritmilor

    Rezolvarea problemelor cu ajutorul calculatorului presupune existenţa uneifaze premergãtoare în care se concepe algoritmul.

    Un algoritm este o secvenţã finitã de operaţii, ordonatã şi complet definitã,

    care, pornind de la date de intrare, furnizeazã date de ieşire (rezultate).Un algoritm trebuie sã satisfacã în general urmãtoarele cerinţe:•  claritate  – descrierea algoritmului se realizeazã într-un mod precis, fãrãambiguitãţi, conţinând toate etapele de calcul, toate posibilitãţile ce apar, pentrua obţine o soluţie•   generalitate – un algoritm este util dacã rezolvã o clasã întreagã de probleme•   finitudine  - algoritmul trebuie sã furnizeze rezultate pentru orice set de datede intrare, într-un numãr finit de paşi. O eroare care trebuie evitatã constã înutilizarea de structuri repetitive infinite ( bucle infinite), care blocheazãprogramele.

    Operaţiile elementare care apar într-un algoritm sunt:-  operaţii de citire-scriere ( intrare-ieşire) – datele de intrare se citesc, iar

    datele de ieşire se scriu-  operaţii de atribuire – unei variabile i se atribuie valoarea unei expresii-  operaţii de decizie – se determinã valoarea de adevãr a unei expresii

    logice şi, în funcţie de rezultatul obţinut, se ramificã execuţiaalgoritmului.

    Algoritmii utilizeazã variabile pentru operaţiile elementare. De exemplu,variabilele de intrare se citesc, se prelucreazã, iar variabilele de ieşire se afişeazã(se scriu).

    VariabileO noţiune de bazã în programare este cea de variabilã. O variabilã

    reprezintã un ansamblu de patru elemente:-  numele variabilei-  tipul ei-  valoarea ei-  adresa din memorie, unde se salveazã variabila.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    22/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Numele  unei variabile  este format din unul sau mai multe caractere: litere,cifre, caracterul underscore (de subliniere), primul caracter fiind literã. Referireaunei variabile se realizeazã prin intermediul numelui sãu. Exemple: a, b, S, min,maxim, x1, etc.

    Tipul variabilei  indicã mulţimea de valori posibile ( întreg, real, caracter,

    boolean, etc.), operaţiile ce pot fi aplicate acesteia, precum şi modul dereprezentare în memoria calculatorului. Fiecare limbaj de programare permitefolosirea unor tipuri elementare de date, specifice acestuia. Pentru fiecarevariabilã folositã trebuie declarat în mod explicit tipul de date.

    Valoarea unei variabile este valoarea efectivã memoratã la un moment dat. Ovariabilã are în orice moment o singurã valoare, care se poate modifica printr-oinstrucţiune de atribuie sau de citire.

     Adresa de memorie a unei variabile este adresa fizicã la care se aflã valoareavariabilei în memoria calculatorului.

    2.1. Principiile programãrii structurate

    Odatã cu dezvoltarea informaticii a apãrut conceptul de programarestructuratã. Ideea de bazã constã în elaborarea algoritmilor folosind structurielementare, având un singur set de date de intrare şi un singur set de date deieşire.

    Un principiu de bazã al programãrii structurate este enunţat de teorema destructurã a lui Böhm şi Jacopini, conform cãreia orice algoritm se poate construifolosind doar trei structuri de control: secvenţialã, alternativã ( decizionalã) şirepetitivã.

    Structurile elementare utilizate în programarea structuratã sunt prezentate în figura 1.

    -  structura liniarã  ( secvenţialã) – constã în execuţia necondiţionatã aunei secvenţe de instrucţiuni

    -  structura alternativã   (decizia) – ramificã execuţia algoritmului înfuncţie de valoarea de adevãr a unei condiţii evaluate

    -  structura repetitivã   ( repetiţia) – constã în execuţia repetatã de unnumãr finit de ori a unei secvenţe de instrucţiuni. Existãposibilitatea utilizãrii de structuri repetitive cu test inţial (seevalueazã condiţia la început şi dacã este îndeplinitã, se executãinstrucţiunile) sau structuri repetitive cu test final ( se executãinstrucţiunile cel puţin o datã şi la final se evalueazã condiţia).

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    23/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

     Fig. 1. Structuri de control.

    Un principiu de bazã al programãrii structurate este programareadescendentã, care presupune descompunerea unei probleme complexe însubprobleme mai simple. Fiecãrei subprobleme îi corespunde un modul deinstrucţiuni, realizându-se astfel o structurare modularã a problemelor. Un

    avantaj al programãrii modulare constã în extinderea şi modificarea programelorprin actualizarea sau adãugarea unor module cu instrucţiuni.

    2.2. Reprezentarea algoritmilor

    Pentru descrierea algoritmilor se pot utiliza:-  schema logicã-  pseudocodul-  limbajul de programare

    Schema logicãEste o reprezentare graficã, ce permite vizualizarea înlãnţuirii şi

    subordonãrii secvenţelor de operaţii. Foloseşte simboluri grafice numite blocuricare prin forma lor, indicã tipul operaţiei.

    PseudocodulEste o metodã de reprezentare a algoritmilor ce tinde spre un limbaj de

    programare, neavând totuşi o sintaxã rigidã, precum limbajele de programare.Elementele componente ale limbajului pseudocod sunt:

    • 

    instrucţiuni pentru scriere

    write lista_variabile

    Exemple: write x

    write (“suma este “, s)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    24/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    • 

    instrucţiuni pentru citire

    read lista_variabile

    Exemple: read n

    • 

    instrucţiuni de atribuire

    variabila expresie

    Exemple: S 0

    S = 0

    •  instrucţiuni decizionale

    if condiţie then instructiune_1else instructiune_2

    endifExemplu: if x >=0 then write ( “ numar pozitiv”)

    else write (“negativ”)

    endif

    • 

    instrucţiuni repetitive cu contor

    for contor = valoare_initiala, valoare_finalainstructiune_1

    instructiune_2…

    endor

    sau:

    for contor = valoare_initiala, valoare_finalainstructiune_1instructiune_2…

    repeat

    Exemplul 1) afişarea primelor 100 numere naturale

    for i = 1 , 100

    write i

    repeat

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    25/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Exemplul 2) Calculaţi suma primelor n numere naturale ( n este dat):

    procedure sumaread ns 0

    for i = 1 , ns s + irepeatwrite (‘suma s =’,s)

    end

    • 

    instrucţiuni repetitive cu test iniţial

    while conditie:instructiune_1instructiune_2

    …repeat

    Exemplul 1) afişarea primelor 100 numere naturale

    i = 1

    while i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    26/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Exemplul 1) afişarea primelor 100 numere naturale

    i = 0

    do

    i i +1

    write i

    until i >= 100

    Exemplul 2) Afişaţi primele n numere naturale, unde n este dat.

    procedure afisareread ni = 1do

    write i

    i

     i+1until i >= n+1end

    • 

    instrucţiuni pentru apelul procedurilor

    procedure nume [ ( lista de parametri formali )]

    [ declaratii locale]

    [ secvenţã de instrucţiuni ]

    [ return]

    endObservaţii:

    -  apelarea unei proceduri se realizeazã prin instrucţiuneacall nume [ (lista de valori)]

    -  o apelare corectã are loc dacã între lista parametrilor şi cea avalorilor existã o bijecţie ( corespondenţã de numãr, tip şiordine)

    -  o procedurã poate apela o altã procedurã-  terminarea execuţiei unei proceduri se face la întâlnirea unei

    instrucţiuni return sau end, care determinã întoarcerea înprogramul apelant, la instrucţiunea imediat urmãtoareinstrucţiunii call, care a apelat-o.

    Exemplu: Sã se calculeze suma a 2 numere a şi b realeprocedure sumainteger a, b, sread a, bs a + b

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    27/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    write (‘ suma = ‘, s)returnend

    Apelul procedurii într-o aplicaţie se realizeazã asfel:call suma

    • 

    instrucţiuni pentru apelul funcţiilor

    function nume [ ( lista de parametri formali )]

    [ declaratii locale]

    [ secvenţã de instrucţiuni ]

    [ return]end

    Observaţii:

    -  apelarea unei funcţii se realizeazã prin instrucţiuni precum:call nume [ (lista de valori)]sauexpresie nume [ (lista de valori)]sau alte tipuri de instrucţiuni de scriere sau repetitive, etc., înfuncţie de aplicaţie

    Exemplu: Sã se calculeze valoarea funciei f definitã astfel

    f(x) =

    >+

    ≤≤

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    28/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    GOTO etichetã

    unde eticheta indicã o instrucţiune din aceeaşi procedurã

    Este indicat sã evitãm folosirea instrucţiunii goto deoarece îngreuneazã înţelegerea algoritmului

    • 

    declaraţia unui tablou

    array A( n )

    2.3. Aplicaţii

      Se dau 3 numere reale x, y, z. Sã se calculeze valoarea expresiei:

    E =

    >

    =

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    29/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    procedure calculread ns 0i = 1while i = n

    write (‘suma s =’,s)end 

      Sã se citeascã n natural. Afişai divizorii unui numãr n.

    procedure divizoriread nsw 0for i = 2 , int ( n/2)

    if n /i = int ( n/i)write ( i, ‘ divizor’)sw 1

    endifrepeat

    if sw = 0 then write (‘nu exista divizori’)endifend

      Fie vectorul A = ( a[1], a[2], ..., a[n]), unde n este numãr natural dat. Numãraielementele pare.

    procedure divizoriarray a[n]

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    30/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    read nsw 0for i = 1 , n

    read ( a[i])if a[i] mod 2 = 0 { restul impartirii la 2 }

    write ( a[i], ‘ numar par’)sw 1

    endifrepeatfor i = 1 to nwrite { a[i] )repeatif sw = 0 then write (‘nu exista numare pare’)endif

    end

     

    Ordonarea crescãtoare a elementelor unui vector prin interschimbarea elementelor 

    procedure ordonarearray a[n]read nfor i = 1 , n

    read ( a[i])repeatwrite (‘vectorul initial:’)for i = 1 to n

    write { a[i] )repeatfor i = 1 to n – 1

    for j = i + 1 to nif a[i] > a[j] then

    aux a[i]a[i] a[j]a[j] aux

    endifrepeat

    repeat

    write (‘vectorul ordonat crescator:’)for i = 1 to n

    write { a[i] )repeat

    end

      Fie o matrice pãtraticã de ordinul n, cu numere întregi. Sã se calculeze sumaelementelor de pe diagonala secundarã a matricei: 

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    31/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    procedure diagonalaarray a[n, n]read nfor i = 1 , n

    for j = 1 to n

    read ( a[i, j])repeat

    repeatwrite (‘matricea A:’)for i = 1 to n

    for j = 1 to nwrite ( a[i, j])

    repeatwriteln

    repeat

    s 0for i = 1 to nfor j = 1 to n

    if i + j = n + 1 then s s + a[i, j]endif

    repeatrepeatwrite (‘s =’, s)

    end

    • 

    Fie n un numãr întreg. Sã se verifice dacã este prim. 

    procedure primread nsw 0for i = 2 , int ( n/2)

    if n /i = int ( n/i)sw 1

    endifrepeatif sw = 0 then write (n, ‘este prim’)

    else write (n, ‘nu este prim’)endif

    end

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    32/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Probleme propuse

    1. 

    Fie o matrice A(m, n), cu m linii şi n coloane, cu elemente numere întregi. S se formeze un şir cu elementele pare, respectiv un şir cu elementele impare.

    2. 

    Se d o matrice ptratic A(n, n), cu n linii şi n coloane, cu elemente numere

     întregi. S  se ordoneze cresctor elementele de pe diagonala principal, prinpermutri de linii şi coloane.

    3. 

    Fie un vector A( n), cu elemente numere reale. S  se inverseze elementelevectorului ( primul ↔ ultimul, al doilea ↔ penultimul, etc.). Exemplu: pentruA = ( 1.5, 5.7, -2.3, 25.2), rezult A = ( 25.2, -2.3, 5.7, 1.5).

    4. 

    Pentru dou matrice A(m,n) şi B(m, n), s se determine matricea sum C(m,n),C = A + B.

    5. 

    Fie o matrice A ( m, n), cu elemente de tip char . S  se ordoneze cresctorelementele de pe fiecare linie a matricei.

    6.  Fie un vector A ( n), cu numere întregi. S  se transforme vectorul A în

    mulţimea B ( elementele unei mulţimi sunt unice). 7.  Fie un numr n întreg dat. S se calculeze suma cifrelor sale. 8.

     

    Se citeşte în mod repetat un numr n natural pân la introducerea unui numrn = 0. S se determine cifra maxim a fiecrui numr n.De exemplu, n = 48 ( max = 8 )

    n = 731 ( max = 7)n = 0

    9. S se citeasc în mod repetat un numãr pân  la introducerea rspunsului ‚N’sau ‚n’ la întrebarea „Mai citiţi date? ( d/ n)”. Care este cel mai mare numãr?10. Se citesc n numere naturale. S se numere câte cifre are şirul de numere.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    33/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Capitolul 3

    Limbajul C++. Alfabet şi vocabular

    În anul 1970, Brian Kerninghan si Dennis Ritchie au definit şi dezvoltatlimbajul C , un limbaj foarte flexibil care permite atât programarea la nivel înalt,cât şi la nivel scãzut, fiind un limbaj procedural. Principalul scop pentru care afost realizat acest limbaj a fost rescrierea sistemului de operare UNIX , pentru a-lface portabil pe toate platformele existente.

    În anul 1980, Bjarne Stroustrup a conceput limbajul "C with Classes", ovariantã îmbunãtãţitã a limbajului C, care permite lucrul cu clase. În 1983, C-with-classes a fost dezvoltat şi redefinit ca limbaj C++, ce oferã facilitãţi deprogramare orientatã pe obiecte.

    Aplicaţiile orientate pe obiecte sunt mai uşor şi mai rapid de scris, princrearea sau dezvoltarea de tipuri de obiecte aparţinând claselor predefinite saudefinite de utilizator.

    Există câteva limbaje dezvoltate ca extinderi ale limbajului C, printre carese pot enumera Visual C++, C#, Java, Javascript. De exemplu, Visual C++ este oversiune de compilator C++, produs de Microsoft, care permite crearea de

    programe în mediul Windows.Exemplele din aceastã carte au fost realizate folosind mediul de dezvoltareBorland C++, versiunea 3.1., care pune la dispoziţie metoda de programare laconsolã, sau programarea sub sistemul de operare DOS. Existã o opţiune DOSshell în meniul File care asigurã lucrul exclusiv sub sistemul de operare MS-DOS.

    3.1. Alfabetul limbajului C++

    Alfabetul limbajului C este alcãtuit dintr-o mulţime de simboluri afişabile

    şi neafişabile [ Marinoiu C, 2000].

    Simbolurile afişabile ( care pot fi reprezentate grafic) sunt:

    -  litere mici / mari ale alfabetului englez: a, ..., z, A, ..., Z

    -  cifre zecimale 0, 1, 2, ... , 9

    -  linia de subliniere _ (underscore)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    34/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    -  semne de punctuaţie şi semne speciale (unele simboluriconstituie operatori în cadrul expresiilor)

    ; : , ? . “ < > = ! \ & ̂ * + - / % # ~

    Câteva exemple de simboluri şi semnificaţiile acestora sunt prezentate în

    tabelul 1:semn semnificaţie

    # diez

    & ampersand

    / slash

    \ backslash

    ~ tildaTabelul 1. simboluri C++

    Simbolurile neafişabile ( fãrã echivalent grafic)-  reprezentate prin secvenţe escape ( de evitare) sau coduri backslash-caracter-  sunt coduri ASCII care nu pot fi citite de la tastaturã

    Exemple de secvene escape sunt prezentate în tabelul 2:

    secvenţe escape semnificaţie

    \n new line

    \b backspace ( recul cu o poziţie)

    \f form feed ( salt la paginã nouã)

    \r carriage return ( retur de car)

    \t horizontal tab

    \v vertical tab

    \ddd caracter ASCII în notaţie octalã ( baza 8)

    \xdd caracter ASCII în baza 16

    Tabelul 2. secvenţe ESCAPE

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    35/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    3.2. Vocabularul limbajului C++

    Vocabularul limbajului C++ este alcãtuit din atomi lexicali:  identificatori  cuvinte cheie

     

    constante  semne de punctuaţie 

    simboluri speciale 

    operatori

    Identificatori – reprezintã secvenţe de litere, cifre, liniuţe de subliniere,primul caracter fiind obligatoriu literã sau caracterul underscore ( _ ), fiindfolosite pentru numele variabilelor, funcţiilor, etc.

    Ex: program_1, a0, SExemple de identificatori care nu sunt acceptaţi: x..a, a&b, &a

    Cuvinte cheie – cuvinte rezervate în limbajul C++. Ele nu pot fi folosite caidentificatori. Limbajul standard ANSI C are 32 cuvinte cheie.

    Ex: void, if, for, while, do, int, float, char, case, break, continue, else,include, switch, return, main.

    Constante– pot fi numere, caractere, şiruri de caractere-  valoarea lor nu se modificã în timpul execuţiei programului

     în limbajul C, existã 4 tipuri de constante ( întregi, reale, de tipcaracter, şiruri de caractere)

    -  modul de declarare: este urmãtorul:

    const tip var = valoare;

    Printr-o astfel de declaraţie, se permite asignarea unei valori iniţiale uneivariabile ce nu poate fi modificatã ulterior în program.

    Exemple:i.constante întregi: 179, -28

    ii.constante octale ( în baza 8) încep cu cifra 0 pentru identificare: 012,

    074, 023iii. constante hexazecimale încep cu ox: oxA4, oxB7iv.constante reale – în format F (cu punct zecimal: 0.7, .8, 12.59) şi în

    format exponenţial ( 1.4E+3, -2.8E-4 ): const float pi= 3.14;1.4E+3 = 1.4 * 103-2.8E-4 = -2.8 * 10-4 

    v.constante şir de caractere: “program ordonare”

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    36/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Observaţii:• 

    limbajul C++ extinde definiţia constantelor la clase şi funcţiimembru

    • 

    o constantã poate fi modificatã indirect prin intermediul unuipointer, ca în exemplul urmãtor:

    const x = 41;

    *(int *)&x = 32;

    Semne de punctuaţie ( separatori)# (pentru directiva include) – este utilizat numai de preprocesor : ( douã puncte) [ ] paranteze drepte( ) paranteze rotunde 

    { } acolade pentru blocurispaţiul, tab; punct şi virgulã

    Simboluri speciale  comentarii

    // comentariu pe o linie/*comentariu pe liniimultiple

    */ 

    sfârşit de linie, de paginã

    Operatori – combinaţii de semne speciale care aratã modalitatea deprelucrare sau atribuire a valorilor ( tabelul 3):

    ++ incrementare | | sau logic

    - - decrementare ~ not pe bit

    + adunare | sau pe bit- scãdere & şi pe bit

    *, / înmulţire, împãrţire ^ sau exclusiv pe bit

    = = egalitate % modulo

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    37/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    ! = diferit , virgulã ( operator desecvenţiere)

    ,=

    mai mic, mai mare & adresã

    ! not logic deplasare pe biţi lastânga şi dreapta

    && şi logic sizeof dimensiunea în octeţia unei variabile sautip de datã

    Tabelul 3.operatori C++ 

    Un operator poate avea mai multe semnificaţii, în funcţie de context. Deexemplu, operatorul ampersand (&) poate fi interpretat ca:•  operator ‘şi’ pe biţi (a & b), care este un operator binar

    •  operator adresã (&a), care este un operator unar

    •  sinonim de variabilã

    int x=10, &y=x;

    Clase de precedenţã Operatorii definesc operaţiile admise de operanzi. În limbajul C++, se pot

    folosi urmãtoarele tipuri de operanzi:-  variabile-  constante-  funcţii-  expresii

    O clasificare a operatorilor poate sã ia în considerare criterii precum:• 

    numãrul de operanzi cãrora li se aplicã ( operatori unari ++, - -,binari +, -, ternari ?: etc.)

    • 

    prioritatea avutã în evaluarea expresiilor ( clase de precedenţã)• 

    tipul operanzilor ( aritmetici, logici, relaţionali, la nivel de bit)Prioritãtile operatorilor impun ordinea de evaluare a expresiilor.O clasã de precedenţã conţine operatori cu prioritãţi egale. Categoria 1 de

    precedenţã are prioritatea cea mai mare, categoria 2 conţine operatorii unari, careau prioritate mai micã decât cei din prima clasã, ş.a.m.d. Operatorul virgulã arecea mai micã prioritate.

    Conform precedenţei operatorilor în Borland C++, operatorii se împart în15 categorii ( tabelul 4):

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    38/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Categoria Operator Descriere

    ( )  apel de funcţie

    [ ] 

    indice în tablouri

      selecţie indirectã decomponente ( în C++)

    :: operatorul de rezoluţie ( înC++)

    1. operatori cu ceamai mare prioritate

    . selecţie directã de componente( în C++)

    2. operatori unari ! NOT ( negaţie logicã)

    ~ NOT pe biţi

    + plus unar

    - minus unar

    ++ incrementare

    - - decrementare

    &adresã

    * indirectare

    sizeof returneazã dimensiunea unuioperand în bytes

    new alocare dinamicã în C++delete dezalocare dinamicã în C++

    *  înmulţire /  împãrţire

    3. operatorimultiplicativi

    % restul modulo

    4. operatori aditivi + plus binar

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    39/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    - minus binar

    > shift dreapta

    < mai mic mai mare

    6. operatorirelaţionali

    >=  mai mare sau egal

    7. operatori pentru

    verificarea egalitãţii

    ==

    != 

    egal

    diferit

    8. & AND pe biţi

    9. ^ XOR (sau exclusiv) pe biţi

    10. | OR ( sau) pe biţi

    11. && AND (şi) logic

    12. || OR (sau) logic

    13. operatorcondiţional

    ?: a ? x : y înseamnã

    "if a then x, else y"

    = atribuire

    *= atribuire cu înmulţire

     /= atribuire cu împãrţire

    %=atribuire cu restul modulo

    += atribuire cu adunare

    -= atribuire cu scãdere

    14. operatori deatribuire

    &= atribuire cu şi pe biţi

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    40/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    ^= atribuire cu sau exclusiv pe biţi

    |= atribuire cu sau pe biţi

    = atribuire cu shft dreapta

    15. operatorulvirgulã

     , operator de secvenţiere

    Tabelul 4.operatori C++ 

    Toţi operatorii de mai sus pot fi supraîncãrcaţi, cu excepţia urmãtorilor:. operatorul de selecţie directã a componentelor în C++.* operator C++

    :: operatorul de rezoluţie pentru accesul în C++?: operatorul condiţional

    Reguli de asociere a operatorilor:-  de la dreapta la stânga pentru operatorii unari şi cel condiţional ?:-  de la stânga la dreapta pentru restul operatorilor.

    Operatorii de atribuireSintaxa folositã pentru operaţia de atribuire este urmãtoarea:

    expresie_unarã operator_atribuire  expresie_de_atribuire

    unde expresiile pot avea tipuri de date diferite. În limbajul C++ se fac conversiiimplicite de tip, existând relaţia:

    sizeof ( int)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    41/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    E1 = 1E1 = E1 + E2 sau *p ( un pointer), însã expresia E1  + E2  nu este o valoare-stângã

    (exemplu: E1 + E2 =7).

    Exemplu de atribuire cu conversie de tip:int a, b;float m, n;a = m; // a [ m ]

    // sau variabilei a i se atribuie o valoare aleatoare, dacã se//depãşesc posibilitãţile de memorare

    n = b; // b va fi reprezentat în virgulã mobilã

    Atribuirea multiplã poate fi evidenţiatã astfel:a = b = c = d = 10;

    Operatorul de atribuire compusã  are forma generalã operator=, undeoperator poate fi unul dintre operatorii de mai jos:

    * / % + - > & ^ |

    Expresia E1  op= E2 are acelaşi efect ca şi expresia E1  = E1  op E2 undevaloarea-stângã E1 este evaluatã o singurã datã. De exemplu,

    E1 += E2 înseamnã E1 = E1 + E2.

    Operatorii de incrementare / decrementare

    -  operatorul de incrementare ( prefix sau postfix)sintaxa :

    ++ operand ( prefix)sauoperand ++ ( postfix)

    unde operandul trebuie sã fie de tip scalar ( aritmetic sau pointer) şi sã fie ovaloare-stângã modificabilã

    Pentru incrementare prefixatã, valoarea operandului creşte cu 1, iarvaloarea expresiei este valoarea obţinutã dupã incrementare.

    Pentru incrementare postfix, valoarea expresiei este valoarea dinainte de

    aplicarea incrementãrii. Dupã incrementarea postfix, valoarea operandului creştecu 1.

    Exemplu :int x = 10, y, z ;y = x++ ; // y = x =10 şi x =x + 1 =11z = ++x ; // x =x + 1 = 11 + 1 = 12 şi z = x = 12

    -  operatorul de decrementare ( prefix sau postfix)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    42/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    43/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    operand_1 + operand_2 respectiv operand_1 - operand_2

    unde operanzii trebuie sã fie de tip aritmetic sau unul dintre operanzi poate sãfie pointer cãtre un anumit tip de obiecte.

    Exemplu :

    int x = 10, y = 100, z ;z = x + y ; // z = 110z = x - y; //z = -90

    -  operatorii multiplicativi: *, /, % Sintaxa operatorilor multiplicativi:

    operand1 * operand2 ( înmulţirea a douã numere)

    operand1 / operand2 ( împãrţirea a douã numere, al doilea fiind nenul)

    operand1 % operand2 ( restul împãrţirii a douã numere, al doilea fiind nenul)

    unde operanzii trebuie sã fie de tip aritmetic, iar conversiile de tip sunt celeuzuale. Operatorul / aplicat unor operanzi întregi furnizeazã un rezultat întregşi aplicat unor operanzi reali produce un rezultat real.

    Exemplu :int x = 10, y = 7, z ;z = x * y ; // z = 70z = x / y ; //z =1z = x % y ; // z = 3

    Operatorii relaţionali , =, ==, !=Sintaxa operatorilor relaţionali :

    operand1 < operand2 respectiv operand1 > operand2

    operand1 = operand2

    În expresiile relaţionale operanzii trebuie sã îndeplineascã una dintreurmãtoarele condiţii:-  ambii operanzi sunt aritmetici, caz în care se efectueazã conversiile uzuale, iarrezultatul expresiei relaţioanale este de tip int ( 1 – adevãrat şi 0 – fals)-  operanzii pot fi pointeri cãtre obiecte de tip compatibil, caz în care rezultatuldepinde de adresele relative ale celor douã obiecte la care se referã pointerii

    Operatorii de egalitate ==, !=  testeazã egalitatea sau inegalitatea întrevalori aritmetice sau pointeri, utilizând reguli similare cu ale celorlalţi operatorirelaţionali. Operatorii de egalitate sunt într-o categorie de precedenţã inferioarã(prioritate mai micã) decât ceilalţi operatori relaţionali.

    Sintaxa operatorilor relaţionali :

    operand1 ==  operand2 ( egalitate) respectiv operand1 != operand2 ( diferit)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    44/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Dacã ambii operanzi sunt aritmetici, rezultatul expresiei relaţionale este 1( true) sau 0 ( false).

    Când operanzii sunt pointeri, atunci expresia operand1 == operand2 areca rezultat 1 ( true), dacã ambii pointeri sunt NULL sau dacã pointerii se referã laacelaşi obiect.

    Operatorii logici-  negaţie logicã ( ! operand) - expresia ( ! operand) este echivalentã cu expresia(operand ==0)-  şi logic (operand1 && operand2)-  sau logic (operand1 || operand2)

    Operanzii trebuie sã fie de tip scalar. Sunt realizate conversiile aritmeticeuzuale pentru operanzi.

    Operatorii && şi || sunt evaluaţi de la stânga la dreapta astfel:•  operand1 este evaluat primul: dacã operand1 este 0, atunci operand1 &&

    operand2 este implicit 0 şi operand2 nu se mai evalueazã• 

    operand1 este evaluat primul: dacã operand1 este 1, atunci operand1 ||operand2 este implicit 1 şi operand2 nu se mai evalueazã.

    Exemplu : fie douã variabile x şi y de tip întreg, atunci expresiile logiceconstruite cu ajutorul operatorilor !, &&, || sunt evaluate în tabelul 5 :

    x y ! x x && y x || y

    1 1 0 1 1

    1 0 0 0 1

    0 1 1 0 1

    0 0 1 0 0

    Tabelul 5.operatori logici 

    Operatorii logici au prioritate mai micã decât operatorii relaţionali :x z este echivalent cu( x z )

    Operatorii pe biţi• 

    operatorii pe biţi sunt:-  negaţie pe biţi ( ~ operand)-  şi pe biţi (operand1 & operand2)-  sau pe biţi (operand1 | operand2)-  sau exclusiv pe biţi (operand1 ^ operand2)

    • 

    se aplicã operanzilor de tip int sau char, nu se aplicã valorilor de tip float,double, long double

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    45/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Exemplu : fie douã variabile x şi y de tip întreg, atunci expresiile logiceconstruite cu ajutorul operatorilor !, &&, || sunt evaluate în tabelul 6 :

    x y ~ x x & y x | y x ^ y

    1 1 0 1 1 0

    1 0 0 0 1 1

    0 1 1 0 1 1

    0 0 1 0 0 0

    Tabelul 6.operatori pe biţi 

    Exemplu : Fie x = 6 şi y =27. Operaţiile pe biţi efectuate cu x şi y suntprezentate în tabelul 7:

    x = 62 = 0000 0110 = 0*2o+1*21 + 1*22 = 2 + 4 = 6y =272 = 0001 1011= 1*20+1*21 + 0*22 + 1* 23+ 1*24 = 1 + 2 + 8 + 16 = 27

    x = 6 y = 27 ~ x x & y x | y x ^ y

    0000 0110 0001 1011 1111 1001 0000 0010 0001 1111 0001 1101

    Tabelul 7.operaţii pe biţi

    Operatorii shift• 

    operatorul shift stânga (variabilã > numãr) deplaseazã biţii variabilei cu

    un numãr de poziţii la dreapta; la deplasarea spre dreapta, biţii liberi dinstânga se completeazã cu:

    -  0 ( zero), dacã numãrul este fãrã semn-  1 ( unu), dacã numãrul este negativ

    • 

    operaţiile de deplasare pe biţi la stânga şi dreapta sunt echivalente cu înmulţirea, respectiv împãrţirea cu 2 la o putere egalã cu numãrul de biţideplasaţi:

    x > n este echivalentã cu x / 2n 

    •  exemplu: pentru x = 5, n =2

    x

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    46/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    x * 2n = 5 * 22 = 20

    Deci 5 > 3 = 1111 1010 >> 3 ( se pierd ultimii trei biţi) = 1111 1111

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    47/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Capitolul 14

    Programare orientatã pe obiecteîn limbajul C++

    Limbajul de programare C++ oferã facilitãţi de programare orientatã peobiecte, în care obiectele aparţin unor tipuri abstracte, denumite clase. În limbajulC++,  clasele constituie tipuri de date structurate ce permit organizarea dateloreterogene, complexe şi reprezintã colecţii de variabile şi funcţii, grupate sub unsingur nume, pentru manipularea lor unitarã.

    Programarea orientatã pe obiecte foloseşte concepte fundamentaleprecum:•   încapsulare – un obiect grupeazã atât date, cât şi funcţiile necesare prelucrãrii

    acestora; o clasã este un tip abstract de date care realizeazã încapsularea datelorşi funcţiilor;• 

    moştenire – datele sau funcţiile pot fi transmise de la o clasã de bazã la claselederivate din aceasta;• 

    derivare – definirea unei clase noi pe baza unei clase existente;• 

    polimorfism – redefinirea funcţiilor şi a operatorilor.În acest capitol se vor prezenta noţiunile de clasã, constructor şi

    destructor, vor fi descrise conceptele fundamentale utilizate de programareaorientatã pe obiecte, precum moştenirea şi supraîncãrcarea. Se va exemplificamodul de realizare a polimorfismului şi se vor evidenţia proprietãţile funcţiilorvirtuale şi claselor abstracte.

    14.1. Clase

    Un obiect este o variabilã, reprezentând un ansamblu alcãtuit din:-  date membre;- 

    funcţii membre, numite metode. Obiectele sunt variabile declarate de tipclass, un tip de date abstract, asemntor tipurilor de date structurate struct  şiunion.

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    48/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    49/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    #include#includeclass rational{

    int p, q;public:

    void fractie( int x, int y){p = x;q = y;}

    int numarator(){return p;

    }int numitor(){return q;}

    }a;void main(void){clrscr();a.fractie(7,8);

    printf("\n fractia: %d / %d ", a.numarator(), a.numitor());getche();}

    Operatorul de rezoluţie ::  permite accesul la variabile globale aleprogramului. Un exemplu de afişare diferenţiatã a unei variabile declarateglobal, respectiv local este programul urmãtor:

    #include#include

    int i = 10;void main(){int i = 15;clrscr();printf("\n variabila globala ( din exteriorul functiei main) i = %i",::i);printf("\n variabila locala (din main) i = %i",i);

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    50/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    getch();}

    Operatorul de rezoluţie se poate folosi pentru funcţii declarate înexteriorul unei clase, al cãror prototip este definit în interiorul clasei. Un exemplu

    este problema definirii unei clase pentru numere raţionale, rezolvatã astfel:

    #include#includeclass rational{int p, q;public:

    void fractie( int, int);int numarator();

    int numitor();}a;void main(void){clrscr();a.fractie(20,42);printf("\n fractia: %d / %d ", a.numarator(), a.numitor());getche();}void rational::fractie( int x, int y)

    { p = x;q = y;}

    int rational::numarator(){ return p;}

    int rational::numitor(){ return q;}

    Funcţii inline – sunt funcţiile declarate şi definite în interiorul unei clase.La fiecare apel al funcţiei, aceasta este înlocuitã cu codul ei, mãrind viteza deexecuţie a programului.

    Constructori şi destructoriConstructorul generat implicit este o metodã specialã ataşatã în mod

    implicit unei clase, pentru declararea obiectelor. Astfel, se alocã spaţiul de

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    51/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    memorie necesar obiectelor declarate. O clasã poate avea mai mulţi constructori,cu restricţia ca metodele constructor sã difere prin numãrul şi tipul parametrilorformali. Existã un tip special de constructor numit constructor de copiere  careatribuie datele unui obiect altui obiect.

    Destructorul este o metodã specialã ataşatã unei clase, ce realizeazã

    operatia inversã alocãrii obiectelor, adicã eliberarea memoriei. Numeledestructorului este acelaşi cu numele clasei, dar este precedat de caracterul ~. Oclasã are un singur destructor. Destructorul nu are parametri formali, el fiindapelat implicit atunci când existenţa unui obiect înceteazã.

    Funcţiile prieten sunt funcţiile care nu aparţin unei clase, dar pot accesadatele private ale acesteia. Pentru a ataşa unei clase o funcţie prieten, seintroduce în interiorul definiţiei clasei prototipul funcţiei prieten, precedat decuvântul cheie “friend”, iar definiţia funcţiei se efectueazã în exteriorul clasei.

    14.2. Moştenire

    Moştenirea  este o tehnicã de bazã în programarea orientatã pe obiecte,prin care se pot reutiliza şi extinde clasele existente. Mecanismul moştenirii esteurmãtorul:• 

    având o clasã oarecare B, se poate defini o altã clasã D care sã preia toatecaracteristicile clasei B, la care sã-şi poatã adãuga alte proprietãţi proprii;• 

    clasa B se numeşte clasã de bazã, iar clasa D se numeşte clasã derivatã;• 

    mecanismul de derivare poate fi aplicat numai claselor definite prinspecificatorii class şi struct;•  se poate forma o ierarhie de clase.

    Pentru derivarea claselor, se foloseşte sintaxa:

    class | struct clasa_derivatã : { specificator_acces_1} clasã_bazã_1{, specificator_acces_2} clasã_bazã_2,. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    {. . . . . . . . .

    }Controlul accesului la membrii:- specificatorul de acces poate lipsi; dacã lipseşte, se considerã private

    pentru class şi public pentru struct.

    Moştenirea de tip privat este modul de moştenire implicit pentru class.Membrii protected şi public prin moştenire private devin private.

    Moştenirea de tip protected:

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    52/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    - membrii private                 →   protectedmostenire  private

    - membrii protected şi public                 →  protectedmostenire  protected

    Moştenirea de tip public:

    membrii private               →  publicmostenire

     private- 

    membrii protected               →   publicmostenire  protected

    membrii public               →  publicmostenire  public.

    Moştenirea multiplã presupune crearea unor clase derivate din mai multeclase de bazã. În aceste cazuri, constructorii se apeleazã în ordinea in care suntscrise clasele în liste de moştenire a clasei derivate.

    Exemplu: Sã se defineascã o clasã de bazã pentru grafuri neorientate, caresã conţinã matricea de existenţã, matricea de adiacenţã, metode pentru citirea şi

    afişarea unei matrice şi o metodã pentru algoritmul Roy Warshall. Sã seconstruiascã o clasã derivatã din prima, care sã conţinã metode pentru:- 

    verificarea conexitãtii unui graf;-  tipãrirea vârfurilor izolate;- 

    tipãrirea vârfurilor de grad maxim.Algoritmul Roy Warshall transformã matricea de adiacenţã a muchiilor

    unui graf neorientat in matrice de existenţã a lanţurilor. Pentru determinareacomponentelor conexe ale unui graf neorientat, se foloseşte matricea de existentãa lanţurilor.

    #include#includeint i, j, n, m, x, y, k, sw;class graf

    {public:

    int a[10][10]; //matrice de adiacenta a muchiilorint e[10][10]; // matrice de existenta a lanturilorvoid citire();void tiparire();

    void Roy_Warshall();};class graf1 : public graf

    {public:int conex();int vf_izolate();void vf_gr_max();

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    53/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    }a;void graf::citire()

    {for(i = 1; i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    54/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    {sw = 1;for(i =1; i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    55/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    printf("\n nr de varfuri n = "); scanf("%d", &n);printf("\n numarul de muchii: "); scanf("%d",&m);a.citire();a.Roy_Warshall();a.tiparire();

    if (a.conex() == 0) printf ("\n graful nu este conex");else printf("\n graf conex");

    if (a.vf_izolate() == 0)printf("\n nu exista varfuri izolate");

    a.vf_gr_max();getche();}

    Observaţie:  Pentru execuţia programelor, se recomandã efectuarea maimultor teste. De exemplu:

    • 

    Test 1:Pentru graful din figura 8.1., sepot introduce datele:- numãrul de vârfuri n = 5- numãrul de muchii m = 3- muchia 1: 1 2- muchia 2: 1 4- muchia 3: 3 5 Fig. 8.1. Test 1

    Rezultate: graful nu este conexnu exista varfuri izolatevarful de grad maxim este 1 si are gradul 2

    •  Test 2:Pentru graful din figura 8.2., sepot introduce datele:- numãrul de vârfuri n = 3- numãrul de muchii m = 3- muchia 1: 1 2- muchia 2: 1 3- muchia 3: 2 3

    Fig. 8.2. Test 2

    Rezultate: graf conexnu exista varfuri izolatevarful de grad maxim este 1 si are gradul 2

    •  Test 3:Pentru graful din figura 8.3., sepot introduce datele:

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    56/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    - numãrul de vârfuri n = 5- numãrul de muchii m = 4- muchia 1: 1 2- muchia 2: 1 3- muchia 3: 1 4 Fig. 8.3. Test 3

    - muchia 4: 2 4Rezultate: graful nu este conex

    5 varf izolatvarful de grad maxim este 1 si are gradul 3

    •  Test 4:Pentru graful din figura 8.4., sepot introduce datele:- numãrul de vârfuri n = 6- numãrul de muchii m = 6- muchia 1: 1 2- muchia 2: 1 4- muchia 3: 2 5

    Fig. 8.4. Test 4

    - muchia 4: 3 5- muchia 5: 3 6- muchia 6: 5 6

    Rezultate: graf conexnu exista varfuri izolatevarful de grad maxim este 5 si are gradul 3

    14.3. Supraîncãrcare

    Supraîncãrcarea permite atribuirea mai multor semnificaţii anumitoroperatori sau funcţii. De exemplu, operatorii binari precum ‘+’, ‘-‘, ‘*’ sunt folosiţi,de obicei, în construcţia expresiilor aritmetice, între operanzi întregi, reali sau dediverse tipuri aritmetice combinate. Însã, prin supraîncãrcarea acestor operatori,se pot construi expresii cu operatori şi operanzi definiţi de tip class.

    Supraîncãrcarea  operatorilor se poate realiza utilizând urmãtoareasintaxã:

    operator ( ){

    ;}

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    57/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    unde operator defineşte o nouã acţiune asociatã unui operatorprin supraîncãrcare.

    Supraîncãrcarea operatorilor +, *, -

    Exemplul 1): Supraîncãrcarea operatorilor + şi * poate fi evidenţiatã înprogramul de calculare a sumei şi produsului a douã matrice. Se vor folosi douãclase:

    •  o clasã care memoreazã informaţii despre elementele matricelor şi metodepentru operaţiile de citire şi scriere;

    • 

    a doua clasã derivatã din prima clasã, care sã defineascã supraîncãrcareaoperatorilor + şi *.

    #include#includeclass matrice1

    {public:

    int inf[12][12];void citire();void tiparire();

    };class matrice2 : public matrice1

    {public:matrice2 operator+(matrice2);

    matrice2 operator*(matrice2);}a, b, c;

    int i, j, n, s, k;void matrice1::citire()

    {for(i = 0; i < n; i++)for(j = 0; j < n; j++)

    {printf("\n inf[%d][%d]= ",i,j);scanf("%d", &inf[i][j]);

    }}void matrice1::tiparire()

    {for(i = 0; i < n; i++){

    for(j = 0; j < n; j++)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    58/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    printf(" %d ",inf[i][j]);printf("\n ");

    }}

    matrice2 matrice2::operator+(matrice2 a)

    {for(i = 0; i < n; i++)for(j = 0; j < n; j++)c.inf[i][j] = inf[i][j] + a.inf[i][j];return(c);}

    matrice2 matrice2::operator*( matrice2 a){

    for(i = 0; i < n; i++)for(j = 0; j < n; j++)

    { s = 0;for(k = 0; k < n; k++)

    s += inf[i][k] * a.inf[k][j];c.inf[i][j] = s;

    }return(c);

    }void main(void){

    clrscr();printf("\n nr de linii/coloane n = "); scanf("%d", &n);printf("\n dati matricea A:\n "); a.citire();printf("\n dati matricea B:\n "); b.citire();printf("\n matricea A este:\n "); a.tiparire();printf("\n matricea B este:\n "); b.tiparire();printf("\n matricea suma A + B:\n ");c = a + b;c.tiparire();printf("\n matricea produs A * B:\n ");c = a * b;c.tiparire();getche();}

    Observaţie: La execuţia programului, se pot folosi urmãtoarele teste:

    Test 1: n = 2, A =  

      

     

    4

    2

    3

    1, B =

     

      

     

    1

    2

    7

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    59/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Rezultatele compilãrii programului:

    matricea suma A + B =  

      

     

    5

    4

    10

    6, matricea produs A * B =

     

      

     

    10

    4

    43

    19 

    Test 2: n = 3, A =

     

     

     

     

    21

    2

    1543

    01

    , B =

     

     

     

     

    53

    1

    1407

    21

     

    Rezultatele compilãrii programului:

    matricea suma A + B =

     

     

     

     

    7

    4

    3

    29

    410

    22

    ,

    matricea produs A * B =

     

     

     

     

    18

    20

    11

    1220

    735

    49

    .

    Exemplul 2): Sã se realizeze supraîncãrcarea operatorilor +, -, *, = lamulţimi, pentru operaţiile de bazã cu mulţimi: reuniunea ( +), diferenta ( -),intersecţia ( *) şi atribuirea ( =).

    #include#includechar ch;class multime

    {public:

    int inf[10], n;void citire();void afisare();

    };class multime1 : public virtual multime

    {public:

    multime1 operator*(multime1);multime1 operator+(multime1);

    multime1 operator-(multime1);void operator=(multime1);

    }a, b, c;int i, j, n, x, sw;void multime::afisare()

    {if(!n)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    60/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    cout

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    61/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    {for(i = 1; i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    62/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    cin>>b.n;b.citire();cout

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    63/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    {int nr[100];public:

    int& operator[](int);void citire();

    void tiparire();};

    int& vector::operator[](int i){ return nr[i];}

    void vector::citire(){for(i = 0; i < n; i++){printf("\n nr[%d] = ",i);

    scanf("%d",&nr[i]);}}

    void vector::tiparire(){printf("\n Vectorul\n");for(i = 0; i < n; i++)

    printf("%d ",nr[i]);}

    void main(void)

    {vector a;clrscr();printf("\n ne elemente ale vectorului n = ");scanf("%d", &n);printf("\n dati vectorul: ");a.citire();a.tiparire();s = 0;for(i = 0; i < n; i++)s+= a.operator[](i);

    printf("\n suma elementelor = %d", s);p = 1;for(i = 0; i < n; i++)p *= a.operator[](i);

    printf("\n produsul elementelor (metoda 1) = %d", p);p = 1;for(i = 0; i < n; i++)

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    64/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    p *= a[i];printf("\n produsul elementelor (metoda 2) = %d", p);getche();}

    Observaţii:•   în program, s-au utilizat notaţiile echivalente:

    a.operator[ ] (i) ⇔  a[i]

    •  metoda operator[ ] declaratã astfel:

    int& operator[](int);

    returneazã valoarea membrului privat nr . Pentru tipul datelor returnate, sefoloseşte int& (lvalue required).

    b) 

    operatorul ( ) este folosit pentru apelul funcţiilorDe exemplu, prin supraîncãrcarea operatorului ( ), un element a[i][j] al

    unei matrice se poate scrie în mod echivalent astfel:a(i, j) ⇔ a.operator( ) (i, j)

    unde a este un obiect din clasa matrice, iar funcţia operator( ) este o metodã:

    class matrice{int nr[20][20];public:

    int& operator( )(int, int);

    } a;În programul urmãtor, se propune determinarea transpusei unei matrice,

    folosind supraîncãrcarea operatorului ( ).

    #include#includeint i, j, n;class matrice

    {public:

    int inf[10][10];int& operator()(int, int);void citire();

    }a;int& matrice::operator()(int i, int j)

    {return inf[i][j];

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    65/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    }void matrice::citire()

    {for(i = 1; i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    66/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    int nr[10][10];public:

    int operator=(matrice);} a, b;

    În programul urmãtor, se propune verificarea egalit

    ii a dou

      matrice,folosind supraîncãrcarea operatorului =.

    #include#includeint i, j, n;class vector

    {public:

    int inf[10], n;int operator=(vector);void citire();void afisare();

    }a, b;int vector::operator=(vector b)

    {int sw;sw = 1;if(b.n != n)

    sw = 0;for(i = 1; i

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    67/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    void main(void){clrscr();printf("\n nr de elemente ale vectorului A: n = ");scanf("%d", &a.n);

    a.citire();printf("\n nr de elemente ale vectorului B: n = ");scanf("%d", &b.n);b.citire();printf("\n Vectorul A\n");a.afisare();printf("\n Vectorul B\n");b.afisare();if( a = b) printf("\n vectorii au elementele egale");if(!a.operator=(b)) printf("\n nu exista egalitate");

    getche();}

    Observaţie: În program, s-au utilizat notaţiile echivalente:

    a.operator= (b) ⇔  a = b

    Supraîncãrcarea funciilorFuncţiile pot fi supraîncrcate, adic pot exista dou sau mai multe funcii

    cu acelaşi nume î n clase derivate. Exist o restricie, î n sensul c  funciile trebuie

    s difere prin numrul şi tipul parametrilor formali.

    Supraîncãrcarea funciilor în clase derivate: se poate înzestra o clas derivat cu o metod cu acelaşi nume şi aceeaşi list de parametri formali, ca unaexistent  în clasa de baz. Exemplu: o funcie de afişare definit atât  î n clasa debaz, cât şi î n clasa derivat.

    #include#includeclass A

    {public:

    int i;void afisare()

    {printf("\n clasa de baza A: i = %d",i);}

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    68/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    };class B : public A

    {public:

    int i;

    void afisare(){printf("\n clasa derivata B: i = %d",i);}

    }y;void main(void){clrscr();y.A::i = 99;y.A::afisare();

    y.i = 10;y.afisare();getche();}

    Supraîncãrcarea funciilor standard presupune redefinirea funcţiilorstandard în interiorul unei clase.

    Exemplu: Calculaţi radicalul unui numãr n în mod repetat pânã laintroducerea caracterului ‘n’ sau ‘N’, ca rãspuns la întrebarea “mai daţi unnumãr? (d/n)”. Sã se foloseascã redefinirea funcţiei standard ‘sqrt’.

    #include#include#includeclass radical

    {public:

    float sqrt(int);}x;

    float radical::sqrt(int a){return(::sqrt(a));

    }int n;char c;void main(void){clrscr();

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    69/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    do{do{cout

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    70/80

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    71/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    void main(void){punct *p;patrat *q;int nr;

    clrscr();coutnr;ob2.setare(nr);cout

  • 8/19/2019 Book Basics of Programming in C++ Tudor 2010.pdf

    72/80

    Tudor L.,  Bazele programãrii în limbajul C++, Editura MATRIX ROM, Bucureşti, ISBN 978-973-755-644-8, 2010

    Avantajele folosirii claselor virtuale•  flexibilitate cresc