Documente Academic
Documente Profesional
Documente Cultură
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 , reprezinta un sir de caractere cuprins intre apostrofuri ex. 'mesaj'
2. Variabile
Sunt urmatoarele tipuri de variabile:
- variabile de tip intreg 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 multi operanzi legati intre ei prin operatori.
Operanzii reprezinta valorile care intra in calcul si care pot fii variabile sau constante.
Operatorii desemneaza operatiile care se executa spre a obtine rezultatul. Pot fi aritmetici,
relationali, logici
3.1. Operatori aritmetici
+ (adunare) ; - (scadere) ; * (inmultire) ; / (impartire)
- div (impartire intreaga) - 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 relationali
<(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. OPERATIILE PE CARE LE EFECTUEAZA UN ALGORITM
1. Operatii de intrare / iesire
Operatia de intrare (citire) este read
Operatia de iesire (scriere) este write
Exemplu:
1
real a,b,c; // se declara variabilele a,b,c//
read a,b,c // se citesc variabilele a,b,c//
write a,b,c // se afiseaza valorile variabilelor a,b,c introduse de la tastatura//
2. Atribuiri
Prin operatia de atribuire se retine o anumita data intr-o variabila.
Tipul variabilei trebuie sa coincida cu tipul valorii atribuite, cu exceptia ca unei variabile de
tip real i se poate atribui o data de tip intreg.
Exemple de forma1:
integer a;
a:=10; // variabila a retine valoarea 10//
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++' ; // 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 operatie 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 operatie variabila a ramine cu valoarea 5 iar variabilei b i se atribuie valoarea 5
c) integer a;
a:=5;
a:=a+1
Dupa aceasta operatie 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 2//
b:=m //variabila b preia valoarea variabilei m si devine 1//
3. Operatii de decizie
Forma generala:
2
if expresie logica then operatia1 else operatia2 endif
Mod de executie: se evalueaza expresia logica, daca este adevarata se executa operatia 1, iar
daca este falsa se executa operatia 2
Exemplul1.
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:
a+b , c+d>0
E = 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
endif endif
write rez
3
2.Structura alternativa
Exemplul1. Se citeste o valoare intreaga. Daca aceasta este para se tipareste mesajul"am citit un
numar par"
integer a;
read a
if a mod 2 = 0 write 'am citit un numar par'
endif
Exemplul 2. Se citeste x numar real. Evaluati expresia:
x, x<0
2x 0≤x<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
do S
endwhile
Se evalueaza expresia logica E, daca este adevarata se executa structura S apoi se repeta
executia 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
endwhile
write s
4
3.2. Structura FOR
Forma generala. Fie o variabila i (variabila de ciclare) si doua valori intregi a(valoare initiala) si
b(valoare finala) si o structura S
for i:=a, b
S
repeat
Variabila de ciclare i ia valoarea initiala a, si se executa structura S pina ce se ajunge la valoarea
finala b
Exemplu. Se citeste numarul 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
5
Functiile de acelasi domeniu sunt grupate in fisiere header numite si directive.
La inceputul fiecarui program se specifica fisierele care contin functiile ce se utilizeaza in program
astfel: # include <numefisier.h>
Dupa specificarea directivelor trebuie scrisa functia radacina care se numeste main( ) sau void
main( ). Dupa numele directivelor sau a functiilor nu se pune semnul ;
1. Citiri , scrieri.
- pentru realizarea citirii se utilizeaza : cin>>nume variabila
cin>>a>>b>>c - citeste variabilele a, b, c
- pentru realizarea scrierii se utilizeaza: cout<<nume variabila
cout<<a<<b<<c - scrie variabilele a, b, c
Exemplul 1:
#include<iostream.h>
#include<conio.h>
void main()
{
int L,l,h;
clrscr(); // sterge ecranul //
cout<<"Lungimea=" ; cin>>L;
cout<<"Latimea="; cin>>l;
cout<<"Inaltimea="; cin>>h;
getch(); // in C++ sub DOS permite vizualizarea rezultatului
programului//
}
Exemplul 2:
#include<iostream.h>
#include<conio.h>
void main()
{
int L,l,h,v;
clrscr();
cout<<"Lungimea=" ; cin>>L;
cout<<"Latimea="; cin>>l;
cout<<"Inaltimea="; cin>>h;
v=L*l*h;
cout<<"Volumul este"<<" "<<v;
getch();
}
2. TIPURI DE DATE.
2.1. TIPURI INTREGI.
- 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 retin si numerele zecimale , ocupa 32 biti)
6
ATENTIE!! IN C++ LA SCRIEREA UNUI NUMAR ZECIMAL IN LOCUL VIRGULEI SE PUNE
PUNCT
- double ( tip real care ocupa 64 biti)
- long double (tip real care ocupa 80 biti)
2.3. CONSTANTE
Pentru a da un nume constantelor se foloseste declaratia const care are forma:
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) ; - (scadere) ; * (inmultire) ; / (impartire) ; % (restul impartirii intregi)
3.2. OPERATORI RELATIONALI.
< (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) ; -- (decrementare)
Operatorii pot fi : prefixati (in fata operandului) situatie in care variabila este incrementata sau
decrementata inainte ca valoarea retinuta de ea sa intre in calcul
postfixati (dupa operand) situatie in care variabila este incrementata sau
decrementata dupa ce valoarea retinuta de ea intra in calcul
Exemplu:
Daca a si b sunt variabile de tip int care retin valorile 1 si 3 atunci:
a++*b++ produce valoarea 3, dupa evaluare cele 2 variabile retin 2 si 4
++a*++b produce valoarea 8, dupa evaluare cele 2 variabile retin 4 si 4
3.5. OPERATORI LOGICI
! - negare logica ; && - SI logic ; || SAU logic
3.6. OPERATORI DE ATRIBUIRE
Apare foarte frecvent si reprezinta memorarea unei valori intr-o variabila
Este reprezentata prin semnul =
a=3 (atribuie variabilei a valoarea 3)
Se mai utilizeaza operatori de atribuire combinati:
+= ; -= ; *= ; /= ; %= ; &= ; <<= ; >>=
Exemplu: a=a+b este echivalent cu a+=b ; a=a*b este echivalent cu a*=b
3.7. OPERATORUL CONDITIONAL.
Forma generala e1 ? e2 : e3
Se evalueaza e1, daca este adevarata se executa e2, daca este falsa se executa e3
7
Exemplu: Citirea unuui numar x si tiparirea numarului |x| (modulul numarului x)
#include<iostream.h>
#include<conio.h>
void main()
{
float x;
clrscr();
cout<<"x=" ; cin>>x; cout<<"|x|="<<" "<<(x>=0?x:-x);
getch();
}
2. INSTRUCTIUNEA IF.
Forma generala:
if (expresie) instructiune1 else instructiune2
Se evalueaza expresia, daca este adevarata se executa instructiune1, daca este falsa se
executa instructiune2
Exemplul 1. Calculeaza maximul dintre 2 numere citite
#include<iostream.h>
#include<conio.h>
8
void main()
{
int a,b,max;
clrscr();
cout<<"a=" ; cin>>a;
cout<<"b="; cin>>b;
if(a>b) max=a;
else max=b;
cout<<"numarul mai mare este "<<" "<<max;
getch();
}
Exemplul 2. Se citesc coeficientii a, b, c ale unei ecuatii de gradul doi si se precizeaza natura
radacinilor si semnul lor.
#include<iostream.h>
#include<math.h>
#include<conio.h>
void main()
{
float a,b,c,d,s,p;
clrscr();
cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"c=";cin>>c;
d=b*b-4*a*c; s=float(-b/a); p=float(c/a);
cout<<"Discriminantul ecuatiei D="<<d<<endl;
cout<<"Produsul radacinilor P="<<p<<endl;
cout<<"Suma radacinilor S="<<s<<endl;
if(d<0) cout<<"Ecuatia nu are solutii reale";
else
{ if(d==0) {if(s>0) cout<<"Ecuatia are 2 solutii reale egale si pozitive";
else cout<<"Ecuatia are 2 solutii reale egale si negative";
}
else
if(p>0)
{if(s>0) cout<<"Ecuatia are 2 solutii reale pozitive";
else cout<<"Ecuatia are 2 solutii reale negative";
}
else cout<<"Ecuatia are 2 solutii reale de semne opuse";
}
getch();
}
#include<iostream.h>
#include<conio.h>
void main()
{
float a,b,x;
clrscr();
cout<<"a=" ; cin>>a;
cout<<"b="; cin>>b;
if (a!=0)
{x= -b/a ;cout<<"x="<<" "<<x; }
else
if(b==0) cout<<"ecuatia are o infinitate de solutii";
else cout<<"ecuatia nu are solutie";
getch();
9
}
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
float a,b,c,d,x1,x2,x;
clrscr();
cout<<"a=" ; cin>>a;
cout<<"b="; cin>>b;
cout<<"c=" ; cin>>c;
d=float( b*b-4*a*c);cout<<"discriminantul ecuatiei este"<<" "<<sqrt(d)<<endl;
if(d<0) {cout<<"ecuatia nu are solutii reale";}
else
if (d>0)
{ x1=(-b+sqrt(d)) / (2*a) ; x2=(-b-sqrt(d)) / (2*a);
cout<<"x1="<<x1<<endl;cout<<"x2="<<x2<<endl;}
else
{x=float(-b/2*a);cout<<"ecuatia are solutie unica x=x1=x2="<<" "<<x;}
getch();
}
3. INSTRUCTIUNEA SWITCH.
Forma generala a instructiunii:
switch (expresie) {
case e1 : secventa 1 ; break;
case e2 : secventa 2 ; break;
..............................................
case en : secventa n ; break;
default : secventa n+1;
}
Se evalueaza expresie , daca este egala cu una din expresiile e1, e2, ...en se executa secventa
corespunzatoare expresiei s1, s2, ...sn, iar daca nu este egala cu una din aceste expresii se
executa numai secventa n+1
Exemplul 1.
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
clrscr();
cin>>i;
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 functie de semnul lui ∆.
10
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,c,d;
clrscr();
cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"c=";cin>>c;
d=b*b-4*a*c;
if(d>=0)
{
switch(d)
{
case 0: cout<<"Ecuatia are o solutie dubla";break;
default:cout<<"Ecuatia are doua solutii reale diferite";
}
}
else cout<<"Ecuatia nu are solutii reale";
}
4. INSTRUCTIUNEA WHILE.
Aceasta instructiune permite programarea ciclurilor cu test initial.
Forma generala este:
while (expresie)
{....... instructiuni }
Se evalueaza expresie, daca este adevarata se executa {....instructiuni} dupa care se revine la
evaluarea expresiei , daca este falsa se trece la instructiune urmatoare.
Exemplu. Executarea unui program intr-un ciclu repetat pana la apasarea unei anumite taste(se
introduc coeficientii unei ec. de gr.2 si se afiseaza solutiile 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=" ; cin>>a;
cout<<"b="; cin>>b;
cout<<"c=" ; cin>>c;
d=float( b*b-4*a*c);cout<<"discriminantul ecuatiei este"<<" "<<sqrt(d)<<endl;
if(d<0) {cout<<"ecuatia nu are solutii reale";}
else
if (d>0)
{ x1=(-b+sqrt(d))/(2*a) ; x2=(-b-sqrt(d))/(2*a);
cout<<"x1="<<x1<<endl;cout<<"x2="<<x2<<endl;}
else
{x=float(-b/2*a);cout<<"ecuatia are solutie unica x=x1=x2="<<" "<<x<<endl;}
cout<<"Pentru continuare apasa o tasta"<<endl;
cout<<"Pentru iesire apasa tasta q";
tasta=getch();
}
11
5. INSTRUCTIUNEA DO WHILE.
Instructiunea permite programarea ciclurilor cu test final.
Forma generala este:
do
{ instructiuni }
while ( expresie )
Se executa { instructiuni } , se evalueaza expresie, daca este adevarata se executa din nou
{instructiuni}, iar daca este falsa executia instructiunii do se termina.
Exemplu: Se citeste numarul natural n si se afiseaza suma primelor n numere naturale
#include<iostream.h>
#include<conio.h>
void main()
{
long n, tasta,s=0,i=1;
while(tasta!='q')
{
clrscr();
cout<<"n=";cin>>n;
do
{
s=s+i; i=i+1;
}
while(i<=n);
cout<<"Suma primelor n numere naturale este"<<" "<<s<<endl;
cout<<"Pentru a continua apasa o tasta"<<endl<<"Pentru a iesi din program apasa tasta
'q'";
tasta=getch();
}
}
6. INSTRUCTIUNEA FOR
Se utilizeaza cel mai fracvent pentru programarea ciclurilor cu test initial.
Forma generala:
for( eINITIALIZARE; eTEST; eINCREMENTARE) instructiune
eINITIALIZARE - se evalueaza o singura data pentru initializarea variabilei de ciclare inaintea primului
ciclu ;
eTEST - este evaluata inaintea fiecarui ciclu pentru a testa daca se executa instructiunea
subordonata si reprezinta conditia de iesire din ciclu;
eINCREMENTARE - se evalueaza la sfirsitul fiecarui ciclu pentru incrementarea variabilei de ciclare.
Principiul de executie:
Se evalueaza eINITIALIZARE (numai la prima rulare), se evalueaza eTEST , daca este adevarata se
executa instructiunea subordonata for, se evalueaza eINCREMENTARE si se revine la evaluarea
expresiei eTEST. Daca eTEST este falsa se trece la urmatoarea instructiune (se termina executarea
instructiunii for)
Observatie. Daca expresia eTEST 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
12
Exemplul 1. Se introduce de la tastatura numarul n si se calculeaza suma si produsul primelor n
numere
#include<iostream.h>
#include<conio.h>
void main()
{ N2
int i,n,tasta;
long double a,b;
while(tasta !='q') {
clrscr();
cout<<"Introduceti numarul"<<"";cin>>n;
a=b=1;
for(i=2;i<=n;i++)
{a*=i;b+=i;}
cout<<"suma="<<b<<endl;cout<<"produsul="<<a<<endl;
cout<<"Pentru iesire apasa tasta q";
tasta=getch(); }
}
Observatie. Variabila n poate fi definita la inceput fara a mai trebui introdusa de la tastatura
utilizand #define n valoare (comanda se scrie inainte de void main() )
#include<iostream.h>
#include<conio.h>
void main()
{
char litere;
for(litere='A';litere<='Z';litere++)cout<<litere<<" ";
getch();
}
Exemplul3. Afiseaza toate patratele si radicalii numerelor naturale pina la numarul n introdus de la
tastatura.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
float i,n,a,b;
clrscr();
cout<<"n=";cin>>n;
a=b=0;
for(i=1 ;i<=n;i++) {
a=sqrt(i) ; b=i*i;
cout<<"Patratul numarului"<<" "<<i<<" = "<<b<<'\t'<<
"Radicalul numarului"<<" "<<i<<" ="<<a<<endl;
}
getch();
}
13
7. INSTRUCTIUNI DE SALT
7.1. INSTRUCTIUNEA BREAK
Se utilizeaza pentru intreruperea neconditionata a unei secvente si numai in 2 contexte:
1) in instructiunea switch pentru a marca incheierea secventei de instructiuni asociate unei
selector case ;
2) intr-o instructiune de ciclare (while, do while, for) pentru a determina iesirea fortata din ciclul
respectiv.
Observatie. Instructiunea break intrerupe executia de ciclare doar a blocului in care se afla, fara a
afecta celelalte blocuri de ciclare in cazul ciclurilor imbricate.
7.2. INSTRUCTIUNEA CONTINUE
Se utilizeaza numai in blocul instructiunilor de ciclare pentru a intrerupe executia iteratiei curente
(sarind peste instructiunea urmatoare) dupa care:
- in cazul instructiunilor while si do while se continua cu testarea conditiei de ciclare;
- in cazul instructiunii for se continua cu evaluarea expresiei eINCREMENTARE (actualizarea contorilor) si
apoi a expresiei eTEST (testarea conditiei de ciclare)
7.3. INSTRUCTIUNEA GO TO
Are ca efect intreruperea secventei curente si continuarea executiei de la instructiunea care este
specificata dupa go to.
Observatie. Instructiunile de salt se utilizeaza rar in C++ deoarece incalaca principiile programarii
structurate, pentru abandonarea executiei unui ciclu se utilizeaza in general functiile exit() sau
return.
14
#include<iostream.h>
#include<conio.h>
void main()
{
int a[3][3]={11,12,13,21,22,23,31,32,33};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
{
cout<<a[i][j]<<' ';
}
cout<<endl;
}
getch();
}
Exemplul2. Se introduce numarul de linii m si numarul de coloane n ale unei matrici, se intoduc
elementele matricii apoi se afiseaza matricea creata.
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j,m,n,a[10][10];
clrscr();
cout<<"Introduceti numarul de linii"<<" "<<"n=";cin>>m;
cout<<"Introduceti numarul de coloane"<<" "<<"n=";cin>>n;
cout<<"Intoduceti elementele"<<endl;
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) {
cout<<"a["<<i<<j<<"]=", cin>>a[i][j];
}
}
cout<<"Matricea intodusa are forma:"<<endl<<'\t'<<'\t'<<'\t'<<'\t';
for(i=1;i<=m;i++){
for(j=1;j<=n;j++) {
cout<<a[i][j]<<' ';
}
cout<<endl<<'\t'<<'\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()
15
{
int n,i,a[100],b[100];
clrscr();
cout<<"Introduceti numarul de componente n="<<" ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<"a["<<i<<"]=";cin>>a[i];}
for(i=1;i<=n;i++) b[i]=a[i];
cout<<endl;
for(i=1;i<=n;i++) cout<<"b["<<i<<"]="<<b[i]<<'\t';
getch();
}
#include<iostream.h>
#include<conio.h>
void main()
{
int max,min,n,i,v[100];
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];};
max=v[0];
min=v[0];
16
getch();}
Exemplu.
#include<iostream.h>
#include<conio.h>
void main()
{
int v[10],i,j,n,gasit;
cout<<"introduceti numarul de elemente n="<<" "; cin>>n;
for(i=1;i<=n;i++)
{ cout<<"v["<<i<<"]="; cin>>v[i]; }
gasit=0;
for(i=1;i<=n ;i++)
for(j=i+1;j<=n ;j++)
if(v[i]==v[j]) gasit=1;
getch();
1.2.3. MULTIMI.
In cadrul unei multimi un element apare o singura data (o multime nu poate avea 2 valori egale).
Elementele unei multimi sunt memorate intr-o variabila de tip vector.
Aplicatii:
Exemplul 1. Se citeste o multime A care contine n elemente numere intregi , se citeste un numar
intreg e , se verifica daca numarul e apartine multimii a.
#include<iostream.h>
#include<conio.h>
void main()
17
{
int A[10],n,e,i,j,gasit;
clrscr();
cout<<"Introduceti numarul de elemente n a multimii"<<" "<<"n=" ; cin>>n;
for(i=1;i<=n;i++) { cout<<"A["<<i<<"]="; cin>>A[i]; }
cout<<"Introduceti numarul considerat"<<" "<<"e="; cin>>e;
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<<" apartine multimii";
else cout<<"Numarul"<<" "<<e<<" nu apartine multimii";
getch();
}
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,z,k,gasit;
clrscr();
cout<<"Specificati numarul de elemente a multimii A"<<" "<<"m="; cin>>m;
cout<<"Specificati numarul de elemente a multimii B"<<" "<<"n="; cin>>n;
cout<<"Introduceti elementele multimii A"<<endl;
for(i=1;i<=m;i++) { cout<<"A["<<i<<"]="; cin>>A[i];};
cout<<"Introduceti elementele multimii B"<<endl;
for(j=1;j<=n;j++) { cout<<"B["<<j<<"]="; cin>>B[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"<<" "<<"={"<<" ";
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,k,gasit;
18
clrscr();
cout<<"Specificati numarul de elemente a multimii A"<<" "<<"m="; cin>>m;
cout<<"Specificati numarul de elemente a multimii B"<<" "<<"n="; cin>>n;
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];
}
getch();
}
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,k,gasit;
clrscr();
cout<<"Specificati numarul de elemente a multimii A"<<" "<<"m="; cin>>m;
cout<<"Specificati numarul de elemente a multimii B"<<" "<<"n="; cin>>n;
cout<<"Introduceti elementele multimii A"<<endl;
for(i=1;i<=m;i++) { cout<<"A["<<i<<"]="; cin>>A[i];};
cout<<"Introduceti elementele multimii B"<<endl;
for(j=1;j<=n;j++) { cout<<"B["<<j<<"]="; cin>>B[j];};
k=0;
for(i=1;i<=m;i++)
{
gasit=0;
for(j=1;j<=n;j++)
if(A[i]==B[j])gasit=1;
19
if(gasit) C[k++]=A[i];
}
#include<iostream.h>
#include<conio.h>
void main()
{
int m,n,i,j;
char A[10],B[10];
clrscr();
cout<<"Specificati numarul de elemente a multimii A"<<" "<<"m="; cin>>m;
cout<<"Specificati numarul de elemente a multimii B"<<" "<<"n="; cin>>n;
cout<<"Introduceti elementele multimii A"<<endl;
for(i=1;i<=m;i++) { cout<<"A["<<i<<"]="; cin>>A[i];};
cout<<"Introduceti elementele multimii B"<<endl;
for(j=1;j<=n;j++) { cout<<"B["<<j<<"]="; cin>>B[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 descrescatoare.
a) Sortarea prin selectarea minimului(maximului).
- se determina minimul dintre toate valorile retinute incepand cu pozitia 1 si acesta este trecut pe
pozitia1 prin interschimbarea continuturilor dintre cele 2 componente
- se determina minimul dintre valorile ratinute incepand cu pozitia 2 si acesta este trecut pe
pozitia 2 prin interschimbarea continuturilor dintre cele 2 componente
......................................................
- se determina minimul dintre valorile retinute incepand cu penultima pozitie si acesta este trecut
pe penultima pozitie.
Exemplul1. Se citeste o multime de numere si se listeaza valorile in ordine crescatoare si in ordine
descrescatoare
#include<iostream.h>
#include<conio.h>
int a[10],n,i,j,k,min,m;
void main()
{
clrscr();
cout<<"Introduce numarul elementelor"<<" "<<"n=";cin>>n;
for(i=1;i<=n;i++) { cout<<"a["<<i<<"]=";cin>>a[i];};
for(i=1;i<=n-1;i++)
{
min=a[i];k=i;
20
for(j=i+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++) cout<<a[i]<<" ";
1 3 2 4
A[1] A[2] A[3] A[4]
- se efectueaza a doua parcurgere si se schimba A[2] cu A[3] (deoarece 3 > 2), iar vectorul va
arata astfel:
1 2 3 4
A[1] A[2] A[3] A[4]
- 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,gasit;
void main()
{
clrscr();
cout<<"Introduce numarul de elemente"<<" "<<"n=";cin>>n;
21
for(i=1;i<=n;i++) {cout<<"a["<<i<<"]=";cin>>a[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);
a) Interschimbarea a 2 linii
for(j=1;j<=n;j++) {
temp=a[x][j];
a[x][j]=a[y][j];
a[y][j]=temp ;
}
b) Interschimbarea a 2 coloane
for(i=1;i<=n;i++) {
temp=a[i][x];
a[i][x]=a[i][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();
cout<<"Introduceti numarul de linii"<<" "<<"n=";cin>>m;
cout<<"Introduceti numarul de coloane"<<" "<<"n=";cin>>n;
cout<<"Intoduceti elementele"<<endl;
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) { cout<<"a["<<i<<j<<"]=", cin>>a[i][j];}}
22
for(j=1;j<=n;j++) {cout<<a[i][j]<<' '; } cout<<endl; }
cout<<endl;
2. SIRURI DE CARACTERE
2.1. Citirea / scrierea sirurilor de caractere.
Inainte de citirea unui sir de caractere acesta trebuie declarat. Pentru a declara un sir de
caractere se utilizeaza functia:
char nume sir[nr.elemente sir]
Exemplu: char sir1[100] - sa declarat sirul cu numele sir1 care poate lista 100 caractere
Pentru citirea sirurilor de caractere se utilizeaza functia:
cin.get(vector de caractere, int nr, char='\n')
Observatie. Dupa tastarea unui sir de caractere , la apasarea tastei Enter se intrerupe citirea .
Daca dorim sa introducem mai multe siruri de caractere se utilizeza cin.get() astfel
char s1[20],s2[20];
cin.get(s1,20];
cin.get();
cin.get(s2,20);
cout<<s1<<endl<<s2;
Daca ar lipsii functia cin.get() a doua citire nu ar putea fi efectuata, deoarece la apasarea tastei
Enter in memorie este pastrat caracterul '\n' , 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();
cout<<s1<<endl<<s2;
getch();
}
23
Observatie. Se pot scrie mai multe siruri de cuvinte daca declaram o matrice de tip char
char a[10][20] se pot scrie 10 siruri cu cate 20 caractere fiecare sir (fara spatiu)
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main(){
char a[10][20]; int n,i;
cout<<"Nr.cuvinte ";cin>>n;
for(i=0;i<n;i++) cin>>a[i];clrscr(); for(i=0;i<n;i++) cout<<a[i]<<endl;
getch();}
24
void main()
{
char s1[20]="Limbajul Turbo C++",s2[20]=" si Limbajul C++";
strcat(s1,s2);
cout<<s1;
getch();
}
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]="Limbajul Turbo C++";
cout<<strchr(s1,'T');
getch();
}
Exemplul2: Se tipareste indicele primei aparitii a caracterului 'u'
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]="Limbajul Turbo C++";
cout<<strchr(s1,'u')-s1;
getch();
}
Returneaza valoarea 6
25
char s1[20]="Limbajul Turbo C++";
cout<<strrchr(s1,'u')-s1;
Returneaza valoarea 10
2.2.7. Functia strcmp
Forma generala strcmp(sir1, sir2 )
Functia are rolul de a compara 2 siruri de caractere si va returna valoarea:
< 0 daca sir1<sir2
= 0 daca sir1=sir2
> 0 daca sir1>sir2
Exemplu1. Se compara sirul a cu sirul b si se listeaza relatia dintre cele 2 siruri astfel:
- daca primele n caractere sunt identice se compara caracterele n+1
- daca caracterul n+1 al sirului a este situat alfabetic inaintea cracterului n+1 al sirului b
se afiseaza a<b
- daca caracterul n+1 al sirului a este situat alfabetic dupa cracterul n+1 al sirului b
se afiseaza a>b
- daca primul caracter al sirului a este situat alfabetic inaintea primului caracter al sirului b se
afiseaza a<b indiferent de lungimea celor 2 siruri
- daca primul caracter al sirului a este situat alfabetic dupa primul caracter al sirului b se afiseaza
a>b indiferent de lungimea celor 2 siruri
Exemplul1:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char a[20],b[20];
int semn;
cout<<"Introduceti sirul a: "; cin>>a;
cout<<"Introduceti sirul b: "; cin>>b;
semn=strcmp(a,b);
26
for(i=0;i<n;i++) cin>>a[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);
getch();
}
27
Exemplu:
#include <stdlib.h>
#include <iostream.h>
#include<conio.h>
void main() {
float f;
char *str = "12345.67";
f = atof(str);
cout<<"string = "<<str<<endl<<"float = "<< f;
getch(); }
Un exemplu de stuctura:
struct elev
{ char nume[15],prenume[20];
int telefon;
float media;
}inr1,inr2;
Exemplu:
#include <stdlib.h>
#include <iostream.h>
#include<conio.h>
struct elev
{
char nume[15],prenume[20],clasa[10];
int tel;
28
float med;
} inr;
void main()
{
cout<<"Nume ";cin>>inr.nume;
cout<<"Prenume ";cin>>inr.prenume;
cout<<"Telefon ";cin>>inr.tel;
cout<<"Clasa ";cin>>inr.clasa;
cout<<"Media generala ";cin>>inr.med;
cout<<"Am citit:"<<endl
<<inr.nume<<" "<<inr.prenume<<endl
<<inr.tel<<endl
<<inr.clasa<<endl
<<inr.med;
getch();
}
struct
{ int clasa;
float note[20];
} sit1,sit2;
int varsta;
};
Tipul structurat elev1 subordoneaza , pe langa alte tipuri, doua structuri sit1 si sit2.
F. FISIERE
Fisierul este o colectie de date de acelasi fel stocate pe un suport extern care are un mune si o
extensie (al carei nume este in functie de tipul fisierului).Ex: nume.exe (fisier executabil) ; nume.dbf
(fisier baza de date,utilizat in fox), etc.
1. FISIERE TEXT
Aceste fisiere se caracterizeaza prin urmatoarele:
- datele sunt memorate sub forma unei succesiuni de caractere
- caracterele sunt memorate in codul ASCII
- fisierul 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 fisierului
29
1.1. Citiri / scrieri cu format
Acestea sun caracterizate prin:
- latime - width - se utilizeaza la scriere si are rolul de a stabili numarul de caracatere utilizate
pentru afisarea unei date;
- precizie - precision - se utilizeaza la scriere atunci cand se foloseste o variabila reala, stabileste
numarul de zecimale care vor fi afisate pentru valoare;
- caracterul de umplere - fill - se utilizeaza la scriere in cazul in care data propriuzisa ocupa mai
putini octeti decat latimea si precizeaza caracterul care se afiseaza in spatiile neocupate;
- alinierea - left sau right - se utilizeaza cand data ocupa mai putin decat latimea si se precizeaza
unde anume sa fie afisata - stanga sau drepta -
- salt sau nu peste caractere albe - se utilizeaza la citire
Afisarea se poate face pe 20 pozitii ; pe pozitiile ramase libere se afiseaza caracterul $ , variabila
a va fi afisata cu 2 zecimale.
*Pentru formatarea intrarilor / iesirilor se utilizeaza variabila:
flags care utilizeaza comenzile:
- skipws - sunt sarite caracterele albe care preced valoarea ce trebuie citita
- left - datele se tiparesc aliniate la stanga
- right - datele se tiparesc aliniate la dreapta
- internal - se fiseaza semnaul la stinga si numarul la drepta
- dec - conversie in zecimal
- oct - conversie in octal
- hex - conversie in hexazecimal
- showbase - afisarea indicatorului de baza
30
- showpoint - forteaza afisarea punctului zecimal
- uppercase - in cazul afisarii in hexazecimal se vor utiliza literele mari (A,B,..F)
- showpos - valorile afisate sunt precedate de semn
- scientific - afisarea valorilor se face prin utilizarea formei stiintifice (1e-8)
- fixed - afisarea valorilor se face prin utilizarea formai normale
Exemplu:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<math.h>
void main()
{
double a,b,c,d,e,f;
cout<<"Introduceti primul numar "<<" "<<"a=";cin>>a;
cout<<"Introduceti al doilea numar "<<" "<<"b=";cin>>b;
c=a/b;
d=a*b;
e=sqrt(d);
f=d*d;
cout<<endl;
31
1.2. Declararea fisierelor text memorate pe suport magnetic.
Cand se lucreaza cu fisiere pe suport magnetic in program trebuie inclusa directiva:
#include<fstream.h> daca utilizam acesta directiva poatei fi scoasa <iostream.h>
Pentru a lucra usor asupra fisierelor sunt definite comenzile:
- in - deschide fisierul pentru citire
- out - deschide fisierul pentru scriere
- ate - salt la sfirsitul fisierului dupa deschiderea acestui
- app - deschide fisierul pentru a scrie la sfirsitul lui
- trunc - daca fisierul care se deaschide exista in locul lui se creaza altul
- nocreate - daschide fisierul daca acesta exista (nu se creaza altul)
- noreplace - daca fisierul exista el poate fi deschis numai pentru consultare
- binary - fisier binar. Se utilizeaza constructorul inplicit al clasei ofstream(); apoi se utilizeaza
metoda open in forma generala
32
citeste ;
prelucreaza ;
}
Pentru a preciza sfirsitul de fisier care se testeaza in paranteza de dupa while se scrie:
! nume_fisier.eof()
Atentie! Functia eof() nu citeste ci doar testeaza daca anterior a fost detectat sfarsitul de
fisier
Exemple de programe:
Exemplul1. Creez un fisier 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 spatiu.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(cin>>x) f<<x;
f.close();
}
Exemplul2. Creez acelasi fisier 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<iomanip.h>
#include<conio.h>
void main()
{
fstream f("d:\\fis.txt",ios::out);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f("d:\\fis.txt",ios::in);
char x;
while(f>>resetiosflags(ios::skipws)>>x) cout<<x;
f.close();
getch();
}
33
Exemplul4. Scriu la sfirsitul fisierului creat la exemplul2
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f("d:\\fis.txt",ios::app);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
char fisier[10];
cout<<"Numele fisierului este ";cin>>fisier;
fstream f(fisier,ios::out);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
Observatie: Cand scriu numele fisierului trebuie sa specific si locatia lui astfel:
c:\nume_fisier.txt sau d:\nume_fisier.txt
#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];
f>>resetiosflags(ios::skipws)>>c ;cout<<c;
f.seekp(0,ios::end);
strcpy(c,"FINISH");
f<<resetiosflags(ios::skipws)<<c;
f.close();
getch();
}
34
Sunt definite trei constante:
end - sfarsit de fisier
beg - inceput de fisier
cur - pozitia curenta in fisier
& Functia : nume_fisier.tellp() - returneaza pozitia pointerului la un moment dat.
#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<<"Introduce numarul n= ";cin>>n;
for(i=1;i<=n;i++) {
f<<setw(10)<<oct<<i;
f<<setw(10)<<dec<<i;
f<<setw(10)<<setiosflags(ios::uppercase)<<hex<<i<<endl;
};
f.close();
getch();
}
2. Fisiere binare.
Caracteristici:
- fisierele sunt alcatuite din mai multe inregistrari de acelasi tip (int , struct, etc)
- datele sunt memorate in format intern, iar fisierele se termina tot cu EOF
- pentru deschiderea unui fisier binar se utilizeaza ios::binary
- fisierele lucreaza cu variabile de tip pointer. O astfel de variabila retine o anumita adresa a unei
alte variabile. Ea se declara in felul urmator:
int a, *adr_a=&a , variabila *adr_a a fost initializata cu adresa variabilei a
Variabila *adr_a este de tip poiner
Pentru a obtine 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
- scrierea unei variabile de tip pointer adr_p intr-un fisier se face utilizand:
nume_fisier.write((char*) adr_p,sizeof(p))
- citirea unei variabile de tip poiter adr_p dintr-un fisier se face utilizand:
nume_fisier.read((char*)adr_p,sizeof(p))
Prin aceste comenzi de fapt se scrie respectiv citeste continutul variabilei p , numarul de
caractere scrise sau citite fiind date de lungimea variabilei p prin comanda sizeof(p).
Exemplul1. Se creaza un fisier binar cu n inregistrari in care fiecare inregistrare retine datele
personale a unei persoane(numele,prenumele,ocupatia,varsta)
35