joi, 26 aprilie 2012

Bibliografie


http://www.didactic.ro/materiale-didactice/49646_test-tablouri-bidimensionale

http://www.scritube.com/stiinta/informatica/c/TABLOURI43453.php

http://www.codebox.ro/forum/Thread-c-clasa-ix-partea-ii

http://www.rotutorial.net/tag/tablouri-bidimensionale-c/

http://www.tutorialeprogramare.ro/Tutorial%20C/Tablouri%20bidimensionale.html

http://ler.is.edu.ro/~cex_is/Informatica/2012/teme/9/t10.pdf

http://www.scribd.com/doc/64150607/10/Tablouri-bidimensionale-%C5%9Fi-multidimensionale

http://profinfocntv.wordpress.com/tablouri-bidimensionale/

http://www.didactic.ro/materiale-didactice/93626_tablouri-bidimensionale

http://portofoliuflavius.wordpress.com/2011/05/11/tablouri-bidimensionale/


Galerie foto














Mada si Gina......realizatoarele blogului:P

Teorie


Matricele sunt o colectie de date de dimensiuni arbitrare,indexate numeric.
Tablourile bidimensionale (cu doua dimensiuni) se numesc matrice.
 Declararea acestora se va face cu 2 indici, astfel:

tip_data nume matrice[nr1] [nr2]

Unde
 -tip data este tipul elementelor matricei (poate fi int,float,duble etc.)
 -nume matrice este identificatorul matricei (de exemlu a)
 -nr1 este numarul de linii
 -nr2 este numarul de coloane

Exemplu:

int a[4] [5];

Matricea a are elemente de tip int, 4 linii si 5 coloane.

Citirea elementelor unei matrice:

*Pentru a face acest lucru avem nevoie de un indice pentru linii i si unul pentru coloane j.Trebuie sa specific ca m reprezinta numarul de linii al matricei, iar n numarul de coloane.Astfel avem:


 for (i=0;i<m;i++) //i ia valori de la 0 pana la numarul de linii
  for (j=0;j<n;j++) //j ia valori de la 0 pana la numarul de coloane
  {
  cout<<"a["<<i+1<<","<<j+1<>a[i] [j];
  }

Pentru ca la un moment dat, cititul elementelor matricei poate devenii enervant, este bine de retinut si urmatoarea metoda de declarare:

tip data nume matrice[nr1] [nr2]={lista de vlori}

Exemplu:

int a[2] [3]={1,2,3,4,5,6};

Matricea va arata in felul urmator:

1 2 3
 4 5 6

Matrici patrate (sau patratice):

Sunt matricile care au acelasi numari de coloane si acelasi numar de linii.

Exemplu:

m=3 n=3

1 0 0
 3 5 6
 2 0 1

Diagonala principala intr-o matrice patratica:

1 0 0
 3 5 6
 2 0 1

Diagonala secundara intr-o matrice patratica:

1 0 0
 3 5 6
 2 0 1

Exercitii:



Probleme propuse...


1) Sa se calculeze suma elementelor de pe diagonala principala a unei matrice patrate si suma elementelor de pe diagonala secunara, de dimensiune n.Elementele matricei sunt numere intregi.


2) Se considera o matrice patrata cu elemente numere intregi de dimeniunea n*n.Numarul n si elementele matrici se citesc de la tastatura.Sa se afiseze:
a)suma elementelor situate deasupra diagonalei principale
 b)suma elementelor situate sub diagonala secundara
 
 3.Se da o matrice cu m linii si  n coloane.Sa se memoreze intr-un vector b sumele elementelor de pe fiecare linie a matricii ( b[i] va reprezenta suma elementelor de pe linia i in matrice).

4.O matrice patratica cu n linii *  n coloane se numeste triunghiulara superior daca toate elementele aflate sub diagonala principala sunt nule. Realizati un program care verifica daca matricea este triunghiulara superior.


