Sunteți pe pagina 1din 31

LIMBAJUL DE PROGRAMARE C++

A. ALGORITMI
A1. OBIECTELE CU CARE LUCREAZA ALGORITMII. 1. Date Datele pot fi: - numerice , care pot fi intregi sau reale : - logice , care au doua valori TRUE (adevarat) si FALSE(fals); - sir de caractere , reprezint un sir de caractere cuprins intre apostrofuri ex. 'mesaj' 2. Variabile Sunt urmatoarele tipuri de variabile: - variabile de tip ntreg notate integer; - variabile de tip real notate real ; - variabile de tip logic notate boolean ; - variabile de tip sir notate string ; Pentru ca un algoritm sa poata folosii o variabila aceasta trebuie declarata astfel: integer a, b; real c; string b. 3. Expresii O expresie este alcatuita din doi sau mai mul i operanzi lega i intre ei prin operatori. Operanzii reprezint valorile care intra in calcul si care pot fii variabile sau constante. Operatorii desemneaza opera iile care se executa spre a ob ine rezultatul. Pot fi aritmetici, rela ionali, logici 3.1. Operatori aritmetici + (adunare); - (sc dere); * (nmul ire); / (mp r ire) div (impartire ntreaga) - operanzii trebuie sa fie de tip intreg si furnizeaza rezultatul corect daca ambele valori ale operanzilor sunt naturale. Ex. 14 div 5 rezultatul va fi 2 (5 intra de 2 ori in 14) - mod (rest al impartirii) - operanzii trebuie sa fie de tip intreg si furnizeaza rezultatul corect daca ambele valori ale operanzilor sunt naturale Ex. 14 mod 5 rezultatul va fi 4 (restul impartirii lui 14 la 5 este 4) 3.2. Operatori rela ionali <(mai mic); >(mai mare); =(egal); (diferit); <=(mai mic sau egal); >=(mai mare sau egal) 3.3 Operatori logici NOT (negare); AND (si); OR(sau); XOR (sau exclusiv) A2. OPERA IILE PE CARE LE EFECTUEAZA UN ALGORITM 1. Opera ii de intrare i ie ire Opera ia de intrare (citire) este read Opera ia de ie ire (scriere) este write Exemplu: real a,b,c; // se declara variabilele a,b,c// l

read a,b,c write a,b,c 2. Atribuiri

// se citesc variabilele a,b,c// // se afiseaza valorile variabilelor a,b,c introduse de la tastatura//

Prin opera ia de atribuire se retine o anumita data intr-o variabila. Tipul variabilei trebuie sa coincid cu tipul valorii atribuite, cu excep ia ca unei variabile de tip real i se poate atribui o data de tip intreg. Exemple de formal: integer a; a:=10; // variabila a retine valoarea 10H real b; b:=9.55 //variabila b retine valoarea 9.55// real c; c:=8; // variabila c retine valoarea 8// string d; d:='limbajul C++'; H variabila d retine valoarea de tip sir limbajul C++ Exemple de forma 2: a) integer a,b; a:=5 b:=10; a:=b // variabilei a i se atribuie valoarea variabilei b // Dupa aceasta opera ie variabila a are valoarea 10 iar variabila b ramine cu valoarea 10 b) integer a,b; a:=5 b:=10; b:=a // variabilei b i se atribuie valoarea variabilei a // Dupa aceasta opera ie variabila a ramine cu valoarea 5 iar variabilei b i se atribuie valoarea 5 c) integer a; a:=5; a:=a+1 Dupa aceasta opera ie variabilei a i se atribuie valoarea 6 (5+1 =6) Pentru a inversa continutul a doua variabile intre ele trebuie utilizata o variabila auxiliara care realizeaza interschimbul de valori. Exemplu: integer a,b,m; a:=1 b:=2; m:=a //variabila m preia valoarea variabilei a si devine 1// a:=b //variabila a preia valoarea variabilei b si devine 27 b:=m //variabila b preia valoarea variabilei m si devine 1// 3. Opera ii de decizie Forma generala: if expresie logica then operatial else operatia2 endif Mod de execu ie: se evalueaza expresia logica, daca este adevarata se executa opera ia 1, iar daca este falsa se executa opera ia 2 Exemplul"!. integer a, b; read a read b if a>b then write a else write b endif

Se citesc valorile variabilelor a si b. Daca valoarea lui a este mai mare decit valoarea lui b se afiseaza valoarea lui a, iar daca este invers se afiseaza valoarea lui b. Exemplul 2. Se citesc patru valori reale a,b,c,d si se evalueaza expresia: f a+b, c+d>0 E =J a-b , c+d=0 [a"b, c+d<0 real a, b, c, d, rez; read a, b, c, d if c+d>0 then rez:=a+b else if c+d=0 then rez:=a-b else rez:=a b
A

endif

endif write rez

B. PRINCIPIILE PROGRAMARII STRUCTURATE


1. Structura liniara Exemplul 1. Se citesc 2 valori si se afiseaza valoarea cea mai mare real a, b; read a, b if a>b then write a else write b endif Exemplul 2. Se citesc 2 valori intregi a si b si se afiseaza media lor aritmetica integer a, b real medie read a, b medie:=(a+b)/2 write medie 2.Structura alternativa ExempluH. Se cite te o valoare ntreaga. Daca aceasta este para se tip re te mesajul"am citit un num r par" integer a; read a if a mod 2 = 0 write 'am citit un num r par* endif Exemplul 2. Se cite te x num r real. Evalua i expresia: x, x<0 2x 0x<10 f=3x 10<x<100 4x x*100 real x,f; read x; if x<0 then f:=x else if x<10 then f:2*x else if x<100 then f:=3*x else f:=4*x endif endif endif write f 3. Structura repetitiva 3.1. Structura WHILE DO Forma generala. Fie E o expresie si S o structura. while E doS

endwhile Se evalueaza expresia logica E, daca este adevarata se executa structura S apoi se repeta execu ia pina ce expresia logica devine falsa. Exemplu. Se citesc numerele naturale n1 si n2 si se calculaeaza produsul lor fara a utiliza operatorul de inmultire. integer n1, n2, s, i; read n1 read n2 s:=0 i:=1 while i <= n2 do s:=s+n1 i:=i+1 endv^le write s 3.2. Structura FOR Forma generala. Fie o variabila i (variabila de ciclare) si doua valori intregi a(valoare ini iala) si b(valoare finala) si o structura S for i:=a, b S repeat Variabila de ciclare i ia valoarea ini iala a, si se executa structura S pina ce se ajunge la valoarea finala b Exemplu. Se cite te num rul natural n si se efectueaza suma primelor n numere naturale integer n, s, i; read n s:=0 for i:=1, n s:=s+i repeat write s 3.3 Structura REPEAT UNTIL Forma generala. Fie o structura S si o expresie logica E repeat S until E Se executa structura S, se evalueaza expresia E, daca este falsa se executa din nou structura S, iar daca este adevarata se trece mai departe Exemplu. Calculul sumei primelor n numere naturale n>0 integer n, I, s; read n i:=1 s:=0 do s:=s+i i:=i+1 until i > n write s

C. ELEMENTELE DE BAZA ALE LIMBAJULUI C++


Un program scris in C++ este alcatuit din una sau mai multe func ii. Fiecare func ie are mai multe instruc iuni in C++ care codifica algoritmul programului. Instruc iunile unei func ii reprezint func iei si sunt cuprinse intre { }. Dupa fiecare instruc iune din corpul func iei se pune semnul; Func iile de acela i dom eniu sunt grupate in fi iere header numite si directive. La inceputul fiec rui program se specifica fi ierele care con in func iile ce se utilizeaza in program astfel: # include <numefisier.h> Dupa specificarea directivelor trebuie scrisa func ia r d cin care se nume te main() sau void main(). Dupa numele directivelor sau a func iilor nu se pune semnul; - pentru realizarea citirii se utilizeaza : cinnume variabila cinabc - cite te variabilele a, b, c - pentru realizarea scrierii se utilizeaza: coutnume variabila coutabc - scrie variabilele a, b, c Exemplul 1: #include<iostream.h> #include<conio.h> void main() { int L,l,h; clrscr(); // terge ecranul // cout"Lungimea=" ; cinL; cout"Latimea="; clnl; cout"lnaltimea="; clnh; getch(); H in C++ sub DOS permite vizualizarea rezultatului programului.'.' corpul

1. Citiri , scrieri.

Exemplul 2: #include<iostream.h> #include<conio.h> void main^? { int L,l,h,v; clrscr(); cout"Lungimea=" ; cinL; cout"Latimea="; cinl; cout"lnaltimea="; clnh; v=LTh; cout"Volumul este"" "v;

2. TIPURI DE DATE.
2.1. TIPURI NTREGI. - int (tip intreg care ocupa 16 biti) - long (tip intreg care ocupa 32 de biti) - unsigned int sau unsigned long (valorile datelor sunt fara semn, adica pozitive) - char (tip caracter, aceste date se pun intre doua apostrofuri'') 2.2. TIPURI REALE - float (tip real care re in si num erele zecimale , ocupa 32 biti) ATENTIE!! IN C++ LA SCRIEREA UNUI NUM R ZECIMAL IN LOCUL VIRGULEI SE PUNE PUNCT - double (tip real care ocupa 64 biti) - long double (tip real care ocupa 80 biti)

getchO; }

