LimbajulC++

29
 Limbajul C++  Elemente de baza ale limbajului  1 Structura programelor C++  2 Elemente lexicale 3 Date in C++ 4 Operatori 5 Implementarea structurilor de control Instructiunea vida, if si switch  Instructiuni repetitive 6 Siruri de caractere  7 Tablouri unuidimensionale (vectori)  http://infoscience.3x.ro/c++.html   Elemente de baza ale limbajului C++ La inceputul anulor 70 a aparut limbajul C, creatia lui Dennis Ritchie si Brian Kernighan. Limbajul C++ -creatia lui Bjarne Stroustrup- e o extensie a limbajului C care  permite programarea pe obiecte. Limbajul C a apărut în anii 1970 şi a fost creat de Dennis Ritchie în laboratoarele AT&T Bel l. Limba jul C face par te din familia de limbaje con cep ut e pe pri nci pii le pro gra măr ii structurate, la care ideea centrală este ”structurează pentru a stăpâni o aplicaţie”. Popularitatea limbajului a crescut rapid datorită eleganţei şi a multiplelor posibilităţi oferite programatorului (pu ter ea şi fle xib ili tat ea unui limbaj de asa mbl are ); ca urmare , au apă rut num eroase alt e imp lement ări. De aceea, în ani i ’80 se imp une nec esi tat ea st and ard iză rii ace stui limbaj . În  perioada 1983-1990, un comitet desemnat de ANSI (American National Standards Institute) a elaborat un compilator ANSI C, care permite scrierea unor programe care pot fi portate fără modificări, pe orice sistem. Limba jul C++ ap are la înce pu tul an il or ’80 ş i îl ar e ca autor pe Bj arne Stroustrup. El este o variantă de limbaj C îmbunătăţit, mai riguroasă şi mai puternică, completată cu construcţiile necesare aplicării principiilor programării orientate pe obiecte (POO). Limbajul C++ păstrează toate elementele li mbajului C, beneficiind de eficienţa ş i flex ibi litatea ac es tu ia. Li mb aj ul C++ es te un sup erse t al limb aj ului C. Incompa tibil ităţi le sunt minore, de aceea, modulele C pot fi încorpo rate în proiecte C++ cu un efort minim. Structura programelor C/ C++ Un program scris în limbajul C (sau C++) este compus din unul sau mai multe  fişiere  sursă . Un fişier sursă este un fişier text care conţine codul sursă (în limbajul C) al unui  program. Fiecare fişier sursă conţine una sau mai multe  funcţii şi eventual, referinţe către unul sau mai multe fişiere header .

Transcript of LimbajulC++

Page 1: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 1/29

Limbajul C++

  Elemente de baza ale limbajului 1 Structura programelor C++ 2 Elemente lexicale 

3 Date in C++ 4 Operatori 5 Implementarea structurilor de control Instructiunea vida, if si switch

  Instructiuni repetitive 6 Siruri de caractere 7 Tablouri unuidimensionale (vectori) 

http://infoscience.3x.ro/c++.html

 Elemente de baza ale limbajului C++

La inceputul anulor 70 a aparut limbajul C, creatia lui Dennis Ritchie si BrianKernighan. Limbajul C++ -creatia lui Bjarne Stroustrup- e o extensie a limbajului C care permite programarea pe obiecte.

Limbajul C a apărut în anii 1970 şi a fost creat de Dennis Ritchie în laboratoarele AT&TBell. Limbajul C face parte din familia de limbaje concepute pe principiile programăriistructurate, la care ideea centrală este ”structurează pentru a stăpâni o aplicaţie”. Popularitatealimbajului a crescut rapid datorită eleganţei şi a multiplelor posibilităţi oferite programatorului(puterea şi flexibilitatea unui limbaj de asamblare); ca urmare, au apărut numeroase alteimplementări. De aceea, în anii ’80 se impune necesitatea standardizării acestui limbaj. În perioada 1983-1990, un comitet desemnat de ANSI (American National Standards Institute) aelaborat un compilator ANSI C, care permite scrierea unor programe care pot fi portate fărămodificări, pe orice sistem.

Limbajul C++ apare la începutul anilor ’80 şi îl are ca autor pe BjarneStroustrup. El este o variantă de limbaj C îmbunătăţit, mai riguroasă şi mai puternică,completată cu construcţiile necesare aplicării principiilor programării orientate pe obiecte(POO). Limbajul C++ păstrează toate elementele limbajului C, beneficiind de eficienţaşi flexibilitatea acestuia. Limbajul C++ este un superset al limbajului C.Incompatibilităţile sunt minore, de aceea, modulele C pot fi încorporate în proiecte C++cu un efort minim.

Structura programelor C/ C++Un program scris în limbajul C (sau C++) este compus din unul sau mai multe  fişiere

 sursă . Un fişier sursă este un fişier text care conţine codul sursă (în limbajul C) al unui program. Fiecare fişier sursă conţine una sau mai multe funcţii şi eventual, referinţe către

unul sau mai multe fişiere header .

Page 2: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 2/29

Funcţia principală a unui program este numită main. Execuţia programului începe cuexecuţia acestei funcţii, care poate apela, la rândul ei, alte funcţii. Toate funcţiile folosite în program trebuie descrise în fişierele sursă (cele scrise de către programator), în fişiere header (funcţiile predefinite, existente în limbaj), sau în biblioteci de funcţii.

Un fişier header este un fişier aflat în sistem sau creat de către programator, care conţinedeclaraţii şi definiţii de funcţii şi variabile.

Acţiunile din fiecare funcţie sunt codificate prin instrucţiuni . Există mai multe tipuri de

instrucţiuni, care vor fi discutate în capitolul următor.