4.Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤n≤100)şi apoi elementele unui tablou bidimensional cu n linii şi n coloane, care memorează numere naturale cu cel mult 9 cifre fiecare; programul afişează pe ecran acele valori din tablou care sunt strict mai mici decât toate elementele cu care se învecinează direct (aflate pe aceeaşi linie dar pe o coloană alăturată sau pe aceeaşi coloană dar pe o linie alăturată).Numerele afişate vor fi separate prin câte un spaţiu.

5. Ştiind ca datele de intrare sunt: x = 1, k = 2 şi matricea a =  
var n,k,x,i,j,nr:integer;
a:array[1..20,1..20]of integer;
begin
write('n = '); readln(n); write('x = '); readln(x); write('k = '); readln(k);
for i:=1 to n do
for j:=1 to n do begin
write ('a[',i,',',j,'] = ');
readln (a[i,j]); end;
nr:=0;
for i:=1 to n do
for j:=1 to n do
if a[i,j] = x then  begin    nr:= nr+1;
                 if nr = k then write( i );
                  end;
end.
a) Ce se afişează? 0,5 p
b) Pentru ce valoare a datelor de intrare ale programului anterior se afişează 3?.   0,5 p
c) Să se modifice programul anterior, astfel încât să afişeze numărul elementelor pare de pe linii impare. 1 p
d) Să se scrie o secvenţă care să calculeze pătratul sumei elementelor de pe diagonala principală a unei matrici pătratice   .2 p
  • . Să se scrie un program care afişează transpusa unei matrici a cu n linii şi m coloane, cu elemente numere naturale. 2 p
  •  Se citeşte de la tastatură o matrice a cu m linii şi n coloane şi elemente numere întregi. Să se memoreze într-un vector b sumele elementelor de pe fiecare coloană a matricei (b[i] va reprezenta suma elementelor de pe coloana j în matrice). 3 p



   6. Ştiind ca datele de intrare sunt: x = 1, k = 2 şi matricea a =  
var n,k,x,i,j,nr:integer;
a:array[1..20,1..20]of integer;
begin
write('n = '); readln(n); write('x = '); readln(x); write('k = '); readln(k);
for i:=1 to n do
for j:=1 to n do begin
write ('a[',i,',',j,'] = ');
readln (a[i,j]); end;
nr:=0;
for i:=1 to n do
for j:=1 to n do
if a[i,j] = x then  begin    nr:= nr+1;
                 if nr = k then write( j );
                  end;
end.
a) Ce se afişează? 0,5 p
b) Pentru ce valoare a datelor de intrare ale programului anterior se afişează 1?   0,5 p
c) Să se modifice programul anterior, astfel încât să afişeze numărul elementelor impare de pe coloane impare. 1p
d) Să se scrie o secvenţă care să calculeze cubul produsului elementelor de pe diagonala principală a unei matrici pătratice.  2p
  •  Să se scrie un program care afişează transpusa transpusei unei matrici a cu m linii şi n coloane, cu elemente numere reale.    2 p
  •  Se citeşte de la tastatură o matrice a cu m linii şi n coloane şi elemente numere întregi. Să se memoreze într-un vector b sumele elementelor de pe fiecare linie a matricei (b[i] va reprezenta suma elementelor de pe linia i în matrice). 3 p
    VARIANTA 2

1. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care afișează coloanele care au elementele ordonate crescător.

2. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care identifică și afișează coloana care are cele mai multe elemente divizibile cu primul element situat pe ea. Dacă sunt mai multe coloane care îndeplinesc această condiție, se va afișa coloana cu numărul de ordine cel mai mare.
3. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care ordonează descrescător fiecare coloană a tabloului.
4. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care calculează suma elementelor de pe fiecare coloană care are primul element număr prim.
5. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care afișează numărul de numere prime de pe fiecare linie a matricii.
6. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care afișează cel mai mare divizor comun al elementelor situate pe fiecare coloană a matricii.
7. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care ordonează crescător elementele impare de pe fiecare linie a matricii, elementele pare nu își vor schimba pozițiile.
8. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care afișează numărul de linii care conțin cele mai multe valori palindrom.
9. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care liniarizează matricea, adică formează un vector cu elementele matricii, parcurse pe coloane.
10. Se consideră un tablou bidimensional cu n linii și m coloane. Realizați un program care interschimbă coloana x cu coloana y, unde x și y sunt citite.
11. Se citește n și m. Se cere să se formeze o matrice cu nxm elemente ale șirului lui Fibonacci, matricea  fiind parcursă pe linii.
12. Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale nenule n şi m
(2≤m≤10, 2≤n≤10) şi care construieşte în memorie şi apoi afişează o matrice A cu n linii (numerotate de la 1la n) şi m coloane (numerotate de la 1 la m) cu proprietatea că fiecare element Aij memorează cea mai mică dintre valorile indicilor i şi j (1≤i≤n, 1≤j≤m). Matricea se va afişa pe ecran, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu. Exemplu: pentru n=4 şim=5 se va afişa matricea alăturată.