2.3. CONSTANTE Pentru a da un nume constantelor se foloseste declara ia const care are form a: const [tip] nume=valoare ; [tip] - tipul constantei; nume -numele constantei; valoare - valoarea constantei Exemplu: const float a=12.6 constanta este de tip float, poarta denumirea a, are valoarea 12,6

3. OPERATORI C++
3.1. OPERATORI ARITMETICI. + (adunare); - (sc dere); * (inmultire); / (impartire); % (restul impartirii intregi) 3.2. OPERATORI RELA IONALI. < (mai mic); <= (mai mic sau egal); > (mai mare); >= (mai mare sau egal) 3.3. OPERATORI DE EGALITATE. == (egalitate); != (inegalitate) 3.4. OPERATORI DE INCREMENTARE SI DECREMENTARE. ++ (incrementare); -- (decrem entare) Operatorii pot fi : prefixa i (in fata operandului) situatie in care variabila este incrementat sau decrementat inainte ca valoarea retinuta de ea sa intre in calcul postfixati (dupa operand) situatie in care variabila este increm entat decrementat dupa ce valoarea retinuta de ea intra in calcul Exemplu: Daca a si b sunt variabile de tip Int care re in valorile 1 si 3 atunci: a++*b++ produce valoarea 3, dupa evaluare cele 2 variabile re in 2 si 4 ++a'++b produce valoarea 8, dupa evaluare cele 2 variabile re in 4 si 4 3.5. OPERATORI LOGICI ! - negare logica ; && - SI logic ; || SAU logic 3.6. OPERATORI DE ATRIBUIRE Apare foarte frecvent si reprezint memorarea unei valori intr-o variabila Este reprezentata prin semnul = a=3 (atribuie variabilei a valoarea 3) Se mai utilizeaza operatori de atribuire combina i: + =; - = ; * =; / =; % = ; & = ; = ; = Exemplu: a=a+b este echivalent cu a+=b ; a=a*b este echivalent cu a*=b 3.7. OPERATORUL CONDI IONAL. ^ Forma generala e1 ? e2 : e3 Se evalueaza e1, daca este adevarata se executa e2, daca este falsa se executa e3 Exemplu: Citirea unuui num r x si tiparirea num rului |x| (modulul num rului x) #include<iostream.h> #include<conio.h> void main() { float x; clrscr(); cout"x=" ; cinx; cout"|x|="" "(x>=0?x:-x); getch(); } sau

D. INSTRUC IUNILE LIMBAJULUI C++


1. INSTRUC IUNEA EXPRESIE.

ExempluH. Interschimbarea con inutului a 2 variabile care au fost ini ial citite.

#include<iostream.h> #include<conio.h> void main()

int a,b,m; clrscr(); cout"a=" ; cina; cout"b="; clnb; m=a,a=b,b=m; cout"a="" "<<aendl; cout"b="" "b; getch(); } Exemplul2. Se citesc 3 valori intregi a,b,c si se afiseaza media lor aritmetica #include<iostream.h> #include<conio.h> void main()

int a,b,c; float m; clrscr(); cout"a=" ; clna; cout"b="; clnb; cout"c="; cinc; m=float(a+b+c)/3; cout"media aritmetica ="" "m; getch(); } 2. INSTRUC IUNEA IF. Forma generala: if (expresie) instructiunel else instructiune2 Se evalueaza expresia, daca este adevarata se executa instructiunel, daca este falsa se executa instructiune2 Exemplul 1. Calculeaza maximul dintre 2 num ere citite #include<iostream.h> #include<conio.h> void main()

int a,b,max; clrscr(); cout"a=" ; cina; cout"b="; cinb; if(a>b) max=a; else max=b; cout"numarul mai mare este "" "max;

getch() ;}
Exemplul 2. Se citesc coeficien ii a, b, c ale unei ecua ii de gradul doi si se precizeaza natura r d cinilor si semnul lor. #include<iostream.h> #include<math.h> #include<conio.h> void main() { float a,b,c,d,s,p; clrscr(); M cout"a=";cina;cout"b=";clnb;cout"c= ;clnc; d=b*b-4*a*c; s=float(-b/a); p=float(c/a); cout"Discriminantul ecua iei D="dendl;

cout"Produsul r d cinilor P="pendl; cout"Suma r d cinilor S="sencjk if(d<0) cout"Ecuatia nu are solu ii r&Je"; else {if(d==0) {if(s>0) cout"Ecuatia are 2 solu ii reale egale si pozitive"; else cout"Ecuatia are 2 solu ii reale egale si negative"; else

if(p>0)

}
}
getch(); }

(if(s>0) cout"Ecuatia are 2 solu ii reale pozitive"; else cout"Ecuatia are 2 solu ii reale negative"; else cout"Ecuatia are 2 solu ii reale de semne opuse";

Exemplul 3. Rezolvarea unei ecua ii de gradul 1. #include<iostream.h> #include<conio.h> void main()

float a.b.x; clrscr(); cout"a=" ; cina; cout"b="; cinb; if (a!=0) {x= -b/a ;cout"x="" "x;} else if(b~0) cout"ecuatia are o infinitate de solu ii"; else cout"ecuatia nu are solu ie"; getch(); } Exemplul 4. Rezolvarea unei ecua ii de gradul 2. #include<iostream.h> #lnclude<conio.h> #include<math.h> void main()

float a,b,c,d,x1,x2,x; clrscr(); cout"a=" ; cina; cout"b="; clnb; cout"c="; clnc; d=float( b*b-4*a*c);cout"discriminantul ecua iei este"" "sqrt(d)endl; if(d<0) {cout "ecua ia nu are solu ii reale";} else if (d>0) { x1=(-b+sqrt(d)) / (2*a); x2=(-b-sqrt(d)) / (2*a); cout"x1="x1endl;cout"x2="x2endl;} else {x=float(-b/2*a);cout"ecua ia are solu ie unica x=x1=x2="" "x;} getch(); }