O instrucţiune este orice expresie validă (de obicei, o asignare sau un apel de funcţie),urmată de simbolul ;. În figura 2.2.b. este dat un exemplu de instrucţiune simplă. Uneori, cainstrucţiune poate apare instrucţiunea nulă (doar  ;), sau instrucţiunea compusă (privită ca osuccesiune de instrucţiuni simple, încadrate între acoladele delimitatoare {}.

 

Instrucţiunea1Instrucţiunea2

Instrucţiunea3....

FUNCŢII

Expresie;

INSTRUCŢIUNI

Operatori

Operanzi

EXPRESII

Figura 2.2. Funcţie, instrucţiune, expresie

2.2.a. 2.2.b. 2.2.c.

Page 3: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 3/29

Functiile trebuie descrise fie in fisierele sursa, fie in fisiere separate numite fisiereheader, fie in biblioteci de functiiFunctia main are urmatoarea forma:

void main( )

{instructiuni;}

Pentru a înţelege mai bine noţiunile prezentate, să considerăm un exemplu foarte simplu.Programul următor afişează pe ecran un mesaj (mesajul   Primul meu program). Informaţia de prelucrat (de intrare) este însuşi mesajul (o constantă şir), iar prelucrarea ei constă în afişarea peecran. Exemplu:

#include <iostream.h> // linia 1void main()   // linia 2 -antetul funcţiei main{ /* linia 3 - începutul corpului funcţiei, a unei intrucţiuni

compuse */cout<<”Primul meu program in limbajul C++”; // linia 5}   // linia6-sfârşitul corpului funcţiei

Prima linie este o directivă preprocesor  (indicată de simbolul #) care determină includerea înfişierul sursă a fişierului header cu numele iostream.h. Acest header permite realizareaafişării  pe monitor.

Programul conţine o singură funcţie,   funcţia principală , numită main , al cărui antet  (linia 2)indică:- tipul valorii returnate de funcţie (

void, ceea ce înseamnă că funcţia nu returnează nici o

valoare)- numele funcţiei (main)- lista argumentelor primite de funcţie, încadrată de cele 2 paranteze rotunde.Funcţiile comunică între ele prin argumente. Aceste argumente reprezintă datele de intrare alefuncţiei. În cazul nostru, nu avem nici un argument în acea listă, deci puteam să scriem antetulfuncţiei şi astfel:

void main(void)

Ceea ce urmează după simbolul //, până la sfărşitul liniei, este un comentariu, care va fi ignoratde către compilator. Comentariul poate conţine un text explicativ; informaţii lămuritoare laanumite aspecte ale problemei sau observaţii. Dacă vrem să folosim un comentariu care cuprinde

mai multe linii, vom delimita începutul acestuia indicat prin simbolulurile /*, iar sfârşitul - prin*/ (vezi liniile 3, 4). Introducerea comentariilor în programele sursă uşurează înţelegereaacestora. În general, se recomandă introducerea unor comentarii după antetul unei funcţiei, pentrua preciza prelucrările efectuate în funcţie, anumite limite impuse datelor de intrare, etc.

Cele doua paranteze se ataseaza oricarei functii. Intre ele se scriu optional anumiti parametri ( in acest caz lipsesc)

O functie poate intoarce un rezultat. Daca nu intoarce nici un rezultat spunem ca tipul

Page 4: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 4/29

rezultatului este void. Exista functii cu rezultat de tip real, intreg etc.

De asemenea, programul poate contine si declaratii de variabile globale - adicavariabile cu care pot lucra toate functiile care il alcatuiesc.

Instructiunile care pot aparea sunt fie expresii fie implementari ale structurilor de

control ca if, for, while etc.Începutul şi sfârşitul corpului funcţiei main sunt indicate de cele două acoalade { (linia3) şi }(linia 6).

Corpul funcţiei (linia 5) este format dintr-o singură instrucţiune, care implementează o operaţiede scriere.

Cuvantul cout este un cuvânt predefinit al limbajului C++ - console out put - care desemneazădispozitivul logic de iesire;

simbolul <<  este operatorul de transfer a informaţiei. Folosite astfel, se deschide un canal de

comunicaţie a datelor către dispozitivul de ieşire, în cazul acesta, monitorul.

După operator se specifică informaţiile care vor fi afişate (în acest exemplu, un şir de caractereconstant). Faptul că este un şir constant de caractere este indicat de ghilimelele care îl încadrează.

La sfârşitul instrucţiunii care implementează operaţia de scriere, apare ; 

Etapele rezolvării unei probleme cu ajutorul calculatorului

Să detaliem în continuare etapa de implementare. După analiza problemei şi stabilireaalgoritmului, acesta trebuie tradus (implementat) într-un limbaj de programare.

Scrierea (editarea) programului sursă. Programele sursă sunt fişiere text care conţin instrucţiuni (cu sintactica şi semantica propriilimbajului utilizat). Programul (fişierul) sursă este creat cu ajutorul unui editor de texte şi vafi salvat pe disc (programele sursă C primesc, de obicei, extensia .c, iar cele C++, extensia .cpp).Pentru a putea fi executat, programul sursă trebuie compilat  şi linkeditat .

Compilarea

Procesul de compilare este realizat cu ajutorul compilatorului, care translatează codul sursă încod obiect (cod maşină), pentru ca programul să poată fi înţeles de calculator. În cazullimbajului C, în prima fază a compilării este invocat preprocesorul . Acesta recunoaşte şianalizează mai întâi o serie de instrucţiuni speciale, numite directive procesor . Verifică apoicodul sursă pentru a constata dacă acesta respectă sintaxa şi semantica limbajului. Dacă existăerori, acestea sunt semnalate utilizatorului. Utilizatorul trebuie să corecteze erorile(modificând programul sursă). Abia apoi codul sursă este translatat în cod de asamblare, iar în final, în cod maşină, binar, propriu calculatorului. Acest cod binar este numit cod obiect şide obicei este memorat într-un alt fişier, numit fişier obiect . Fişierul obiect va avea, de obicei,acelaşi nume cu fişierul sursă şi extensia .obj.

Linkeditarea

Page 5: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 5/29

Dupa ce programul sursă a fost translatat în program obiect, el este va fi supus operaţiei delinkeditare. Scopul fazei de linkeditare este acela de a obţine o formă finală a programului, învederea execuţiei acestuia. Linkeditorul “leagă” modulele obiect, rezolvă referinţele cătrefuncţiile externe şi rutinele din biblioteci şi produce cod executabil, memorat într-un alt fisier,numit fişier executabil (acelaşi nume, extensia .exe)

ExecuţiaLansarea în execuţie constă în încărcarea programului executabil înmemorie şi startarea execuţiei sale.

Observaţii:1. Mediile de programare integrate (BORLANDC, TURBOC) înglobează editorul,

compilatorul, linkeditorul şi depanatorul (utilizat în situaţiile în care apar erori la execuţie);2. Dacă nu se utilizează un mediu integrat, programatorul va apela în mod explicit (în linie de

comandă) un editor de texte, compilatorul, linkeditorul. Lansarea în execuţie se va face totdin linie de comandă.

3. Extensiile specificate pentru fişierele sursă, obiect şi executabile sunt CPP (sau C),OBJ respectiv EXE.

Preprocesorul

In prima faza a etapei de compilare este apelat preprocesorul C. Acesta va trata o seriede directive speciale numite directive preprocesor pe care le gaseste in fisierul sursa. Odirectiva preprocesor incepe cu simbolul #

Directivele preprocesor se folosesc in urmatoarele situatii:

1. Includerea fisierelor header in codul sursa. Exemplu: directiva include:

# include<iostream.h> pentru citiri sau scrieri

 parantezele unghiulare < > indică faptul că este vorba de un fişier header sistem (predefinit).

Când procesorul întâlneşte această linie, datorită simbolului #, o recunoaşte ca fiind o directivă preprocesor, localizează fişierul header indicat.

Programatorul isi poate crea propriile fisiere header caz in care acesta va fi incadratintre " " . De exemplu:#include "headerul_meu.h"

Cod sursă(Preprocesor)Compilator 

Linkeditor Cod obiectCod

executabil

  Etapele necesare obţinerii fişierului executabil

Page 6: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 6/29

 Numele fişierului header inclus între ghilimele, indică faptul că headerul_meu.h este unfişier header creat de utilizator. Preprocesorul va căuta să localizeze acest fişier îndirectorul curent de lucru al utilizatorului. În cazul în care fişierul header nu se află îndirectorul curent, se va indica şi calea către acesta.

 Exemplu:

#include "c:\\bc\\head\\headerul_meu.h"

În acest exemplu, pentru interpretarea corectă a caracterului backslash \, a fost necesară"dublarea" acestuia, din motive pe care le vom prezenta în paragrafele urmatoare.

2. Asignarea unor nume simbolice pentru constante. De exemplu:#define PI 3.14

PI este numele constantei simbolice iar 3.14 este valoarea constantei

In locurile in care in codul sursa apar numele constantelor simbolice carora li s-aasignat o valoare printr-o directiva define in mod automat numele constantei este inlocuit prin valoarea acestora

 Exemplu:#define TRUE 1#define FALSE 0

Tratarea acestor directive preprocesor are ca efect asignarea (atribuirea) valorii întregi 1numelui (constantei simbolice) TRUE, şi a valorii 0 numelui simbolic FALSE. Caurmare, înaintea compilării propriu-zise, în programul sursă, apariţiile numelor TRUE şiFALSE vor fi înlocuite cu valorile 1, respectiv 0.

Un prim exemplu de program C++:

#include <iostream.h>void main( ){int a; // acesta este un comentariu de sfarsit de linie - am declarat o variabila de tip

intregcout << "Tastati un numar intreg ";cin >> a;cout << "Ati tastat numarul " << a ;}

Obs.: << este operatorul de insertie>> este operatorul de extractiecin este "console in" - pentru citire de date

http://infoscience.3x.ro/c++/lectii/elemente%20de%20baza%20ale%20limbajului.html 

Page 7: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 7/29

Unitatile lexicale

  Unitatile lexicale, numite si lexeme (engl. token, lexeme) sunt constructiile elementareale limbajului ("atomii" acestuia). Acestea sunt simboluri, formate din unul sau mai multecaractere, care au o anumita semnificatie in limbaj. Dupa rolul indeplinit, unitatile

lexicale sunt:

• identificatori• cuvinte cheie• literali• separatori• operatori• comentarii si spatii

Identificatori  Numele date programelor sau componentelor acestora (clase, variabile, functii etc.)

se numesc identificatori. Identificatorii se aleg de catre programator, respectand anumitereguli.In limbajul C++, identificatorii sunt siruri formate din litere, cifre si caractere desubliniere ('_'), care nu pot incepe cu o cifra. Lungimea identificatorului nu prezintaimportanta, insa acesta nu poate contine spatii libere sau alte caractere, decat celementionate aici.

Exemple de identificatori valabili:

vitezav15XB7

 pretDeVanzare pret_de_vanzare

Este de preferat ca identificatorii sa aiba nume sugestive, amintim insa ca, pentrucalculator, identificatorii nu au nici o alta semnificatie, deci, din acest punct de vedere,toate exemplele de identificatori date aici sunt la fel de bune.

Cuvinte cheie In orice limbaj de programare, exista un set de cuvinte, numite cuvinte cheie, care

sunt considerate simboluri sintactice si nu pot fi folosite in program ca identificatori. Deexemplu: for, while, pentru ca acestea sunt nume de instructiuni.

Literali (constante)Literalii sunt reprezentarile in fisierele sursa ale valorilor constante. Exemple de

literali:- caractere: 'a', 'A', '+', '$', '5';- siruri de caractere: "sir de caractere", "abc$79.28#^z";- numere intregi: 14726, -25413;- numere reale: 12.7389, -0.05673, 2.3075E12, -1.4237E-5;

Page 8: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 8/29

 Separatori 

Separatorul este un caracter care delimiteaza formele sintactice sau le separa intreele. In limbajul C++ se folosesc urmatorii separatori: spatiul, caracterul CR, sfarsit delinie sau ';'.

Comentariile Comentariile sunt texte care pot fi introduse in programul sursa, dar nu sunt luate in

consideratie de compilator si deci nu au efect in timpul executarii programului.Comentariile sunt utile pentru o mai buna intelegere a programului de catre om.In programele C++, se pot folosi doua feluri de comentarii:

a) comentarii care se pot extinde pe una sau mai multe linii si au forma/* <comentariu> */

 b) comentarii de sfarsit de linie, care incep cu simbolul // si continua pana la sfarsitulliniei respective, deci au forma

