Subiectul 4
Se dă un număr natural nenul care are maxim 9 cifre. Scrieti un program care să afiseze media aritmetică a cifrelor sale.
#include
using namespace std;
double MAritmeticaCifre(unsigned int x){
int S = 0, k = 0;
while(x > 0){
S += (x % 10);
x /= 10;
k++;
}
return (double)S/k;
}
int main()
{
int n;
cout << "n = "; cin >> n;
cout << MAritmeticaCifre(n);
return 0;
}
Subiectul 10
Sa se afiseze toate numerele prime cuprinse in intervalul [a,b], unde a,b sunt numere naturale, a
#include
using namespace std;
bool verificaPrim(int x){
if(x == 1) return false;
for(int i = 2; i * i <= x; ++i)
if(x % i == 0)
return false;
return true;
}
int main()
{
int a, b;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
if(a > b){
int aux = a;
a = b;
b = aux;
}
for(int i = a; i <= b; ++i)
if(verificaPrim(i))
cout << i << " ";
return 0;
}
Subiectul 19
Se citeste un numar natural n diferit de zero. Sa se scrie toate tripletele de numere naturale (a, b, c) pitagoreice (a2+b2=c2) mai mici decat n, nenule.
#include
using namespace std;
int main()
{
int n;
cout << "n = "; cin >> n;
for(int a = 3; a <= n; ++a)
for(int b = a+1; b <= n; ++b)
for(int c = b+1; c <= n; ++c)
if(a*a + b*b == c*c)
cout << a <<" " << b << " " << c << endl;
return 0;
}
Subiectul 20
Se citeste un numar natural n. Sa se verifice daca este palindrom.
#include
using namespace std;
int oglindit(int x){
int og = 0;
while(x > 0){
og = og * 10 + x % 10;
x /= 10;
}
return og;
}
int main()
{
int n;
cout << "n = "; cin >> n;
if(n == oglindit(n))
cout << n << " este palindrom";
else cout << n << " nu este palindrom";
return 0;
}
Subiectul 24
Se citeste un numar natural n. Sa se verifice daca este un numar perfect, adica daca este egal cu suma divizorilor sai, afara lui insusi (ex : 6=1+2+3).
#include
using namespace std;
int sumaDivizori(int n){
int S = 0;
for(int i = 1; i <= n/2; ++i)
if(n % i == 0)
S += i;
return S;
}
int main()
{
int x;
cout << "x = "; cin >> x;
if(x == sumaDivizori(x))
cout << x << " este perfect";
else cout << x << " nu este perfect";
return 0;
}
Subiectul 5
Se citeste un numar intreg n. Sa se transforme numarul din baza 10 in baza 2 retinand cifrele intr-un vector.
#include
#define maxdim 20
using namespace std;
void constructieV(int x, int v[], int &k){
k = 0;
while(x > 0){
v[k] = x % 2;
k++;
x /= 2;
}
}
int main()
{
int n, v[maxdim], k;
cout << "n = "; cin >> n;
constructieV(n, v, k);
for(int i = k-1; i>=0; i--)
cout << v[i] << " ";
return 0;
}
Subiectul 11
Se citesc, pe rand, cifrele unui număr natural (cu cel mult 9 cifre). Sa se reconstituie numarul intr-o variabila de tip long.
#include
using namespace std;
int main()
{
int v[13], nr_cifre;
long int x = 0;
cout << "numar cifre= "; cin >> nr_cifre;
for(int i = 0; i < nr_cifre; ++i)
cin >> v[i];
int p = 1;
for(int i = nr_cifre-1; i>=0; --i){
x = x + v[i] * p;
p *= 10;
}
cout << endl << x;
return 0;
}
Subiectul 25
Se citesc n numere. Sa se afiseze acele numere a caror suma a cifrelor este egala cu numarul de ordine la citire.
#include
using namespace std;
int sumaCifrelor(int x){
int S = 0;
while(x > 0){
S += x % 10;
x /= 10;
}
return S;
}
int main()
{
int v[20], n;
cout << "n = "; cin >> n;
for(int i = 0; i < n; ++i)
cin >> v[i];
for(int i = 0; i < n; ++i)
if(sumaCifrelor(v[i]) == i)
cout << v[i] << " ";
return 0;
}
Subiectul 1
Se citesc n (maxim 30) elemente reale, sa se retina elementele o singura data folosind un sir ajutator.
#include
using namespace std;
void citire(float v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
void afisare(float v[], int n){
for(int i = 0; i < n; ++i)
cout << v[i] << " ";
}
bool cauta(float v[], int n, float x){
for(int i = 0; i < n; ++i)
if(v[i] == x)
return true;
return false;
}
int main()
{
float v[30], u[30];
int n;
cout << "n = "; cin >> n;
citire(v, n);
//constructia vectorului u
u[0] = v[0];
int k = 1;
for(int i = 1; i < n; ++i)
if(!cauta(u, k, v[i])){
u[k] = v[i];
k++;
}
cout << "vectorul continand unicate: ";
afisare(u, k);
return 0;
}
Subiectul 13
Se citesc doua multimi de numere intregi, cu cel mult 20 de elemente, sa se afiseze intersectia lor.
#include
using namespace std;
void citire(int v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
void afisare(int v[], int n){
for(int i = 0; i < n; ++i)
cout << v[i] << " ";
}
bool cauta(int v[], int n, int x){
for(int i = 0; i < n; ++i)
if(v[i] == x)
return true;
return false;
}
int main()
{
int v[20], u[20], w[20];
int n, m;
cout << "n = "; cin >> n;
citire(v, n);
cout << "m = "; cin >> m;
citire(u, m);
//constructia vectorului w = intersectia
int k = 0;
for(int i = 0; i < n; ++i)
if(cauta(u, m, v[i])){
w[k] = v[i];
k++;
}
cout << "vectorul intersectie: ";
afisare(w, k);
return 0;
}
Subiectul 6
Se citesc 2 multimi de numere intregi cu cel mult 20 elemente. Să se afiseze reuniunea lor.
#include
using namespace std;
void citire(int v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
void afisare(int v[], int n){
for(int i = 0; i < n; ++i)
cout << v[i] << " ";
}
bool cauta(int v[], int n, int x){
for(int i = 0; i < n; ++i)
if(v[i] == x)
return true;
return false;
}
int main()
{
int v[20], u[20], w[20];
int n, m;
cout << "n = "; cin >> n;
citire(v, n);
cout << "m = "; cin >> m;
citire(u, m);
//constructia vectorului w = reuniunea
for(int i = 0; i < n; ++i)
w[i] = v[i];
int k = n;
for(int i = 0; i < m; ++i)
if(!cauta(w, k, u[i])){
w[k] = u[i];
k++;
}
cout << "vectorul reuniune: ";
afisare(w, k);
return 0;
}
Subiectul 22
Se citesc doua multimi de numere intregi, cu cel mult 20 de elemente, sa se afiseze produsul cartezian al lor.
#include
using namespace std;
void citire(int v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
void produsCartezian(int a[], int n, int b[], int m){
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cout << "("<> n;
citire(a, n);
cout << "m = "; cin >> m;
citire(b ,n);
produsCartezian(a, n, b, m);
return 0;
}
Subiectul 12
Se citeste un sir de n numere reale. Sa se sorteze crescator, afisandu-se sirul initial, sirul sortat si din nou sirul initial.
#include
using namespace std;
void citire(float v[], float w[], int n){
for(int i = 0; i < n; ++i){
cin >> v[i];
w[i] = v[i];
}
}
/** interschimbare - parcurg v cu 2 indici, i si j,
* j > i, daca nu se respecta ordonarea crescatoare
* a elementelor v[i] si v[j] se interschimba
*
*******/
void bubblesort(float v[], int n){
int aux, sw;
do{
sw = 0;
for(int i = 0; i < n-1; ++i)
if(v[i] > v[i+1]){
aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
sw = 1;
}
}while(sw == 1);
}
void interschimbare(float v[], int n){
int aux;
for(int i = 0; i < n-1; ++i)
for(int j = i+1; j < n; ++j)
if(v[i] > v[j]){
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
void afisare(float v[], int n){
for(int i = 0; i < n; ++i)
cout << v[i] << " ";
}
int main()
{
float v[20], w[20], n;
cout << "n = "; cin >> n;
citire(v, w, n);
cout << endl << "Vectorul initial: ";
afisare(v, n);
bubblesort(v, n);
cout << endl << "Vectorul sortat: ";
afisare(v, n);
cout << endl << "Vectorul initial: ";
afisare(w, n);
return 0;
}
Subiectul 2
Se citeste un sir de numere reale. Sa se inverseze elementele de valoare minima si de valoare maxima, presupunand ca sunt unice.
#include
using namespace std;
void citire(float v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
void afisare(float v[], int n){
for(int i = 0; i < n; ++i)
cout << v[i] << " ";
}
void pozMinMax(float v[], int n, int &pm, int &pM){
int minim = v[0];
int maxim = v[0];
for(int i = 1; i < n; ++i){
if(v[i] < minim){
minim = v[i];
pm = i;
}
if(v[i] > maxim){
maxim = v[i];
pM = i;
}
}
}
int main()
{
float v[20];
int n, pm, pM, aux;
cout << "n = "; cin >> n;
citire(v, n);
pozMinMax(v, n, pm, pM);
aux = v[pm];
v[pm] = v[pM];
v[pM] = aux;
afisare(v, n);
return 0;
}
Subiectul 17
Se citeste un sir de numere intregi sortate strict crescator si un numar intreg nr. Sa se afle daca numarul citit se afla in sir fara a parcurge tot sirul.
#include
using namespace std;
void citire(int v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
int binsearch(int v[], int n, int nr){
int st = 0, dr = n-1;
while(st <= dr){
int m = (st + dr) / 2;
if(nr == v[m]) return m;
else if(nr > v[m]) st = m + 1;
else dr = m -1;
}
return -1;
}
int main()
{
int v[20], n, nr;
cout << "n = "; cin >> n;
citire(v, n);
cout << "nr cautat = "; cin >> nr;
cout << binsearch(v, n, nr);
return 0;
}
Subiectul 21
Se citeste un vector cu n componente numere naturale. Sa se afiseze cmmdc al celor n numere.
#include
using namespace std;
void citire(int v[], int n){
for(int i = 0; i < n; ++i)
cin >> v[i];
}
int cmmdc(int m, int n){
while(m != n)
if(m > n)
m = m - n;
else n = n - m;
return n;
}
int cmmdcV(int v[], int n){
int c = v[0];
for(int i = 1; i < n; ++i)
c = cmmdc(c, v[i]);
return c;
}
int main()
{
int v[20], n;
cout << "n = "; cin >> n;
citire(v, n);
cout << cmmdcV(v, n);
return 0;
}
Subiectul 8
Sa se citeasca o matrice patratica de n*n numere intregi. Sa se calculeze elementul maxim de pe diagonala principala.
#include
using namespace std;
void citire(int a[][10], int n){
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
int maximDP(int a[][10], int n){
int M = a[0][0];
for(int i = 1; i < n; ++i)
if(a[i][i] > M)
M = a[i][i];
return M;
}
int main()
{
int a[10][10], n;
cout << "n = "; cin >> n;
citire(a, n);
cout << maximDP(a, n);
return 0;
}
Subiectul 15
Sa se citeasca o matrice patratica de n*n numere intregi. Sa se calculeze elementul maxim de pe diagonala secundara.
#include
using namespace std;
void citire(int a[][10], int n){
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
int maximDS(int a[][10], int n){
int M = a[0][n-1];
for(int i = 1; i < n; ++i)
if(a[i][n-i-1] > M)
M = a[i][n-i-1];
return M;
}
int main()
{
int a[10][10], n;
cout << "n = "; cin >> n;
citire(a, n);
cout << maximDS(a, n);
return 0;
}
Subiectul 9
Sa se scrie un program care interschimba intr-o matrice data doua linii date.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void interschimbaLinii(int a[][10], int m, int n){
int k1, k2, aux;
cout << "k1 = "; cin >> k1;
cout << "k2 = "; cin >> k2;
for(int j = 0; j < n; ++j){
aux = a[k1][j];
a[k1][j] = a[k2][j];
a[k2][j] = aux;
}
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
int main()
{
int a[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m, n);
interschimbaLinii(a, m, n);
afisare(a, m, n);
return 0;
}
Subiectul 7
Sa se scrie un program care interschimba intr-o matrice data doua coloane date.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void interschimbaColoane(int a[][10], int m, int n){
int k1, k2, aux;
cout << "k1 = "; cin >> k1;
cout << "k2 = "; cin >> k2;
for(int i = 0; i < m; ++i){
aux = a[i][k1];
a[i][k1] = a[i][k2];
a[i][k2] = aux;
}
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
int main()
{
int a[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m, n);
interschimbaColoane(a, m, n);
afisare(a, m, n);
return 0;
}
Subiectul 16
Sa se scrie un program care insereaza intr-o matrice data o linie data cu elemente 0.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
void constructie(int a[][10], int m, int n, int b[][10]){
int k;
cout << "k = "; cin >> k;
for(int i = 0; i < k; ++i)
for(int j = 0; j < n; ++j)
b[i][j] = a[i][j];
for(int j = 0; j < n; j++)
b[k][j] = 0;
for(int i = k+1; i <= m; ++i)
for(int j = 0; j < n; ++j)
b[i][j] = a[i-1][j];
}
int main()
{
int a[10][10], b[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m , n);
afisare(a, m, n);
constructie(a, m , n, b);
afisare(b, m+1, n);
return 0;
}
Subiectul 18
Sa se scrie un program care insereaza intr-o matrice data o coloana data cu elemente 0.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
void constructie(int a[][10], int m, int n, int b[][10]){
int k;
cout << "k = "; cin >> k;
for(int i = 0; i < m; ++i)
for(int j = 0; j < k; ++j)
b[i][j] = a[i][j];
for(int i = 0; i < m; i++)
b[i][k] = 0;
for(int i = 0; i < m; ++i)
for(int j = k+1; j <= n; ++j)
b[i][j] = a[i][j-1];
}
int main()
{
int a[10][10], b[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m , n);
afisare(a, m, n);
constructie(a, m , n, b);
afisare(b, m, n+1);
return 0;
}
Subiectul 3
Sa se scrie un program care elimina dintr-o matrice data o linie data.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void eliminaLinie(int a[][10], int m, int n){
int k;
cout << "k = "; cin >> k;
for(int i = k; i < m-1; ++i)
for(int j = 0; j < n; ++j)
a[i][j] = a[i+1][j];
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
int main()
{
int a[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m, n);
afisare(a, m, n);
eliminaLinie(a, m , n);
afisare(a, m-1, n);
return 0;
}
Subiectul 14
Sa se scrie un program care elimina dintr-o matrice data o coloana data.
#include
using namespace std;
void citire(int a[][10], int m, int n){
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
}
void eliminaColoana(int a[][10], int m, int n){
int k;
cout << "k = "; cin >> k;
for(int i = 0; i < m; ++i)
for(int j = k; j < n-1; ++j)
a[i][j] = a[i][j+1];
}
void afisare(int a[][10], int m, int n){
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
int main()
{
int a[10][10], m, n;
cout << "linii = "; cin >> m;
cout << "coloane = "; cin >> n;
citire(a, m, n);
afisare(a, m, n);
eliminaColoana(a, m , n);
afisare(a, m, n-1);
return 0;
}