f? 1 2

3. INSTRUC IUNEA SWITCH. Forma generala a instruc iunii: switch (expresie) { case e1 : secven a 1 ; break; case e2 : secven a 2 ; break;

case en : secven a n ; break; default: secven a n+1;

Se evalueaza expresie , daca este egala cu una din expresiile e1, e2, ...en se executa secven a corespunz toare expresiei s1, s2, ...sn, iar daca nu este egala cu una din aceste expresii se executa numai secven a n+1 Exemplul 1. void main() { #include<iostream.h> #include<conio.h>

inti; clrscr(); cini; switch(i) { case 1: cout"Am citit 1";break; case 2: cout"Am citit 2";break; default: cout"Am citit altceva"; getch(); } Exemplul2. Se afiseaza natura sol. unei ec. de gr.2 in func ie de semnul lui A. #include<iostream.h> #include<conio.h> void main() { int a,b,c,d; clrscr(); cout"a=";cina;cout"b=";cinb;cout"c=";cinc; d=b*b-4*a*c; if(d>=0) { switch(d) { case 0: cout"Ecuatia are polu ie dubla";brcak; default:cout<<"Ecua ia are dioua solu ii reale diferite"; }

else cout"Ecuatia nu are solu ii reale"; } 4. INSTRUC IUNEA WHILE. Aceasta instruc iune permite programarea ciclurilor cu test ini ial. Forma generala este: while (expresie) { ...... instruc iuni} Se evalueaza expresie, daca este adevarata se executa {....instruc iuni} dupa care se revine la evaluarea expresiei, daca este falsa se trece la instruc iune urmatoare. Exemplu. Executarea unui program intr-un ciclu repetat pana la apasarea unei anumite taste(se introduc coeficien ii unei ec. de gr.2 si se afiseaza solu iile de "n" ori pina la apasarea tastei "q") #include<iostream.h> #include<conio.h> #include<math.h> void main()

float a,b,c,d,x1,x2,x; int tasta; while(tasta!='q') { clrscr(); cout"a=" ; cina; cout"b="; cinb; cout"c=" ; cinc; d=float( b*b-4*a*c);cout"discriminantul ecua iei este"" "sqrt(d)endl; if(d<0) {cout"ecuatia nu are solu ii reale";} else if (d>0) { x1 =(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); cout"x1="x1endl;cout"x2="x2endl;} else M {x=float(-b/2*a);cout"ecuatia are solu ie unica x=x1=x2="" xendl;} cout"Pentru continuare apasa o tasta"endl; cout"Pentru ie ire apasa tasta q"; tasta=getch(); }

5. INSTRUC IUNEA DO WHILE.

10

Instruc iunea permite programarea ciclurilor cu test final. Forma generala este: do {instruc iuni} while (expresie) Se executa {instruc iuni}, se evalueaza expresie, daca este adevarata se executa din nou {instruc iuni}, iar daca este falsa execu ia instruc iunii do se termina. Exemplu: Se cite te num rul natural n si se afiseaza suma prim elor n numere naturale #include<iostream.h> #include<conio.h> void main() { long n, tasta,s=0.i=1; while(tasta!='q') clrscr(); cout"n=";cinn; do

{ }

s=s+i; isi+1; while(i<=n); cout"Suma primelor n numere naturale este"" "<<sendl; cout"Pentru a continua apasa o tasta"endl"Pentru a iesi din program apasa tasta 'q'"; tasta=getch();

6. INSTRUC IUNEA FOR Se utilizeaza cel mai fracvent pentru programarea ciclurilor cu test ini ial. Forma generala: for( INI
INI
IALIZARE^

EST; EINCREMENTARE)

instruc iune

IALIZARE

- se evalueaza o singura data pentru ini ializarea variabilei de ciclare inaintea primului

ciclu ;
6 TEST

- este evaluata inaintea fiec rui ciclu pentru a testa daca se executa instruc iunea subordonat a

si reprezint condi ia de ie ire din ciclu;


INCREMENTARE

se evalueaza la sfirsitul fiec rui ciclu pentru incrementarea variabilei de ciclare.

Principiul de execu ie:

11

Se evalueaza CINITIALIZARE (numai la prima rulare), se evalueaza

EREST

, daca este adevarata se

executa instruc iunea subordonata for, se evalueaza CINCREMENTARE si se revine la evaluarea expresiei
CTEST-

Daca CTEST este falsa se trece la urmatoarea instruc iune (se termina executarea instruc iunii

for) Observa ie. Daca expresia TEST este vida se executa un ciclu infinit. Pentru a iesi din acest ciclu : in DOS se tasteaza CTRL+PAUSE in WINDOWS se tasteaza CTRL +ALT + DEL Exemplul 1. Se introduce de la tastatura num rul n si se calculeaza suma si produsul primelor n numere #include<iostream.h> #include<conio.h> void 2 main() { N int i,n,tasta; long double a,b; while(tasta !='q*) { clrscr(); ,,,, cout"lntroduceti num arur' ;cinn; a=b=1; for(i=2;i<=n;l++) {a*=l;b+=i;} cout"suma="bendl;cout"produsul="aendl; cout"Pentru ie ire apasa tasta q"; tasta=gctch(); } } Observa ie. Variabila n poate fi definita la inceput fara a mai trebui introdusa de la tastatura utiliznd #define n valoare (comanda se scrie inainte de void main()) Exemplul2. Afi area literelor alfabetului #include<iostream.h> #include<conio.h> void main() { char litere; for(litere='A';litere<='Z';litere++)coutlitere" "; getch(); } Exemplul3. Afiseaza toate patratele si radicalii num erelor naturale pina la num rul n introdus de la tastatura. #include<iostream.h> #include<conio.h> #include<math.h> void main() { float i,n,a,b; clrscr(); cout"n=";cinn; a=b=0; for(i=1 ;i<=n;i++) { a=sqrt(i) ; b=i*i; cout"Patratul numarului"" "<<i" = "b'\t , "Radicalul numarului"" M i" ="aendl;

getchO; }
Exemplul4.

7. INSTRUC IUNI DE SALT 7.1. INSTRUC IUNEA BREAK Se utilizeaza pentru intreruperea necondi ionata a unei secven e si numai in 2 contexte:

12

1) in instruc iunea switch pentru a marca incheierea secven ei de instruc iuni asociate unei selector case : 2) intr-o instruc iune de ciclare (while, do while, for) pentru a determina ie irea fortata din ciclul respectiv. Observa ie. Instruc iunea break intrerupe execu ia de ciclare doar a blocului in care se afla, fara a afecta celelalte blocuri de ciclare in cazul ciclurilor imbricate. 7.2. INSTRUC IUNEA CONTINUE Se utilizeaza numai in blocul instruc iunilor de ciclare pentru a intrerupe execu ia iteratiei curente (s rind peste instruc iunea urmatoare) dupa care: - in cazul instruc iunilor while si do while se continua cu testarea condi iei de ciclare; - in cazul instruc iunii for se continua cu evaluarea expresiei INCREMENTARE (actualizarea contorilor) si apoi a expresiei TEST (testarea condi iei de ciclare) 7.3. INSTRUC IUNEA GO TO Are ca efect intreruperea secven ei curente si continuarea execu iei de la instruc iunea care este specificata dupa go to. Observa ie. Instruc iunile de salt se utilizeaza rar in C++ deoarece incalaca principiile programarii structurate, pentru abandonarea execu iei unui ciclu se utilizeaza in general func iile exit() sau return.

E. TIPURI DE DATE STRUCTURATE