// <comentariu>

#include<iostream.h>  

/* functia main este functia principala, cu careincepe executarea programului */void main( ){ /* Urmeaza instructiunea prin care se

afiseaza un text */

cout<<"Prima noastra aplicatie a reusit!"; } // sfarsitul functiei main

Observatie :comentariile sunt absolut necesare pentru intelegerea programului. Inacelasi timp, abuzul de comentarii poate sa faca urmarirea acestuia dificila. Este, deci,recomandabil sa se introduca in program toate comentariile necesare pentru o bunaintelegere a acestuia, dar nu mai mult.

http://infoscience.3x.ro/c++/lectii/vocabularul%20limbajului.html 

IMPLEMENTAREA STRUCTURILOR DE CONTROL

 Algoritmul proiectat pentru rezolvarea unei anumite probleme trebuie implementat intr-

un limbaj de programare; prelucrarea datelor se realizeaza cu ajutorul instructiunilor.Instructiunea descrie un proces de prelucrare pe care un calculator il poate executa. O instructiuneeste o constructie valida (care respecta sintaxa limbajului) urmata de ; (punct si virgula). Ordinea

Page 9: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 9/29

in care se executa instructiunile unui program defineste asa-numita structura de control a programului.

Limbajele moderne sunt alcatuite pe principiile programarii structurate. Conform lui C. Bohm siG. Jacopini, orice algoritm poate fi realizat prin combinarea a trei structuri fundamentale:

· structura secventiala· structura alternativa (de decizie, de selectie)· structura repetitiva (ciclica)

    IMPLEMENTAREA STRUCTURII SECVENTIALE  

Structura secventiala este o insiruire de secvente de prelucrare (instructiuni), plasate unadupa alta, in ordinea in care se doreste executia acestora.

 Instructiunea vida Sintaxa: ;

Instructiunea vida nu are nici un efect. Se utilizeaza in constructii in care se cere prezenta uneiinstructiuni, dar nu se executa nimic (de obicei, in instructiunile repetitive).

Exemple: int a;for (;;) {…}

 Instructiunea expresie 

Sintaxa: expresie;

Exemple: int b, a=9;double c; b=a+9;cout<<a; 

 Instructiunea compusa (instructiunea bloc)

Sintaxa: { declaratii de variabile;instr1;instr2;. . . . }

Intr-un bloc se pot declara si variabile care pot fi accesate doar in corpul blocului. Instructiunea bloc este utilizata in locurile in care este necesara prezenta unei singure instructiuni, insa procesulde calcul este mai complex, deci trebuie descris in mai multe secvente.

Probleme propuse:

• Sa se interschimbe continutul a doua variabile intregi. Valorile initiale se citesc de latastatura

Page 10: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 10/29

• Se cieste un numar format din 3 cifre. Sa se interschimbe cifra unitatilor cu a sutelor • Se citeste un numar format din 5 cifre. Sa se elimine cifra din mijloc• Se citeste un numar natural sa se afiseze cea de a p cifra. (numarul are cel putin p cifre)• Sa se afiseze puterea x a unui numar intreg si radicalul acestuia• Se citesc lungimea si latimea unui dreptunghi. Sa se determine aria si perimetrul

• Sa se determine suma cuburilor cifrelor unui nr de cel mult 3 cifre• Sa se determine suma valorilor 1+2+3+…+n, pt un n natural citit• Sa se determine distanta dintre doua puncte. Se cunosc coordonatele celor doua puncte.• Se dau coordonatele a 3 puncte in plan. Sa se determine aria si perimetrul triunghiului

determinat de cele 3 puncte.• Sa se determine suma si produsul a doua fractii

  IMPLEMENTAREA STRUCTURII DE DECIZIE (ALTERNATIVE, DE  SELECTIE) 

 Instructiunea if:

Sintaxa:

if (expresie) instructiune1 

[ else instructiune2 ] 

Ramura else este optionala.La intalnirea instructiunii if, se evalueaza expresie (care reprezinta o conditie) din paranteze.

Daca valoarea expresiei este 1, sau diferita de 0 (conditia este indeplinita) se executainstructiune1; daca valoarea expresiei este 0 (conditia nu este indeplinita), se executainstructiune2. Deci, la un moment dat, se executa doar una dintre cele doua instructiuni: fieinstructiune1, fie instructiune2. Dupa executia instructiunii if se trece la executia instructiuniicare urmeaza acesteia.

Observatii: 1. Instructiune1 si instructiune2 pot fi instructiuni compuse (blocuri), sau chiar alte instructiuni if (if-uri imbricate).2. Deoarece instructiunea if testeaza valoarea numerica a expresiei (conditiei), este posibila prescurtarea: if (expresie), in loc de if (expresie != 0).3. Deoarece ramura else a instructiunii if este optionala, in cazul in care aceasta este omisa din

secventele if-else imbricate, se produce o ambiguitate. De obicei, ramura else se asociaza ultimeiinstructiuni if.Exemplu:

if (a*b!=0)if (a>b)

z=a;else z=b; 

Page 11: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 11/29

4. Pentru claritatea programelor sursa se recomanda alinierea instructiunilor prin utilizareatabulatorului orizontal.5. Deseori, apare constructia:

if (expresie1)instructiune1;

elseif (expresie2)

instructiune2;else

if (expresie3)instructiune3;

. . . . . . . . .else

instructiune_n; Expresiile sunt evaluate in ordine; daca una dintre expresii are valoarea nenula, se executainstructiunea corespunzatoare si se termina intreaga inlantuire. Instructiunea n se executa insituatia in care nici una dintre expresiile 1,2,. . ., n-1 nu are valoarea nenula.

Instructiunea alternativa if. Aplicatii

1. Scrieti un algorim care sa determine cel mai mare dintre 3 numere intregi citite.2. Sa se determine daca un numar natural este sau nu patrat perfect.3. Se citeste un numar natural format n din exact trei cifre. Sa se determine cel mai mare

numar avand aceleasi cifre ca si numarul initial. Exemplu: pentru n=276 se genereaza762 iar pentru 838 se genereaza 883.

4. Se citesc trei numere intregi a, b, c. Sa se verifice daca aceste numere (nu are importantaordinea in care s-au citit) sunt in progresie aritmetica si afisati ratia progresiei in cazafirmativ. Exemplu: (10, 3, 17) este o progresie aritmetica cu ratia 7; (1, 2, 4) nu este progresie aritmetica.

5. se citeste un numar natural n. Sa se determine ultima cifra a produsului 1*2*3*...*n6. Sa se verifica daca o fractie a/b se poate simplifica prin k (k numar natural nenul). Sa va

afisa DA sau NU.7. Sa se determine ultima cifra a lui 2x (x nenul).8. Se citesc 3 numere naturale x, y, z (x,y,z>=100 si n<=3). Sa se genereze un nou numar w

format din cea de a n-a cifra incepand de la unitati din fiecare dintre cele 3 numere x , y siz. Sa se determine daca numarul nou astfel obtinut este patrat perfect.

Exemplu1:x=23244y=7588

z=638n=3se genereaza: 256 care este patrat perfectExemplu2:x=23044y=7588

z=638n=3se genereaza: 56 care NU este patrat perfect

Page 12: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 12/29

9. Se citesc 5 cifre binare sa se determine daca numarul in baza 10 asociat este un numar dinintervalul [10, 20].

Exemplu: 11001(2)=25(10)