1 1 1 1 1

1 2 2 2 2

1 2 3 3 3

1 2 3 4 4

13. Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale n şi m (2≤m≤10,2≤n≤10) şi care construieşte în memorie şi apoi afişează o matrice A cu n linii (numerotate de la 1la n) şi m coloane (numerotate de la 1 la m) cu proprietatea că fiecare element Aij memorează cea mai mare dintre valorile indicilor i şi j (1≤i≤n, 1≤j≤m). Matricea se va afişa pe ecran, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu. Exemplu: pentru n=4 şi m=5 se va afişa matricea alăturată.

1 2 3 4 5

2 2 3 4 5

3 3 3 4 5

4 4 4 4 5

14. Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale n şi p (2≤n≤20,1≤p≤20) şi construieşte în memorie un tablou bidimensional cu n linii şi p coloane. Tabloul va fi construit astfel încât, parcurgând tabloul linie cu linie de sus în jos şi fiecare linie de la stânga la dreapta, să se obţină şirul primelor n*p pătrate perfecte impare, ordonat strict crescător, ca în exemplu. Tabloul astfel construit va fi afişat pe ecran, fiecare linie a tabloului pe câte o linie a ecranului, cu câte un spaţiu între elementele fiecărei linii. Exemplu: pentru n=2, p=3 se va afişa tabloul alăturat:

1 9 25

49 81 121

15. Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare. Scrieţi programul C/C++ care citeşte de la tastatură numărul natural n(2≤n≤23) şi cele n*n elemente ale tabloului şi apoi afişează pe ecran elementele primului pătrat concentric, separate prin câte un spaţiu. Pătratul este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus, ca în exemplu. Primul pătrat concentric este format din prima şi ultima linie, prima şi ultima coloană a tabloului. Exemplu: pentru n=5 şi tabloul alăturat, se va afişa: 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6

1 2 3 4 5

6 7 8 9 1

2 3 4 5 6

7 8 9 1 2

3 4 5 6 7

16. Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale n şi p (2≤n≤20, 1≤p≤20) şi construieşte în memorie un tablou bidimensional cu n linii şi p coloane. Tabloul va fi construit astfel încât, parcurgând matricea linie cu linie de sus în jos şi fiecare linie de la stânga la dreapta, să se obţină şirul primelor n*p pătrate perfecte pare, ordonat strict crescător, ca în exemplu. Tabloul astfel construit va fi afişat pe ecran, fiecare linie a tabloului pe câte o linie a ecranului, cu câte un spaţiu între elementele fiecărei linii. Exemplu: pentru n=2, p=3 programul va afişa tabloul alăturat:
0 4 16

36 64 100

17. Scrieţi un program C/C++ care citeşte de la tastatură două valori naturale nenule m şin (m≤10, n≤10) şi apoi m*n numere naturale nenule cu cel mult 4 cifre fiecare, reprezentând elementele unei matrice cu m linii şi n coloane. Programul determină apoi valorile minime de pe fiecare linie a matricei şi afişează pe ecran cea mai mare valoare dintre aceste minime. Exemplu: pentru m=3, n=5 şi matricea
5 13 7 2 3

9 6 12 9 10

3 6 5 4 7