1. TABLOURI 1.1. TABLOURI IN C++ Tabloul este o lista de elem ente de acela i tip plasate succesiv intr-o zona de memorie. Tablourile por fii: simple (vector) sau multiple (matrice) Exemple: - int V[10] ; am declarat un vector cu 10 componente de tip intreg care au indici intre 0 si 9 , v[0], v[1], vf9] - float a[10], b[20] ; am declarat doi vectori a si b care au 10 respectiv 20 de componente de tip real - int a[10][20]; am declarat o matrice cu 10 linii si 20 coloane cere se adreseaza astfel: a[0][0],a[0][1],a[0][2], ............... a[9][19]. Un tablou poate fi initializat cu un set de valori astfel: - int a[5]={-2,4,8,1,9}; - Int b[3][4]={ {11,12,13,14}, {21,22,23,24}, {31,32,33,34}}; ExempluH. Afi area unei matrici cu componentele declarate ini ial. #include<iostream.h> #include<conio.h> void main() { int a[3][3]={11,12,13,21,22,23,31,32,33}; int i,j;

13

for(i=0;i<3;i++){ for(j=0;|<3;j++) { couta[i][j]''; } getch(); }

coutendl; }

Rezultatul programului va fii afi area urmatoarei matrici: 11 12 13 21 22 23 31 32 33 Exemplul2. Se introduce num rul de linii m si num rul de coloane n ale unei matrici, se intoduc elem entele matricii apoi se afiseaza matricea creata. #include<iostream.h> #include<conio.h> void main() { int i,j,m,n,a[10][10]; clrscr(); cout"lntroduceti num rul de linii"" ""n=";cinm; cout"lntroduceti num rul de coloane"" ""n=";cinn; cout"lntoduccti elementele"endl; for(i=l ;l<=m;i++) { for(j=1 ;j<=n;j++) { cout"a["ij"]=", cina[i][j]; } cout"Matricea intodusa are forma:"endl \t"^t'^t \t ; for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ couta[i][i]' coutendl Vt \t \t \t ; } getch(); } Exemplul3. Se introduc valorile componentelor unui vector a[100] si se atribuie aceste valori componentelor vectorului b[100]. #include<iostream.h> #include<conio.h> void main() { int n,i,a[100],b[100]; clrscr(); cout"lntroduceti num rul de componente n="" ";cinn; for(i=1;i<=n;i++) {cout"a["i"]=";cina[i];} for(i=1 ;l<=n;l++) b[i]=a[i]; coutendl; for(i=1 ;i<=n;l++) cout b["i"]= b[i]'\t'; getch(); } 1.2. ALGORITMI FUNDAMANTALI CARE LUCREAZA CU VECTORI. 1.2.1. MAXIM. MINIM. O variabila preia continutul primei componente a vectorului (max=v[0] sau min=v[0]), apoi o compara pe rind cu celelalte componente ale vectorului, iar in func ie de condi ia care se pune in program variabila va retine componenta cu valoare maxima sau componente cu valoare minima. Pentru maxim : max=v[0] ; if(v[i]>max) max=v[i] Pentru minim ; min=v[0] ; if(v[i]<min) min=v[i]
,, ,, , , , , , ,

, , ,

14

Exemplu. Se introduc valorile componentelor unui vector si se afiseaza valoarea maxima si valoarea minima. #include<iostream.h> #include<conio.h> void main() { int max,min,n,i,v[100]; cout"lntroduceti num rul de elem ente n="; cinn; for(i=1 ;i<=n;i++) {cout"v["i"]=";cinv[i];}; max=v[0]; for(i=1 ;i<=n;i++) if(v[i]>max) max=v[i]; cout"Valoarea maxima citita este"" "<<m axendl; min=v[0]; for(i=1;i<=n;i++) if(v[i]<min) min=v[i]; cout"Valoarea minima citita este"" "min; getch(); 1.2.2. ELEMENTE DISTINCTE. Se cite te un vector cu n componente si se decide daca numerele citite sunt distincte (nu exista doua numere egale) sau daca nu sunt distincte (exista doua numere egale). Pentru a rezolva problema se procedeaza astfel: - o variabila i retine indicele primei componente - o variabila j retine indicele urm toarelor componente Ex: cand i=1 j=2,3, cnd i=2 j=3,4, ........ n cand i=n j=n-1 se initializeaza o variabila g sit cu valoarea logica 0 - daca sunt g site doua valori egale variabilei g sit i se atribuie vloarea logica 1 Exemplu. #include<iostream.h> #include<conio.h> void main() { int v[10],i,j,n, g sit; cout"introduceti num rul de elem ente n="" "; cinn; for(i=1 ;i<=n;i++) {cout"v["i'l="; cinv[i];} gasit=0; for(i=1 ;i<=n ;!++) for(j=i+1 ;j<=n ;j++) if(v[i]==v[j]) gasit=1; if(gasit) cout"Numerele nu sunt distincte"; else cout"Numerele sunt distincte"; getch(); 1.2.3. MUL IMI. In cadrul unei mul imi un element apare o singura data (o mul ime nu poate avea 2 valori ^ n

15

egale). Elementele unei mul imi sunt memorate intr-o variabila de tip vector. Aplica ii: Exemplul 1. Se cite te o mul ime A care con ine n elemente num ere intregi, se cite te un num r intreg e , se verifica daca num rul e apar ine mul imii a. #1nclude<lostream.h> #include<conio.h> void main() { int A[10],n,e,i,j,g sit; clrscr(); cout"lntroduceti num rul de elem ente n a multimii"" ""n=" ; cinn; for(i=1 ;i<=n;i++) { cout"A["i'V; cinA[i];} cout"lntroduceti num rul considerat"" "<<"e="; cine; gasit=0; for(i=1 ;i<=n;i++) for(j=i+1;j<=n;j++) if(A[i]==e) gasit=1; if(gasit) cout"Numarul"" " e" apar ine mul imii"; else cout"Numarul"" "<<e" nu apar ine mul imii"; getch(); } Exemplul2. Se citeasc mul imile A si B si se afiseaza mul imea C unde C = A- B #include<iostream.h> #include<conio.h> void main() { int A[10].B[10],C[10],m,n,i,j,z,k,g sit; clrscr(); cout"Specificati num rul de elemente a mul imii A"" "<<"m="; cinm; cout"Specificati num rul de elemente a mul imii B"" "<<"n="; cinn; cout"lntroduccti elementele mul imii A"endl; for(i=l ;l<=m;l++) { cout"A["i<<"]="; cinA[i];}; cout"lntroduceti elementele mul imii B"endl; for(j=1 ;j<=n;j++) { cout"B["j"]="; cinB[j];};

k=0;