10. Se cunosc: coordonatele centrului unui cerc intr-un sistem de coordonate cartezian, razacercului si coordonatele unui punct A. Sa se determine pozitia punctului fata de cerc: inafara cercului, in interior sau daca este situat pe cerc.

  Instructiunea switch 

In unele cazuri este necesara o decizie multipla speciala. Instructiunea switch permite acest lucru.

Reprezentare prin schema logica:

Reprezentare prin pseudocod:

Dacă expresie=expr_const_1instructiune1;[iesire;]

Altfel daca expresie=expr_const_2instructiune2;[iesire;]

. . . . . . . .

Altfel daca expresie=expr_const_n-1instructiune_n-1;[iesire;]

Altfel instructiune_n;

Se testeaza daca valoarea pentru expresie este una dintre constantele specificate (expr_const_1,expr_const_2, etc.) si se executa instructiunea de pe ramura corespunzatoare. In schema logicatest_expresie este una din conditiile: expresie=expr_const_1, expresie=expr_const_2, etc.

Sintaxa:

switch (expresie){case expresie_const_1: instructiune_1;

[break;]case expresie_const_2: instructiune_2;

[break;]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..

expr esie

Instructiune1 Instructiune2 Instructiunen-1

Instructiunen

=exp_const

 _1

=exp_const

 _2

=exp_const_n-

1altfel

Page 13: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 13/29

case expresie_const_n-1: instructiune_n-1;[break;]

[ default: instructiune_n; ]} 

Este evaluata expresie (expresie aritmetica), iar valoarea ei este comparata cu valoarea

expresiilor constante 1, 2, etc. (expresii constante=expresii care nu contin variabile). In situatia incare valoarea expresie este egala cu valoarea expr_const_k, se executa instructiuneacorespunzatoare acelei ramuri (instructiune_k). Daca se intalneste instructiunea break, parcurgerea este intrerupta, deci se va trece la executia primei instructiuni de dupa switch. Dacanu este intalnita instructiunea break, parcurgerea continua. Break-ul cauzeaza deci, iesireaimediata din switch.

In cazul in care valoarea expresiei nu este gasita printre valorile expresiilor constante, seexecuta cazul marcat cu eticheta default (cand acesta exista). Expresiile expresie,expresie_const_1, expresie_const_2,etc., trebuie sa fie intregi.

 Probleme propuse:

1. Sa se verifice daca un numar este par sau impar.2. Scrieti un algoritm care sa determine cel mai mare dintre doua numere intregi citite.3. Scrieti un algorim care sa determine cel mai mare dintre 3 numere intregi citite.4. Scrieti un program care citeste de la tastatura trei valori numerice a, b, c si apoi afiseaza pe

ecran cea mai mare diferenta dintre oricare doua valori date.Ex. a=100, b=15, c=105. Se va afisa 90.

5. Se da un numar din 3 cifre.Sa se genereze cel mai mare numar care are aceleasi cifre ca el.6. Intr-un parc se joaca 3 copii care au greutatile a,b,c. Sa se stabileasca daca se pot aseza pe un

 balansoar astfel incat acesta sa stea in echilibru.7. Sa se rezolve ecuatia de gradul I cu o necunoscuta: ax+b=0 unde a si b sunt coeficienti reali

cititi. Discutie.8. Sa se rezolve ecuatia de gradul al II-lea cu 2 necunoscute: ax2+bx+c=0 unde a,b,c sunt

coeficienti reali cititi. Discutie.9. Sa se verifice daca 3 numere a,b,c sunt pitagorice.10. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai mare.11. Se citesc de la tastatura coordonatele x si y ale celor trei varfuri ale unui triunghi. Sa se scrie

un algoritm care citeste aceste valori si verifica daca acestea pot constitui varfuriletriunghiului. In caz afirmativ se va afisa tipul triunghiului (oarecare, isoscel sau echilateral).

12. Sa se verifica daca o fractie a/b se poate simplifica prin k. Sa va afisa DA sau NU.13. Se citesc coordonatele unui punct in plan. Sa se afiseze cadranul caruia ii apartine.14. Se citesc varsta, inaltimea si sexul unei persoane. Sa se calculeze greutatea ideala, dupa

formula :G=50+0.75*(i-150)+(v-20)/4, pentru baietiG=G*0.9, pentru fete

15. Sa se determine ultima cifra a lui 2x.16. Se citesc de la tastatura 2 numere naturale a si b si un operator op. Sa se calculeze expresia a

op b.17. Sa se calculeze ultima cifra a lui a b.18. Sa se calculeze ultima cifra a lui 1*2*3*…*n19. Se citesc valorile intregi a 3 numere a,b,c si inca o variabila x. Daca x=1, sa se afiseze

maximul dintre cele 3 numere. Daca x=2, sa se afiseze minimul dintre cele 3 numere. Dacax=3, sa se calculeze media lor aritmetica. Daca x=4, sa se afiseze valoarea expresiei

Page 14: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 14/29

222cba ++ . Daca x=5, sa se afiseze valoarea expresiei [ ]||* c

b

aab+ . Altfel, se va

afisa ultima cifra a lui |a*b*c|.20. Se citesc 3 numere naturale x,y,z. Sa se stabileasca daca pot forma laturile unui triunghi.

Daca da, sa se testeze natura triunghiului. Daca este isoscel, sa se calculeze perimetrul. Daca

este echilateral, sa se calculeze inaltimea. Daca este dreptunghic, sa se calculeze lungimeamedianei corespunzatoare unghiului drept. Daca este oarecare, se va calcula aria triunghiului.21. Fiind dat un numar n de maxim trei cifre, sa se verifice daca patratul numarului are ultimele

cifre egale cu n. (Ex : n=5, n=6, n=25)

http://infoscience.3x.ro/c++/struct/instruct.htm 

SIRURI DE CARACTERE 

O constanta de tip sir de caractere de declara intre doua caractere “. In memoria

interna, o constanta de acest tip este retinuta sub forma unui vector de caractere. Fiecarecomponenta a sirului (incepand cu cea de indice 0) retine codul ASCII al caracterului pecare il memoreaza. Conventia este ca ultimul octet sa retina 0 (codul caracterului nul).Caracterul nul este memorat automat. Trebuie rezervate lungimea_sirului+1 caracterechar (+1 pentru caracterul nul). 

Limbajul C/C++ permite initializarea unui tablou de caractere printr-o constanta sir, careinclude automat caracterul null.  Exemplu :

char vect[11]=”calculator”;

char vect[]=”calculator”; (compilatorul face calculul numarului de octetinecesari)

char vect[100]=”calculator”; (s-au rezervat mai multi octeti decat eranecesar)

Sirurile de caractere sunt de fapt tablouri de caractere, care au ca ultim element un terminator desir, caracterul null. Exemplu:

char tc[5] = {’a’, ’b’, ’c’, ’d’, ’e’}; // tablou de caracterechar sc[5] = {’a’, ’b’, ’c’, ’d’, ’\0’}; // sir de caractere cu elementeleabcd 

Ultima initializare este echivalenta cu:char sc[5] = ”abcd”; //sau char sc[] = ”abcd”;char sc1[5] = ”abcd”;char s[10];

cout<<sc<<endln; //afiseaza abcd 

cout<<tc<<endl; //eroare: tabloul de caractere nu contine terminatorul de sir, decinu poate fi afisat ca sir cout<<s<<endl; // eroare: tablou neinitializatcout<<sc1[0]; // afiseaza primul caracter din sirul sc1cout<<sc1[2]; // afiseaza al treilea element din sirul sc1sc1[1]=’K’; // elementului din sir de indice 1 i se atribuie valoarea ‘K’;

Page 15: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 15/29

CITIREA / AFISAREA SIRURILOR DE CARACTERE

Sirurile de caractere pot fi initializate inca de la declarare sau citite pe parcursul programului.

a.Citirea unui sir de caractere se poate face ca citirea oricarui tablou, intr-un

for, caracter cu caracter (desi nu este recomandata). In acest caz, terminatorulde sir nu este memorat automat, el trebuie pus explicit dupa ultimul caracter dinsir.

 Exemplu:char c[20];for(int i=0;i<=5;i++)cin>>c[i];

cout<<c<<endl; //se va afisa sirul format din cele 6 caractere, urmat decaractere „reziduale”,

//initializate implicit la compilare, din cauza ca n-a fost pus terminatorul de sir 

c[6]=0;cout<<c<<endl; //a fost pus terminatorul de sir, deci sirul va fi afisatcorect

 b. Se poate face pur si simplu, folosind cin>> . Caracterul nul este adaugatautomat. Dezavantajul este ca in acest fel nu se pot citi siruri care continmai multe cuvinte separate prin spatii. Citirea sirului se sfarseste laintalnirea primului caracter blank (de ex, daca se citeste “ora deinformatica”, variabila c va retine numai “ora”).

 Exemplu char c[30];cin>>c;