se afişează pe ecran valoarea 6 (cea mai mică valoare de pe prima linie a matricei este 3, cea mai mică valoare de pe linia a doua este 6, cea mai mică valoare de pe linia a treia este 2. Cea mai mare dintre aceste trei valori este 6).

18. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<25) şi apoi construieşte în memorie o matrice cu n linii şi n coloane, numerotate de la 1 la n, ale cărei elemente primesc valori după cum urmează: elementul din linia i şi coloana j primeşte ca valoare ultima cifră a produsului i*j (1≤i≤n şi 1≤j≤n). Programul va afişa matricea astfel construită pe ecran, câte o linie a matricei pe o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu. Exemplu: pentru n=4 se va afişa matricea alăturată.

1 2 3 4

2 4 6 8

3 6 9 2

4 8 2 6

19. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural nenul, cu maximum 18cifre, construieşte în memorie şi afişează apoi pe ecran o matrice pătratică, având numărul de linii şi de coloane egal cu numărul de cifre ale numărului dat, completată cu cifrele numărului citit. Astfel, elementele de pe prima coloană a matricei vor fi toate egale cu cifra unităţilor numărului dat, elementele de pe a doua coloană a matricei vor fi toate egale cu cifra zecilor numărului dat, şi aşa mai departe, ca în exemplu. Exemplu: dacă se citeşte numărul 1259, matricea construită va fi cea alăturată.

9  5  2  1

9  5  2  1

9  5  2  1

9  5  2  1

 

20.  Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<20) şi

construieşte în memorie o matrice cu n linii şi n coloane, numerotate de la 1 la n, în care

fiecare element aflat pe chenarul exterior al matricei este egal cu suma dintre indicele liniei

şi indicele coloanei pe care se află, iar fiecare dintre celelalte elemente este egal cu suma

celor trei “vecini” situaţi în matrice pe linia anterioară. Două elemente din matrice se numesc

vecine dacă se găsesc alături pe linie, coloană sau diagonală. Chenarul exterior al unei

matrice este format din prima linie, ultima linie, prima coloană şi ultima coloană.

Elementele matricei vor fi afişate pe ecran, câte o linie a matricei

pe câte o linie a ecranului cu câte un spaţiu între elementele

fiecărei linii.

Exemplu: pentru n=5 se va obţine matricea alăturată.

2 3 4 5 6

3 9 12 15 7

4 24 36 34 8

5 64 94 78 9

6 7 8 9 10




Operatii cu tablouri bidimensionale


Initializarea elementelor unei matrici in momentul declararii acesteia:

 int mat[4][3]={
 {10, -50, 3},
 {32, 20, 1},
 {-1, 1, -2},
 {7, -8, 19} };

 Citirea de la tastatura a elementelor unei matrici de maxim 10 linii si 10 coloane si afisarea elementelor tabloului:

 #include <stdio.h>
 #include <conio.h>

 int main(void)
 {
 int A[10][10];
 int nr_lin, nr_col;
 int i, j;
 printf("Nr. linii = ");
 scanf("%d", &nr_lin);
 printf("Nr. coloane = ");
 scanf("%d", &nr_col);

 // citirea elementelor unei matrici
 for(i=0; i < nr_lin; i++)
 for(j=0; j < nr_col; j++)
 {
 printf("\nA[%d][%d] = ");
 scanf("%d", &A[i][j]);
 }

 // afisarea elementelor matricii
 for(i=0; i < nr_linii; i++)
 {
 for(j=0; j < nr_col; j++)
 printf("%d ", A[i][j]);
 printf("\n");
 // dupa afisarea elementelor une linii se trece la linia urmatoare

 }
 }


Interschimbarea a doua linii de indici x si y
 for(j=1; j <= n; j++)
 {
 temp=a[x][j];
 a[x][j]=a[y][j];
 a[y][j]=temp;
 }


Interschimbarea a doua coloane de indici x si y
 for(i=1; i <= n; i++)
 {
 temp=a[i][x];
 a[i][x]=a[i][y];
 a[i][y]=temp;
 }

Functie care sa efectueze:citirea si afisarea



Afisarea elementelor din matrice

#include<iostream.h>
int a[10][10],n,m,s,p;