for(i=1 ;i<=m;i++) { gasit=0; for(j=1;j<=n;j++) if(A[i]==B[j])gasit=1; if(!gasit) C[k++]=A[i];

cout"A-B"" ={" ' ";

,, ,,

'

for(i=0;i<k;i++) coutC[i]" "; cout"}" ;

getchO; }
Algoritmul de rezolvare este urm torul: Pentru fiecare elem ent din mul imea A se face testul daca apar ine sau nu mul imii B. Daca nu apar ine este adaugat unei mul imi C care ini ial este vida (variabila k cu valoare ini iala 0 retine indicele componentei din C care va memora urm torul element ce se adauga mul imii C. In final se tip re te mul imea C.

Exemplul3. Se citesc mul imile A si B si se afiseaza mul imea C unde C=AUB #include<iostream.h> #include<conio.h> void main() { int A[10],B[10],C[10],m,n,i,j,k,g sit; clrscr();

16

cout"Spccificati num rul de elemente a mul imii A"" "m="; cinm; cout"Specificati num rul de elem ente a mul imii B"" "<<"n="; cinn; cout"lntroduceti elementele mul imii A"endl; for(i=1 ;i<=m;l++) { cout"A["i"]="; cinA[i];}; cout"lntroduceti elementele mul imii B"endl; for(j=1 ;j<=n;j++) { cout"B["j'>"; cinB[j];}; k=0; for(i=1;i<=m;i++) { gasit=0; for(J=1 ;j<=n;j++) if(A[i]==B[j])gasit=1; if(!gasit) C[k++]=A[i]; } cout"AUB"" ""={"" "; for(j=1 ;j<=n;j++) coutB[j]" "; for(i=0;i<k;i++) coutC[ij" "; cout"}" ; getch(); } Algoritmul de rezolvare este urm torul: Se stie ca AUB = BU(A - B) sau AUB=AU(B - A) Se determina mul imea A-B la fel ca in cazul precedent, apoi se listeaza mul imea B si in continuare mul imea A - B. ExempluW. Se citesc mul imile A si B si se listeaza mul imea C unde C=AflB Algoritmul de rezolvare este urm torul: Pentru fiecare element din mul imea A se face testul daca apar ine sau nu mul imii B. Daca apar ine este adaugat unei mul imi C care ini ial este vida (variabila k cu valoare ini iala 0 retine indicele componentei din C care va memora urm torul elem ent ce se adauga mul imii C. In final se tip re te mul imea C. #include<iostream.h> #include<conio.h> void main() { int A[10].B[10],C[10],m,n,i,j,k,g sit; clrscr(); cout"Specificati num rul de elemente a mul imii A"" ""ms"; cinm; cout"Specificati num rul de elemente a mul imii B"" "<<"n="; cinn; cout"lntroduceti elementele mul imii A"endl; for(i=1;i<=m;i++) {cout"A["i"]="; cinA[i];>; cout"lntroduceti elementele mul imii B"endl; for(j=1 ;j<=n;j++) { cout"B["j"]="; cinB[j];}; k=0; for(i=1;i<=m;i++) { gasit=0; for(j=1 ;j<=n;j++) if(A[i]==B[j])gasit=1; if(gasit) C[k++]=A[i]; } cout"AnB"" ""={"" "; for(i=0;i<k;i++) coutC[i]" cout"}" ;

getchO; }
Exemplul5. Se citesc mul imile A si B si se listeaza C unde C=A X B #include<iostream.h> #include<conio.h> void main() {

17

int m,n,IJ;

char A[10],B[10]; clrscr(); cout"Specificati num rul de elemente a mul imii A"" "<<"m="; cinm; cout"Specificati num rul de elemente a mul imii B"" ""n="; clnn; cout"lntroduceti elementele mul imii A"endl; for(i=1 ;i<=m;i++) { cout"A["i"]="; cinA[i];}; cout"lntroduceti elementele mul imii B"endl; for(j=1 ;j<=n;j++) { cout"B["J'l="; clnB[j];}; cout"AXB"" ""={"" "; for(i=1;i<=m;i++) for(j=1 ;j<=n;j++) cout"("A[i]","B[j]")"" "; cout"}" ; getch(); } 1.2.4. METODE DE SORTARE Se aplica pentru sortarea unor valori citite in ordine crescatoare sau descresc toare. a) Sortarea prin selectarea minimului(maximului). - se determina minimul dintre toate valorile retinute incepand cu pozi ia 1 si acesta este trecut pe pozitial prin interschimbarea continuturilor dintre cele 2 componente - se determina minimul dintre valorile ratinute incepand cu pozi ia 2 si acesta este trecut pe pozi ia 2 prin interschimbarea continuturilor dintre cele 2 componente

- se determina minimul dintre valorile retinute incepand cu penultima pozi ie si acesta este trecut pe penultima pozi ie. ExempluH. Se cite te o mul ime de numere si se listeaza valorile in ordine crescatoare si in ordine descresc toare #include<iostream.h> #include<conio.h> int a[10],n,i,j,k,mintm; void main() { clrscr(); cout"lntroduce num rul elementelor"" ""n=";cinn; for(i=1 ;i<=n;i++) M {cout<<"a[ <<i<<"]=";cin>>a[i];}; for(i=1 ;i<=n-1 ;i++) { min=a[i];k=i; for(j=l+1 ;j<=n;j++) if(a[j]<min) { min=a[j]; k=j;

m=a[k]; a[k]=a[i]; a[i]=m;

cout"Listez numerele in ordine crescatoare"endl; for(i=1 ;i<=n;i++) couta[i]" "; coutendl"Listez numerele in ordine descrescatoare"endl; for(i=n;i>=1 ;i~)couta[i]" "; getch(); }

18

b) Sortarea prin interschimbare Se parcurge variabila intr-un ciclu do while inversnd con inuturile componentelor care nu sunt in ordine crescatoare(descrescatoare) Exemplu: Fie situatia ini iala: 1 2 3 4 A[1] Algoritmul este urm torul: - se efectueaza prima parcurgere si se schimba A[1] cu A[2] (deoarece 3 > 1) si A(3) cu A[4] (deoarece 4 > 2), vectorul va arata astfel:
1

AJ2]

A[3)

A[4]

3 A|2]

4 A[4]

A(1]

A[3)

- se efectueaza a doua parcurgere si se schimba A[2] cu A|3] (deoarece 3 > 2), iar vectorul va arata astfel:
1 2

3 A[3]

4 A [4]

A[1]

A(2]

- se efectueaza a treia parcurgere dar deoarece numerele sunt in ordine crescatoare algoritmul se incheie Exemplu: #include<iostream.h> #include<conio.h> int a[10],n,i,k,temp, g sit; void main() { clrscr(); cout"lntroduce num rul de elemente"" ""n=";cinn; for(i=1 ;i<=n;i++) {cout"a["i"]=";cina[i];}; do { gasit=0; for(i=1 ;i<=n-1 ;i++) if(a[i]>a[i+1]) {temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; gasit=1:} } while(gasit); cout"Listez numerele In ordine crescatoare"endl; for(i=1 ;i<=n;i++) couta[i]" "; coutendl"Llstez numerele In ordine descrescatoare"endl; for(i=n;l>=1 ;l-)couta[i]" "; getch(); } 1.3 APLICA II CARE LUCREAZA CU MATRICI. 1.3.1 INTERSCHIMBAREA A DOUA LINII INTRE ELE SAU A DOUA COLOANE Pentru a interschimba 2 variabile intre ele utilizam o a treia variabila de manevra care am denumit-o temp si inca doua variabile x si y carora le atribuim ca valori numerele liniilor sau a coloanelor care dorim sa le interschimbam intre ele. a) Interschimbarea a 2 linii for(j=1;j<=n;j++){ temp=a[x][j]; a[x][i]=a[y][|]; a[y][j]=temp ; }

19