cout<<c;

c. Se poate folosi o functie speciala pentru citirea sirurilor de caractere,inclusa in biblioteca string.h (varianta recomandata).

 Exemplu char a[30],x;int nr;cin.get(a,nr,x);

Functia cin.get citeste un sir de caractere sau pana cand au fost citite nr-1caractere, sau daca s-a intalnit caracterul x. Al treilea parametru poate lipsi,caz in care el este implicit caracterul ’\n’ (new line). Sunt citite si caracterelealbe, caracterul nul este inserat automat iar caracterul transmis ca ultim parametru nu este inserat in sir. Exemplu 

char a[30];

cin.get(a,5,’s’); //daca se citeste sirul “maimuta, variabila a varetine “maim”

cin.get(a,15,’s’); //daca se citeste sirul “maimuta, variabila a va retine“maimuta”

cin.get(a,15,’t’); //daca se citeste sirul “maimuta, variabila a va retine“maimu”

Page 16: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 16/29

cin.get(a,4,’t’); //daca se citeste sirul “maimuta, variabila a varetine “mai”

cin.get(a,10); //daca se citeste sirul “maimuta, variabila a varetine “maimuta”

Functia cin.get( ) fara parametri are rolul de a citi un caracter (alb sau nu).Functia cin.get(char c) are rolul de a citi un caracter (alb sau nu) pe care ilincarca in variabila c.

Observatie: In cazul utilizarii repetate a functiei cin.get(a,nr,x), dupafiecare folosire trebuie citit caracterul de la sfarsitul fiecarui sir , adica ’\n’ (incaz contrar, acest caracter va fi incarcat la inceputul urmatorului sir, a caruicitire se termina la caracterul Enter, deci citirea celui de-al doilea sir setermina inainte de a incepe, iar al doilea sir va fi sirul vid). Aceasta citire acaracterului ’\n’ se realizeaza folosind cin.get() fara parametri.

 Exemplu char a[30],b[30];cin.get(a,15);cin.get(b,10);

Daca se incearca citirea sirurilor „sarbatoare” si „vacanta”, se observa caa=”sarbatoare”, b=”” (nici nu apucam sa citim sirul b). Varianta corecta este:

cin.get(a,15);cin.get();cin.get(b,10);

Afisarea unui sir de caractere se face folosind cout.cout<<a;

Se poate afisa si caracter cu caracter, ca in cazul tablourilor, dar aceasta

varianta nu este recomandata. 

FUNCTII PENTRU OPERATII CU SIRURI DE CARACTERE

Functiile pentru operatii cu siruri se gasesc in header-ul <string.h> .

Functia strlen int strlen(nume_sir); – returneaza lungimea efectiva a unui sir (fara a

numara terminatorul de sir ). Exemplu:char a[50]=”ora de informatica”; à strlen(a) = 18

Functia strcpy strcpy(sir_destinatie,sir_sursa); – copiaza sirul sir_ sursa insir_ destinatie (se simuleaza atribuirea a=b).

ATENTIE!! Nu este permisa atribuirea intre doua siruri de caractere folosind

Page 17: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 17/29

operatorul =. Atribuirea se face folosind functia strcpy .

 Exemplu:char a[50]=”primul sir”,b[40]=”al doilea sir”;

a=b; //eroarestrcpy(a,b); à a = ”al doilea sir”; b=”al doilea sir”;

Functia strcat strcat(dest,sursa); – adauga sirului dest sirul sursa. Sirul sursa ramanenemodificat. Operatia se numeste concatenare si nu este comutativa. Exemplu:char *a=”vine ”,*b=”vacanta?”;

strcat(a,b); à a = ”vine vacanta?”;

Functia strncat strncat(dest,sursa,nr); – adauga dest  primele nr caractere din sirulsursa. Sirul sursa ramane nemodificat.

 Exemplu:char *a=”vine ”,*b=”vacanta?”;

strncat(a,b,4); à a = ”vine vaca”;

Functia strchr strchr(sir,c); – are rolul de a cauta caracterul c in sirul sir. Cautarea se facede la stanga la dreapta, iar functia intoarce adresa subsirului care incepe cu primaaparitie a caracterului c. Daca nu este gasit caracterul, functia returneaza 0.Diferenta dintre adresa sirului initial si cea a subsirului returnat reprezinta chiar  pozitia caracterului cautat in sirul dat. Exemplu:char *a=”acesta este un sir”,b=’t’,c=’x’,d;

cout<<strchr(a,b); à se tipareste ”ta este un sir”;

cout<<strchr(a,c); à nu se tipareste nimic (se tipareste 0 daca seface o conversie la int a lui strchr(a,c) ;d= strchr(a,b);cout<<”Caracterul apare prima data la pozitia ”<<d-a;

Ex: Sa se afiseze toate pozitiile unui caracter intr-un sir#include <iostream.h>#include <string.h>void main(){char a[100],*p,c;cin.get(a,100);

cin>>c;p=strchr(a,c);while (p){cout<<"Pozitia "<<p-a<<endl;p++;p=strchr(p,c);}}

Page 18: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 18/29

Functia strrchr strrchr(sir,c); – are acelasi rol cu strchr, cu deosebirea ca returneaza adresaultimei aparitii a caracterului (cautarea se face de la dreapta spre stanga; r = right)

Functia strcmp 

int strcmp(sir1,sir2); – are rolul de a compara doua siruri de caractere.Valoarea returnata este <0 (daca sir1<sir2), =0 (daca sir1=sir2) si >0 (dacasir1>sir2). Functia strcmp  face distinctie intre literele mari si cele mici alealfabetului.Obs: Functia strcmp returneaza diferenta dintre codurile ASCII ale primelor caractere care nu coincid

Functia stricmp int stricmp(sir1,sir2); – are acelasi rol cu strcmp, cu deosebirea ca nu face

distinctie intre literele mari si cele mici ale alfabetului (i = ignore).

Functia strstr strstr(sir1,sir2); – are rolul de a identifica daca sirul sir2 este subsir alsirului sir1. Daca este, functia returneaza adresa de inceput a subsirului sir2 insirul sir1, altfel returneaza adresa 0. In cazul in care sir2 apare de mai multe oriin sir1, se returneaza adresa de inceput a primei aparitii. Cautarea se face de lastanga la dreapta

Functia strtok  strtok(sir1,sir2); – are rolul de a separa sirul sir1 in mai multe siruri(cuvinte) separate intre ele prin unul sau mai multe caractere cu rol de separator.Sirul sir2 este alcatuit din unul sau mai multe caractere cu rol de separator.

Functia strtok actioneaza in felul urmator:o Primul apel trebuie sa fie de forma strtok(sir1,sir2); Functia intoarce adresa primului caracter al primei entitati. Dupa prima entitate, separatorul este inlocuitautomat prin caracterul nul.o Urmatoarele apeluri sunt de forma strtok(NULL,sir2); De fiecare data, functiaintoarce adresa de inceput a urmatoarei entitati, adaugand automat dupa eacaracterul nul.o Cand sirul nu mai contine entitati, functia returneaza adresa nula.

 Exemplu://Sa se separe cuvintele dintr-un text.

#include <iostream.h>#include <conio.h>#include <string.h>void main(){char text[100],cuv[10][10],*p,*r,separator[]=",. !?";inti=0,nr=0;clrscr();cout<<"Dati sirul:";cin.get(text,100);strcpy(p,text);p=strtok(p,separator);

Page 19: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 19/29

while (p){strcpy(cuv[++nr],p);p=strtok(NULL,separator);}

cout<<"Sunt "<<nr<<" cuvinte:"<<endl;for (i=1;i<=nr;i++) cout<<cuv[i]<<endl;getch();}

Functia strspn cu forma generalaint strspn(sir1,sir2); – are rolul de a returna numarul de caractere alesirului sir1 (caractere consecutive care incep obligatoriu cu primul caracter) carese gasesc in sirul sir2. Exemplu:strspn(“AB2def”,”1B3AQW”); à returneaza 2, pentru ca primele 2 caractere‘A’ si ‘B’

din sir1 se gasesc in sir2.

strspn(“FAB2def”,”16A32BF”); à returneaza 0, deoarece caracterul ‘F’ cucare incepe

sir1nu se gaseste in

sir2.

