Documente Academic
Documente Profesional
Documente Cultură
Vocabular pag 3
Citirea,afisarea si atribuirea pag 3
Fisiere
Vectori
Matrici
Functii pag 32
Tipul string
Tipul sir de caractere cu char
Tipul struct
Liste alocate static
Pointeri
http://www.dponline.ro/articol.php?idarticol=77
Codeblocks
#include <iostream> //include fisierul iostream(in out stream) in program. Fisierul contine
// declaratiile unor functii pt. operatii de intrare/ iesire
using namespace std; //spatiul de nume std grupeaza logic functii si clase specifice P.O.O
} //sfarsitul programului
Tipuri standard de date: 1)Tipul INTREG 100 , -100 (char,int,long, long long,unsigned int..)
2)Tipul REAL ex. 2.1231, -123.32, 102(float,double,long double)
Identificatori - nume de costante , variabile sau functii - incep cu o litera sau cu _ urmata de litere
sau cifre. Ex: a12s, as33, _007
Citirea,afisarea si atribuirea
Afisarea (cout) – realizeaza afisarea pe ecran a unui mesaj si/sau a unei variabile
1)cout<<"Salut"; //afiseaza cuvantul salut pe ecran
2)cout<<s; //afiseaza continutul variabilei s pe ecran
3)cout<<"suma este: "<<s<<endl;
//daca variabila s are valoarea 201 se afiseaza pe ecran „ suma este: 201” si apoi cursorul
trece la rand nou
4)cout<<"suma este: "<<s<<endl <<"produsul este: "<<p;
//afiseaza suma este: 201
produsul este: 330 (pe randuri diferite din cauza lui „endl”)
Atribuirea ( = )
x=2; // x primeste valoarea 2
a=a+1; //a creste cu 1
s=s+x; //s creste cu x
p=p*x; //p creste de x ori
x=y; // lui x i se atribuie valoarea lui y
Probleme
1.Suma a doua numere
#include <iostream>
using namespace std;
int a,b,s;
int main()
{
cout << "dati doua numere";
cin>>a>>b;
s=a+b;
cout<<"suma este:"<<s;
return 0;
}
1.1)Suma a trei numere
1.2)Produsul a 4 numere
2.Aria unui dreptunghi
#include <iostream>
using namespace std;
int l,L,aria;
int main()
{
cout << "dati latimea si lungimea dreptunghiului";
cin>>l>>L;
aria=l*L;
cout<<"aria dreptunghiului este:"<<aria;
return 0;
}
2.1)Gigel este un mare mincinos. El spune in fiecare zi cate o minciuna si drept urmare ii creste
nasul cu y cm dupa fiecare minciuna. Initial lungimea nasului lui Gigel este de x cm. Se cere sa se
afiseze care este lungimea nasului lui Gigel dupa n zile, stiind ca el spune in fiecare zi cate o
minciuna.
13%2=1
5%2= 1
125%2=1
x%2==1 => x este impar
x%7==0 => x se divide cu 7
x%y==0 => x se divide cu y
( / )div = catul
13/2=6
5/2= 2
125/2=62
36/10=3
128/10=12
x/10 =x fara ultima cifra
x/100=???
12354/100=123
Ex:
#include <iostream>
using namespace std;
long long a,b,c,s,p;
int main()
{
cout<<"Dati doua numere";
cin>>a>>b;
cout<<"a mod b este:"<<a%b;
return 0;
}
/ (impartire sau div(=câtul))
1) / este „div” - atunci cand ambele numere din operatie sunt intregi
#include <iostream>
using namespace std;
int b , a, x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / b;
cout << "x=" << x << endl;
return 0;
}
Pentru a=101 si b=20 se afiseaza 5
2) / „este impartire” - atunci cand cel putin unul din numere este un numar real
#include <iostream>
using namespace std;
float b , a, x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / b;
cout << "x=" << x << endl;
return 0;
}
Pentru a=101 si b=20 se afisaza 5.05
Daca avem int a; si float b; sau float a; si int b; rezultatul afisat va fi acelasi.
Impartirea a doua numere intregi se face prin conversia catre un numar real cu comanda „(float)”
#include <iostream>
using namespace std;
int a,b;
float x;
int main() {
cout << "dati a si b";
cin >> a >> b;
x = a / (float)b; //sau (float)a/b; sau (float)a/(float)b;
cout << "x=" << x << endl;
return 0;
}
Daca a=101 si b=20 se afisaza 5.05
In C++ se pot face atribuiri de genul:
1) int <-float
#include <iostream>
using namespace std;
int a;
float x;
int main() {
cout << "dati x";
cin >> x;
a=x;
cout << "a=" << a << endl;
return 0;
}
Daca x=2.35 se afiseaza 2 (a primeste doar valoarea 2 nu si 0.35)
2) float <- int
Daca la programul anterior se face atribuirea float x=a; (se citeste a, int a=100) in x se va memora
100.00
double b;
??? b-(int)b
b) Operatori relationali
> (mai mare)
< (se subintelege!!!)
>= (mai mare si egal)
<= (mai mic si egal)
== (egal !!!!!!!)
!= (diferit)
c) Operatori de incrementare/decrementare
++ (incrementare cu 1 adica creste cu 1)
--(decrementare cu 1 adica scade cu 1)
a++ ( explicatie: a=a+1; a creste cu 1)
++a (a creste cu 1)
a-- ( explicatie: a=a-1; a scade cu 1)
--a (a scade cu 1)
#include <iostream>
using namespace std;
int a,b;
int main() {
cout << "dati a si b";
cin >> a>>b;
a++;b--; // sau echivalent ++a;--b;
cout << "a="<<a << endl;
cout << "b="<<b << endl;
return 0;
}
Daca se inlocuieste s=b+(++a); cu s=b+(a++); se afiseaza 120 (se face mai intai s=b+a si apoi se face
a++)
Ex 1:
a=3; a=3;
b=++a; => b=4 si a=4 a++;b=a;
ex2:
a=3; a=3;
b=a++; => b=3 si a=4 b=a;a++;
d) Operatori logici
! not (negat)
&& and (si)
|| or (sau)
Ex: a<=b && a<c (explicatie: a<=b si a<c)
c!=a || c!=b (c diferit de a sau c diferit de b)
!a (explicatie: not a)
!(a<=b) a>b (atentie !!!!!!!!!!!!!)
!(a<b) a>=b (atentie !!!!!!!!!!!!!)
!(a!=b) a==b (atentie !!!!!!!!!!!!!)
e) Operatori de atribuire
= se da (ex: a=x; a=3;)
*= (p=p*a p*=a)
+= (s=s+a s+=a)
-= (s=s-a s-=a)
/= (x=x/10 x/=10)
%= (cif=cif%10 cif%=10)
&=
|=
^=
Tipul char
- Se foloseste pentru memorarea unui caracter
- (int) in fata unui caracter returneza codul ASCII a caracterului
- (char) in fata unui numar returneaza caracterul cu codul ASCII corespunzator numarului
Ex1:
#include <iostream>
using namespace std;
char a,b,c;
int main()
{
cout<<"dati un caracter " ;
cin>>a;
cout <<"caracterul citit este: " <<a<<" si are codul ASCII "<<(int)a<<endl;
b=82; // se memoreaza caracterul cu codul ASCII 82(82 este codul ASCII a R)
cout<<b<<" are codul ASCII "<<(int)b<<endl; //afiseaza caracterul cu codul ASCII 82
c='*'; //se memoreaza caracterul *
cout<<c<<" are codul ASCII "<<(int)c<<endl; //afiseaza caracterul * si codul sau ASCII 42
return 0;
}
Ex2:
#include <iostream>
using namespace std;
int x;
int main()
{
cout<<"dati un numar intre 0 si 127 " ;
cin>>x;
cout <<"caracterul cu codul ASCII introdus este: " <<(char)x<<endl;
x=x-1;
cout<<"caracterul care se afla inaintea sa este: " <<(char)x<<" "<<endl;
return 0;
}
Ex3:
//afisati cel mai mare caracter din doua citite, si caracterul dinainte si dupa primul caracter citit
#include <iostream>
using namespace std;
char a,b,c,d;
int main()
{
cout<<"dati doua caractere " ;
cin>>a>>b;
if(a>b)cout<<"caracterul mai mare este "<<a;
else cout<<"caracterul mai mare este "<<b;
cout<<endl;
c=a-1;d=a+1;
cout<<"caracterul care se afla inaintea sa este: " <<c<<" si cel dupa el este "<<d<<endl;
return 0;
}
/* for(char c=1;c<127;c++){
cout<<c<<" -> "<<(int)c<<" ";
if(c%8==0)cout<<endl;
}*/
f) Operatori logici pe biti – actioneaza la nivel de bit pe numere (adica pe reprezentarea
numarului in baza 2 !!!)
<< deplasare la stanga
>> deplasare la drepta
& si
| sau
^ sau exclusiv(xor)
~ not
A b a&b a|b a^b
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
~1=0
~0=1
Instructiunea IF
f. generala (variante a),b),c) )
In C++ 0 este fals si ≠0 adevarat ( 0 =fals 1=adevarat, -128 =adevarat, 65201= adevarat)
Tabel pentru conditii logice: 0 false 1 true
a b a&&b(and) a||b(or)
F F F F
F A F A
A F F A
A A A A
#include <iostream>
using namespace std; #include <iostream>
int a,b,c; using namespace std;
int main() int a, b, c, maxi;
{ int main() {
cout << "Dati valori pentru a, b si c" << endl; cout << "dati 3 numere";
cin >>a>>b>>c; cin >> a >> b >> c;
if(a>=b && a>=c) cout<<"Maximul este a"<<endl; maxi = a;
if(b>=a && b>=c) cout<<"Maximul este b"<<endl; if (maxi < b) maxi = b;
if(c>=a && c>=b) cout<<"Maximul este c"<<endl; if (maxi < c) maxi = c;
return 0; cout<<"Max este:"<<maxi;
}var 3 cout<<max(max(a,b),c); return 0;
}
#include <iostream>
using namespace std;
int a,b,c,maxi;
int main()
{
cout << "Dati valori pentru a, b si c" << endl;
cin >>a>>b>>c;
if(a>=b && a>=c) maxi=a;
if(b>=a && b>=c) maxi=b;
if(c>=a && c>=b) maxi=c;
cout<<"Maximul este "<<maxi<<endl;
return 0;
}
#include <iostream>
using namespace std;
int h, h1, h2, m, m1, m2, s, s1, s2;
int main() {
cout << "Dati valori pentru h1,h2,m1 si m2,s1,s2:" << endl;
cin >> h1 >> m1 >> s1 >> h2 >> m2 >> s2;
s = s1 + s2;
m = m1 + m2;
h = h1 + h2;
if (s >= 60) {
s = s - 60;
m = m + 1;
}
if (m >= 60) {
m = m - 60;
h = h + 1;
}
cout << h << " " << m << " " << s << endl;
return 0;
}
//var 2
#include <iostream>
return 0;
}
//afisati cifra maxima dintr-un numar(cu maxim 3 cifre)
using namespace std;
int x, c1, c2, c3, maxi;
int main()
{ cout<<"dati valoare lui x";
cin>>x;
if (0<=x && x<=9) maxi=x;
if (10<=x && x<=99) { c1=x%10;
c2=x/10;
if (c1>c2) maxi=c1;
else maxi=c2;
}
if (100<=x && x<=999) {c1=x%10;
c2=x/10%10;
c3=x/100;
if (c1>c2) maxi=c1;
else maxi=c2;
if (maxi<c3) maxi=c3;
}
cout << "cifra maxima este:" <<maxi<< endl;
return 0;
}
//fie un numar de doua cifre. Afisati cel mai mare numar
//ce se poate forma cu cifrele sale
//ex: x=29 => 92
//x=71 => 71
#include <iostream>
using namespace std;
int x, c1, c2,nr;
int main()
{ cout<<"dati valoare lui x";
cin>>x;
c1=x%10;
c2=x/10;
if (c1>c2) nr=c1*10+c2;
else nr=c2*10+c1;
cout << "numarul maxim este:" <<nr<< endl;
return 0;
}
Instructiuni repetitive (for, while, do while)
for
forma generala:
s=0;
for(i=1;i<=100;i++) s+=i; //sau s=s+i;
cout<<”suma este: ”<<s;
Probleme:
//p=2*4*..*n
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,p; int i,n;
int main() float s;
{ int main()
cout<<"Dati un numar n par: "; {
cin>>n; cout<<"Dati n: ";
p=1; cin>>n;
for(i=2;i<=n;i=i+2) p*=i; //sau p=p*i; s=0;
cout<<"Produsul nr pare din sir este:"<<p; for(i=1;i<=n;i++) s+=(float)1/i;
return 0; cout<<"Suma este:"<<s;
} return 0;
}
3 .S=2+5+8+11+…..+n 4.S=23+43+63+…+n3
#include <iostream>
using namespace std; #include <iostream>
int i,n,s; #include<cmath>
int main() using namespace std;
{ int i,n,s;
cout<<"Dati un numar n par: "; int main()
cin>>n; {
s=0; cout << "Dati un nr n:";
for(i=2;i<=n;i=i+3) s+=i; cin>>n;
cout<<"Suma este:"<<s; for(i=2;i<=n;i=i+2) s+=i*i*i;
return 0; //s=s+pow(i,3);
} cout<<"Suma este:"<<s;
return 0;
}
9. Pentru un sir de n numere aflati minimul par. 10. Pentru un sir de n numere aflati maximul.
//minimul par dintr-un sir de n //Maximul dintr-un sir
#include <iostream>
#include <iostream> using namespace std;
using namespace std; int i,n,maxi,x;
int x,mini,n,i; int main()
int main() {
{ cout << "Dati un nr n:";
cout << "Dati un nr n: "; cin>>n;maxi=-20000000;
cin>>n; mini=2000000000; for(i=1;i<=n;i++){
for(i=1;i<=n;i++){ cin>>x; cin>>x;
if(x%2==0 && x<mini) mini=x; if(x>maxi) maxi=x;
}
} cout<<"Maximul este:"<<maxi;
if(mini==2000000000) return 0;
cout<<"Nu exista minim par"; }
else cout<<"Minimul par este:"<<mini;
return 0;
}
#include <iostream>
using namespace std;
int x, i, n, kn, kp, ko;
int main() { 12.Media aritmetica a numerelor pozitive dintr-
cout << "Dati un nr:"; un sir.
cin >> n; //media aritmetica a nr. pozitive dintr-un sir
for (i = 1;i <= n;i++) {
cin >> x; #include <iostream>
if (x > 0) kp = kp + 1; //kp++; using namespace std;
if (x == 0) ko = ko + 1; //ko++; int i, n, x, s, k;
if (x<0) kn = kn + 1; //kn++; float ma;
} int main() {
cout << "Nr el. pozitive este:" << kp<< endl; cout << "Dati un nr:";
cout << "Nr el. negative este:" << kn<< endl; cin >> n;
cout << "Nr el. nule este:" << ko; for (i = 1;i <= n;i++) {
return 0; cin >> x;
} if (x>0) { s += x; k++; }
}
ma = (float)s / k;
cout << "ma=" << ma;
return 0;
}
Tema
S=1/n + 2/(n-1) + 3/(n-2) +..+ n/1
S=100+98+96+94+….+12
S=1/(1*1)+ 1/(2*2)+ 1/(3*3)+.. +1/(n*n)
S=(1)*(1+2)*(1+2+3)*..*(1+2+3+…+n)
13.Divizorii unui numar x.
#include <iostream>
using namespace std;
int x, d, n;
int main()
{
cout<<"dati x";
cin>>x;
for (d=1; d<=x; d++)
if (x%d==0) cout<<d<<" ";
return 0;
}
14.Fie doua numere. Afisati numarul ce are cei mai multi divizori.
15.Verificati daca un numar este perfect.
16.Verificati daca un numar este prim.
17. Media aritmetica a numerelor pare si media 18. Fie doua numere. Afisati numarul ce are cei
aritmetica a numerelor impare. mai multi divizori.
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,x,sp,si,kp,ki; int i,n,x,y,k1,k2;
float map,mai; int main()
int main() {
cout<<"Dati un nr x:";
{
cin>>x;
cout << "Dati un nr n:";
cout<<"Dati un nr y:";
cin>>n; cin>>y;
for(i=1;i<=n;i++){ for(i=1; i<=x; i++)
cin>>x; if(x%i==0) k1++;
if(x%2==0){ sp+=x; for(i=1; i<=y; i++)
kp++;} if(y%i==0) k2++;
if(k1>k2)
else { si+=x; cout<<"x are mai multi divizori";
ki++;} else if(k1==k2) cout<<"x si y au acelasi nr de
} divizori";
map=(float)sp/kp; else cout<<"y are mai multi divizori";
mai=(float)si/ki; return 0;
}
cout<<"Media aritmetica a nr pare
este:"<<map<<endl;
cout<<"Media aritmetica a nr impare
este:"<<mai;
return 0;
}
WHILE - structura repetitiva cu test initial
Forma generala:
while(cond) instructiune1;
sau
while(cond){
instructiuni1;
}
Execututie: Daca conditia (cond) este adevarata se realizeaza executia repetata.
Cand conditia (cond) este falsa se iese din repetare.
Probleme
1.Descompunerea in factori primi pt. un numar x 2. Suma a n numere dintr-un sir
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int x, d, p; int i,n,x,s;
int main() { int main()
cout << "Dati un nr x:"; {
cin >> x; cout << "Dati un nr n:";
d = 2; cin>>n; i=1;
while (x != 1) { while(i<=n){
p = 0; cin>>x;
while (x % d == 0) { s+=x;
p++; i++;
x = x / d; }
} cout<<"Suma nr din sir este:"<<s;
if (p > 0) cout << d << " " << p << endl; return 0;
d++; }
}
return 0;
}
La ce putere apare x in y
Daca exista z a.i. y=xz
Calculati numarul de divizori a lui x.
1.Media aritmetica a numerelor pare si media 2. Fie doua numare x si y. Afisati un mesaj ce
aritmetica a numerelor impare dintr-un sir. precizeaza care numar are mai multi divizori.
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,n,x,sp,si,kp,ki; int i,n,x,y,k1,k2;
float map,mai; int main()
int main() {
{ cout<<"Dati un nr x:";
cout << "Dati un nr n:"; cin>>x;
cin>>n; cout<<"Dati un nr y:";
for(i=1;i<=n;i++){ cin>>y;
cin>>x; for(i=1; i<=x; i++)
if(x%2==0){ sp+=x; if(x%i==0) k1++;
kp++;} for(i=1; i<=y; i++)
if(y%i==0) k2++;
else { si+=x; if(k1>k2)
ki++;} cout<<"x are mai multi divizori";
} else if(k1==k2) cout<<"x si y au acelasi nr de
map=(float)sp/kp; divizori";
mai=(float)si/ki; else cout<<"y are mai multi divizori";
cout<<"Media aritmetica a nr pare return 0;
este:"<<map<<endl; }
cout<<"Media aritmetica a nr impare
este:"<<mai;
return 0;
}
3.Precizati daca exista numere impare intr-un sir. Fibonacci in O(1) memorie
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int i,x,n,ok; int a,b,c,i,n;
int main() int main()
{ {
cout << "Dati un nr n:"; cout << "Dati n:";
cin>>n; ok=0;
cin>>n;
for(i=1;i<=n;i++){
a=0;b=1;
cin>>x;
if(x%2==1) ok=1; i=2;
} do{
if(ok==1) cout<<"Da"; c=a+b;
else cout<<"Nu"; a=b;
return 0; b=c;
} i++;
}while (i<n);
if(n==1)cout<<"termenul n a lui Fibonacci
este:"<<0;
else cout<<"termenul n a lui Fibonacci
este:"<<c;
return 0;
}
Probleme cu cifrele unui numar!!!!!!!!!
Fisiere
Intr-o problema citirea datelor se poate face de la tastatura sau din fisier.
Afisarea rezultatelor se poate face pe ecran sau intr-un fisier.
Problema
1.//suma unui sir de numere cu fisiere 2.Afisati minimul, maximul si cmmdc dintre
minim si maxim
#include <iostream>
#include<fstream> #include <iostream>
using namespace std; #include<fstream>
fstream f("sir.in",ios::in); using namespace std;
fstream g("sir.out",ios::out); ifstream f("sir.in");
int i,n,x,s; ofstream g("sir.out");
int main() int mini,maxi,i,n,x;
{ int main()
f>>n; {
for(i=1;i<=n;i++){ f>>n; maxi=-32000; mini=32000;
f>>x; for(i=1;i<=n;i++){
s+=x; f>>x;
} if(maxi<x) maxi=x;
g<<"suma este:"<<s; if(mini>x) mini=x;
f.close(); }
g.close(); g<<"Minimul este:"<<mini<<endl;
return 0; g<<"Maximul este:"<<maxi<<endl;
} while(mini!=maxi)
if(mini>maxi) mini=mini-maxi;
else maxi=maxi-mini;
g<<"cmmdc este:"<<mini;
f.close();
g.close();
return 0;
}
3.Precizati daca un numar este prim. 4.Afisati numerele prime din intervalul [a.b].
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
#include<cmath> using namespace std;
using namespace std; fstream f("sir.in", ios::in);
fstream f("sir.in",ios::in); fstream g("sir.out", ios::out);
fstream g("sir.out",ios::out); int a, b, i, x, j, k;
int x,k,i; int main() {
int main() f >> a >> b;
{ for (i = a;i <= b;i++) {
f>>x; x = i;k = 0;
for(i=2;i<=sqrt(x);i++) for (j = 1;j <= x;j++) {
if(x%i==0){ if (x % j == 0) k++;
k=1;break;} }
if(k==0) g<<"Da"; if (k == 2) g << x << " ";
else g<<"Nu"; }
f.close();
g.close(); f.close();
return 0; g.close();
} return 0;
}
5.Suma numerelor prime dintr-un sir de n.
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int n,i,x,j,k,s;
int main()
{
f>>n; s=0;
for(i=1;i<=n;i++){
f>>x; k=0;
for(j=1;j<=x;j++){
if(x%j==0) k++;}
if(k==2) s=s+x;
}
g<<s;
f.close();
g.close();
return 0;
}
Vectori
Un vector reprezinta un sir de elemente cu un nume comun asezate in ordine.
Ex: un vector cu 10 elemente: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
Declararea vectorui de mai sus in C++ se face astfel: int a[10] .
Elementele sale sunt: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
In general nu vom folosi elemetul a[0].
Operatii de baza cu vectori
1) citirea elementelor unui vector
a)de la tastatura
cout<<"dati n";
cin >> n;
for (i = 1;i <= n;i++){
cout<<"dati element";
cin >> a[i];
}
b)din fisier
f >> n;
for (i = 1;i <= n;i++) f>>a[i];
6) inlocuiti elementele pare cu ultima cifra numarului si cele impare cu penultima cifra
for (i = 1;i <= n;i++)
if(a[i]%2==0) a[i]=a[i]%10;
else a[i]=a[i]/10%10
pr1
Suma numerelor dintr-un sir
#include <iostream>
#include<fstream>
#define MAX 1000
using namespace std;
fstream f("sir.in", ios::in);
fstream g("sir.out", ios::out);
int a[MAX], n, i, s;
int main() {
f >> n;
for (i = 1;i <= n;i++)
f >> a[i];
for (i = 1;i <= n;i++)
s+=a[i];
g << "Suma este:" << s;
f.close();
g.close();
return 0;
}
Pr2
Suma numerelor prime dintr-un sir
#include<cmath> //suma numerelor prime eficient
#include<fstream>//var II
using namespace std;
ifstream fi("mat.in");
ofstream fo("mat.out");
int r,a[101],n,d,k,b,s,x,y,p,i;
int main()
{
fi>>n;
for(i=1;i<=n;i++)fi>>a[i];
for(i=1;i<=n;i++){
//numar prim eficient
x=a[i];
if(x==0 or x==1)k=1;
else{
k=0;
r=sqrt(x);
for(d=2;d<=r;d++)
if(x%d==0){k++;break;}
if(k==0)s=s+x;
}
}
fo<<s;
// for(i=1;i<=n;i++){
// x=a[i];
// k=0;
// for(d=1;d<=x;d++)
// if(x%d==0)k++;;
// if(k==2)s=s+x;
// }
// fo<<s;
return 0;
}
Pr3
//afisati numerele vecine ce au aceiasi paritate
Varianta 1
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int a[1000],n,i,x,y;
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<n;i++){
x=a[i]; y=a[i+1];
if((x%2==0&&y%2==0)||(x%2==1&&y%2==1)) g<<a[i]<<" "<<a[i+1]<<endl;
}
f.close();
g.close();
return 0;
}
//afisati numerele vecine ce au aceiasi paritate
Varianta 2
#include <iostream>
#include<fstream>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int a[1000],n,i,x,y;
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<n;i++){
x=a[i]; y=a[i+1];
if(x%2==y%2)) g<<a[i]<<" "<<a[i+1]<<endl;
}
f.close();
g.close();
return 0;
}
Cautarea unui element x intr-un sir.(cautarea secventiala)
#include <iostream>
using namespace std;
int a[1000],n,i,j,m,k,x;
bool gasit;
int main()
{
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
gasit=false;
for(i=1;i<=n;i++)
if(a[i]==x) gasit=true;
if(gasit==true)cout<<"elementul exista";
else cout<<"elementul nu exista";
return 0;
}
#include <iostream>
using namespace std;
int a[1000],n,i,j,m,k,x;
bool gasit;
int main()
{
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
k=0;
for(i=1;i<=n;i++)
if(a[i]==x) k++;
if(k>0)cout<<"elementul exista";
else cout<<"elementul nu exista";
return 0;
}
#include <iostream>
using namespace std;
int a[1000],n,i,j,m,x,gasit;
int cauta_bin(int a[1000],int n, int x)
{
int mij,st=1,dr=n,gasit=0;
do
{
mij=(st+dr)/2;
if (a[mij]==x) gasit=1;
else if(a[mij]<x) st=mij+1;
else dr=mij-1;
}while(st<=dr && gasit==0);
if (gasit==1) return mij;
else return 0;
}
int main()
{
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
cout<<cauta_bin(a,n,x);
return 0;
}
Var II
#include <iostream>
using namespace std;
int a[1000],n,i,j,m,x,gasit;
int cauta_bin(int a[1000],int n, int x)
{
int mij,st=1,dr=n;
do
{
mij=(st+dr)/2;
if (a[mij]==x) return mij;
else if(a[mij]<x) st=mij+1;
else dr=mij-1;
}while(st<=dr );
return 0;
}
int main()
{
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
cout<<cauta_bin(a,n,x);
return 0;
}
Fie doua multimi a si b. Afisati intersectia celor Fie doua multimi a si b. Afisati reuniunea celor
doua multimi. doua multimi.
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[1000],i,n,m,b[1000],j; int a[1000],b[1000],n,i,j,m,k;
int main() int main()
{ {
f>>n; f>>n;
for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) f>>a[i];
f>>m; f>>m;
for(j=1;j<=m;j++) f>>b[j]; for(j=1;j<=m;j++) f>>b[j];
for(i=1;i<=n;i++) for(i=1;i<=n;i++) g<<a[i]<<" ";
for(j=1;j<=m;j++) for(j=1;j<=m;j++){
if(a[i]==b[j]) g<<a[i]<<" "; k=0;
g.close(); for(i=1;i<=n;i++)
return 0; if(b[j]==a[i]) k++;
} if(k==0) g<<b";
}
f.close();
g.close();
return 0;
}
Fie un sir de n elemente. Afisati sirul ordonat Fie un sir de n elemente. Afisati sirul ordonat
crescator.(Met selectiei) crescator.(Met bulelor)
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in",ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out); fstream g("sir.out",ios::out);
int a[145],n,i,j,aux; int a[136],i,n,aux,ord;
int main() int main()
{ {
f>>n; f>>n;
for(i=1;i<=n;i++) f>>a[i]; for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++) do{ ord=1;
for(j=i+1;j<=n;j++) for(i=1;i<n;i++)
if(a[i]>a[j]){ if(a[i]>a[i+1]){
aux=a[i]; aux=a[i];
a[i]=a[j]; a[i]=a[i+1];
a[j]=aux; a[i+1]=aux;
} ord=0;}
for(i=1;i<=n;i++) g<<a[i]<<" "; }
g.close(); while(ord==0);
return 0; for(i=1;i<=n;i++) g<<a[i]<<" ";
}
return 0;
}
Fie un sir de numere in intervalul[1,1000].Afisati //afisati elementele pare descrescator si suma
elementele ce apar de cele mai multe ori. cifrelor minimului
(cu frecventa) sir.in
sir.in 6
6 21 14 42 81 91 36
838753 sir.out
sir.out 0 1 2 3 4 5 6 7 8 9 …… 42 36 14
38 00020101200000 5
#include <iostream> #include <iostream>
#include<fstream> #include<fstream>
using namespace std; using namespace std;
fstream f("sir.in", ios::in); fstream f("sir.in",ios::in);
fstream g("sir.out", ios::out); fstream g("sir.out",ios::out);
int fr[1001], x, i, n, maxi,j; int a[1000],n,j,aux,i,sc,cif,x;
int main() { int main()
f >> n; maxi = 0; {
for (i = 1;i <= n;i++) { f>>n;
f >> x; for(i=1;i<=n;i++) f>>a[i];
fr[x]++; for(i=1;i<n;i++)
} for(j=i+1;j<=n;j++)
for (j = 1;j <= 1000;j++) if(a[i]<a[j]){
if (maxi < fr[j]) maxi = fr[j]; aux=a[i];
for (j= 1;j <= 1000;j++) a[i]=a[j];
if (maxi == fr[j]) g << j<< " "; a[j]=aux;}
f.close(); for(i=1;i<=n;i++)
g.close(); if(a[i]%2==0)
return 0; g<<a[i]<<" ";
} g<<endl;
//sortare prin insertie x=a[n];
#include <fstream> while(x!=0){ cif=x%10;
using namespace std; sc+=cif;
ifstream f("sir.in"); x=x/10;
ofstream g("sir.out"); }
int a[100],i,k,aux,n,x,fr[100]; g<<sc;
int main() f.close(); g.close();
{ return 0;
// for(i=1;i<=n;i++){ }
// k=i;
// while(k>1& //Fibonacci
// &a[k-1]>a[k]){ #include <iostream>
// swap(a[k],a[k-1]); using namespace std;
// k--; int a[100],i,n;
// } int main()
// } {
f>>n; cout << "Dati n:";
for(i=1;i<=n;i++) f>>a[i]; cin>>n;
for(i=1;i<=n;i++){ a[1]=0;a[2]=1;
aux=a[i]; for(i=3;i<=n;i++)a[i]=a[i-1]+a[i-2];
k=i; cout<<"termenul n a lui Fibonacci
while(k>1&&a[k-1]>aux){a[k]=a[k-1]; este:"<<a[n];
k--; return 0;
} }
a[k]=aux; //selectia directa
} #include <fstream>
for(i=1;i<=n;i++)g<<a[i]<<" "; using namespace std;
return 0; ifstream f("sir.in");
} ofstream g("sir.out");
int a[100],i,k,aux,n,x,j,mini;
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++){
mini=a[i];k=i;
for(j=i+1;j<=n;j++)
if(a[j]<mini){mini=a[j];k=j;}
swap(a[i],a[k]);
}
for(i=1;i<=n;i++)g<<a[i]<<" ";
return 0;
}
Matrici (tablouri bidimensionale)
O matrice este un tablou cu m linii si n coloane.
Ex: o matrice a 4x5
Marice patratica
4x4
d. principala i=j
sub principala i >j
deasupra principala i<j
d. secundara i+j=n+1
sub i+j>n+1
deasupra i+j<n+1
declarare matrice: int a[100][100] 100 linii x 100 coloane (lin 0, lin 1 …lin 99)
Prima linie este formata din elementele: a[1][1] a[1][2] a[1][3] a[1][4] a[1][5]
A treia coloana:
a[1][3]
a[2][3]
a[3][3]
a[4][3]
Un element din matrice este a[i][j] si el se afla in matrice pe linia i si coloana j;
Operatii cu matrici
a)citirea unei matrici
citirea din fisier citirea de la tastatura
f>>m>>n; cout<<"dati numarul de linii si coloane:";
for(i=1;i<=m;i++) cin>>m>>n;
for(j=1;j<=n;j++) f>>a[i][j]; for(i=1;i<=m;i++)
for(j=1;j<=n;j++) {
cout<<"dati element:";
cin>>a[i][j];
}
for(i=1;i<=m;i++){ for(i=1;i<=m;i++){
for(j=1;j<=n;j++) g<<a[i][j]<<" "; for(j=1;j<=n;j++) cout<<a[i][j]<<" ";
g<<endl; cout<<endl;
} }
//matrice patratica
//f>>n;
//for(i=1;i<=n;i++)
//for(j=1;j<=n;j++)
// f>>a[i][j];
//k=1;
//while(k<=(n+1)/2){
// for(j=k;j<=n-k+1;j++)g<<a[k][j]<<" ";
// for(i=k+1;i<=n-k+1;i++)g<<a[i][n-k+1]<<" ";
// for(j=n-k;j>=k;j--)g<<a[n-k+1][j]<<" ";
// for(i=n-k;i>=k+1;i--)g<<a[i][k]<<" ";
// k++;
//}
f.close();
g.close();
return 0;
}
Functii
a)functii ce returneaza ceva ex: returneza un int sau un float sau un char etc
forma generala: Ex: suma a doua numere
tip rezultat returnat nume functie (lista parametri formali int suma(int a,int b )
functie) {
{ int s;
variabile locale s=a+b;
*corpul functiei return s;
return rezultat; }
}
#include <iostream>
using namespace std;
int x,y,ma,mi,s;
void f(int a,int b,int &suma,int &maxi,int &mini){
suma=a+b;
if(a>b)maxi=a;
else maxi=b;
if(a<b)mini=a;
else mini=b;
}
int main(){
cin>>x>>y;
f(x,y,s,ma,mi);
cout<<s<<" "<<ma<<" "<<mi;
return 0;
}
v. locale si v. globale
p. formali sau efectivi
transmiterea parametrilor prin valoare sau referinta
Pr1.
Sa se scrie care o functie(de tip int) pentru fiecare cerinta:
a)suma a doua numere
b)calculul ipotenuzei unui triunghi dreptunghic
c)suma cifrelor unui numar x
d)suma divizorilor unui numar x
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int x,y,s; //variabile globale
int suma(int a,int b){ //suma a doua numere a,b parametri formali
int s;
s=a+b;
return s;
}
//functii void
//forma generala( void nume parametri functiei apel)
// v local si globale p. formali sau efectivi
// transmiterea parametrilor prin valoare sau referinta
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int x,y,ss,s; //variabile globale
void suma(int x, int y, int &s){ //suma a doua numere
s=x+y;
}
void ipotenuza(float a,float b,float &rez){ //ipotenuza unui triunghi dreptunghic
rez=sqrt(a*a+b*b);
}
void sumacif(int x, int &s){ //suma cifrelor lui x
int cif; // x,cif,s variabile locale
s=0; // !!!!!!!!!
while(x){
cif=x%10;
s+=cif;
x=x/10;}
}
void sum_div(int a, int &s){ //suma divizorilor lui x
int d;
s=0;
for(d=1;d<=a;d++)
if(a%d==0) s+=d;
}
void inverseaza(int &a, int &b){ // & transmitere prin adresa
int aux; //inverseaza a cu b
aux=a;a=b;b=aux; //se poate si cu comanda swap(a,b);
}
float ip;
int main()
{
f>>x>>y;
suma(x,y,ss);
g<<"suma este:"<<ss<<'\n';
ipotenuza(x,y,ip);
g<<"ipotenuza este: "<<ip<<'\n';
sumacif(x,s);
g<<"suma cifrelor lui x este "<<s<<'\n';
sumacif(y,s);
g<<"suma cifrelor lui y este "<<s<<'\n';
sum_div(x,s);
g<<"suma divizorilor lui x este "<<s<<'\n';
inverseaza(x,y);
g<<"x si y dupa inversare"<<x<<" "<<y<<'\n';
f.close();g.close();
return 0;
}
pr3
Afisati numerele dintr-un sir ce au suma cifrelor egala cu 10
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,a[100];
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++)
if(sumacif(a[i])==10) g<<a[i]<<" ";
f.close();g.close();
return 0;
}*/
//Afisati numerele dintr-un sir ce sunt palindroame
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int i,n,a[100];
bool palindrom(int x){
int inv=0,y;
y=x;
while(x){
inv=inv*10+x%10;
x=x/10;
}
if(inv==y)return true;
else return false;
}
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++)
if(palindrom(a[i])==true) g<<a[i]<<" ";
f.close();g.close();
return 0;
}
pr4
Afisati numerele dintr-o matrice ce au prop. ca atat ele cat si patratul lor sunt palindroame
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[10][10];
int main()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(palin(a[i][j])&&palin(a[i][j]*a[i][j])) g<<a[i][j]<<" ";
f.close();g.close();
return 0;
}
pr5
//
Afisati suma numerele dintr-un sir
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[100];
//vectorii se transmit prin referinta(prin adresa) implicit
//regula: se transmit datele si se primesc rezultatele
// in rest toate variabile vor fi locale (pentru siguranta)
int suma(int x[100],int n){
int i,s=0;
for( i=1;i<=n;i++) s+=x[i];
return s;
}
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
g<<suma(a,n)<<" ";
f.close();g.close();
return 0;
}
//pr 6
Ordonati elementele dintr-un sir cu o functie de citire vector, afisare vector, ordonare vector
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[100]; //vectorii se transmit prin adresa implicit !!!!
void citeste(int x[100],int &n){
int i;
f>>n;
for( i=1;i<=n;i++) f>>x[i];
}
void afiseaza(int x[100],int n){
int i;
for( i=1;i<=n;i++) g<<x[i]<<" ";
g<<'\n';//este echivalent cu g<<endl;
}
void ordonare(int x[100],int n){
int i,j;
for( i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(x[i]>x[j]) swap(x[i],x[j]);// functie ce inverseaza a[i] cu a[j] !!!
}
int main()
{ citeste(a,n);
afiseaza(a,n);
ordonare(a,n);
afiseaza(a,n);
f.close();g.close();
return 0;}
pr7
Afisati suma numerele dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[10][10];
//matricile si vectorii se transmit prin adresa
//regula: se transmit datele si se primesc rezultatele
// in rest totul variabile locale(pentru siguranta)
int suma1(int x[10][10],int n){
int i,j,s=0;
for( i=1;i<=n;i++)
for(j=1;j<=n;j++) s+=x[i][j];
return s;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
g<<suma1(a,n)<<" ";
f.close();g.close();
return 0;
}
//pr6. Minimul dintr-o matrice ( citirea si afisarea pentru matrici+functie de minim)
//pr7. Inversati doua linii p si q dintr-o matrice
//pr8. Determinati punctele de "sa" dintr-o matrice(a[i][j] este "sa" daca este
//minimul de pe linie si maximul de pe coloana sau invers
Pr8.
Calc. suma numerelor prime dintr-un sir
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
long a[100],i,n,s;
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>a[i];
for(i=1;i<=n;i++)
if(prim(a[i])) s+=a[i];
g<<s;
f.close();g.close();
return 0;
}
Pr9
Calc. suma a doua numere daca ambele sunt prime si produsul in caz contrar
#include <fstream>
#include<cmath>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
long x,y;
long prim(long a){
int d,k;
for(d=1;d<=a;d++)
if(a%d==0) k++;
if(k==2)return 1;
else return 0;
}
long prim_eficient(long a){
int d;
if(a==0||a==1) return 0;
for(d=2;d<=sqrt((float)a);d++)
if(a%d==0) return 0;
return 1;
}
int main()
{ int d;
f>>x>>y;
if(prim_eficient(x)&&prim_eficient(y)) g<<x+y;
else g<<x*y;
f.close();g.close();
return 0;
}
//tema fie 3 nr x,y,z.cal. x nr.de cifre y nr. divizori z cate cif pare are
Pr10.
Construiti o matrice cu primele elemente in ordine crescatoare ce au
exact trei divizori.
pt. n=4 se va afisa matricea de mai jos:
4 9 25 49
121 169 289 361
529 841 961 1369
1681 1849 2209 2809
obs: numerele cautate sunt patrate de numere prime!!
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int i, k, n, j, a[1000][1000], b[10000], nr;
long prim(long a ){
int d, kk;
d=0; kk=0;
for(d=1; d<=a; d++)
if(a%d==0) kk++;
if(kk==2) return 1;
else return 0;}
int main()
{f>>n;
nr=2; k=0;
while(k<=n*n){
if(prim(nr)) {k++;
b[k]=nr;
}
nr++;
}
k=1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++){
a[i][j]=b[k]*b[k];
k++;
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++)
g<<a[i][j]<<' ';
g<<'\n';}
return 0;
}
Pr11.
//suma elementelor dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n,i,j,a[100][100];
void citire(int x[100][100], int &n){
int i;
f>>n;
for(i=1 ; i<=n; i++)
for(j=1; j<=n; j++) f>>x[i][j];
}
void afisare (int x[100][100], int n){
int i;
for(i=1 ; i<=n; i++){
for(j=1; j<=n; j++)
g<<x[i][j]<<' ';
g<<'\n';}}
int suma (int x[100][100], int n){
int i, j, s=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
s+=x[i][j];
return s;
}
int main()
{
citire (a, n);
g<<suma (a,n)<<endl;
afisare(a,n);
return 0;
}
Pr12
//minimul dintr-o matrice
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n,i,j,a[100][100],mini;
void citire(int x[100][100], int &n){
int i;
f>>n;
for(i=1 ; i<=n; i++)
for(j=1; j<=n; j++) f>>x[i][j];
}
void afisare (int x[100][100], int n){
int i;
for(i=1 ; i<=n; i++){
for(j=1; j<=n; j++)
g<<x[i][j]<<' ';
g<<'\n';}}
int minim (int x[100][100], int n){
int i, j; mini=32000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(x[i][j]<mini) mini=x[i][j];
return mini;
}
int main()
{
int main()
{
citire (a, n);
inversare (a,n);
afisare(a,n);
return 0;
}
Pr14.
//Se considera o matrice patratica
// Sa se scrie o functie ce calculeaza
//cate elemente din matrice au toate cifrele pare
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,j,i,a[100][100];
void citire (int x[100][100],int&n){
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>x[i][j];
}
int calcul (int x){
int cif;
while(x){
cif=x%10;
if(cif%2==1) return 0;
x=x/10;
}
return 1;
}
int main(){
int k=0;
citire (a,n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(calcul(a[i][j])) k++;
if(k==n*n) g<<"DA";
else g<<"NU";
f.close(); g.close();
return 0;}
pr15
//pentru un numar x construiti numarul format din cifrele sale pare
//ex: pt x=12798 => 82
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int x;
int stergere(int x){
int cif,y=0;
while(x){
cif=x%10;
if(cif%2==0) y=y*10+cif;
x=x/10;
}
return y;
}
int main(){
f>>x;
g<<stergere(x);
f.close();
g.close();
return 0;
}
Pr16.
//verificati daca un sir este ordonat crescator
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int a[100],n,i,k;
int ordonare_cresc(int x[100], int n){
int i;
for(i=1;i<=n-1;i++)
if(a[i]>a[i+1]) return 0;
return 1;
}
int main(){
f>>n; k=0;
for(i=1;i<=n;i++)
f>>a[i];
if (ordonare_cresc(a,n)==1) g<<"DA";
else g<<"NU";
f.close();
g.close();
return 0;
}
Functii (Clasa X)
/*afisati numerele dintr-un sir ce au numarul cifrelor de 3 egal cu un y specificat
sir.in
4 (n numarul de elemnte)
2343 123 27 331 (sirul cu n elemente)
2 ( y cate cifre de 3 trebuie sa contina fiecare numar)
sir.out
2343 331 - aceste numere au 2 cifre de 3 */
#include <fstream>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
int n, k, a[100], i, y,x;
void citeste(int a[100], int &n) {
int i;
f>>n;
for(i=1; i<=n; i++)
f>>a[i];
}
int verifica( int x, int y) {
int k;
k=0;
while(x) {
if(x%10==3) k++;
x/=10;
}
if(k==y) return 1;
else return 0;
}
int main() {
citeste(a,n);
f>>y;
for(i=1; i<=n; i++)
if(verifica(a[i], y)==1) g<<a[i]<<' ';
f.close();
g.close();
return 0;
}
Fişierul text numere.in conţine pe prima linie un număr natural n (0<n<1000), iar pe a
doua linie n numere naturale cu cel mult 9 cifre fiecare, despărţite prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte toate numerele din fişier şi afişează pe ecran,
separate prin câte un spaţiu, numerele de pe a doua linie a fişierului, care încep şi se
termină cu aceeaşi cifră.
Exemplu: dacă fişierul numere.in are conţinutul de mai jos
9
55 107 3 101 92 7 208 2782 80
se vor afişa
55 3 101 7 2782
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n, i, a[100], ciff, cifi,x;
void citire_sir(int a[100], int&n){
int i;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
}
int verificare_cifre(int x){
int ciff, cifi;
ciff=x%10;
while(x){cifi=x%10;
x/=10;}
if(ciff!=cifi) return 0;
return 1;
}
int main()
{
citire_sir(a,n);
for(i=1;i<=n;i++)
if(verificare_cifre(a[i])==1)g<<a[i]<<" ";
f.close();
g.close();
return 0;
}
Se considera un sir de n elemente si o cifra specificata c.
Afisati numerele din sir ce contin cifra c.
Ex:pentru fisierul de intrare de mai jos
4
231 45 34 4221
2 (cifra cautata)
se afiseza 231 4221
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,a[100],c,x;
int main()
{
int c;
citeste_sir(a,n);
f>>c;
for(i=1;i<=n;i++)
if(gaseste_cifra(a[i],c)==1) g<<a[i]<<" ";
return 0;
}
Scrieţi definiţia completă a unui subprogram sum care primeşte prin parametrul x un
număr natural de cel mult 4 cifre şi returnează suma divizorilor numărului x, diferiţi de 1 şi
de el însuşi.
Exemplu: dacă x=10 se va returna valoarea 7 (7=2+5). (4p.)
b) Scrieţi programul C/C++ care citeşte de la tastatură un număr natural n (0<n<100), apoi
n numere naturale (cu cel mult 4 cifre fiecare). Programul determină, folosind apeluri utile
ale subprogramului sum, pentru fiecare număr natural citit, suma divizorilor săi proprii şi
afişează pe ecran sumele determinate, în ordinea crescătoare a valorilor lor, separate prin
câte un spaţiu. (6p.)
Exemplu: dacă n=5 şi numerele citite sunt 10 2 33 6 11
valorile afişate pe ecran vor fi: 0 0 5 7 14
deoarece suma divizorilor lui 10 este 7, suma divizorilor lui 2 este 0, suma divizorilor
lui 33 este 14, suma divizorilor lui 6 este 5, suma divizorilor lui 11 este 0.
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int i,a[1000],b[100],r,n,s,x,j,aux;
int main(){
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n;i++) b[i]=sum(a[i]);
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++)
if(b[i]>b[j]) {aux=b[j]; b[j]=b[i]; b[i]=aux;}}
for(i=1;i<=n;i++) g<<b[i]<<" ";
f.close();g.close();
return 0;
}
Tema
Subprogramul cifra primeşte prin intermediul parametrului a un număr natural cu cel mult 4
cifre şi returnează ultima cifră pară a sa. Dacă numărul nu conţine cifre pare,
subprogramul returnează valoarea -1. De exemplu, dacă a=8345, subprogramul va
returna 4.
a) Să se scrie definiţia completă a subprogramului cifra.
b) Pe prima linie a fişierului bac.in se află un număr natural nenul n (n≤15000), iar pe
a doua linie a fişierului se află un şir de n numere naturale, despărţite prin câte un spaţiu,
fiecare număr fiind format din cel mult 4 cifre.
Scrieţi un program C/C++ care citeşte numerele din fişier şi afişează pe ecran, folosind
apeluri utile ale subprogramului cifra, cel mai mare număr care se poate forma cu
ultimele cifre pare ale fiecărui element, dacă acestea există. Alegeţi o metodă de rezolvare
eficientă ca timp de executare. Dacă toate numerele de pe a doua linie a fişierului au
numai cifre impare, programul va afişa mesajul NU EXISTA.
Exemplu: dacă fişierul bac.in are conţinutul de mai jos:
7
369 113 2 0 33 1354 42
pe ecran se va afişa: 64220
Ex2:
#include <iostream>
using namespace std;
int x;
int main()
{
cout<<"dati un numar intre 0 si 127 " ;
cin>>x;
cout <<"caracterul cu codul ASCII introdus este: " <<(char)x<<endl;
x=x-1;
cout<<"caracterul care se afla inaintea sa este: " <<(char)x<<" "<<endl;
return 0;
}
Ex3:
//afisati cel mai mare caracter din doua citite, si caracterul dinainte si dupa primul caracter citit
#include <iostream>
using namespace std;
char a,b,c,d;
int main()
{
cout<<"dati doua caractere " ;
cin>>a>>b;
if(a>b)cout<<"caracterul mai mare este "<<a;
else cout<<"caracterul mai mare este "<<b;
cout<<endl;
c=a-1;d=a+1;
cout<<"caracterul care se afla inaintea sa este: " <<c<<" si cel dupa el este "<<d<<endl;
return 0;
}
/* for(char c=1;c<127;c++){
cout<<c<<" -> "<<(int)c<<" ";
if(c%8==0)cout<<endl;
}*/
accesare caractere
s[i] - este caracterul de pe pozitia i ,i=0,...254, s1[254] este ’\0’
s[0] - este primul caracter din sir
Citirea si afisarea
Citirea cuvant sau propozitie
Afisare orice
#include <iostream>
#include<cstring>
using namespace std;
char a[100],b[100];
char ch,e;
int main()
{
// cin>>a; //citire sir(cuvânt) pâna la spațiu
// cout<<a;
- Subsir
strstr(s1,s2) - verifica daca subsirul s2 este subsir al lui s1 si returneaza adresa de
început a subşirului s2 în s1 dacă există şi NULL (0) în caz contrar.
- Cautare caracter
strchr(s1,c) - verifica daca caracterul „c” este in sir al lui s1 si returneaza adresa
unde se gaseste „c” dacă există şi NULL (0) în caz contrar.
//strlen(sir)
//char a[100],b[100]="mama";//str=string; len=length
//cin.get(a,100);
//cout<<strlen(a);
int z=strcmp(a,b);
if(z>0)cout<<"primul este mai mare";
else if(z<0)cout<<"al doilea este mai mare";
else cout<<"sunt egale";
//strcpy(sir1,sir2)
//strcpy(b,a);cout<<"sirul b este:"<<b;
//strcat(sir1,sir2)
//strcat(b,a);
//cout<<"sirul b este: "<<b<<endl;
//cout<<"sirul a este: "<<a;
strncat(sir1,sir2,n)
//strncat(b,a,3);
//cout<<"sirul b este: "<<b<<endl;
//cout<<"sirul a este: "<<a;
return 0;
}
////Fie o propozitie. Se cere:
//a)afisati numarul de caractere ale propozitiei
//b)cate litere de 'a' contine propozitia
//c)sa se afiseze propozitia fara literele de 'c' din ea
//d)transformati toate literele propozitiei la majuscule
//e)transf. literele mari in mici si cele mici in mari
//f)cate consoane si cate vocale are o propozitie
#include <iostream>
#include<cstring>
using namespace std;
char a[100];
int i,k;
int main()
{
cout<<"dati propozitie";
cin.get(a,100);
//a)
cout<<"lungimea propozitiei:"<<strlen(a)<<endl;
// b)
for(i=0;i<strlen(a);i++)
if(a[i]=='a' or a[i]=='A')k++;
cout<<"numarul de litere de a este:"<<k<<endl;
//c)
cout<<"propozitia fara litera 'c' este:";
for(i=0;i<strlen(a);i++)
if(a[i]!='c' and a[i]!='C')cout<<a[i];
cout<<endl;
//d)
// for(i=0;i<strlen(a);i++)
// if(a[i]>='a' and a[i]<='z')a[i]=a[i]-32;
// cout<<a<<endl;
//e)
// for(i=0;i<strlen(a);i++)
// if(a[i]>='a' and a[i]<='z')a[i]=a[i]-32;
// else
// if(a[i]>='A' and a[i]<='Z') a[i]=a[i]+32;
// cout<<a<<endl;
//f)
int voc=0,con=0;
for(i=0;i<strlen(a);i++)
if((a[i]>='a' and a[i]<='z')or(a[i]>='A' and a[i]<='Z'))
if(a[i]=='a' or a[i]=='e' or a[i]=='i' or a[i]=='o' or a[i]=='u' or
a[i]=='A' or a[i]=='E' or a[i]=='I' or a[i]=='O' or a[i]=='U' )voc++;
else con++;
cout<<"numar vocale si consoane:"<<voc<<" "<<con<<endl;
return 0;
}
// ch='p';
// cout<<ch;
//citire sir pana la spatiu
// cin>>a;
// cout<<a;
//citire cu cin.get var I
// cin.get(a,100);
// cout<<a;
//citire cu cin.get var II
// cin.get(a,100,'g');
// cout<<a;
// cout<<"dati prop 1";
// cin.get(a,100);
// cin.get();
// cout<<"dati prop 2";
// cin.get(b,100);
// cout<<a<<" "<<b;
//pointeri la char
//char *p;
//char c[100]="Ana are mere";
// p=c+1;
// cout<<p<<endl<<c+1<<endl;
// p++;
// cout<<p;
//char a[100],b[100]="mama";
//cin.get(a,100);
//cout<<strlen(a);
//strcpy(b,a);cout<<"sirul b este:"<<b;
//strcat(b,a);
//cout<<"sirul b este: "<<b<<endl;
//cout<<"sirul a este: "<<a;
//strncat(b,a,3);
//cout<<"sirul b este: "<<b<<endl;
//cout<<"sirul a este: "<<a;
//impartire propozitie in cuvinte cu strtok
#include <iostream>
#include<cstring>
using namespace std;
char a[100];
char separator[]=", ?!:.";
char *p;//pointer la char
int main()
{
cin.get(a,100);
p=strtok(a,separator);
while(p){
cout<<p<<endl;
p=strtok(0,separator);//NULL este 0
}
return 0;
}
//impartire propozitie in cuvinte cu memorarea in vector de cuvinte
#include <fstream>
#include<cstring>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
char a[100],separator[]=", ?!:.",*p;//pointer la char
char cuv[10][20];//sir de 10 cuvinte cuv[0],cuv[1],…cuv[9]
//fiecare cu are maxim 19 caractere fiecare
int i,n;
int main()
{
f.get(a,100);
p=strtok(a,separator);
while(p){
n++;
strcpy(cuv[n],p);
p=strtok(0,separator);//NULL este 0
}
for(i=1;i<=n;i++)g<<cuv[i]<<endl;
return 0;
}
//ordonarea lexicografica a cuvintelor dintr-o propozitie
#include <fstream>
#include<cstring>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
char a[100],separator[]=", ?!:.",*p;//pointer la char
char cuv[10][20];//sir de 10 cuvinte cuv[0],cuv[1],…cuv[9]
//fiecare cu are maxim 19 caractere fiecare
int i,n,j;
int main()
{
f.get(a,100);
p=strtok(a,separator);
while(p){
n++;
strcpy(cuv[n],p);
p=strtok(0,separator);//NULL este 0
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(strcmp(cuv[i],cuv[j])>0)swap(cuv[i],cuv[j]);
for(i=1;i<=n;i++)g<<cuv[i]<<endl;
return 0;
}
//sterge aparitiile unui sir b dintr-un sir a
#include <fstream>
#include<cstring>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
char a[100],b[100],*p;//pointer la char
int i,n;
int main()
{
f.get(a,100);
f.get();//!!!!!!!!
f.get(b,100);
p=strstr(a,b);
while(p){
strcpy(p,p+strlen(b));
p=strstr(a,b);
}
g<<a;
return 0;
}
Bac 2009 V58 SII p5(stergeti tot ce nu este litera) 3 varriante
#include <fstream>
#include<cstring>
using namespace std;
ifstream f("sir.in");
ofstream g("sir.out");
char separator[100],s[100],cuv[100][100],*p;//pointer la char
int i,n,t;
int main()
{
// //metoda 1 merge!
// f.get(s,51);
// for(i=0;i<=strlen(s)-1;i++)
// if(s[i]<'A' or (s[i]>'Z' and s[i]<'a')or s[i]>'z')
// separator[n++]=s[i];
// g<<separator<<endl;;
// for(i=0;i<strlen(separator);i++)
// {
// p=strchr(s,separator[i]);
// if(p)strcpy(p,p+1);
// }
// g<<s;
//metoda 2 merge!
f.get(s,51);
for(i=0;i<=strlen(s)-1;i++)
if(s[i]<'A' or (s[i]>'Z' and s[i]<'a')or s[i]>'z')
separator[n++]=s[i];
p=strtok(s,separator);
while(p){
t++;
strcpy(cuv[t],p);
p=strtok(0,separator);
}
for(i=1;i<=t;i++)g<<cuv[i];
//metoda 3 merge!
// f.get(s,51);
// i=0;
// while(i<strlen(s)-1)
// if(s[i]<'A' or (s[i]>'Z' and s[i]<'a')or s[i]>'z')
// strcpy(s+i,s+i+1);
// else i++;
// g<<s;
return 0;
}
Tipul string
#include <iostream>
#include<cstring>
using namespace std;
string s,t,z,s1;
char a[100];
int k,i;
void testare_functii(){
//www.cplusplus.com/reference/ selectare "strings library" si
//classes: string - si aici este lista cu toate functiile si exemple
cout << "dati cuvant";
cin>>s; //citeste doar un cuvant!!!!!!!!!!!
cout<<"cuvantul citit este:"<<s<<endl;
cin.get();//trece peste sfarsitul de linie
cout << "dati un sir (mai multe cuvinte): ";
getline(cin,s); //citeste mai multe cuvinte
t=s; //atribuire sir
z=t+" + "+s; //concatenarea (lipirea)
cout<<"sirul citit este:"<<s<<endl;
cout<<"sirul concatenat este: "<<z<<endl<<"prima litera a sirului concatenat este:"<<z[0]<<endl;
//cate literele de "a" sunt in sir
//s.length() sau s.size() - da nr. de caractere din sirul s
k=0;
for(i=0;i<s.length();i++)
if(s[i]=='a')k++;
//cout<<"numar aparitii litera a din sirul s este:"<<k<<endl;
//sir.append(t,p,l) - adauga la sirul "sir" o parte din sirul t (de la pozitia p, l caractere)
s="catel";s1="jucaus";
s.append(s1,4,2);
cout<<"(append)"<<s<<endl;
}
cout<<"numar cuvinte:"<<k;
}
//afisati cuvintele dintr-o propozitie crescator
//propozitia are cuvintele separate printr-un spatiu
void pr2(){
int j,n,i,p;
string a[20],aux;
cout<<"dati propozitie:";
getline(cin,s);
s=s+' ';j=1;
for (i=0;i<s.length();i++)
if (s[i]!=' ') a[j]=a[j]+s[i];
else j++;
//varianta II
/*do {
p=s.find(" ",0);
a[++i]=s.substr(0,p);
s.erase(0,p+1);
}while(s.find(" ",0)!=string::npos);*/
n=j-1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if (a[i]>a[j]){aux=a[i];a[i]=a[j];a[j]=aux;}
for(i=1;i<=n;i++) cout<<a[i]<<" ";
}
void pr3(){
//afisati cuvintele dintr-o propozitie ce au 3 vocale
//afisati cuvintele ce sunt anagrame
//afisati cele mai lungi cuvinte
}
//stergeti primul cuvant si aparitiile acestuia din propozitie
void pr4(){
string t="",s;
int p,i;
getline(cin,s);
i=0;
while(s[i]!='*')t+=s[i++];
s.erase(0,i);
while(s.find(t,p)!=string::npos){
p=s.find(t,0);
if(s[p-1]=='*'&&s[p+i]=='*') s.erase(p,t.size());
}
cout<<s;
}
//verifica daca doua cuvinte sunt anagrame
void pr5(){
string s1,s2;
int d1,d2,anag,i,j;
char aux;
cout<<"dati sirul 1";
cin>>s1;
cout<<"dati sirul 2";
cin>>s2;
d1=s1.size();
d2=s2.size();
if(d1!=d2)anag=0;
else {
for(i=0;i<=d1-1;i++)
for(j=i+1;j<=d1-1;j++)
if(s1[i]>s1[j]){aux=s1[i];s1[i]=s1[j];s1[j]=aux;}
for(i=0;i<=d2-1;i++)
for(j=i+1;j<=d2-1;j++)
if(s2[i]>s2[j]){aux=s2[i];s2[i]=s2[j];s2[j]=aux;}
if (s1==s2)anag=1;
else anag=0;
}
if(anag) cout<<"este anagrama";
else cout<<"nu este anagrama" ;
}
//anagrame var 2
void pr6(){
string s1,s2,s,t;
int d1,d2,anag,i,j;
char aux;
cout<<"dati sirul 1";
cin>>s1;
cout<<"dati sirul 2";
cin>>s2;
d1=s1.size();
d2=s2.size();
if(d1!=d2)anag=0;
else {
anag=1;
s=s1;t=s2;
for(i=0;i<d1;i++){
if(t.find(s[i])!=string::npos)
t.erase(t.find(s[i]),1);
}
if(t!="")anag=0;
s=s1;t=s2;
for(i=0;i<d2;i++){
if(s.find(t[i])!=string::npos)
s.erase(s.find(t[i]),1);
}
if(s!="")anag=0;
}
if(anag) cout<<"este anagrama";
else cout<<"nu este anagrama" ;
}
int f[128],n;
void pr7(){
string s,t,vocale="aeiou";
getline(cin,s);
n=s.size();
for(i=0;i<n;i++) f[s[i]]++;
//afisati literele distincte
for(char c='a';c<='z';c++) if(f[c]>0)cout<<c;
//afisati caracterele distincte(toate ..si /><!
for(i=0;i<=127;i++) if(f[i]>0)cout<<(char)i;
}
int main()
{
testare_functii();
//pr1();
return 0;
}
Noutati
//inlocuiti aparitiile unei litere cu alta litera si //prima si ultima litera a cuvintelor din
invers intr-un sir propozitie sa fie mari
// a si o „hopa topa” => „hapo tapo” //mama are mere => MamA ArE MarE
#include <iostream> #include <iostream>
#include<cstring> #include <cstring>
using namespace std; using namespace std;
int n,i; int main()
string s; {
char c1,c2; string s;
int main() int n,i;
{ cout<<"Dati o propozitie:";
cout<<"Dati doua caractere pentru inlocuire:"; getline(cin,s);
cin>>c1>>c2; s+=" "; n=s.size();
cin.get(); s[0]-=32;
cout<<"Dati o propozitie:"; for(i=0;i<n;i++){
getline(cin,s); if(s[i]!=' ' and(s[i+1]==' 'or s[i-1]==' '))
n=s.size(); if(s[i]>='a' and s[i]<='z') s[i]-=32;}
cout<<s<<endl; cout<<s;
for(i=0;i<n;i++){ return 0;
if(s[i]==c1) s[i]=c2; }
else
if(s[i]==c2) s[i]=c1;
}
cout<<s;
return 0;
}
/*Se citesc doua siruri de caractere.Sa se //afisati clonele unui cavant(se strege una din
afiseze pe ecran cel mai vocale)
lung sufix comun al celor doua siruri de //ex: informatica => informtic nformatca
caractere. infrmatica
macaroana =>oana #include <iostream>
faraoana #include <cstring>
*/ using namespace std;
#include <iostream> string cuv,t;
#include<cstring> int n,i;
using namespace std; int main()
string s1, s2; {
int l1,l2; cout<<"Dati cuvantul:";
int main() getline(cin, cuv);
{ n=cuv.size();
cout<<"Dati primul sir:"; t="";
getline(cin,s1); for(i=0;i<n;i++)
cout<<"Dati cel de-al doilea sir:"; if(cuv[i]!='e') t+=cuv[i];
getline(cin,s2); cout<<t<<endl;
l1=s1.size()-1; t="";
l2=s2.size()-1; for(i=0;i<n;i++)
while(s1[l1]==s2[l2]) {l1--;l2--;} if(cuv[i]!='a') t+=cuv[i];
l1++; cout<<t<<endl;
cout<<"Sufixul comun t="";
este:"<<s1.substr(l1); for(i=0;i<n;i++)
return 0; if(cuv[i]!='i') t+=cuv[i];
} cout<<t<<endl;
t="";
for(i=0;i<n;i++)
if(cuv[i]!='o') t+=cuv[i];
cout<<t<<endl;
t="";
for(i=0;i<n;i++)
if(cuv[i]!='u') t+=cuv[i];
cout<<t<<endl;
return 0;
}
Tipul struct
elev = nume,prenume,varsta,clasa,nr_absente,medie_generala(campuri)
#include <iostream>
using namespace std;
struct elev{
char nume[20];
char pren[20];
int varsta,clasa,nr_abs;
float med;
};
//int a;
elev b;
int main()
{
cout << "Dati nume si prenume" ;
cin>>b.nume;
cin>>b.pren;
cout<<" Dati varsta, clasa, abs si med ";
cin>>b.varsta>>b.clasa>>b.nr_abs>>b.med;
cout<<" Datele elevei sunt :";
cout<<endl<<b.nume<<endl<<b.pren<<endl<<b.varsta;
cout<<endl<<b.clasa<<endl<<b.nr_abs<<endl<<b.med;
return 0;
}
#include <iostream>
using namespace std;
struct
{
char nume[20];
char pren[20];
int varsta,clasa,nr_abs;
float med;
}a[100],e;
int i,n;
int main()
{
cout<<"dati n:";
cin>>n;
for(i=1; i<=n; i++)
{
cout << "Dati nume si prenume" ;
cin>>a[i].nume>>a[i].pren;
cout<<" Dati varsta, clasa, abs si med ";
cin>>a[i].varsta>>a[i].clasa>>a[i].nr_abs>>a[i].med;
}
cout<<" Datele elevilor sunt :"<<endl;
for(i=1; i<=n; i++)
cout<<a[i].nume<<" "<<a[i].pren<<" "<<a[i].varsta
<<" "<<a[i].clasa<<" "<<a[i].nr_abs<<" "<<a[i].med<<endl;
return 0;
}
Pr1. Se citesc datele a n elevi nume, prenume, varsta si media .Afisati descrescator dupa medie elevii
cititi de la tastatura.
#include <iostream>
using namespace std;
struct elev{ string nume, prenume;
int varsta;
float med;}a[100];
int i,j,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++){
cout<<"Dati elevul + datele acestuia:"<<endl;
cin>>a[i].nume>>a[i].prenume>>a[i].varsta>>a[i].med;
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i].med<a[j].med) swap(a[i],a[j]);
for(i=1;i<=n;i++)
cout<<a[i].nume<<" "<<a[i].prenume<<" "<<a[i].varsta<<" "<<a[i].med<<endl;
return 0;
}
Pr2.
/*Se considera n persoane.Afiasti persoanele crescator dupa data nasterii.*/
#include <iostream>
using namespace std;
struct pers{
string nume, prenume;
struct data{ int zi, luna, an;
}datan;
int clasa;
}p[100];
int i,j,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].nume>>p[i].prenume>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an>>p[i].clasa;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
if(p[i].datan.an>p[j].datan.an) swap(p[i],p[j]);
if(p[i].datan.an==p[j].datan.an and p[i].datan.luna>p[j].datan.luna) swap(p[i],p[j]);
if(p[i].datan.an==p[j].datan.an and p[i].datan.luna==p[j].datan.luna and p[i].datan.zi>p[j].datan.zi)
swap(p[i],p[j]);
}
for(i=1;i<=n;i++)
cout<<p[i].nume<<" "<<p[i].prenume<<" "<<p[i].datan.zi<<" "<<p[i].datan.luna<<" "
<<p[i].datan.an<<" "<<p[i].clasa<<endl;
return 0;
}
Pr3.
/*Fie n persoane.Afisati persoanele nascute in ianuarie.*/
#include <iostream>
using namespace std;
struct pers{ string nume, prenume;
struct data{ int zi, luna, an;
}datan;
int clasa;
}p[100];
int i,n;
int main()
{
cout<<"Dati numarul de elevi:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].nume>>p[i].prenume>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an>>p[i].clasa;
for(i=1;i<=n;i++)
if(p[i].datan.an==2000)
cout<<p[i].nume<<" "<<p[i].prenume<<" "<<p[i].datan.zi<<" "<<p[i].datan.luna<<" "
<<p[i].datan.an<<" "<<p[i].clasa<<endl;
return 0;
}
Pr4.
//Fie un magazie
//a)ordonati materialele dupa cantitate
//b)afisati un material cu cantitatea maxima
//c)afisati materialele achizitionate cu un an in urma(2010)
#include <iostream>
using namespace std;
struct materiale{ string den;
int cant;
float pret;
struct data{int zi,luna,an;}datan;
}p[100];
int i,j,n;
int main()
{ cout<<"Dati n:";
cin>>n;
for(i=1;i<=n;i++)
cin>>p[i].den>>p[i].cant>>p[i].pret>>p[i].datan.zi>>p[i].datan.luna>>p[i].datan.an;
//a)
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++)
if(p[i].cant>p[j].cant) swap(p[i],p[j]);
}
cout<<"lista materiale ordonate"<<endl;
for(i=1;i<=n;i++) cout<<p[i].den<<endl;
//b)
cout<<"maximul:"<<p[n].den<<endl;
//c)
for(i=1;i<=n;i++)
if(p[i].datan.an==2010) cout<<p[i].den;
return 0;
}
Pr5.
#include <iostream>
using namespace std;
void creare (int a[100], int &n)
{
int i;
cout<<"Dati n:";
cin>>n;
for (i=1; i<=n; i++) {cout<<"Dati element: "; cin>>a[i]; }
}
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: ";cin>>y;
n++;a[n]=y;
}
void adauga (int a[100], int &n)
{
int x,p,i;
cout<<"Dati element de adaugat si pozitia lui: ";
cin>>x>>p;
for (i=n; i>=p; i--)
a[i+1]=a[i];
a[p]=x;
n++;
}
void stergere (int a[100], int &n)
{
int i,p;
cout<<"Dati pozitia care doriti sa fie stearsa: ";
cin>>p;
for (i=p; i<=n-1; i++)
a[i]=a[i+1];
n--;
}
void listare (int a[100], int n)
{
int i;
cout<<"Lista este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{
int a[100],n,x;
do
{
cout<<endl<<"MENIU"<<endl;
cout<<"Tastati 1 pentru creare lista. "<<endl;
cout<<"Tastati 2 pentru adaugare element la sfarsitul listei. "<<endl;
cout<<"Tastati 3 pentru adaugare element pe o pozitie specificata. "<<endl;
cout<<"Tastati 4 pentru stergerea unui element pe o pozitie specificata. "<<endl;
cout<<"Tastati 5 pentru afisarea listei. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
cin>>x;
if (x=='1') creare (a,n);
if (x=='2') adaugare_sf (a,n);
if (x=='3') adauga (a,n);
if (x=='4') stergere (a,n);
if (x=='5') listare (a,n);
//cin>>z;
}
while (x!='9');
return 0;
}
Coada
Coada este o lista speciala pentru care avem doua operatii:
1.adaugarea se face la sfarsit
2.extragerea elementelor se face de la inceput
#include <iostream>
#include<windows.h> //contine system ("cls"); ce sterge ecranul
#include <conio.h> //biblioteca de functii - contine getch() functie ce citeste un caracter
//de la tastatura fara afisarea lui pe ecran
using namespace std;
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: ";
cin>>y;
n++;
a[n]=y;
}
void stergere (int a[100], int &n)
{
int i;
for (i=1; i<=n-1; i++)
a[i]=a[i+1];
n--;
}
void listare (int a[100], int n)
{
int i;
cout<<"Coada este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{
int a[100],n,x;
n=0;
do
{system ("cls");
cout<<endl<<"MENIU pt. operatii cu coada"<<endl;
cout<<"Tastati 1 pentru adaugare element la coada. "<<endl;
cout<<"Tastati 2 pentru stergerea unui element din coada. "<<endl;
cout<<"Tastati 3 pentru afisarea cozii. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
x=getch();
if (x=='1') adaugare_sf (a,n);
if (x=='2') stergere (a,n);
if (x=='3') listare (a,n);
getch();
}
while (x!='9');
return 0;
}
Stiva
Stiva este o lista speciala pentru care avem doua operatii ce se fac ambele in capul stivei
1.adaugarea se face in capul stivei
2.extragerea elementelor se face din capul stivei
#include <iostream>
#include<windows.h> // pentru system("cls");
#include <conio.h>
using namespace std;
void adaugare_sf (int a[100],int &n)
{
int y;
cout<<"Dati element: "; cin>>y;
n++; a[n]=y;
}
void stergere (int a[100], int &n)
{
n--;cout<<"s-a sters elementul "<<a[n+1]<<"din stiva";
}
void listare (int a[100], int n)
{
int i;
cout<<"Stiva este: ";
for (i=1; i<=n; i++)
cout<<a[i]<<' ';
}
int main()
{
int a[100],n,x;
n=0;
do
{system("cls");
cout<<endl<<"MENIU pt. stiva"<<endl;
cout<<"Tastati 1 pentru adaugare element la stiva "<<endl;
cout<<"Tastati 2 pentru stergerea unui element din stiva. "<<endl;
cout<<"Tastati 3 pentru afisarea stivei. "<<endl;
cout<<"Tastati 9 pentru iesire. "<<endl;
x=getch();
if (x=='1') adaugare_sf (a,n);
if (x=='2') stergere (a,n);
if (x=='3') listare (a,n);
getch();
}
while (x!='9');
return 0;
}
Pointeri
#include <iostream> Pr2.
using namespace std; //creare lista de elemente si afisare pe ecran
struct complex { //adaugarea elementelor se face la inceput
int re,im; //suma elementelor pare din lista
}; #include <iostream>
int *r; using namespace std;
complex *a,*b,*c;//declarare pointer struct nod
int main() {
{ int info;
a=new complex;//creare v. dinamica in nod * urm;
Heap;pointerul a indica la ea };
b=new complex; nod *p,*q,*prim;
c=new complex; int i,n,x;
cin>>a->re>>a->im; int main(){
cin>>b->re>>b->im; prim=0;
c->re=a->re+b->re; cin>>n;
c->im=a->im+b->im; for(i=1; i<=n; i++){
cout<<c->re<<" "<<c->im; cin>>x;
delete a;delete b;delete c;//stergere v. p=new nod;
dinamica p->info=x;
return 0; p->urm=prim;
} prim=p;
Pr1. }
/*Sa se creeze o lista de n elemente si sa se cout<<"lista este:";
afiseze pe ecran lista*/ p=prim;
#include <iostream> while(p){
using namespace std; cout<<p->info<<" ";
struct nod{ p=p->urm;
int info; }
nod *urm;}; //suma elementelor pare din lista
nod *p, *q, *prim; int s=0;
int i,n,x; p=prim;
int main(){ while(p) {
prim=0; if(p->info%2==0) s+=p->info;
cin>>n; p=p->urm;
for(i=1;i<=n;i++){ }
cin>>x; cout<<"suma este:"<<s;
p=new nod; return 0;
p->info=x; }
p->urm=prim;
prim=p;
}
p=prim;
while(p){
cout<<p->info<<" ";
p=p->urm;
}
return 0;
}
Pr3. Pr4.
/*Introducerea in lista la sfarsit a si afisarea /*Sa se afiseze produsul elementelor impare
listei*/ dintr-o lista*/
#include <iostream> #include <iostream>
using namespace std; using namespace std;
struct nod { struct nod{
int info; int info;
nod *urm; nod *urm;};
}; nod *p, *q, *prim;
nod *p, *prim, *c; int i,n,x,pr;
int i, n, x; int main(){
int main() { prim=0;
cin >> n;prim = 0; cin>>n;
for (i = 1;i <= n;i++) { for(i=1;i<=n;i++){
c = new nod; cin>>x;
cout << "Dati elemente:"; p=new nod;
cin >> x; p->info=x;
c->info = x; p->urm=prim;
c->urm = 0; prim=p;}
if (prim) { pr=1;
p = prim; p=prim;
while (p->urm) p = p->urm; while(p){
p->urm = c; if(p->info%2==1)
} pr*=p->info;
else prim=c; p=p->urm;}
} cout<<"prod elem impare este:"<<pr;
p = prim; return 0;
while (p){ cout<<p->info<<" "; p = p->urm;} }
return 0;
}
#include <iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
struct nod
{
int info;
nod* adr;
};
nod* v1,*v2;
int main()
{
int x,y;
nod *prim;
prim=0;
do
{
system("cls"); //sterge ecranul
cout<<"operatii cu coada"<<endl;
cout<<"tastati 1 pentru adaugare"<<endl;
cout<<"tastati 2 pentru extragere"<<endl;
cout<<"tastati 3 pentru listare"<<endl;
cout<<"tastati 4 pentru iesire din program"<<endl;
cin>>x;
if(x==1){cout<<"dati element";cin>>y;adauga(prim,y);}
if(x==2){ if (!prim)cout<<"stiva vida";
else
{
extrage(prim,y);
cout<<"elementul extras este:"<<y;
}
}
if(x==3) listare(prim);
getch();
} while(x!=4);
return 0;
}
Pr6.
//Adaugare elemente in coada (coada cu prim(prim) si ultim(u))
#include <iostream>
using namespace std;
struct nod {
int info;
nod *urm;
};
nod *p, *prim, *c,*u;
int i, n, x;
int main() {
prim=0;
cin >> n;
for (i = 1; i <= n; i++) {
c = new nod;
cout << "Dati elemente:";
cin >> c->info ;
c->urm = 0;
if (prim) {
u->urm=c;
u=c;
}
else {
prim=c;
u=c;
}
}
while (prim) {
cout<<prim->info<<" ";
prim = prim->urm;
}
return 0;
}
Pr7.
/*Se considera o coada cu santinele.Sa se extraga un element.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_coada(nod*&st1, nod*&st2, int x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;}
int extragere_coada(nod*&st1, nod*&st2, int&x){
if(st1->urm!=st2){
c=st1->urm;
st1->urm=c->urm;
x=c->info;
delete c;
return 1;
}
return 0;
}
void afisare_coada(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;
}
cout<<endl;
}
int main(){
int i;
st1=new nod;
st2=new nod;
st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_coada(st1, st2, x);
}
afisare_coada(st1, st2);
if(extragere_coada(st1, st2, x))
cout<<"Elementul sters este:"<<x<<endl;
else cout<<"Nu se poate sterge element pt. ca coada este vida";
afisare_coada(st1, st2);
return 0;
}
Pr8.
/*Se considera o stiva cu santinele.Sa se extraga un element.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_stiva(nod*&st1, nod*&st2, int x){
nod*p=new nod;
p->info=x;
p->urm=st1->urm;
st1->urm=p;
}
void extragere_stiva(nod*&st1, nod*&st2, int x){
if(st1->urm==st2) cout<<"Nu se poate extrage element";
else{
c=st1->urm;
st1->urm=c->urm;
delete c;
}
}
void afisare_stiva(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;
}
}
int main(){
int i;
st1=new nod; st2=new nod; st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_stiva(st1, st2, x);
}
extragere_stiva(st1, st2, x);
afisare_stiva(st1, st2);
return 0;
}
Pr9.
/*Se considera o lista cu santinele.Sa se creeze o alta lista din ea care sa
contina elementele impare*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *st1, *st2, *st3, *st4, *c;
int i, n, x;
void adaugare(nod*&st1, nod*&st2, int&x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;
}
void afisare(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;}
}
int main(){
int i;
st1=new nod; st2=new nod; st1->urm=st2;
st3=new nod; st4=new nod; st3->urm=st4;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare(st1, st2, x);
}
cout<<"Lisa initiala este:";
afisare(st1, st2);
cout<<endl;
p=st1->urm;
while(p!=st2){
if(p->info%2!=0)
adaugare(st3, st4, p->info);
p=p->urm;
}
afisare(st3, st4);
return 0;
}
Pr10.
/*Se considera o lista cu doua santinele.Sa se stearga primul elem par din lista.*/
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;};
nod *p, *st1, *st2, *c;
int i, n, x;
void adaugare_lista(nod*&st1, nod*&st2, int x){
nod*p=new nod;
st2->urm=p;
st2->info=x;
st2=p;
}
void afisare_lista(nod *st1, nod*st2){
p=st1->urm;
while(p!=st2){
cout<<p->info<<" ";
p=p->urm;}
}
int extragere_prim_par(nod*&st1, nod*&st2, int&x){
p=st1;
while(p->urm->info%2!=0)
p=p->urm;
if(p->urm!=st2){
c=p->urm;
p->urm=c->urm;
x=c->info; delete c; return 1;}
return 0;
}
int main(){
int i;
st1=new nod;
st2=new nod;
st1->urm=st2;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare_lista(st1, st2, x);}
if(extragere_prim_par(st1, st2, x))
cout<<"S-a sters primul elem par:"<<x;
else cout<<"Nu se poate efectua stergere";
cout<<endl;
afisare_lista(st1, st2);
return 0;
}
Pr10;
//Se considera o lista circulara.
//afisati lista
#include <iostream>
using namespace std;
struct nod{
int info;
nod *urm;
};
nod *p, *prim;
int i, n, x;
void adaugare(nod *&prim,int x){
nod*p=new nod;
p->info=x;
p->urm=prim;
prim=p;
}
void afisare(nod*prim){//afisare lista circulara
p=prim;
do{
cout<<p->info<<" ";
p=p->urm;
}while(p!=prim);
}
int main(){
int i;
prim=0;
cin>>n;
for(i=1;i<=n;i++){
cin>>x;
adaugare(prim,x);
}
p=prim;
while(p->urm) p=p->urm;
p->urm=prim;//se face lista circulara
cout<<"Lisa initiala este:";
afisare(prim);
return 0;
}
Teste de informatică
1. Care din următoarele expresii furnizează rezultatul 1 dacă a şi b sunt ambele pozitive:
a) (a > 0) && (a > b)
b) a*b > 0
c) (a > 0) || (b>0)
d) (a*b > 0) && (b > 0)
2. Considerăm că variabila a are valoarea –13. Cărui tip poate aparţine această variabilă:
a) unsigned int
b) long
c) char
d) double
4. Dacă a, b, c, d sunt variabile de tip int, ce valoare are expresia E = a/b/c – a dacă a=36, b=6, c=6, d=4?
5. Dacă N este o variabilă de tip unsigned int, ce rezultat se obţine prin expresia: N & 15 ? Cu ce este
echivalentă această expresie?
7. Fie expresia: (N >> 3) & 1 Daţi un exemplu de valoare pentru N astfel încât expresia să furnizeze rezultatul
1 şi un exemplu de valoare pentru N astfel încât expresia să furnizeze rezultatul 0. Ce face expresia?
8. Daţi valori pentru variabilele de tip int a, b, c astfel încât expresia a < b < c să furnizeze rezultatul 0.
9. Scrieţi un program care citeşte un număr natural N de 3 cifre şi determină în variabila M şi apoi afişează
numărul obţinut din N prin eliminarea cifrei din mijloc.
Functii(completare)
/*
//maximul din sir cu int
#include <iostream>
using namespace std;
int a[100], n, i;
int maxim (int a[100], int n)
{
int maxi=0,j;
for (j=1; j<=n; j++)
if (maxi<a[j]) maxi=a[j];
return maxi;
}
int main()
{
cout << "Dati un numar n";
cin>>n;
for (i=1; i<=n; i++)
{
cout<<"dati un element a"<<endl;
cin>>a[i];
}
cout<<"maximiul este: "<< maxim(a,n);
return 0;
}*/
/*
//maximul din sir cu void
#include <iostream>
using namespace std;
int a[100], n, i,M;
void maxim (int a[100], int n,int & MaxRez)
{
int maxi=-1000000,j;
for (j=1; j<=n; j++)
if (maxi<a[j]) maxi=a[j];
MaxRez=maxi;
}
int main()
{
cout << "Dati n";
cin>>n;
for (i=1; i<=n; i++)
{
cout<<"dati un el:"<<endl;
cin>>a[i];
}
maxim(a,n,M);cout<<"maximul este: "<<M;
return 0;
}*/
/*
//produsul el. pare dintr-un sir cu int si void
#include <iostream>
using namespace std;
int a[100], n, i,pr;
int produs1 (int a[100], int n)
{
int p=1,j;
for (j=1; j<=n; j++)
if (a[j]%2==0) p*=a[j];
return p;
}
void produs2 (int a[100], int n,int &p)
{
int j;
p=1;
for (j=1; j<=n; j++)
if (a[j]%2==0) p*=a[j];
}
int main()
{
cout << "Dati n";
cin>>n;
for (i=1; i<=n; i++)
{
cout<<"dati un el:"<<endl;
cin>>a[i];
}
cout<<"prod par este: "<<produs1(a,n);
produs2(a,n,pr);cout<<"prod este:"<<pr;
return 0;
}
*/
/*
//ordonare sir
#include <iostream>
using namespace std;
int a[100], n, i,j,pr;
int main()
{
cout << "Dati n";
cin>>n;
for (i=1; i<=n; i++)
{
cout<<"dati un el:"<<endl;
cin>>a[i];
}
cout<<"sir initial"<<endl;
for(i=1;i<=n;i++)cout<<a[i]<<" ";
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])swap(a[i],a[j]);
cout<<endl<<"sir final"<<endl;
for(i=1;i<=n;i++)cout<<a[i]<<" ";
*ordonare sir descrescator
*afisare
return 0;
}
*/
//
//Ordonati elementele dintr-un sir cu o functie de citire vector, afisare vector, ordonare vector
#include <fstream>
using namespace std;
ifstream f("functii.in");
ofstream g("functii.out");
int n,i,j,a[100]; //vectorii se transmit prin adresa implicit !!!!
void citeste(int x[100],int &n)
{
int i;
f>>n;
for( i=1; i<=n; i++) f>>x[i];
}
void afiseaza(int x[100],int n)
{
int i;
for( i=1; i<=n; i++) g<<x[i]<<" ";
g<<endl;
}
void ordonare(int x[100],int n)
{
int i,j;
for( i=1; i<=n; i++)
for(j=i+1; j<=n; j++)
if(x[i]>x[j]) swap(x[i],x[j]);// functie ce inverseaza a[i] cu a[j] !!!
}
int main()
{
citeste(a,n);
afiseaza(a,n);
ordonare(a,n);
afiseaza(a,n);
f.close();
g.close();
return 0;
}
Altele
//Se considera o matrice mxn.
//Sa se afiseze :
//c) sa se af. o matr identica ca dim cu prima in care sa apara 0 pt el par si 1 pt el impar
#include <iostream>
int a[15][20],m,n,i,j,k;
int main()
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
//a)
for(j=1;j<=n;j++)
if(a[1][j]%2==0)k++;
cout<<endl;
//b)
for(i=1;i<=m;i++)
if(a[i][1]==3)k++;
cout<<endl;
//c)
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
cout<<endl;
return 0;
//Sa se afiseze :
#include <iostream>
int a[15][20],m,n,i,j,s,mini,cif;
int main()
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
//a)
cout<<"ultima linie";
for(j=1;j<=n;j++)
if(a[m][j]%5==0)
cout<<a[m][j]<<" ";
cout<<endl;
//b)
cout<<"ultima coloana";
for(i=1;i<=m;i++)
if(a[i][n]==5)
cout<<"el egale cu 5 sunt:"<<a[i][n]<<" ";
cout<<endl;
//c)
s=0;
mini=a[1][1];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(mini>a[i][j])mini=a[i][j];
while(mini){cif=mini%10;s+=mini;mini=mini/10;}
return 0;
#include<fstream>
#include<iostream>
#include<time.h>
#include<stdlib.h>
int i,j,n,m;
fstream g("nr.in",ios::out);
int main () {
g<<n<<" "<<endl;
srand(time(NULL));
for(i=1; i<=n; i++)
g.close();
return 0;
# include <fstream>
int a[14005],n,b[14005];
fstream f("nr.in",ios::in);
fstream g("nr.out",ios::out);
int m;
if (a[p]>a[q])
{ m=a[p];a[p]=a[q];a[q]=m;}
int i,j,k;
if (a[i]<=a[j]) b[k++]=a[i++];
else b[k++]=a[j++];
while (i<=m) b[k++]=a[i++];
k=1;
for (i=p;i<=q;i++)a[i]=b[k++];
int m;
else
m=(p+q)/2;
divimp (p,m);
divimp (m+1,q);
interc (p,q,m);
{int i;
f>>n;
divimp (1,n);
f.close();g.close();
return 0;
}
//ordonarea cu metoda QuickSort - complexitate O(nlog(n))
#include<fstream>
#include<time.h>
fstream f("nr.in",ios::in);
fstream g("nr.out",ios::out);
int a[500005],n,k;
int i=li,j=ls,c,i1=0,j1=-1;
while(i<j)
if(a[i]>a[j])
c=a[j];
a[j]=a[i];
a[i]=c;
i=i+i1; j=j+j1;
k=i;
int k;
if(li<ls)
{
poz(li,ls,k);
quick(li,k-1);
quick(k+1,ls);
int main()
int i,t1,t2;
f>>n;
for(i=1;i<=n;i++) f>>a[i];
t1=clock();
quick(1,n);
t2=clock();
g<<(float)(t2-t1)/CLK_TCK<<" secunde"<<CLK_TCK<<endl;
for(i=1;i<=n;i++)
g.close(); f.close();
return 0;
#include <iostream>
#include<fstream>
#include <algorithm>
using namespace std;
fstream f("sir.in",ios::in);
fstream g("sir.out",ios::out);
int a[55],n,i,j,aux;
int main()
f>>n;
f>>a[i];
sort(a,a+n);
g<<a[i]<<" ";
g<<endl;
/* f>>n;
for(i=1;i<=n;i++)
f>>a[i];
sort(a+1,a+n+1);
for(i=1;i<=n;i++)
g<<a[i]<<" ";
g<<endl;*/
f.close(); g.close();
return 0;
}
Anexa 4B – Tematica pentru proba scrisă
Informatică
1. Algoritmi
1.1. Noţiunea de algoritm, caracteristici
1.2. Date, variabile, expresii, operaţii
1.3. Structuri de bază (liniară, alternativă şi repetitivă)
1.4. Descrierea algoritmilor (programe pseudocod)
2. Elementele de bază ale unui limbaj de programare (Pascal sau C, la alegere)
2.1. Vocabularul limbajului
2.2. Constante. Identificatori
2.3. Noţiunea de tip de dată. Operatori aritmetici, logici, relaţionali
2.4. Definirea tipurilor de date
2.5. Variabile. Declararea variabilelor
2.6. Definirea constantelor
2.7. Structura programelor. Comentarii
2.8. Expresii. Instrucţiunea de atribuire
2.9. Citirea/scrierea datelor
2.10. Structuri de control (instrucţiunea compusă, structuri alternative şi
repetitive)
3. Subprograme predefinite
3.1. Subprograme. Mecanisme de transfer prin intermediul parametrilor
3.2. Proceduri şi funcţii predefinite
4. Tipuri structurate de date
4.1. Tipul tablou
4.2. Tipul şir de caractere – operatori, proceduri şi funcţii predefinite pentru:
citire, afişare, concatenare, căutare, extragere, inserare, eliminare şi conversii
(şir ↔ valoare numerică)
4.3. Tipul înregistrare
5. Fişiere text
5.1. Fişiere text. Tipuri de acces
5.2. Proceduri şi funcţii predefinite pentru fişiere text
6. Algoritmi elementari
6.1. Probleme care operează asupra cifrelor unui număr 2
6.2. Divizibilitate. Numere prime. Algoritmul lui Euclid
6.3. Şirul lui Fibonacci. Calculul unor sume cu termenul general dat
6.4. Determinare minim/maxim
6.5. Metode de ordonare (metoda bulelor, inserţiei, selecţiei, numărării)
6.6. Interclasare
6.7. Metode de căutare (secvenţială, binară)
6.8. Analiza complexităţii unui algoritm (considerând criteriile de eficienţă
durata de executare şi spaţiu de memorie utilizat)
7. Subprograme definite de utilizator
7.1. Proceduri şi funcţii
– declarare şi apel
– parametri formali şi parametri efectivi
– parametri transmişi prin valoare, parametri transmişi prin referinţă
– variabile globale şi variabile locale, domeniu de vizibilitate
7.2. Proiectarea modulară a rezolvării unei probleme
1.Algoritmi
Pentru ca o maşină de calcul să poată rezolva o anumită problemă, programatorul trebuie mai întâi
să stabilească un algoritm care sa rezolve problema respectiva.
Caracteristicile algoritmilor
1) Finitudine – proprietatea algoritmilor de a furniza datele de ieşire într-un timp finit (adica dupa
un număr finit de paşi).
2) Claritatea - algoritmul trebuie să descrie operaţiile clar şi fără ambiguiăţi.
3) Generalitatea – proprietatea algoritmilor de a rezolva o intreagă clasă de probleme de acelaşi fel.
(algoritmul de rezolvare a ec. de gr. II va rezolva orice ecuatie de gradul II, indiferent de datele de
intrare)
4) Corectitudinea – spunem că un algoritm este corect dacă el furnizează în mod corect datele de
ieşire pentru orice date de intrare.
Logice (Rezultatul lor poate avea numai doua valori :TRUE sau FALSE; Operatorii sunt cei din logica
matematica : OR, AND, NOT .De asemenea este permis sa folosim si operatorii <, >, >= (mai mare sau
egal), <= (mai mic sau egal), <> (diferit).
Exemple : a OR b, unde a si b sunt variabile logice ;
Sau (a>=b) AND (c<d) )
De tip sir de caractere ( Se folosesc constante si variabile de tip sir de caractere . Operatorul + are
semnificatia de concatenare (scrierea a celor doua siruri unul dupa altul ).
Exemplu 'aca'+'sa' rezulta 'acasa'
Operatii
Clasificare operatii :
Operatii de intrare si iesire ;
Operatii de atribuire ;
Operatii de decizie ;
Operatii de decizie
În general, în functie de anumite conditii, trebuie facute anumite operatii sau altele. Operatia prin care testam
acele conditii se numeste operatia de decizie. În functie de rezultatul testului, algoritmul executa anumite
operatii.
Structura liniară (secventiala) este o secvenţă de instrucţiuni care se execută de sus in jos, o singură dată. O
astfel de structură poate să conţină instrucţiuni pentru citirea şi scrierea datelor, calcule matematice (expresii)
— instrucţiuni de atribuire.
Ex. structura liniara pseudocod Ex. structura liniara schema logica
Pas 1;
Pas 2;
Pas 3;
...... Pas 1;
Pas 2;
Pas n;
Pas 3;
......
Pas n;
citeste a,b,c
s ← a+b+c
med ← s/3
scrie med
Structura alternativa (de decizie) este o operaţie de decizie şi două blocuri procedurale acţiune 1 şi
acţiune 2 dintre care se execută numai unul : fie acţiune 1 în cazul în care condiţia este adevărată, fie acţiune
2 în cazul în care condiţia este falsă.
Cele două ramuri ale structurii alternative se închid apoi în acelaşi punct al structurii care determină
continuarea algoritmuluicu operaţiile din structura următoare structurii alternative.
forma generala: schema logica
dacă condiţie atunci
acţiune 1;
altfel
acţiune 2;
sfârşit_dacă
Observaţii:
Valoarea pas poate fi si negativa
Dacă condiţia contor<=valf are de la început valoarea fals, instrucţiunile nu se execută nici măcar o
dată.
Ex: Calculati produsul p=1*2*3*..*n
Date de intrare: n intreg.
Date de iesire:p intreg
Citeste n
p1
pentru i1,n,1 executa
pp*i
sfarsit pentru
Scrie p
Executia instrucţiunii:
Pas 1: Se evaluează condiţia
Pas 2: Dacă conditia este falsă, se iese din instrucţiunea cât_timp; Dacă conditia este adevărată, se execută
instructiunile, apoi se revine la Pas 1, la evaluarea conditiei.
Observaţii:
Instrucţiunea se execută, cât timp valoarea condiţiei este adevărat
Dacă condiţia are de la început valoarea fals, instrucţiunea nu se execută nici măcar o dată.
Ex: Calculati produsul p=1*2*3*..*n
Date de intrare: n intreg.
Date de iesire:p intreg
Citeste n;
p1 i1
cat_timp(i<=n)executa
pp*i
ii + 1
sfarsit cat_timp
Scrie p
3) Structura cu numar necunoscut de repetitii si cu test final (executa… cat timp DO-WHILE)
Structura repetitivă cu test final executa … cât_timp
execută
instrucţinuni
cât_timp (condiţie)
Executia instrucţiunii:
Pas 1: Se executa instructiunile
Pas 2: Dacă conditia este falsă, se iese din instrucţiunea cât_timp;Dacă conditia este adevărată, se trece la Pas
1
Observaţii:
Instrucţiunile se execută, cât timp valoarea condiţiei este adevărat
Instrucţiunile se execută cel putin o dată.
4) Structura cu numar necunoscut de repetitii si cu test final (repeta ..pana cand REPEAT UNTIL )
Sintaxa: Schema logica
repeta
instrucţinune;
pana cand conditie
Executia instrucţiunii:
Pas1: Se execută secvenţa de instructiuni, apoi se verifică condiţia
Pas2: dacă condiţia este falsă, se execută din nou secvenţa(se trece la pasul 1); Dacă valoarea este adevărată,
se iese din repetare.
Observaţii:
este un ciclu cu test final pentru că mai întâi se execută secvenţa şi apoi se verifică condiţia;
este un ciclu cu număr necunoscut de paşi, numărul minim de execuţii asigurat pentru secvenţă
este 1 (când din start condiţia este adevărată);
2.2. Constante.Identificatori
O constant este o valoare care nu se modifica pe parcursul executiei unui program. Se declare cu
cuvantul cheie „const”.
Constantele pot fi: intregi, constantelogice( booleene), reale, de tip catacter si sir de caractere.
Constantele de tip intregi (int,long sau long long) sunt numere întregi: 45, -123, 0, 8965 etc.
Constantele logice(booleene) – de tip bool sunt true şi false
Constantele de tip float sau double sunt numere reale: 3.14, 1.6867, 0.0001, 7.0
Constantele de tip caracter (char) reprezintă un singur caracter ASCII.
De exemplu, 'a', 'h', 'O', 'F'. Caracterele se pun întotdeauna între două apostrofuri.
Sirurile de caractere, se pun între ghilimele. Exemplu: "acesta este un string.".
Simbolul "P" este un string, nu un caracter de tip char.
Operatori aritmetici
+ (adunare) a+b
- (scadere) a-b
* (inmultire) a*b
% (modulo restul impartirii 10%3 este 1, 125%10 este 5)
/ (impartire sau div(=câtul))
1) / este „div” - atunci cand ambele numere din operatie sunt intregi
ex: 13/2=6 5/2= 2
2) / „este impartire” - atunci cand cel putin unul din numere este un numar real
Ex:7.0/2=3.5
Operatori logici
! not (negat)
&& and (si)
|| or (sau)
Ex: a<=b && a<c (explicatie: a<=b si a<c)
c!=a || c!=b (c diferit de a sau c diferit de b)
!a (explicatie: not a)
!(a<=b) a>b
!(a<b) a>=b
!(a!=b) a==b
Operatori relationali
> (mai mare)
< (mai mic
>= (mai mare si egal)
<= (mai mic si egal)
== (egal
!= (diferit)
Ex: (3>1) este adevarat(valoarea 1)
(3==1) este fals (valoarea 0)
Exemplu:
typedef float real; //se defineste tipul de date „real”
Tipul enumerat defineste o multime ordonata de valori prin enumerarea identificatorilor care
desemneaza valorile. Un tip enumerat poate primi un nume:
enum tip_enumerat
{identificator 1 [=valoare 1],identificator 2 [=valoare 2], ...identificator n [=valoare n]};
identificator 1 desemneaza cea mai mica valoare, avand numarul de ordine 0; ceilalti identificatori
au numerele de ordine.
Exemple:
#include<iostream>
using namespace std;
enum disciplina{mate,info,fizica};
disciplina disc_pref=info;
int a,b,s;
int main()
{ if(disc_pref==info)cout<<"El indrageste informatica";
else cout<<"El indrageste matematica sau fizica";
return 0;}
2.5. Variabile. Declararea variabilelor
Informatiile dintr-un program trebuie salvate undeva pentru a putea fi utilizate. Variabilele sunt
responsabile de salvarea informatiilor din program. Pentru a putea utiliza variabile acestea trebuie
declarate- adica se specifica tipul si numele variabilei.
Deci o variabila este o entitate caracterizata de un nume, un tip si o valoare.
Ex: int a; //numele variabilei este „a” si este de tipul intreg
float b=2.14; //numele variabilei este „b” si este de tipul real, fiind initializata cu valoarea 2.14
} //sfarsitul programului
Instrucţiunile reprezintă comenzi către calculator; sarcinile pe care acesta trebuie să le
îndeplinească.
Toate instrucţiunile trebuie să se termine cu punct şi virgulă ;
Puteţi avea mai multe instrucţiuni pe aceeaşi linie atâta timp cât le separaţi prin punct şi virgulă.
In program pot exista comentarii . Comentariile nu fac nimic (nu sunt instrucţiuni).
Sunt de 2 feluri:
- comentariile întinse pe un rând (încep cu //);
- comentariile întinse pe mai multe rânduri (încep cu /* şi se termină cu */).
Programul de mai sus afisaza „Salut” pe ecran.
In C++ este diferenta intre literele mari si mici. Ex: Void ≠void , MAIN ≠main
2.8. Expresii. Instructiuni de atribuire
Datele (constante sau variabile) legate prin operatori, formeaza expresii. Operatorii care pot fi
aplicati datelor in functie de tipul datelor(operanzilor).
O expresie este o combinatie corecta din punct de vedere sintactic, formata din operanzi si
operatori. Expresiile, ca si operanzii,au tip si valoare.
Operatorul condiţional ? este un operator ternar. Prima expresie se evaluează şi dacă ea este
diferită de zero sau adevărată, rezultatuleste valoarea celei de-a doua expresii, altfel rezultatul
este valoareaexpresiei a treia. De exemplu expresia: z = (a>b) ? a : b; calculeaza maximul dintre
a si b si se atribuie maximul lui z.
Atribuirea (asignarea) se noteaza cu semnul „ = ”. Atribuirea este operaţia prin care puteţi schimba
valoarea unei variabile în mod direct.
Forma generala a unei atribuiri: variabila=expresie;
Mecanismul de atribuire funcţionează astfel: se calculeaza valoarea expresiei din partea dreapta si
apoi rezultatul expresiei se da partii din stanga, care trebuie să fie o variabilă.
x=2; // x primeste valoarea 2
a=a+1; //a creste cu 1
s=s+x; //s creste cu x
p=p*x; //p creste de x ori
x=y; // lui x i se atribuie valoarea lui y
Afisarea se face cu comanda cout – realizeaza afisarea pe ecran a unui mesaj si/sau a unei variabile
1)cout<<"Salut"; //afiseaza cuvantul salut pe ecran
2)cout<<s; //afiseaza cotinutul variabilei s pe ecran
3)cout<<"suma este: "<<s<<endl;
//daca variabila s are valoarea 201 se afiseaza pe ecran „ suma este: 201” si apoi cursorul
trece la rand nou
4)cout<<"suma este: "<<s<<endl <<"produsul este: "<<p;
//afiseaza suma este: 201
produsul este: 330 (pe randuri diferite din cauza lui „endl”)
if(conditie) operatie1;
else operatie2;
varianta a)
if(conditie) operatie1;
varianta b)
Interpretare
Varianta a)
Daca conditia este adevarata se executa „operatie1”, iar daca este falsa se executa „operatie2”.
Nu se pot executa ambele operatii ( „operatie1” si „operatie2” ).
La executia if-ului se face „operatie1” sau „operatie2”, nu se poate sa nu se execute nici una.
Varianta b)
La if-ul simplificat se realizeaza executia „operatie1” daca condita este adevarata, si daca conditia
este falsa nu se face nimic.
Daca if-ul are mai multe operatii ( 2,3,..) acestea se grupeaza intre acolade {….}-instructiunea
compusa.
Ex: Min a doua numere
#include <iostream>
using namespace std;
int a,b;
int main()
{
cout <<"Dati valori pentru a si b";
cin>>a>>b;
if (a<b)
cout << "minimul este:"<<a<<endl;
else
cout << "minimul este:"<<b<<endl;
return 0;
}
switch(expresie) {
case expresie1: instructiune1; break;
case expresie2: instructiune2; break;
...
case expresien: instructiunen; break;
default: instructiune
}
Observatie:
Expresie 1, 2, ...n, sunt expresii constante.
Interpretare:
Se evalueaza expresie; daca valoarea ei coincide cu una din valorile expresiilor specificate se
executa secventa corespunzatoare si toate secventele care urmeaza pana la intalnirea instructiunii
break sau pana la intalnirea '}'; altfel se executa default: instructiune;
Ex:
#include<iostream>
using namespace std;
char lit;
int main()
{
cin>>lit;
switch(lit) {
case 'a': cout<<"litera tastata este a "; break;
case 'A': cout<<"itera tastata este A"; break;
default: cout<<"litera tastata nu este A sau a";
}
return 0;
}
Ordinea de executie:
se face initializarea,
se verifica conditia,daca conditia este adevarata se fac operatiile,
se incrementeaza pasul,
se verifica conditia,daca conditia este adevarata se fac operatiile,
se incrementeaza pasul,……
si tot asa pana conditia devine falsa
executie:
i - ia valorile vali,vali+1,vali+2, ….valf-1,valf si pentru fiecare valoare a lui i se executa „operatie1”.
s=0;
for(i=1;i<=100;i++) s+=i; //sau s=s+i;
cout<<”suma este: ”<<s;
sau
while(cond){
instructiuni1;
}
do{
instructiune1;
}while(cond);
(se stie)
Cmmdc –ul a doua numere se poate calcula cu Algoritmul lui Euclid (exista doua varianta prin
scaderi repetate sau prin impartiri repetate)
Algoritmul lui Euclid prin scaderi repetate – se scade din x pe y (daca x>y),sau se scade din y pe x
(daca y>x) in mod repetat până x devine egal cu y
Algoritmul lui Euclid prin impartiri repetate– împarte x la y, apoi împarte y la x%y si tot asa până
restul obtinut devine 0. Împartitul este cmmdc.
Sirul lui Fibonacci este un celebru sir realizat dupa regula: fiecare număr reprezintă suma a două
numere anterioare, începând cu 0 și 1. Astfel, șirul obtinut este: 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
144..etc.
3 6 12 45 -1 20
-1 3 6 12 45 20
-1 3 6 12 20 45
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n;i++){
mini=a[i];k=i;
for(j=i+1;j<=n;j++)
if(a[j]<mini)
{mini=a[j];k=j;}
swap(a[i],a[k]);
}
for(i=1;i<=n;i++) cout<<a[i]<<" ";
Ex: numeric (se afla minimul din sirul pe fond roz )
12 3 45 6 -1 20
-1 3 45 6 12 20
-1 3 45 6 12 20
-1 3 6 45 12 20
-1 3 6 12 45 20
-1 3 6 12 20 45
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])k[i]++;
else k[j]++;
for(i=1;i<=n;i++)b[k[i]+1]=a[i];
for(i=1;i<=n;i++)cout<<b[i]<<" ";
6.6. Interclasarea
Se considera doi vectori ordonati(sa presupunem crescator)
Se considera doua siruri de elemente ambele ordonate( fie crescator). Interclasarea înseamnă
relizarea unui sir rezultant ordonat crescator cu elementele celor doua siruri.
Se percurg simultan cei doi vectori si se compara un element dintr-un vector cu un element din
celălalt vector. Elementul cu valoarea mai mic
este copiat în vectorul destinatie si se avanseaza la urmatorul element dupa cel copiat. Se continua
procesul pana cand se termina unul dintre cele doua siruri restul sirului ramas este copiat direct in
sirul rezultant.
#include <iostream>
using namespace std;
int i, j, n,k,a[100], b[100], c[100],m;
int main()
{
cin>>n>>m;
for(i=1; i<=n; i++)
cin>>a[i];
for(j=1; j<=m; j++)
cin>>b[j];
i=j=k=1;
while(i<=n and j<=m)
if(a[i]<=b[j]) c[k++]=a[i++];
else c[k++]=b[j++];
while(i<=n) c[k++]=a[i++];
while(j<=m) c[k++]=b[j++];
for(i=1; i<=k-1; i++) cout<<c[i]<<' ';
return 0;
}
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
gasit=false;
for(i=1;i<=n;i++)
if(a[i]==x) gasit=true;
if(gasit==true)cout<<"elementul exista";
else cout<<"elementul nu exista";
Ex2:
N=7, x=21
3 6 20 23 123 200 231 st=1 dr=7 mij=(1+7)/2=4( 23 ) x<23
#include <iostream>
using namespace std;
int a[1000],n,i,j,m,x,gasit;
int cauta_bin(int a[1000],int n, int x)
{
int mij,st=1,dr=n,gasit=0;
do
{
mij=(st+dr)/2;
if (a[mij]==x) gasit=1;
else if(a[mij]<x) st=mij+1;
else dr=mij-1;
}while(st<=dr && gasit==0);
if (gasit==1) return mij;
else return 0;
}
int main()
{
cin>>n>>x;
for(i=1;i<=n;i++) cin>>a[i];
cout<<cauta_bin(a,n,x);
return 0;
}
6.8. Analiza complexitatii unui algoritm
Ex:
Complexitate timp - O(1) –in general se fac cateva calcule
ordonarea Bubble Sort, ordonarea prin selectie si ordonarea prin insertie si prin numarare
are tot complexitate O(n2)