problema bacalaureat matrice

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]<<” “;

}

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<iostream.h>
void main(void)
{
int a[30][30],n,m,i,j,max,nr;
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<<endl<<“Matricea A are elementele:”<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++) cout<<a[i][j]<<” “;
cout<<endl;
}
max=0;
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++;
if(max<nr) max=nr;
}
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++;
if(max==nr) cout<<“Linia “<<i<<” are “<<max<<” elemente
nenule”<<endl;
}
}

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;
}
}

inmultirea a doua matrici

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

#include <iostream.h>
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[“<<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;
}
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[“<<i<<“,”<<j<<“]= “;
cin>>b[i][j];
}
cout<<“Elementele matricei B sunt: “<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=p;j++)
cout<<b[i][j]<<” “;
cout<<endl;
}
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 “<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=p;j++)
cout<<c[i][j]<<” “;
cout<<endl;
}
}

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<iostream.h>
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<<a[i][j]<<” “;
cout<<endl;
}
}

{joscommentenable}

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<iostream.h>
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[“<<i<<“][“<<j<<“]=”;
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<nr[i]) max=nr[i];
}
for(i=0;i<=m-1;i++)
if(nr[i]==max) cout<<i<<” “;
}

{joscommentenable}

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]<<” “;
}

{joscommentenable}

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”;
}

{joscommentenable}

numarul elementelor pozitive,numarul elementelor negative si numarul elementelor nule din matrice

Fiind data o matrice a cu m linii si n coloane cu elemente numere intregi,determinati numarul elementelor pozitive,numarul elementelor negative si numarul elementelor nule din matrice

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]<0) nn=nn+1;
else if(a[i][j]>0) np=np+1;
else no=no+1;
cout<<“numarul elementelor negative:”<<nn<<endl;
cout<<“numarul elementelor pozitive:”<<np<<endl;
cout<<“numarul elementelor nule:”<<no;
}

{joscommentenable}