Functia strcspn cu forma generalaint strspn(sir1,sir2); – are rolul de a returna numarul de caractere alesirului sir1 (caractere consecutive care incep obligatoriu cu primul caracter) carenu se gasesc in sirul sir2. Exemplu:strspn(“AB2def”,”123”); à returneaza 2, pentru ca primele 2 caractere dinsir1 nu se gasesc in sir2.

//Se citeste un sir de caractere care nu contine caractere albe.Sa se decida daca sirul este alcatuit exclusiv din caracterenumerice.#include <iostream.h>#include <conio.h>#include <string.h>void main(){char text[100],cifre[]="0123456789";clrscr();cout<<"Dati sirul:";cin.get(text,100);if (strcspn(cifre,text)==strlen(text))

cout<<"exclusiv numeric";else cout<<”nenumeric”;

getch();}

Functia strlwr cu forma generalastrlwr(sir); – are rolul de a converti toate literele mari din sir in litere mici.Restul caracterelor raman neschimbate.

Functia strupr cu forma generalastrupr(sir); – are rolul de a converti toate literele mici din sir in litere mari.

Page 20: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 20/29

Restul caracterelor raman neschimbate

Functia strbrk cu forma generalastrpbrk(sir1,sir2); – actioneaza in felul urmator:

o Cauta primul caracter al sirului sir1 in sir2. Daca este gasit, returneazaadresa sa din cadrul sirului sir1 si executia se termina. Altfel, se trece la pasulurmator.o Cauta al doilea caracter al sirului sir1 in sir2. Daca este gasit, returneazaadresa sa din cadrul sirului sir1 si executia se termina. Altfel, se trece la pasulurmator.o …o Daca nici un caracter al sirului sir1 nu apartine sirului sir2, functiareturneaza adresa nula.

Functia atof cu forma generaladouble atof(sir); – converteste un sir catre tipul double. Daca aceastaconversie esueaza (se intalneste un caracter nenumeric), valoarea intoarsa este 0.Aceasta functie (ca si cele similare) necesita includerea librariei stdlib.h.

Functia _ atold cu forma generalalong double _atold(sir); – converteste un sir catre tipul long double. Dacaaceasta conversie esueaza, valoarea intoarsa este 0.

Functia atoi cu forma generalaint atoi(sir); – converteste un sir catre tipul int. Daca aceasta conversieesueaza (se intalneste un caracter nenumeric), valoarea intoarsa este 0.

Functia atol cu forma generalalong atol(sir); – converteste un sir catre tipul long. Daca aceasta conversieesueaza (se intalneste un caracter nenumeric), valoarea intoarsa este 0.

Functia itoa cu forma generalaitoa(int valoare,sir,int baza); – converteste o valoare de tip int in sir,care este memorat in variabila sir. Baza retine baza de numeratie catre care sa se

faca conversia. In cazul bazei 10, sirul retine si eventualul semn -.

Functia ltoa cu forma generalaltoa(long valoare,sir,int baza); – converteste o valoare de tip long int

in sir, care este memorat in variabila sir.

Page 21: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 21/29

Functia ultoa cu forma generalaultoa(unsigned long valoare,sir,int baza); – converteste o valoare de tipunsigned long in sir, care este memorat in variabila sir.

 Probleme propuse:

1. Sa se verifice daca un cuvant este palindrom.2. Sa se transforme un sir din litere mici in litere mari.3. Sa se transforme un sir din litere mari in litere mici.4. Sa se determine frecventa de aparitie a unui caracter intr-un text.5. Sa se genereze toate prefixele / sufixele unui cuvant.6. Se citeste un text dintr-un fisier si un caracter c. Sa se determine de cate ori se

gaseste caracterul in text (nu se face distinctie intre literele mari si literelemici).

7. Se citeste un text de la tastatura astfel incat cuvintele sa fie separate printr-unsingur spatiu si imediat dupa ultimul cuvant se scrie punct. Textul va fi scris

 pe un singur rand.a) Sa se determine cate cuvinte contine textul. De ex : "Ana are mere."Contine 3 cuvinte.

 b) Sa se determine daca textul are cuvinte distincte (se ignora diferenta decheie).

c) Sa se determine daca textul contine cifre.8. Sa se determine de cate ori se gaseste un cuvant intr-un text.9. Codificati un text astfel incat litera a sa devina c, b sa devina e s.a.m.d.10. Sa se sorteze alfabetic un sir de cuvinte (eventual, fara a distinge literele mici

de cele mari).11. Codificarea pasareasca a unui cuvant (dupa fiecare vocala, se pune litera p

urmata de acea vocala). Ex : informaticaà ipinfopormapatipicapa12. Se citesc n cuvinte. Sa se afiseseze grupurile de cuvinte care rimeaza (auultimele 2 caractere identice).

13. Sa se desparta un text in cuvinte si sa se afiseze cuvintele separate. Sa seafiseze cuvantul de lungime maxima.

14. Sa se verifice daca doua cuvinte sunt sau nu anagrame.15. Sa se numere aparitiile unui cuvant intr-un text.16. Se citeste un numar real de la tastatura. Sa se trunchieze astfel incat cifrele

ramase sa formeze o secventa monotona.Ex. 34.59483 →34.59 ; 24.1276 →24

17. Se citeste un sir de caractere alfanumerice. Consideram ca literele sunt

separatorii numerelor. Afisati datele de tip numeric preluate in ordine din sirulcitit. Numerele vor fi scrise cate unul pe o linie.Ex.in.txt out.txt  

a23sc345ss5e 23

345

Page 22: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 22/29

18. In directorul curent se afla fisierul cuvinte.txt care contine mai multe linii detext formate din cuvinte separate de cate un spatiu. Sa se afiseze cuvintele careau cel putin 3 consoane sau 3 vocale consecutive.

19. Se citeste un sir de caractere. Sa se afiseze sirul oglindit din care lipsescvocalele.

20. Se da un text de maxim 30 de caractere. Sa se listeze toate cuvintele de douacaractere din acest text.21. Se introduc de la tastatura cuvinte pana la citirea cuvantului stop. Afisati pe

ecran cuvintele mai mari in sens lexicografic decat primul citit.22. Se dau doua texte. Sa se stabileasca o vocala comuna celor doua texte, care

apare de cele mai putine ori.23. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-un

spatiu. Sa se determine cate cuvinte contine textul.24. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-un

spatiu. Se va genera un nou text care va contine cuvintele ordonate alfabetic25. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-un

spatiu. Sa se scrie intr-un alt fisier, pe linii separate, fiecare cuvant care aparein text urmat de un numar care va reprezenta de cate ori apare cuvantul in text.Sa se determine cuvantul care apare de cele mai multe ori.

26. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-unspatiu. Intr-un alt fisier se va scrie pe linii separate fiecare cuvant si liniile pecare apare.

27. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-unspatiu sau mai multe. Se va genera un nou fisier care va contine textul initialavand spatiile de prisos eliminate (intre cuvinte va ramane numai cate unspatiu).

28. Se citesc de la tastatura elementele unei matrici de caractere (nr. linii=nr. coloane),

A(NXN), N<=10.a) Sa se afiseze matricea A; b) Sa se formeze si sa se afiseze cuvantul format din caracterele pe pediagonala principala a matricii A;c) Sa se calculeze si sa se afiseze numarul de litere mari, litere mici si cifredin matrice;d) Sa se afiseze cuvantul format din caracterele de pe diagonala secundara;e) Sa se afiseze procentul literelor mari, al literelor mici si al cifrelor de pecele 2 diagonale;f) Sa se afiseze caracterele comune aflate pe liniile p si q (p, q < N, p si qcitite de la tastatura);g) Sa se afiseze in ordine alfabetica, crescatoare, literele mari aflate pecoloanele impare.

29. Simulati comanda REPLACE astfel incat intr-un text veti inlocui un caracter x cititde la tastatura cu un alt caracter y citit de la tastatura. Se ignora sau nu diferenta decheie dupa optiunea utilizatorului.

30. Simulati comanda REPLACE astfel incat intr-un text veti inlocui un sir x citit de latastatura cu un alt caracter sir y citit de la tastatura. Se ignora sau nu diferenta decheie dupa optiunea utilizatorului.

31. Se citeste de la tastatura un cuvant. Sa se stabileasca daca el contine doua literealaturate identice, afisandu-se un mesaj corespunzator.

Page 23: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 23/29

32. Dintr-un fisier se citesc numele a n persoane. Sa se modifice continutul fisieruluiastfel incat toate numele sa fie scrise astfel: prima litera mare si restul litere mici.

33. Se citesc n siruri. Pentru fiecare sir se va determina suma codurilor ASCII.34. Intr-un fisier sunt scrise cuvinte pe linii separate. Sa se afiseze cuvintele care contin