b) Interschimbarea a 2 coloane for(i=1 ;i<=n;i++) { temp=a[i][x]; a[l][x]=a[l][y]; a[i][y]=temp ;

Exemplu. Schimbarea a 2 coloane a unei matrici #include<iostream.h> #include<conio.h> void main() { int i,j,m,n,a[10][10],x,y,temp; clrscr(); H cout"lntroduceti num rul de llnH" ""n=";cinm; cout"lntroduceti num rul de coloane"" ""n=";cinn; cout"lntoduceti elementele"endl; for(i=1 ;i<=m;l++) { , M for(j=1 ;]<=n;j++) { cout *a["ij ]=", clna[i][j];}} cout"Matricea intodusa are forma:"endl; for(i=1 ;l<=m;l++){ for(j=1 ;|<=n;j++) {couta[i][j]'} coutendl;} coutendl; cout"lntroduceti num erele coloanelor care dori i sa le interschimbati"endl; cout"x=";cinx;cout"y=";ciny; for(i=1 ;i<=n;i++) {temp=a[i][x]; a[i][x]=a[i][y]; a[i][y]=temp ;} coutendl; cout"Noua matrice are forma:"endl; for(i=l ;i<=m;i++){ for(j=1;j<=n;j++){ couta[i][j]'';} coutendl;} getch(); } 1.3.2. SPIRALA Se cite te o matrice patratica (num rul de linii=numarul de coloane=n). Se cere sa se afi eze elem entele tabloului in ordinea rezultata prin parcurgerea acestuia in spirala, incepand cu primul elem ent din linia 1 in sensul acelor de ceasornic. 2. IRURI DE CARACTERE 2.1. Citirea 1 scrierea irurilor de caractere. nainte de citirea unui sir de caractere acesta trebuie declarat. Pentru a declara un sir de caractere se utilizeaza func ia: char nume sir[nr.elemente sir] Exemplu: char sirl[100] - sa declarat irul cu numele sirl care poate lista 100 caractere Pentru citirea irurilor de caractere se utilizeaza func ia: cin.get(vector de caractere, int nr, char='\n') Observa ie. Dupa tastarea unui sir de caractere , la apasarea tastei Enter se intrerupe citirea . Daca dorim sa introducem mai multe iruri de caractere se utilizeza cin.get() astfel char s1 [20],s2[20]; cln.get(s1,20]; cln.get(); cin.get(s2,20);

20

couts1endk<s2; Daca ar lipsii func ia cin.get() a doua citire nu ar putea fi efectuata, deoarece la apasarea tastei Enter in memorie este pastrat caracterul VT , fapt care duce la intreruperea citirii. Exemplu: #include<iostream.h> #include<conio.h> void main() { char s1 [20],s2[20]; cin.get(s1,20); cin.get(); cin.get(s2,20); clrscr(); couts1 endls2; getch(); } Observa ie. Se pot scrie mai multe iruri de cuvinte daca declaram o matrice de tip char char a[10][20] se pot scrie 10 iruri cu cate 20 caractere fiecare sir (fara spa iu) Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main(){ char a[10][20]; int n,i; cout"Nr.cuvinte ";cinn; for(i=0;i<n;i++) cina[i];clrscr(); for(i=0;i<n;i++) couta[i]endl; getch();} 2.2. Func ii si algoritmi care lucreaza cu iruri de caractere. Pentru a utiliza func iile care lucreaza cu irurile de caractere trebuie inclusa directiva #include<string.h> 2.2.1. Func ia strlen. Are rolul de a returna lungimea unui sir(fara a lua in considerare caracterul nul). Forma generala : strlen(nume sir); Exemplu: Se cite te un sir de caractere si se afiseaza num rul de caractere a irului #include<iostream.h> #include<conio.h> #include<string.h> void maln() { char s1 [100]; cin.get(s1,100); cin.get(); cout"Sirul citit are"" "strlen(s1)" ""caractere"; getchO;} 2.2.2 Func ia strcpy. Forma generala: strcpy(destinatie,sursa) Func ia are roluil de a copia irul de la adresa sursa la adreasa destinatie. Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1 [20]="Limbalul Turbo C++",s2l20]="Limbajul C++"; strcpy(s1,s2); couts1;

getchO;}
2.2.3. Func ia strcat. Forma generala: strcat(destinatie,sursa)

21

Funtia are rolul de a adauga irului de la adresa destinatie irul de la adresa sursa Exem plu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++",s2[20]=" si Limbajul C++"; strcat(s1,s2); couts1; getch(); } 2.2.4. Func ia strncat Forma generala: strncat(destinatie,sursa,n) Func ia adauga irului destinatie primii n octeti ai irului sursa Exemplu: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1 [20]='Limbajul Turbo C++",s2[20]=" si Limbajul C++"; strncat(s1,s2,5); couts1; getch(); } 2.2.5. Func ia strchr Forma generala: strchr(nume sir,' caracter') Func ia cauta in irul nume sir caracterul caracter si returneaza subsirul care incepe cu prim a apari ie a caracterului citit Exemplul 1: se va lista Turbo C++ #include<iostream.h> #include<conio.h> #include<string.h> void main() { char s1[20]="Limbajul Turbo C++"; coutstrchr(s1 ,X); getch(); } Exemplul2: Se tip re te indicele primei apari ii a caracterului 'u' #include<iostream.h> #include<conio.h> #include<strtng.h> void main() { char s1[20]="Limbajul Turbo C++"; coutstrchr(s1 ,'u')-s1; getch(); } Returneaza valoarea 6 2.2.6. Func ia strrchr Returneaza adresa ultimei apari ii a caracterului cautat strrchr(sir, 'caracter') char s1[20]="Limbajul Turbo C++"; coutstrrchr(s1,'u')-s1; Returneaza valoarea 10 2.2.7. Func ia strcmp Forma generala strcmp(sir1, sir2) Func ia are rolul de a compara 2 iruri de caractere si va returna valoarea: <Odaca sir1<sir2 = 0 daca sir1=sir2 > 0 daca sir1>sir2 Exemplul. Se compara irul a cu irul b si se listeaza rela ia dintre cele 2 iruri astfel:

22

- daca primele n caractere sunt identice se compara caracterele n+1 - daca caracterul n+1 al irului a este situat alfabetic inaintea cracterului n+1 al irului b se afiseaza a<b - daca caracterul n+1 al irului a este situat alfabetic dupa cracterul n+1 al irului b se afiseaza a>b - daca primul caracter al irului a este situat alfabetic inaintea primului caracter al irului b se afiseaza a<b indiferent de lungimea celor 2 iruri - daca primul caracter al irului a este situat alfabetic dupa primul caracter al irului b se afiseaza a>b indiferent de lungimea celor 2 iruri ExempluM: #include<iostream.h> #include<conio.h> #include<string.h> void main() { char a[20],b[20]; int semn; cout"lntroduceti irul a: "; cina; cout"lntroduceti irul b: "; cinb; semn=strcmp(a,b); if(semn<0) cout"a < b"; else if(semn>0) cout"a > b"; else cout"a = b";

getchO; }

Exemplul2. Se citesc n cuvinte si se ordoneaza alfabetic cresc tor si descresc tor. #include<iostream.h> #include<conio.h> #include<string.h> void main(){ char a[100][10],temp[10]; int i,n,g sit; cout"lntroduceti num arui de persoane "; cinn; cout"Scrie numele persoanelor"endl; for(i=0;i<n;i++) cina[i]; do { gasit=0; for(i=0;i<n-1 ;i++) if(strcmp(a[i],a[i+1])>0)

strcpy(temp,a[i]); strcpy(a[i],a[i+1 ]); strcpy(a[i+1],temp); gasit=1;

} }

while(gasit); cout"Ordinca alfabetica crescatoare a persoanelor scrise este:"endl; for(i=0;i<n;l++) couta[i]endl; cout"Ordinea alfabetica descresc toare a persoanelor scrise este:"endl; for(i=n ;i>=0;l~) couta[i]endl; getch(); i 2.2.8. Func iile strlwr si struwr strlwr(sl) - converte te toate literele irului s1 in litere mici struwr(s2) - converte te toate literele irului s2 in litere mari Exemplu: #include<iostream.h> #include<conio.h>

23