void citire(int a[10][10],int n)
{
int i,j;
cout<<"dati elem. matricii "<
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
}

void afisare_matrice(int a[10][10],int n)
{
int i,j;
cout<<"matricea este "<
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) cout<
cout<
}
}
void main()
{
cout<<"Dati numarul linii si de coloane n = ";cin>>n;
citire(a,n);
afisare_matrice(a,n);

miercuri, 25 aprilie 2012

Probleme bacalaureat matrice

1.Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤n≤100)şi apoi elementele unui tablou bidimensional cu n linii şi n coloane, care memorează numere naturale cu cel mult 9 cifre fiecare; programul afişează pe ecran acele valori din tablou care sunt strict mai mici decât toate elementele cu care se învecinează direct (aflate pe aceeaşi linie dar pe o coloană alăturată sau pe aceeaşi coloană dar pe o linie alăturată).Numerele afişate vor fi separate prin câte un spaţiu.
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
ifstream f("matrice.txt");
long a[101][101];
int n,i,j;
int verifica(int i,int j)
{
long x=a[i][j];
if((i+1<=n)&&
(x>=a[i+1][j]))return 0;
if((i-1>=1)&& (x>=a[i-1][j]))return 0;
if((j-1>=1)&& (x>=a[i][j-1]))return 0;
if((j+1<=n)&&(x>=a[i][j+1]))return 0;
return 1;
}
void main()
{ do{cin>>n;}while(n<=1 ||n>=100);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (verifica(i,j)==1)
cout<<a[i][j]<<" ";
}

2.Scrieti programul C sau C++ care construiete în memorie o matrice p cu n linii si n coloane formata numai din valori 1 si 2 astfel încât elementele de pe diagonala secundara si cea principala sa fie egale cu 1, iar restul elementelor din matrice sa fie egale cu 2
#include<iostream.h>
int n,i,j,a[23][23];
void matrice(int x)
{
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)
if(i==j || i==x-j+1)
{
a[i][j]=1;
}
else
{
a[i][j]=2;
}
}
void afis()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

3. Sa se calculeze suma elementelor de pe diagonala principala a unei matrice patratica  si suma elementelor de pe diagonala secunara, de dimensiune n.Elementele matricei sunt numere intregi.

  #include<iostream.h>
 void main()
 {
 int a[10][10],i,j,n,sp=0,ss=0; //ss=suma de pe diagonala principala
 cout<>n; //sp=suma de pe diagonala secundara
 for (i=0;i<n;i++)
 for (j=0;j<n;j++)
  {
  cout<<"a["<<i+1<<","<<j+1<>a[i][j];
  }
 for (i=1;i<n;i++)
  for (j=1;j<n;j++)
  if (i==j) sp+=a[i][j];
 for (i=1;i<n;i++)
 for (j=n+1)
 ss+=a[i][j];
 cout<<"Suma de pe diagonala principala: "<<sp;
 cout<<"Suma de pe diagonala secundara: "<
 }








elemente pare aflate pe linii impare si coloane divizibile cu 3

#include<iostream.h>
void main()
{
int n,m,i,j,a[20][20];
int nr,nn=0,np=0,no=0;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]%2==0 && i%2==1 && j%3==0)
cout<<a[i][j]<<" ";
}

Matrice triunghiulara superior

O matrice patratica cu n linii *  n coloane se numeste triunghiulara superior daca toate elementele aflate sub diagonala principala sunt nule. Realizati un program care verifica daca matricea este triunghiulara superior.

#include<iostream.h>
int a[20][20],i,j,n,g;
void main()
{
cout<<"n=";cin>>n;
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
g=1;
for(i=1;i<=n-1;i++)
for(j=0;j<=i-1;j++)
if(a[i][j]) g=0;
if(g==0)
cout<<"nu este triunghiulara superior";
else cout<<"este triunghiulara";
}


Suma elemente pe linie

Se da o matrice cu m lini * n coloane.Sa se memoreze intr-un vector b sumele elementelor de pe fiecare lini a matricii ( b[i] va reprezenta suma elementelor de pe linia i in matrice)