majuscule.35. Intr-un fisier sunt scrise pe randuri diferite numele a n copii. Sa se modifice

continutul fisierului astfel incat sa contina numele ordonate crescator.36. Sa se afiseze vocalele unui cuvant.37. Sa se afiseze cuvintele care incep si se termina cu consoana, (vocala) etc.38. Sa se desparta un text in cuvinte si sa se afiseze cuvintele separate. Sa se afiseze

cuvantul de lungime maxima.39. Intr-un text exista un cuvant. Codificati/decodificati cuvantul dupa un algoritm

generat de voi.40. Aceeasi problema pentru un text.41. Se dau doua texte. Sa se stabileasca o vocala comuna celor doua texte, care apare de

cele mai putine ori.42. Dintr-un fisier se citeste un text. Textul contine cuvinte separate printr-un spatiu. Sa

se determine cate cuvinte contine textul.43. Se citesc n cuvinte. Sa se afiseze perechile de 2 cuvinte care rimeaza.44. Aceeasi problema, numai ca se vor afisa grupurilede cuvinte care rimeaza45. Se citesc cuvinte pana la citirea cuvantului "stop". Sa se afiseze cate dintre cuvintele

citite sunt egale cu primul cuvant citit.46. Se citeste un text. Textul contine cuvinte separate printr-un spatiu. Se va genera un

nou text care va contine cuvintele ordonate alfabetic47. Se citeste un text. Textul contine cuvinte separate printr-un spatiu. Sa se scrie, pe linii

separate, fiecare cuvant care apare in text urmat de un numar care va reprezenta decate ori apare cuvantul in text. Sa se determine cuvantul care apare de cele mai multeori.

48. Se citeste un text. Textul contine cuvinte separate printr-un spatiu. Sa se scrie, pe liniiseparate, fiecare cuvant si liniile pe care apare.

49. Se citeste un text care contine cuvinte separate printr-un spatiu sau mai multe. Se vagenera un nou text care va contine textul initial avand spatiile de prisos eliminate(intre cuvinte va ramane numai cate un spatiu).

50. Simulati scrierea unei parole intr-un fisier. La tastarea parolei pe ecran in loculfiecarui caracter se va scrie caracterul '*'. Eventual realizati si incriptarea paroleiinainte de a fi scrisa intr-un fisier.

51. Fie un sir de forma: cifra-litera, cifra litera …etc. Ex 2a4b5c. Sa se genereze un astfelde sir: aabbbbccccc.

52. Fie un sir format din replicarea de un numar de ori a unui subsir redundant. Sa sedetermine cea mai scurta secventa redundanta. Se va afisa subsirul redundant sinumarul sau de aparitii. Ex pt: aabcaabcaabcaabc se va fisa: aabc si nu aabcaabc. Numarul de aparitii este 4 si nu 2.

53.

http://infoscience.3x.ro/c++/siruridecaractere.htm 

Page 24: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 24/29

TABLOURI UNIDIMENSIONALE 

 DECLARAREA TABLOURILOR 

  Numim tablou o colectie (grup, multime ordonata) de date, de acelasi tip, situate intr-ozona de memorie continua (elementele tabloului se afla la adrese succesive). Tablourilesunt variabile compuse (structurate), deoarece grupeaza mai multe elemente. Variabileletablou au nume, iar tipul tabloului este dat de tipul elementelor sale. Elementele tabloului pot fi referite prin numele tabloului si indicii (numere intregi) care reprezinta pozitiaelementului in cadrul tabloului. In functie de numarul indicilor utilizati pentru a referi elementele tabloului, putem intalnitablouri unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale).

 Ca si variabilele simple, variabilele tablou trebuie declarate inainte de utilizare.Modul de declarare:

tip nume_tablou[dim_1][dim_2]…[dim_n];

unde: tip reprezinta tipul elementelor tabloului; dim_1,dim_2,...,dim_n suntnumere intregi sau expresii constante intregi (a caror valoare este evaluata la compilare)care reprezinta limitele superioare ale indicilor tabloului.

TABLOURI UNIDIMENSIONALE 

 

Tablourile unidimensionale sunt tablouri cu un singur indice (vectori).

Daca tabloul contine dim elemente, indicii elementelor au valori intregi din intervalul[0, dim-1].Un element al unui tablou poate fi utilizat ca orice alta variabila. Adresarea uneicomponente se face proin indicele ei, trecut intre paranteze drepte. Se pot efectua operatiiasupra fiecarui element al tabloului, nu asupra intregului tablou.  Exemple:

 int vect[20]; /* declararea tabloului vect, de maximum 20 de elemente,de tipul int . Elementele tabloului vect sunt : vect[0], vect[1], …, vect[19] – datede tip int*/ 

double p,q,tab[10]; // declararea variabilelor simple p, q si a vectoruluitab , de maximum 10 elemente, tip double #define MAX 10

char tab[MAX];  /*declararea tabloului tab, de maximum MAX (10)elemente de tip char*/

Page 25: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 25/29

 

Consideram declaratia tabloului v cu maxim 6 elemente de tip int 

 int v[6];

 Elementele tabloului pot fi initializate prin atribuire:v[0]=100;v[1]=101;v[2]=102;v[3]=103;v[4]=104;v[5]=105;

 100 101 102 103 104 105v[0] v[1] v[2] v[3] v[4] v[5]

  Exemplu:

double alpha[5], beta[5], gama[5];int i=2;alpha[2*i-1] = 5.78;alpha[0]=2*beta[i]+3.5;

gama[i]=aplha[i]+beta[i]; //permisgama=alpha+beta; //nepermis

 Variabilele tablou pot fi initializate in momentul declararii:

declaratie_tablou=lista_valori; 

Valorile din lista de valori sunt separate prin virgula, iar intreaga lista este inclusa intreacolade:  Exemple:

int v[6]={100,101,102,103,104,105};double x=9.8;double a[5]={1.2, 3.5, x, x-1, 7.5};

 La declararea unui vector cu initializarea elementelor sale, numarul maxim de elemente

ale tabloului poate fi omis, caz in care compilatorul determina automat marimeatabloului, in functie de numarul elementelor initializate. Exemplu:

char tab[]={ ’A’, ’C’, ’D’, ’C’};

 

[0] [3] 

tab ’A’’B’1

’C’ 

’D’ 

Page 26: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 26/29

float data[5]={ 1.2, 2.3, 3.4 }; 

[0] [4] 

Citirea elementelor unui vector:double a[5];int i;for (i=0; i<5; i++)

{ cout<<”a["<<i<<”]=”; //afisarea unui mesaj prealabil citiriifiecarui element

cin>>a[i]; //citirea valorii elementului de indicei

}

Sau, pentru un vector cu n componente (n≤ 20):double a[20]; int i, n;

cout<<”Dim. Max. =”; cin>>n;for (i=0; i<n; i++){ cout<<”a[“<<i<<”]=”;

cin>>a[i];}

Pentru simplitate, se pot considera elementele vectorului incepand cu pozitia 1. In acestcaz, primul element al tabloului ramane neutilizat, iar valoarea sa este cea alocata implicitla compilare.

double a[20]; int i, n;cout<<”Dim. Max. =”; cin>>n;for (i=1; i<=n; i++)

{ cout<<”a[“<<i<<”]=”;cin>>a[i];

Afisarea elementelor unui vector:cout<<”Vectorul introdus este:\n”;for (i=0; i<n i++)

cout<<a[i]<<’ ’;

 Probleme propuse:

2. 1.  Se citeste un vector cu n componente numere intregi. Sa se calculeze mediaaritmetica a componentelor vectorului.

3. 2.  Se citeste un sir de n numere intregi, n dat. Sa se numere elementele pozitivesi pare. Calculati produsul elementelor negative. Sa se calculeze media aritmetica aelementelor pozitive din vector.

4. 3.  Fie n numere naturale date. Sa se afiseze acelea dintre ele care sunt prime.5. 4.  Sa se afiseze si sa se numere elementele pare de pe pozitiile impare ale unui

vector.

data 1.2 2.3 3.4 ? ?

Page 27: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 27/29

6. 5.  Fie doi vectori x si y, de marime n. Sa se calculeze:a) a)  E=(x1+y1)* (x2+y2)* ......*(xn+yn) b) b)  E=x1y1+ x2y2 +......+xnyn

c) c)  E=min(x1,y1)+min(x2,y2)+ ......min(xn,yn)d) d)  E=min(x1,yn)+min(x2,yn-1)+ ......min(xn,y1)

