Uploaded by Marius Gabriel Bucur

Algoritmi elementari

advertisement
Algoritmi elementari
1.Prima cifră a unui număr
#include <iostream>
using namespace std;
int main()
{ int n; //se declara variabila n de tip intreg
cin>>n; //se citeste numarul n
//se taie pe rand cifrele lui n pana cand se ajunge la prima lui cifra
while(n>9)
{ n=n/10; // se taie pe rand cate o cifra din n }
cout<< n;
Codul afisat mai sus, taie pe rand cifrele numarului n pana cand ajunge
la ultima cifra a acestuia moment, in care se opreste.
2.Suma cifrelor unui număr
#include <iostream>
using namespace std;
int main()
{int n, s=0;
cin >> n;
while (n != 0)
{ s = s + n % 10; // se insumeaza pe rand cifrele lui n
n = n / 10; }
cout << s;
Codul afisat mai sus, parcurge si insumeaza pe rand cifrele lui n
folosind o variabila s pe care in final o afiseaza.
3.Cea mai mare cifră a unui număr
#include <iostream>
using namespace std;
int main()
{int n, maxi=0;
cin>>n;
maxi=n%10; //se initializeaza cea mai mare cifra cu prima cifra din
numar
while(n!=0)
{
//se verifica daca exista cifre mai mari in numar
if(n%10>maxi)
//daca exista atunci variabilei maxi i se atribuie acea cifra
maxi=n%10;
//se taie pe rand cifre din numarul initial pentru a continua
parcurgerea
n=n/10;
}
cout<<maxi;
Codul de mai sus parcurge toate cifrele lui n si foloseste o variabila
maxi pentru a determina cifra cea mai mare din numar pe care in final
o afiseaza.
4. Cea mai mică cifră a unui număr
#include <iostream>
using namespace std;
int main()
{ int n, mini;
cin>>n;
mini=n%10; //se initializeaza mini cu prima cifra din numar
while(n!=0)
{
//se verifica daca exista cifre mai mici in numar
if(n%10<mini)
//daca exista atunci variabilei mini i se atribuie acea cifra
mini=n%10;
//se taie pe rand cifre din numarul initial pentru a continua
parcurgerea
n=n/10;
}
cout<<mini;
Codul afisat mai sus parcurge toate cifrele lui n si foloseste o variabila
maxi pentru a determina cifra cea mai mare din numar pe care in final
o afiseaza.
5.Numărul de cifre ale unui număr
#include <iostream>
using namespace std;
int main()
{ int n, nr;
cin >> n;
// se verifica mai intai cazul particular in care numarul citit este 0
if (n == 0)
//daca numarul este 0 atunci lui nr i se atribuie 1 deoarece n are o
singura cifra
nr = 1;
else
{ //cat timp n este diferit de 0 se numara si se taie pe rand cifrele
acestuia
while (n)
{
nr++;
n = n / 10;
}
}
cout << nr;
Codul afisat mai sus, parcurge cifrele lui n si foloseste o variabila nr
pentru a numara pe rand cifrele numarului n, pe care in final o
afiseaza.
6.Produsul cifrelor unui număr
#include <iostream>
using namespace std;
int main()
{ int n, p;
cin >> n;
p=1; //p se initializeaza cu elementul neutru al inmultirii (altfel produsul
cifrelor ar fi mereu 0)
while (n != 0)
{
p = p * (n % 10);
n = n / 10;
}
cout << p;
Codul afisat mai sus, parcurge si realizeaza produsul cifrelor lui n pe
care il memoreaza intr-o variabila p, pe care in final o afiseaza.
7.Oglinditul unui număr
#include <iostream>
using namespace std;
int main()
{ int n, ogl=0;
cin >> n;
while (n != 0)
{ogl = ogl * 10 + n % 10; // se inverseaza cifra cu cifra numarul
n = n / 10; // se taie pe rand cifrele numarului}
cout << ogl;
Codul afisat mai sus, parcurge cifra cu cifra numarul n si construieste
in variabila ogl, oglinditul / inversul numarului n pe care in final il
afiseza.
8.Media aritmetică a cifrelor unui număr
#include <iostream>
using namespace std;
int main()
{ int n,nr;
float s; //declarata de tipul float pentru a intoarce rezultate reale
cin >> n;
while (n != 0)
{
s = s + n % 10;
nr++;
n = n / 10;
}
if(nr>0)
cout << s/nr;
Codul afisat mai sus, parcurge, numara si insumeaza pe rand cifrele lui
n (numara in variabila nr si insumeaza in variabila s) si afiseaza
media aritmetica a cifrelor acestuia.
9.Testul de palindrom
#include <iostream>
using namespace std;
int main()
{ int n, ogl, cn; // variabila cn memoreaza copia lui n
cin >> n;
cn=n; // copiem valoarea lui n
while (n != 0)
{
ogl = ogl * 10 + n % 10; // se inverseaza cifra cu cifra numarul n
n = n / 10;
}
//testul de palindrom + afisarea mesajului corespunzator
if(cn==ogl)
cout<<"Numarul este palindrom";
else
cout<<"Numarul nu este palindrom";
Palindrom = numar care scris invers este egal cu el insusi. Exemple de
numere care sunt palindroame: 121, 12344321, 100001 etc.
Codul afisat mai jos, construieste in variabila ogl, inversul / oglinditul
numarului n, pe care in final o compara cu copia lui n creata la inceput
si determina daca numarul initial n este un palindrom, afisand un
mesaj corespunzator pe ecran.
10.Eliminarea cifrelor pare dintr-un numar
#include <iostream>
using namespace std;
int main()
{ int n,m,p;//variabila m memoreaza numarul format prin eliminarea
cifrelor pare ale lui n
//variabila p memoreaza o putere a lui 10 si ajuta la construirea numarului
cerut prin adaugarea fiecarei cifre impare pe pozitia
corespunzatoare(unitati,zeci,sute etc.)
cin>>n;
p=1; //p se initializeaza cu elementul neutru al inmultirii
//construim numarul m cu cifrele impare ale lui n, astfel m o sa reprezinte
numarul format prin eliminarea cifrelor pare
while(n>0)
{ if(n%2==1)
{m=(n%10)*p+m;// se adauga cifra pe pozitia corespunzatoare in
numarul nou format(unitati, zeci, sute etc.)
p=p*10;//se mareste puterea lui 10, pentru ca urmatoarea cifra impara
sa fie adaugata din nou pe pozitia corespunzatoare(zeci, sute, mii etc.)
}
n=n/10;}
if(p==1)// daca p ramane egal cu 1 inseamna ca testul n%2==1 nu a fost
trecut pentru nicio cifra a lui n, deci numarul are numai cifre pare
cout<<"Numarul are numai cifre pare";
else
{cout<<"Prin eliminarea cifrelor pare ale lui n se obtine numarul: "<<m;}
11. Inlocuirea primei cifre cu ultima
#include <iostream>
using namespace std;
int main()
{
int n,cn,ultima,p;
//variabila cn memoreaza numarul obtinut prin inlocuirea primei cifre cu
ultima
//variabila ultima memoreaza ultima cifra a numarului n
//variabila p memoreaza o putere a lui 10 care indica ordinul pozitiei
primei cifre in numarul n (unitati, zeci, sute, etc.)
cin>>n;
//se memoreaza ultima cifra
ultima=n%10;
//se initializeaza cn cu valoarea numarului n
cn=n;
p=1;
while(n>9)//eliminam cifre din numar pana cand n este egal cu prima sa
cifra
{
p=p*10;//se mareste puterea lui 10 pana cand se ajunge la prima cifra a lui
n
n=n/10;//se elimina o cifra din numar
}
// ultima*p- ultima cifra ia prima pozitie in noul numar
// +cn%p - se adauga cifrele de pe restul pozitiilor la numar
// /10)*10- se elimina ultima cifra din numar pentru a fi inlocuita cu prima
// +n- ultima cifra devine prima cifra memorata in n
cn=((ultima*p + cn%p)/10)*10+n;
//se afiseaza numarul obtinut
cout<<"Numarul format prin inlocuirea primei cifre cu ultima in numarul n
este : "<<cn;}
12.Cel mai mare divizor comun (cmmdc)
#include <iostream>
using namespace std;
int main()
{int a,b;
cin>>a>>b;
//se determina cel mai mic divizor comun prin scaderi repetate
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
//se afiseaza a (care memoreaza acum cmmdc-ul dintre cele 2 numere)
cout<<a;
Codul de mai sus determina cel mai mare divizor comun al lui a si b
prin scaderi repetate, afisandu-l la final.
13. Cel mai mic multiplu comun (cmmmc)
#include <iostream>
using namespace std;
int main()
{ int a,b,x,y; //variabilele x si y memoreaza copia numerelor a si b
cin>>a>>b;
x=a;
y=b;
// se determina cmmdc-ul dintre a si b folosind variabilele x si y
while(x!=y)
{
if(x>y)
x=x-y;
else
y=y-x;
}
// in urma executarii instructiunii while cmmdc-ul este memorat acum in
variabila x
// se afiseaza cmmmc dintre cele doua numere folosind formula de
determinare acestuia cu ajutorul cmmdc
cout<<(a*b)/x;
Codul de mai sus afla cel mai mare divizor comun (cmmdc) al celor
doua numere pentru ca mai apoi sa-l foloseasca pentru a determina
cel mai mic multiplu comun (cmmmc) folosind formula consacrata,
cmmmc = (a*b) / cmmdc.
14.Testul de numar prim
#include <iostream>
using namespace std;
int main()
{ int n,d,nr; //variabila nr numara divizorii proprii ai lui n
cin>>n;
//se determina daca numarul are divizori proprii
for(d=2;d<=n/2;d++)
{//d este initalizat cu 2 (primul divizor propriu posibil)
//instructiunea merge pana la n/2 deoarece nu pot exista divizori proprii
intre n/2 si n
if(n%d==0) //conditia ca d sa fie divizor propriu al lui d
nr++;
}
if(nr==0)
cout<<"Numarul este prim";
else
cout<<"Numarul nu este prim";
return 0;
}
Codul afisat mai jos determina daca numarul are divizori proprii, pe
care ii numara folosind variabila nr. In final, daca numarul are divizori
proprii, programul afiseaza mesajul “Numarul nu este prim”, iar daca
nr = 0 (numarul nu are divizori proprii), afiseaza mesajul “Numarul
este prim”.
Un numar este prim daca are doar divizori improprii (daca este
divizibil doar cu 1 si cu el insusi).
15.Divizorii proprii ai unui numar
#include <iostream>
using namespace std;
int main()
{ int n,d;
cin>>n;
//se determina divizorii proprii
for(d=2;d<=n/2;d++)
//d este initalizat cu 2 (primul divizor propriu posibil)
//instructiunea merge pana la n/2 deoarece nu pot exista divizori proprii
intre n/2 si n
if(n%d==0) //conditia ca d sa fie divizor propriu al lui d
cout<<d<<" ";
Codul afisat mai jos parcurge intervalul [2, n/2] printr-o instructiune
for, folosind variabila d. In cazul in care aceasta divide numarul n,
atunci ea este afisata, intrucat este un divizor propriu al numarului n.
Un numar n poate avea divizori proprii si improprii.
Divizorii improprii ai unui numar sunt 1 si numarul insusi.
Divizorii proprii sunt restul numerelor care divid pe n, cuprinse intre
[n, n/2].
16.Descompunerea in factori primi
#include <iostream>
using namespace std;
int main()
{ int n,d,p; //variabila p memoreaza puterea la care apare un factor prim
cin>>n;
//variabila d este initializata cu 2 (primul posibil divizor propriu)
d=2;
//se determina daca numarul n are divizori proprii
while(n>1)
{
p=0;//p este initializat cu 0, pentru ca de fiecare data cand se reia
instructiunea while sa se poata determina puterea la care apare factorul
prim
//se verifica daca numarul n se imparte de mai multe ori la numarul d
while(n%d==0)
{
p++; //se contorizeaza puterea la care apare factorul prim in
descompunere
n=n/d; //se imparte n la d pentru a se putea continua impartirea si
identificarea puterii
}
//daca numarul d se imparte macar o data la n se afiseaza d, alaturi de
puterea la care apare in descompunere
//daca p este 0 inseamna ca numarul d nu se imparte deloc la n
if(p>0)
cout<<d<<"^"<<p<<" ";
d=d+1; //creste d, pentru a putea identifica si alti factori primi ai
descompunerii
Tablouri unidimensionale(Vectori)
Vectorii sau tablourile unidimensionale sunt structuri de date bine definite
si organizate in memorie. Cu ajutorul acestora, se pot pastra in memorie si
accesa ulterior mai multe variabile, fara a fi nevoie de retinerea explicita a
fiecareia dintre ele.
Vectorii se folosesc, cel mai adesea, cand numarul de variabile necesare
intr-o problema variaza sau este de dimensiune mare. In acest caz, se
doreste utilizarea un vector , in care punem cate variabile sunt necesare. In
problemele noastre, ne vor interesa vectorii declarati prin numarul maxim
posibil de elemente, cu memoria alocata local.
Astfel, pentru declararea unui vector se foloseste urmatoarea structura:
tip_vector nume_vector[dimensiune maxima vector];
Exemple uzuale :
int v[100];

int – tip intreg

v – numele vectorului

[100] – intre paranteze patrate se pune numarul maxim posibil de
elemente
Asemanator float a[100], double b[20].
Pentru a atribui un element folosim :
v[1] = 3; v[2] = 4, v[6] = 29, etc.
Pentru citirea unui vector de n elemente, unde n este citit de la
tastatura, se foloseste urmatoarea portiune de program :
int n;
cin>>n;
int v[100],i;
for (i = 1; i <= n; i++)
cin>>v[i];
Se incepe citirea de la 1, primul element fiind salvat in v[1]. decide de
pe ce pozitie sa inceapa 1 sau 0.
Pentru a accesa elementul de pe pozitia K vom folosi v[K].
Afisarea se face in mod asemanator, citirii:
for (i = 1; i <= n; i++)
cout<<v[i]<<" ";
Astfel, cu ajutorul vectorilor, putem face modificari asupra unui sir de
numere intregi, salvand fiecare modificare, pentru a afisa rezultatul
obtinut. De asemenea, un caz foarte uzual, in care sunt folositi vectori,
este atunci cand, se afiseaza elemente citite de la tastatura, intr-o
ordine care nu coincide cu ordinea de citire.
Probleme cu vectori
1.Cautarea secventiala
Cautarea secventiala este un algoritm prin care putem sa cautam o
anumita valoare in interiorul unui vector. Programul scris mai jos
citeste un vector de la tastatura dupa care verifica daca o anumita
valoare introdusa de utilizator este sau nu memorata in vectorul deja
citit.
#include <iostream>
using namespace std;
int v[100],n,i,x,ok;
int main ()
{cin>>n; //se citeste numarul de elemente din vector
for(i=1;i<=n;i++)
cin>>v[i]; //se citesc elementele din vector
cin>>x; //se citeste valoarea pe care vrem sa o cautam
ok=0;
for(i=1;i<=n;i++)
{
if(v[i]==x)
ok=1; // variabila OK isi modifica valoarea atunci cand gasim X-ul citit
mai devreme in vector
}
if(ok==1)
cout<<"gasit";
else
cout<<"nu exsita";
2.Numarul de aparitii al unui element intr-un
vector
Algoritmul de mai jos verifica de cate ori apare o anumita valoare (in
cazul nostru valoarea memorata in variabila x) in interiorul unui
vector citit de la tastatura.
#include <iostream>
using namespace std;
int v[100],i,n,x,nr;
int main()
{cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
cin>>x;
for(i=1;i<=n;i++)
{if(v[i]==x)
nr++; }
cout<<x<<" apare de "<<nr<<" ori in vector";
3.Metode de sortare
I. Sortarea unui vector prin interschimbare
In continuare, este prezentata sortarea prin interschimbare a unui vector cu
n elemente citite de la tastatura. n-ul este, de asemenea, citit de la tastatura.
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int v[100],i;
for (i = 1; i <= n; i++)
cin>>v[i];
int j;
for (i = 1; i <= n-1; i++){
for (j = i+1; j <= n; j++){
if (v[i] > v[j]){
int aux = v[i];
v[i] = v[j];
v[j] = aux; }
}
}
for (i = 1; i <= n; i++)
cout<<v[i]<<" ";
}
2.Bubble sort
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n, v[100],i;
for (i = 1; i <= n; i++)
cin>>v[i];
int sortat;
do{
sortat = 1;
for (i = 1; i <= n-1; i++){
if (v[i] > v[i+1]){
int aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
sortat = 0;
}
}
}while(sortat == 0);
for (i = 1; i <= n; i++)
cout<<v[i]<<" ";
4. Maximul si minimul unui vector
#include <iostream>
using namespace std;
int main(){
int n, v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
int maxim = v[1];
for (i = 2; i <= n; i++)
if (maxim < v[i])
maxim = v[i];
cout<<maxim;
}
5. Afisarea elementelor pare ale unui vector
#include <iostream>
using namespace std;
int main(){
int n,v[100],i;
cin>>n;
for (i = 1; i <= n ; i++)
cin>>v[i];
for (i = 1; i <= n; i++)
if (v[i] % 2 == 0)
cout<<v[i]<<" ";
6.Afisarea elementelor de pe pozitii pare si a
celor de pe pozitii impare dintr-un vector
#include <iostream>
using namespace std;
int main(){
int n,v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
for (i = 2; i <= n; i = i + 2)
cout<<v[i]<<" ";
for (i = 1; i <= N; i = i + 2)
cout<<v[i]<<" ";
7.Vectorul frecventa – afisarea elementului cu cel
mai mare numar de aparitii
#include <iostream>
using namespace std;
int frecv[100],element;
int main(){
while(cin>>element){
frecv[element]++;}
int maxim = 0,el = 0, i;
for (i = 10;i < 100; i++)
if(frecv[i] > maxim){
maxim = frecv[i];
el = i;
}
cout<<el<<" "<<maxim;
8.Inserarea unui nou element pe prima pozitie
dintr-un vector
#include <iostream>
using namespace std;
int v[100],i,n,x;
int main()
{
cin>>n;
for(i=1;i<=n;i++) //citire
cin>>v[i];
n=n+1; //creare "loc" nou
for(i=n;i>=2;i--) //mutare elemente la dreapta
{
v[i]=v[i-1];
}
cin>>x; // citire element nou
v[1]=x; // inserarea pe prima pozitie
for(i=1;i<=n;i++)//afisare
cout<<v[i]<<" ";
}
9. Inserarea unui nou element pe ultima pozitie
dintr-un vector
#include <iostream>
using namespace std;
int v[100],i,n,x;
int main()
{cin>>n;
for(i=1;i<=n;i++) //citire
cin>>v[i];
n=n+1; //creare "loc" nou
cin>>x; // citire element nou
v[n]=x; // inserarea pe ultima
for(i=1;i<=n;i++)//afisare
cout<<v[i]<<" ";
}
10. Inserarea unui element intr-un vector
#include <iostream>
using namespace std;
int main(){
int n ,v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
int pozitie,valoare;
cin>>valoare>>pozitie;
for (i = n; i >= pozitie; i--)
v[i + 1] = v[i];
n = n + 1;
v[pozitie] = valoare;
for (i = 1; i <= n; i++)
cout<<v[i]<<" ";
11.Eliminarea unui element dintr-un vector
#include <iostream>
using namespace std;
int main(){
int n,v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
int pozitie;
cin>>pozitie;
for (i = pozitie; i <= n - 1; i++)
v[i] = v[i+1];
n = n - 1;
for (i = 1; i <= n; i++)
cout<<v[i]<<" ";
12. Cel mai mare divizor comun (cmmdc) al unui
vector
#include <iostream>
using namespace std;
int main(){
int n,v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
int cmmdc = v[1];
for (i = 2; i <= n; i++){
int copieEL = v[i];
while (copieEL != cmmdc){
if (copieEL > cmmdc)
copieEL = copieEL - cmmdc;
else if (copieEL < cmmdc)
cmmdc = cmmdc - copieEL;
}
}
cout<<cmmdc;
return 0;
}
13. Cel mai mic multiplu comun (cmmmc) al
unui vector
#include <iostream>
using namespace std;
int main(){
int n,v[100],i;
cin>>n;
for (i = 1; i <= n; i++)
cin>>v[i];
int cmmmc = v[1];
for (i = 2; i <= n; i++){
int copieCmmmc = cmmmc,copieEL = v[i];
while(copieCmmmc != copieEL){
if (copieCmmmc > copieEL)
copieCmmmc = copieCmmmc - copieEL;
else if (copieEL > copieCmmmc)
copieEL = copieEL - copieCmmmc;
}
cmmmc = cmmmc*(v[i]/copieEL);
}
cout<<cmmmc;
Tablouri bidimensionale – Matrici
O matrice este o forma de organziare a datelor de acelasi tip. O matrice
reprezinta un tablou bidimensional in care sunt stocate date de acelasi
tip. Elementele dintr-o matrice pot fi identificate dupa linia si coloana
pe care se afla.
Se numeste matrice cu m linii si n coloane, un tablou cu m linii si n
coloane.
Pentru m=4 si n=3 se obtine o matrice cu 4 linii si 3 coloane, spre
exemplu:
In exemplul dat, numarul 35 se afla pe linia 1, coloana 1, pe cand 13 se afla
pe linia 3, coloana 2. Am considerat numerotarea liniilor si coloanelor
incepand de la 1. Daca matricea se va citi, luand doi contori ( i si j) cu valori
de la 0 la m – 1 (pentru m linii), respectiv de la 0 la n – 1 (pentrul n
coloane), atunci 35 se va afla pe linia 0 si coloana 0.
Declararea unei matrici se realizeaza prin specificarea tipului elementelor
din matricii, indentificatorul matricii, urmat apoi de dimensiunea acesteia
(numarul de linii si de coloane) intre paranteze drepte.
Spre exemplu:
int A[4][3]; (declara o matrice de 4 linii si 3 coloane continand numere
intregi)
float B[5][10]; (declara o matrice de 5 linii si 10 coloane continand numere
reale)
char C[20][12]; (declara o matrice de 20 de linii si 12 coloane continand
caractere alfanumerice)
Observatie: Numerotarea liniilor si coloanelor unei matrici incepe de
la valoarea 0. Astfel, prima linie si prima coloana a matricii este linia si
coloana 0, a doua coloana este 1, etc.
Observatie: Putem numerota liniile si coloanele de la 1, in acest caz, pentru
a nu avea probleme de memorie, declaram matricea cu un numar in plus de
linii si coloane. Astfel, daca vrem sa salvam o matrice cu 3 linii si 4 coloane,
incepand numerotarea de la 1, vom scrie m[4][5] in loc de m[3][4].
Mai jos putem vedea citirea si afisare unei matrici salvata cu numerotoarea
incepand de la 1.
include <iostream>
using namespace std;
int a[10][20],n,m,i,j;
int main()
{cin>>m>>n; //se citesc numarul de linii si coloane
//citirea pe rand a elementelor matricii
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
//afisarea matricii
for(i=1;i<=m;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
Matrice patratică
O matrice care are numarul de linii egal cu numarul de coloane se
numeste o matrice patratica.
Intrucat numarul de linii este egal cu numarul coloanelor in matiricile
patratice apar 2 notiuni importante: diagonala principala si diagonala
secundara.
Diagonala principala este formata din elementele unei matrici patratice
aflate pe pozitiile in care indicele liniei este egal cu cel al coloanei (i=j),
adica a[i][i]. Spre exemplu in matricea patratica a[3][3], elementele aflate
pe diagonala principala sunt a[1][1]; a[2][2] si a[3][3].
Diagonala secundara este formata din elementele unei matrici patratice
aflate pe pozitiile in care i+j=n+1, mai exact a[i][n-i+1]. Spre exemplu in
matricea patratica a[3][3], elementele aflate pe diagonala principala sunt
a[1][3]; a[2][3] si a[3][1].
În matricea de alături, patratele
colorate cu verde reprezinta diagonala
principala si patratele colorate cu
galben reprezinta diagonala secundara.
Zone speciale in matrice patratice:
Relatia elementelor aflate deasupra
diagonalei principale (casutele
albastre) intr-o matrice patratica
este i<j.
Relatia elementelor aflate sub
diagonala principala (casutele
verzi) intr-o matrice patratica este i>j
Relatia elementelor aflate deasupra
diagonalei secundare (casutele
albastre) intr-o matrice patratica este
i+j<n+1.
Relatia elementelor aflate sub
diagonala secundare (casutele verzi)
intr-o matrice patratica este i+j>n+1.
Probleme cu matrici
1.Transpusa unei matrici
#include <iostream>
using namespace std;
int n,i,j,m[20][20],t[20][20];
int main()
{cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>m[i][j];
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
cout<<"Matricea transpusa este:"<<endl;
for(i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
t[i][j]=m[j][i];
cout<<t[i][j]<<" ";
}
cout<<endl;}
Transpusa unei matrici se construieste prin inlocuirea liniilor
matricei initiale cu coloanele acesteia.
2. Suma elementelor unei matrice
#include <iostream>
using namespace std;
int i, j, m, n, a[10][10],s;
int main()
{
cin>>m>>n;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{cin>>a[i][j];
s=s+a[i][j];}
cout<<"Suma elementelor matricii este: "<<s<<endl;
3.Suma
elementelor de pe diagonala prinicipala a
unei matrice patratice
#include <iostream>
using namespace std;
int i, j, m, n, a[10][10],s;
int main()
{cin>>m;
for (i=1;i<=m;i++)
for (j=1;j<=m;j++)
cin>>a[i][j]; }
for (i = 1; i <= m; i++)
s = s + a[i][i];
cout<<"Suma elementelor diagonalei principale este: "<<s<<endl;
4.Suma elementelor de pe diagonala secundara a
unei matrice patratice
#include <iostream>
using namespace std;
int n,i,j,a[20][20],s;
int main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
for(i=1;i<=n;i++)
s=s+a[i][n-i+1];
cout<<"Suma elementelor diagonalei secundare este:"<<s<<endl;
return 0;
}
5. Eliminarea unei linii si (sau) coloane
#include<iostream>
using namespace std;
int a[10][10],i,j,n,x,y;
int main()
{cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl; }
cout<<endl<<"Linia de sters:";
cin>>x;
for (i=x;i<n;i++)
for(j=1;j<=n;j++)
a[i][j]=a[i+1][j];
for(i=1;i<n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl; }
cout<<endl<<"Coloana de sters:";
cin>>y;
for(i=1;i<n;i++)
for(j=y;j<n;j++)
a[i][j]=a[i][j+1];
for(i=1;i<n;i++)
{ for(j=1;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl; }
}
Download