#include<iostream.h>
int a[20][20],b[30],i,j,n,m;
void main()
{
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
for(i=0;i<=m-1;i++)
b[i]=0;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
b[i]=b[i]+a[i][j];
for(i=0;i<=m-1;i++)
cout<<b[i]<<" ";
}

Transpusa unei matrici

Sa se scrie un program care calculeaza transpusa unei matrici An*m

#include <iostream.h>
void main(void)
{
int n,m,i,j,a[30][30],b[30][30];
cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=n;i++)
for(j=1;i<=m;i++)
b[j][i]=a[i][j];
cout<<"Matricea transpusa este "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}

Numar maxim de elemente nenule

Se considera o matrice An*m cu elemente numere intregi. Sa se determine linia (liniile) din matrice care contine cele mai multe elemente nenule.

#include
void main(void)
{
int a[30][30],n,m,i,j,max,nr;
cout&lt;&lt;"Dati numarul de linii n = ";cin&gt;&gt;n;
cout&lt;&lt;"Dati numarul de coloane m = ";cin&gt;&gt;m;
for(i=1;i&lt;=n;i++)
for(j=1;j&lt;=m;j++)
{
cout&lt;&lt;"a["&lt;cin&gt;&gt;a[i][j];
}
cout&lt;for(i=1;i&lt;=n;i++)
{
for(j=1;j&lt;=m;j++) cout&lt;cout&lt;}
max=0;
for(i=1;i&lt;=n;i++)
{
nr=0;
for(j=1;j&lt;=m;j++)
if(a[i][j]!=0) nr++;
if(max}
for(i=1;i&lt;=n;i++)
{
nr=0;
for(j=1;j&lt;=m;j++)
if(a[i][j]!=0) nr++;
if(max==nr) cout&lt;&lt;"Linia "&lt;nenule"&lt;}
}

Inmultirea a doua matrici

Sa se scrie un program care calculeaza produsul a doua matrici bidimensionale A si B.

#include
void main()
{
int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10];
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<cout<}
cout<<"Dati numarul de linii m = ";cin>>m;
cout<<"Dati numarul de coloane p = ";cin>>p;
for(i=1;i<=m;i++)
for(j=1;j<=p;j++)
{
cout<<"b["<cin>>b[i][j];
}
cout<<"Elementele matricei B sunt: "<for(i=1;i<=m;i++)
{
for(j=1;j<=p;j++)
cout<cout<}
for(i=1;i<=n;i++)
for(j=1;j<=p;j++)
for(k=1;k<=m;k++)
c[i][j]+=a[i][k]*b[k][j];
cout<<"Elementele matricei produs "<for(i=1;i<=n;i++)
{
for(j=1;j<=p;j++)
cout<cout<}
}



Numar maxim de valori 1 pe linie

Se da o matrice cu m lini * n coloane, ale carei elemente sunt cifre de 0 si 1. Sa se afiseze indicii liniei (liniilor) pe care se afla cele mai multe valori de 1.

#include
int a[20][20],nr[30],i,j,n,m,max=0;
void main()
{
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
{
cout<<"a["<cin>>a[i][j];
}
for(i=0;i<=m-1;i++)
nr[i]=0;
for(i=0;i<=m-1;i++)
{
for(j=0;j<=n-1;j++)
nr[i]=nr[i]+a[i][j];
if(max}
for(i=0;i<=m-1;i++)
if(nr[i]==max) cout<}

Diagonale in matrice

Scrieti un program care construieste in memorie un tablou t cu n linii si n coloane, cu elemente numere intregi, astfel incat pe diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele doua semidiagonale paralele cu diagonala principala si alaturate diagonalei principale sa fie tot egale cu 2, elementele de pe urmatoarele doua semidiagonale sa fie egale cu 3 etc.Valoarea lui n se citeste de la tastatura.

#include
int a[20][20],nr[30],i,j,n,k,m,max=0;
void main()
{
cout<<"n=";cin>>n;
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
if(i==j) a[i][j]=1;
for(i=0;i<=n-2;i++)
{k=2;
for(j=i+1;j<=n-1;j++)
{a[i][j]=k;k=k+1;}
}
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
a[j][i]=a[i][j];
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
cout<cout<}
}