7. 6.  Sa se ordoneze crescator / descrescator un vector.8. 7.  Determinarea maximului / minimului unui vector si afisarea pozitiilor pe careapar.

9. 8.  Sa se roteasca un vector cu o pozitie la dreapta / stanga (ultimul elementdevine primul, respectiv primul element devine ultimul).

10. 9.  Rotirea unui vector cu k pozitii la stanga (dreapta).11. 10.  Sa se mute la sfarsitul unui tablou toate elementele nule.12. 11.  Construiti un vector care sa contina primele n numere prime.13. 12.  Sa se puna intr-un vector toate numerele prime pana la n care, inversate, sunt

tot prime.14. 13.  Suma si produsul a doua polinoame. Valoarea unui polinom intr-un punct.

15. 14.  Sa se verifice daca un vector este ordonat (crescator sau descrescator).16. 15.  Dandu-se un vector neordonat cu n componente diferite, sa se determineelementul cu numarul de ordine k din tabloul ordonat crescator, fara a se ordonatabloul.

17. 16.  Dandu-se un vector neordonat cu n componente diferite, sa se determine pozitia elementului a[k] in tabloul ordonat crescator, fara a se ordona tabloul.

18. 17.  Sa se gaseasca un element k printre elementele unui vector. Daca se gaseste,sa se afiseze pozitiile pe care apare. Daca nu, sa se dea un mesaj.

19. 18.  Sa se verifice daca un vector contine elementele in ordinea pozitiv – negativ –  pozitiv – negativ etc. Se va afisa DA sau NU.

20. 19.  Sa se verifice daca un vector contine elementele in ordinea pozitiv – negativ – 

 pozitiv – pozitiv – negativ – negativ – pozitiv – pozitiv – pozitiv etc. Se va afisa DAsau NU.21. 20.  Un vector se numeste alternativ daca pentru orice i, a[i]*a[i+1]=0. Scrieti un

 program care decide daca un vector este alternativ sau nu.22. 21.  Interclasarea a doi vectori ordonati23. 22.  Sa se numere de cate ori se intampla ca intr-un vector, un element sa fie egal

cu suma (produsul, media aritmetica, geometrica) vecinilor sai.24. 23.  Sa se determine media aritmetica a elementelor unui vector, in care

elementele egale se vor lua o singura data.25. 24.  Sa se verifice daca elementele unui sir pot forma o progresie aritmetica

(geometrica). Daca da, sa se afiseze ratia.

26. 25. 

Sa se inverseze un vector in el insusi.27. 26. 

28. 27.  Sa se insereze un element intr-un vector, la pozitia k . Sa se repete operatia demai multe ori.

29. 28.  Sa se stearga un elementul din pozitia k dintr-un vector.30. 29.  Sa se calculeze cmmdc a n numere naturale.31. 30.  Sa se afiseze cifrele distincte ale unui numar, si frecventa lor de aparitie.

Page 28: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 28/29

32. 31.  Se citeste un vector cu n componente numere intregi. Sa se construiascavectorul format din suma (produsul) cifrelor elementelor din primul vector.

33. 32.  Fie doi vectori a si b cu m, respectiv n elemente numere reale. Sa se afisezecate din componentele vectorului a sunt strict mai mici decat toate componentelevectorului b.

34. 33.  Sa se afiseze primele n elemente din sirul lui Fibonacci (F[0]=1, F[1]=1,F[n]=F[n-1]+F[n-2], n>1).35. 34.  Sa se decida daca elementele unui vector sunt distincte.36. 35.  Sa se afiseze diferenta, intersectia, reuniunea si produsul cartezian a doua

multimi de numere reale.37. 36.  Fie un vector de numere intregi. Sa se determine, daca exista, un numar p care

sa fie cel mai mare element prim din vector. Daca nu exista, atunci p sa fie 0. Daca p este nenul, sa se imparta toate componentele vectorului la suma cifrelor lui p.

38. 37.  Sa se inmulteasca un numar foarte mare cu un numar format dintr-o singuracifra.

39. 38.  Suma a doua numere mari.

40. 39.  Sa se transforme un numar din baza 10 in baza 2. Generalizare pentru baza b,2<=b<=16.41. 40.  Sa se elimine zerourile dintr-un vector, fara a schimba ordinea elementelor 

nenule.42. 41.  Mos Craciun a primit scrisori de la toti copiii cuminti, scrisori pe care le-a

numerotat in ordinea sosirii, incepand de la 1. Plecand la drum, si-a dat seama ca, ingraba, a uitat cateva scrisori. Scoate din sac cate o scrisoare, notand pe o foaienumarul fiecareia. Stiind ca a primit n scrisori, scrieti un program care le afiseaza pe cele pe care le-a uitat acasa. Se da numarul de scrisori n si numerele scrisorilor existente in sac. Enumerarea lor se va termina cu 0

43. 42.  Un grup de teroristi ce pregatesc o lovitura de stat isi propun sa ocupe un

aeroport strategic. Ei detin harta zborurilor intre cele n aeroporturi, adica m perechi(i,j) ce indica faptul ca exista zbor din aeroportul i in aeroportul j. Ei vor ocupa acelaeroport din care se poate ajunge in fiecare din celelalte aeroporturi, dar in care nuse poate ajunge. Scrieti un program care gaseste aeroportul care trebuie ocupat

44. 43.  Intr-un zoo-magazin sunt n colivii cu papagali, toate inchise. O maimuta  jucausa pleaca de la prima colivie si, din 2 in 2, deschide usile coliviilor. Apoi porneste iar de la prima colivie si, din 3 in 3, deschide usile inchise si inchide usiledeschise. Face acelasi lucru din 4 in 4, samd..., din k in k (k<n). Scrieti un programcare afiseaza coliviile care in final vor ramane deschise

45. 44.   Numerele de la 1 la n sunt asezate pe circumferinta unui unui cerc, astfelincat n ajunge langa 1. Incepand cu numarul s, se elimina numerele din k in k, dupa

fiecare eliminare cercul strangandu-se. Care va fi numarul ramas?46. 45.  Aceeasi problema, dar numerele nu se elimina, ci se marcheaza, pana cand unnumar va fi marcat de 2 ori. Cate numere au ramas nemarcate ?

47. 46.  Sa se determine cea mai lunga secventa de numere crescatoare consecutiveintr-un vector.

48. 47.  Sa se determine cel mai lung sir de numere crescatoare dintr-un sir. Numerelenu vor fi neaparat consecutive, dar se va pastra ordinea lor.

Page 29: LimbajulC++

5/11/2018 LimbajulC++ - slidepdf.com

http://slidepdf.com/reader/full/limbajulc-55a2344a4ebb8 29/29

49. 48.  Sa se determine cea mai lunga secventa palindromica dintr-un sir. (elementeconsecutive)

50. 49.  Se citeste un numar intreg foarte mare(care depaseste orice domeniu), cifra cucifra. Sa se verifice daca numarul citit poate reprezenta factorialul vreunui numar natural. Daca da, sa se afiseze acel numar. Daca nu, sa se dea un mesaj.

Ex: (n!=1*2*3*...*n – factorialul lui n)40320=8!1307674368000=15!1=1!12 – Nu este factorialul nici unui numar natural

51. 50.  Un alpinist parcurge un munte si masoara cotele de altitudine in diverse puncte prin care trece. Seara, in popas, vrea sa afle:

a) a)  numarul piscurilor traversate (cotele alaturate piscului sunt strict mai micidecat acesta)

 b) b)  numarul vailor traversatec) c)  numarul platformelor traversated) d)  cea mai mare panta urcata, ca diferenta de altitudine

e) e)  cea ai mare panta coborata, tot ca diferenta de altitudineExemplu:Pentru n=13 si 4,8,6,7,7,3,2,1,3,8,8,8,7 se va afisa :piscuri 1vai 2platforme 2cea mai lunga panta in urcare 1 3 8cea mai lunga panta in coborare 7 3 2 1

52. 51.  Sa se genereze toate submultimile multimii {1,2,3…n}53. 52.  Sa se genereze toate submultimile multimii {a[1],a[2],a[3]…a[n]}54. 53.  Fie un sir de n numere naturale. Sa se determine cel mai lung subsir cu

 proprietatea ca elementele sunt in ordine crescatoare. Daca exista mai multe astfelde siruri, se va afisa macar unul. Elementele din subsir nu trebuie sa fie consecutivein sirul dat.

55. 54.  Fie un numar de n cifre, citit cifra cu cifra. Sa se elimine k cifre astfel incatnumarul ramas sa fie maxim, fara a schimba ordinea cifrelor ramase.

http://infoscience.3x.ro/c++/vectori.htm