#include<string.h> void main() { char a[100]="este acesta un sir?", b[100]="Acest Lucru Nu Ma Deranjeaza"; coutstrupr(a)endk<strlwr(b); getch(); } 2.2.9. Func ia strstr Forma generala: strstr(sir1 ,sir2) Func ia identifica daca irul sir2 este subsir al irului sir1 2.2.10. Func ia strcspn Forma generala: strcspn(s1,s2) Func ia returneaza num rul caracterelor din irul s1 care nu se g sesc in irul s2 2.2.11. Func ia spn Forma generala: strspn(s1,s2) Func ia returneaza num rul caracterelor din irul s1 care se g sesc in irul s2 2.2.12. FUNC II UTILIZATE PENTRU CONVERSIA VALORILOR NUMERICE IN SIR La utilizarea acestor func ii se introduce directiva #include<stdlib.h> a) Func ia atof - converte te un sir c tre tipul double b) Func ia atold - converte te un sir c tre tipul long double Exemplu: #include <stdlib.h> #include <iostream.h> #include<conio.h> void main() { float f; char*str = "12345.67"; f = atof(str); cout"string = "<<strendl"float = "f; getch();} c) Func ia atoi - converte te un sir c tre tipul int d) Func ia atol - converte te un sir c tre tipul long Exemplu: #include <stdlib.h> #include <iostream.h> #include<conio.h> void main() { int n; char *str = "12345.67"; n = atoi(str); cout"string = "<<strendl"float = " n; getch();

e) Func ia ecvt - converte te o valoare dubla c tre un sir f) Func ia itoa - converte te o valoare de tip intreg c tre un sir g) Func ia Itoa - converte te o valoare de tip long int c tre un sir 3. TIPUL NREGISTRARE 3.1. nregistr ri simple. Pentru gruparea variabilelor de mai multe tipuri utilizate pentru o inregistrare se foloseste: struct nume structura {tip variabila nume variabila, num e variabila ; tip variabila nume variabila; } lista variabile; Un exemplu de stuctura: struct elev { char nume[15],prenume[20]; int telefon; float media; }inr1,inr2;

24

Exemplu: #include <stdlib.h> #include <iostream.h> #include<conio.h> struct elev { char nume[15],prenume[20].clasa[l0]; int tel; float med; }inr; void main() { cout"Nume ";cininr.nume; cout"Prenume ";cininr.prenume; cout"Telefon ";cininr.tel; cout"Clasa ";cininr.clasa; cout"Media generala ";cininr.med; cout"Am citit:"endl inr.nume" "inr.prenumeendl inr.telendl inr.clasaendl inr.med; getch(); } 3.2. nregistr ri imbricate Un tip structurat de inregistrare con ine in interiorul sau alt tip structurat de nregistrare. Exemplu de inregistrare imbricata: struct elevi { char nume[15],prenume[20]; struct {int clasa; float note[20]; } sit1,sit2; int varsta;

};

Tipul structurat elevi subordoneaz , pe langa alte tipuri, doua structuri sit1 si sit2. 3.3. nregistr ri cu structura variabila Se utilizeaza cand inregistrarile nu au format fix ci un format variabil.

F. FI IERE

Fi ierul este o colec ie de date de acela i fel stocate pe un suport extern care are un mune si o extensie (al c rei nume este in func ie de tipul fi ierului).Ex: nume.exe (fi ier executabil); nume.dbf (fi ier baza de date,utilizat in fox), etc. 1. FI IERE TEXT Aceste fi iere se caracterizeaza prin urmatoarele: - datele sunt memorate sub forma unei succesiuni de caractere - caracterele sunt memorate in codul ASCII - fi ierul se termina cu caracterul EOF - este format din una sau mai multe linii care se termina cu caracterul newline (\n) - o variabila speciala numita pointer retine intotdeauna un octet al fi ierului 1.1. Citiri / scrieri cu format Acestea sun caracterizate prin: - latime - width - se utilizeaza la scriere si are rolul de a stabili num rul de caracatere utilizate pentru afi area unei date; - precizie - precision - se utilizeaza la scriere atunci cand se foloseste o variabila reala, stabileste num rul de zecimale care vor fi afi ate pentru valoare;

25

- caracterul de umplere - fiii - se utilizeaza la scriere in cazul in care data propriuzisa ocupa mai putini octeti dect latimea si precizeaza caracterul care se afiseaza in spatiile neocupate; - alinierea - left sau right - se utilizeaza cand data ocupa mai pu in dect latimea si se ^ precizeaza unde anume sa fie afisata - stanga sau drepta - salt sau nu peste caractere albe - se utilizeaza la citire * Pentru formatarea citirii / scrierii se utilizeaza varibilele: precision, wihth, fiii Accesul la aceste varibile se face cu ajutorul unor func ii speciale numite manipulatori. Pentru a le putea utiliza in program trebuie inclusa directiva #<iomanip.h> Manipulatorii sunt inclu i in expresiile de citire/scriere astfel: - setw (int) - stabileste latimea int pe care este afisata variabila - setprecision(int) - stabileste num rul de zecimale int care sunt afi ate - setfill(char) - stabileste caracterul de umplere char a pozi iilor ramase libere Exemplu. #include<lostream.h> #include<iomanip.h> #include<conio.h> void main() { double a=0.123456789; coutsetw(20)setfill('$')setprecision(2)a; getch(); } Afi area se poate face pe 20 pozi ii : pe pozi iile ramase libere se afiseaza caracterul $ . variabila a va fi afisata cu 2 zecimale. 'Pentru formatarea intr rilor / ie irilor se utilizeaza variabila: flags care utilizeaza comenzile: - skipws - sunt s rite caracterele albe care preced valoarea ce trebuie citita - left - datele se tip resc aliniate la stanga - right - datele se tip resc aliniate la dreapta - internai - se fiseaza semnaul la sting si num rul la drepta - dec - conversie in zecimal - oct - conversie in octal - hex - conversie in hexazecimal - showbase - afi area indicatorului de baza - showpoint - forteaza afi area punctului zecimal - uppercase - in cazul afisarii in hexazecimal se vor utiliza literele mari (A.B.-F) - showpos - valorile afi ate sunt precedate de semn - fixed - afi area valorilor se face prin utilizarea formai normale Variabila flags se utilizeaza in doua moduri: setiosflags(masca) - pentru setarea bi ilor accesa i resetiosflags(masca) - pentru resetarea bi ilor accesa i Pentru a avea acces la comanzile cu care lucreaza flags numele lor vor fi precedate de ios:: ^TJ - scientific - afi area valorilor se face prin utilizarea formei stiintifice (1e-8)

26

masca este formata din una sau mai multe grupe de comenzi de forma: ios::comanda separate intre ele de operatorul logic | (SAU-pe biti) Exemplu de masca: (ios::internal | ios::showpos | ios::rlght) Exemplu: #include<iostream.h > #include<iom anip.h> #include<conio.h> #include<math.h> void main() { double a,b,c,d,e,f; cout"lntroduceti primul num r"" "<<"a=";cina; cout"lntroduceti al doilea num r"" "<<"b=";cinb; c=a/b; d=a*b; e=sqrt(d); f=d*d;

coutendl;
cout"Rezultatul impartirii "" ""a : b =" setw(100)setfill(' ')setprecision(10) setiosflags(ios::left|ios::showpos|ios::fixed)c; coutendl; cout"Rezultatul inmultirii "" ""a x b =" setw(100)setfill(' ')setprecision(10) setiosflags(ios::left|ios::showpos|ios::fixed)d; coutendl; cout"Radicalul inmultirii este "" " setw(100)setfill(' ')setprecision(20) setiosflags(ios::left|ios::showpos|ios::fixed)e; coutendl; cout"Patratul inmultirii este "" " setw(100)setfill(' ')setprecision(20) setiosflags(ios::left|ios::showpos|ios::fixed)f;