Afisare matrici instructiunea for

Se citeste n. Sa se afiseze urmatoarele forme. In exemplu n=4:
1)

1 2 3 4
1 2 3
1 2
1
#include
void main()
{
int i,j,n;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i+1;j++)
cout<cout<}
}

2)

1 1 1 1
2 2 2
3 3
4
#include
void main()
{
int i,j,n;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i+1;j++)
cout<cout<}
}

4)

4 3 2 1
4 3 2
4 3
4
#include
void main()
{
int i,j,n;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i+1;j++)
cout<cout<}
}

Citirea si afisarea unei matrici

Sa se citeasca si sa se afiseze data o matrice cu "m" linii si "n" coloane

#include<iostream.h>
void main()
{
int n,m,i,j,a[20][20];
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"a["<>a[i][j];}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<cout<}
}

Operaţii din algebra matriceală


Ex. 8  Să se determine matricea transpusă a unei matrice citită de la tastatură (matr_A)

Prezentarea algoritmului :

-         se citesc dimensiunile matricelor
şi n
-         se citesc elementele matricei iniţiale
pentru i=0,m-1 execută
            pentru j=0,n-1 execută
                                          citeşte matr_A[i][j];
                              sfârşit pentru
                        sfârşit pentru
-         ecou     
 
-         se parcurge matricea iniţială element cu element, elementul cu indicele [i][j] devenind elementul cu indicele [j][i] în matricea finală
pentru i=0,m-1 execută
            pentru j=0,n-1 execută
                        matr_B[i][j] = matr_A[j][i]
            sfârşit pentru
sfârşit pentru

-         se afişează elementele matricei finale (matricea transpusă)
pentru i=0,n-1 execută
            pentru j=0,m-1 execută
                                          afişează matr_B[i][j];
                              sfârşit pentru
                        sfârşit pentru

Ex.  Să se determine matricea produs rezultată în urma înmulţirii a doua matrice:
matr_C(m,n) = matr_A(m,n) x matr_B(m,n)

            Obs. Programul nu verifică corectitudinea dimensiunilor matricelor pentru a efectua operaţia de înmulţire.



#include <stdio.h>
#include <conio.h>
void main()
{
int matr_A[10][10], matr_B[10][10];
int matr_C[10][10];
int i,j,k,m,n,p;
clrscr();
printf("\n Introduceti dimensiunile matricelor ");
scanf("%d %d %d",&m,&n,&p);
printf("\n Introduceti elementele primei matrici \n");
for(i=0;i<m;i++)
                for(j=0;j<n;j++)
                {
                                printf("matr_A[%d][%d]=",i,j);
                                scanf("%d",&matr_A[i][j]);
                 }

printf("\n Matricea citita de la tastatura este: \n");
for(i=0;i<m;i++)
{
printf("\t");
                for(j=0;j<n;j++)
                                printf(" %4d",matr_A[i][j]);
printf("\n");
}

printf("\n Introduceti elementele pentru matr B \n");
for(i=0;i<n;i++)
                for(j=0;j<p;j++)
                {
                                printf("matr_B[%d][%d]=",i,j);
                                scanf("%d",&matr_B[i][j]);
                 }

printf("\n Matricea citita de la tastatura este: \n");
for(i=0;i<n;i++)
{
printf("\t");
                for(j=0;j<p;j++)
                                printf(" %4d",matr_B[i][j]);
printf("\n");
}

for(i=0;i<m;i++)
                for(j=0;j<p;j++)
                                   matr_C[j][i] = 0;

for(i=0;i<m;i++)
                for(j=0;j<p;j++)
                                for(k=0;k<n;k++)
         matr_C[i][j] = matr_C[i][j]+matr_A[i][k]*matr_B[k][j];

printf("\n Matricea produs \n");
for(i=0;i<m;i++)
{
printf("\t");
                for(j=0;j<p;j++)
                                printf(" %4d",matr_C[i][j]);
printf("\n");
}
getch();

Prelucrări asupra matricelor


Ex.  Pentru o matrice dată să se calculeze suma elementelor care aparţin unui interval dat (xinf<=tab[i][j] && xsup>=tab[i][j]).
Prezentarea algoritmului :
-         se citesc capetele intervalului în care trebuie să se încadreze elementele cautate în matrice
xinf şi xsup
-         se citesc dimensiunile matricei
şi n
-         se citesc elementele matricei
pentru i=0,m-1 execută
            pentru j=0,n-1 execută
                                          citeşte tab[i][j];
                              sfârşit pentru
                        sfârşit pentru

-   suma = 0;
-         se parcurge matricea element cu element. Se testează dacă elementul curent se încadrează în intervalul dorit şi în caz afirmativ elementul curent se adună la suma calculată anterior
pentru i=0,m-1 execută
            pentru j=0,n-1 execută
                        dacă tab[i][j] > xi şi  tab[i][j] < xf atunci
                                    suma  = suma + tab[i][j];
                        sfârşit dacă
            sfârşit pentru
sfârşit pentru
      -  afişează suma 
 
Obs. Variabila suma reprezintă suma calculată.
 
  Ex.  7   Să se determine elementul maxim de pe fiecare linie dintr-o matrice

#include <stdio.h>
#include <conio.h>

void main()
{
int tab[10][10],max_lin[10];
int i,j,m,n,max;

clrscr();
printf("\n Introduceti dimensiunile matricei ");
scanf("%d %d",&m,&n);
printf("\n Introduceti elementele matricei\n");

for(i=0;i<m;i++)
{
                for(j=0;j<n;j++)
                {
                                printf("tab[%d][%d]=",i,j);
                                scanf("%d",&tab[i][j]);
                 }
}

printf("\n Matricea citita de la tastatura este: \n");
for(i=0;i<m;i++)
{
printf("\t");
                for(j=0;j<n;j++)
                                printf(" %4d",tab[i][j]);
printf("\n");
}

for(i=0;i<m;i++)
{
max=matr[i][0];
                for(j=0;j<n;j++)
                {
                   if(max < tab[i][j])
                                                  max=tab[i][j];
                }
max_lin[i]=max;
}
printf("\n elementele vectorului de maxime sunt");
for(i=0;i<m;i++)
                printf(" %5d",max_lin[i]);
getch();
}



Obs. Vectorul max_lin conţine elementele maxime de pe fiecare linii. Evident acesta are dimensiunea egală cu numărul liniilor matrucii tab.

marți, 24 aprilie 2012

Prelucrrarea tablourilor

   *Prelucrarea tablourilor
for(i=1;i<=m;i++)
for(j=1;j<=n,j++)
{
operatii(a[i][j]
}

*Prelucrarea asupara tablourilor
   a11  a12  a13  a14  a15
   a21  a22  a23  a24  a25
   a31  a32  a33   a34  a35
   a41  a42   a43  a44  a45
   a51   a52   a53  a54  a55

  *Prelucrarea pentru fiecare linie
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
operatie (a[i][j]);
}

  *Prelucrarea pentru o linie oarecare l
for(j=;j<=n;j++)
   operatie(a[i][j])

  *Prelucrarea pe coloane
for(j=1;j<=n;j++)
{
for(i=1;j<=n;i++)
operatie (a[i][j])
}

   *Prelucrarea pentru o linie k oarecare
for(i=1;i<=n;i++)
operatie (a[i][k]);

   #  In cazul matricelor patrate(n=m) putem vorbi si despre diagonala principala respectiv diagonala secundara.

  1. Diagonala principala

   i==j;
se mai poate scrie  si:   for(i=1;i<=n;i++)
                                    operatie(a[i][i]);

  •    Elemente aflate -sub diagonala principala:

                                               i>j;
                               -deasupra diagonalei principale:
                                            i<j;

  1.               Diagonala secundara

                         i+j=n+1;

  •     Elemente aflate -sub diagonala secundara:

                             i+j>n+1;
                              -deasupra diagonalei secundare:
                                       i+j<n+1;