getc hO; }
1.2. Declararea fi ierelor text memorate pe suport magnetic. Cand se lucreaza cu fi iere pe suport magnetic in program trebuie inclusa directiva: #include<fstream.h> daca utilizam acesta directiva poatei fi scoasa <iostream.h> Pentru a lucra u or asupra fi ierelor sunt definite com enzile: - in - deschide fi ierul pentru citire - out - deschide fi ierul pentru scriere - ate - salt la sfirsitul fi ierului dupa deschiderea acestui - app - deschide fi ierul pentru a scrie la sfirsitul lui - trunc - daca fi ierul care se deaschide exista in locul lui se creaza altul - nocreate - daschide fi ierul daca acesta exista (nu se creaza altul) - noreplace - daca fi ierul exista el poate fi deschis numai pentru consultare - binary - fi ier binar. Se utilizeaza constructorul inplicit al clasei ofstream(); apoi se utilizeaza metoda open in forma generala nainte de a lucra cu un fi ier acesta trebuie declarat. Forma generala a declara iei: fstream nume_logic("numeJizic", mod_de_deschidere)

27

Exemplul: Declar un fi ier cu numele fizic fis.txt care se va gasi in r d cin (c:\\) , cu numele logic f, fi ierul este declarat in vedera cre rii lui (ios::out) fstream f("c:\\fis.txt",ios::out); Exemplul2. Declar doua fi iere, unul (f) pentru citire si celalat (g) pentru scriere fstream f("c:\\fis1 .txt",ios::in), g("c:\\fis2.txt",ios::out); In cazul in care numele fi ierului trebuie citit de la tastatura declara ia fi ierului trebuie sa con in numele sau si trebuie plasata dupa citirea irului respectiv astfel: char nume Jisier[20]; cout"Numele fi ierului este ";cinnume_fisier; fstream f(nume_fisier, ios::out); Dupa deschiderea si prelucrarea unui fi ier acesta trebuie inchis astfel: nume_fisier.close(), in cazul nostru f.close() Exemplu de creare a unui fi ier de tip text in c:\: #include<iostream.h> #include<fstream.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("c:\\fis.txt",ios::out);

getch O; }

1.3. Prelucrarea fi ierelor de tip text

Prelucrarea unui fi ier se face dupa urm torul algoritm: while(daca nu este sfirsit de fi ier) { cite te ; prelucreaza;

}
nume_fisier.eof()

Pentru a preciza sfirsitul de fi ier care se testeaza in paranteza de dupa while se scrie: ! Atentie! Func ia eof() nu cite te ci doar testeaza daca anterior a fost detectat sfarsitul de fi ier Exemple de programe: Exempluh. Creez un fi ier fis.txt in d:\ cu intrare de la tastatura (scriu in el de la tastatura).In acest exemplu nu sunt scrise caracterele albe(deci intre cuvintele scrise nu este spa iu.Ca sa termin scrierea apas consecutiv tastele CTRL+Z (echivalent cu EOF) #include<iostream.h> #include<fstream.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("d:\\fis.txt",ios::out); char x; while(cinx) fx; f.close(); }

28

Excmplul2. Creez acela i fi ier dar for fi scrise si caracterele albe. Aceasta sa realizat deoarece a fost introdusa comanda resetiosflags(ios::skipws) #include<iostream.h> #include<fstream.h> #include<lomanip.h> #include<conio.h> void main() { while(cinresetiosflags(ios::skipws)x) fx; f.close(); getch(); } Exemplul3. Afi ez fi ierul creat la exemplul2 #include<iostream.h> #include<fstream.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("d:\\fis.txt",ios::in); char x; while(fresetiosflags(ios::skipws)x) coutx; f.close(); getch(); } Exemplul4. Scriu la sfirsitul fi ierului creat la exem plul2 #include<iostream.h> #include<fstream.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("d:\\fis.txt",ios::app); char x; while(cinresetiosflags(ios::skipws)x) fx; f.close(); getch(); } ExemplulS. Creez un fi ier al c rui nume il dau de la tastatura si scriu in el. #include<iostream.h> #include<fstream.h> #include<iomanip.h> ^J #include<conio.h> void mainO { char fisier[10]; cout"Numele fi ierului este ";cinfisier; fstream f(fisier,ios::out); char x; while(cinresetiosflags(ios::skipws)x) fx; f.closeO; getch(); } Observa ie: Cand scriu numele fi ierului trebuie sa specific si loca ia lui astfel: c:\nume_fisier.txt sau d:\nume_fisier.txt Exemplul6. Cuvntul "FINISH" se adauga la sfarsitul fi ierului creat la exemplul2. #include<string.h> #include<fstream.h> #include<stdlib.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("d:\\fis.txt",ios::in|ios::out); char c[100];

fstream f("d:\\fls.txtM,los::out); char x;

29

fresetiosflags(ios: :skipws)c ;coutc; f.seekp(0,ios::end); strcpy(c,"FINISH"); frcsctiosflags(ios::skipws)c; f.close(); getch(); } & Func ia: nume_fisier.seekp(0,los::end) pozitioneaza pointerul in fi ierul precizat - primul parametru reprezint pozi ia pointerului - al doilea parametru reprezint reperul in raport de care este calculata pozi ia Sunt definite trei constante: end - sfarsit de fi ier beg - inceput de fi ier cur pozi ia curenta in fi ier & Func ia : nume_fisier.tellp() - returneaza pozi ia pointerului la un moment dat. Exemplul7. Se convertesc primele n numere naturale in octal si hexazecimal ^ #include<iostream.h> #include<fstream.h> #include<iomanip.h> #include<conio.h> void main() { fstream f("C:\\numere.txt",ios::out,ios::in); int i,n; cout"lntroduce num rul n= ";cinn; for(i=l ;l<=n;l++) { fsetw(10)octi; fsetw(10)deci; fsetw(10)setiosflags(ios::uppercase)hexiendl; f.close(); getch(); } Caracteristici: - fi ierele sunt alcatuite din mai multe inregistrari de acela i tip (int, struct, etc) - datele sunt memorate in format intern, iar fi ierele se termina tot cu EOF - pentru deschiderea unui fi ier binar se utilizeaza ios::binary - fi ierele lucreaza cu variabile de tip pointer. O astfel de variabila retine o anumita adresa a unei alte variabile. Ea se declara in felul urm tor: int a, adr_a=&a , variabila *adr_a a fost initializata cu adresa variabilei a Variabila *adr_a este de tip poiner Pentru a ob ine adresa unei variabile , variabila este precedata de operatorul & Daca avem o variabila a de tip int* si o variabila b de tip float* nu este permisa atribuire de tipul a=b , aceasta atribuire se poate face astfel a=(int*)b
4

};

2. Fi iere binare.

30

- scrierea unei variabile de tip pointer adr_p intr-un fi ier se face utiliznd: nume_fisier.write((char*) adr_p,sizeof(p)) - citirea unei variabile de tip poiter adr_p dintr-un fi ier se face utiliznd: nume_fisier.read((char*)adr_p,sizeof(p)) Prin aceste comenzi de fapt se scrie respectiv cite te continutul variabilei p , num rul de caractere scrise sau citite fiind date de lungimea variabilei p prin comanda sizeof(p). ExempluM. Se creaza un fi ier binar cu n inregistrari in care fiecare inregistrare retine datele personale a unei persoane(numele,prenumele,ocupa ia,varsta)

31

S-ar putea să vă placă și