S=0
-------------------------
j=1 S = S + a11 = a11
j=2 S = S + a12 = a11 + a12
i=1 ...
j=n S = S + a1n = a11 +...+ a1n
-------------------------
j=1 S = S + a21 = a11 +...+ a21
i=2 ...
j=n S = S + a2n = a11 +...+ a2n
…………………….
j=1 S = S + am1 = a11 +...+ am1
i=m ...
j=n S = S + amn = a11 +...+ amn
-------------------------
Algoritmul recursiv poate fi descris astfel:
formula de start: S = 0;
formula recursivă: S = S + a(i,j); i=1,m; j=1,n
Parcurgând matricea invers lexicografic algoritmul este similar, cu deosebirea că
indicele liniilor (i) va lua toate valorile din intervalul [1,m] pentru o valoare dată a
indicelui de coloane (j). Elementele matricei se introduc de la tastatură, element cu
element, cu ajutorul a două structuri DO-FOR imbricate.
Observaţie: Trebuie să se ţină cont că în C indicii încep de la 0.
#include <stdio.h>
#include <conio.h>
void main(){
int n,m,i,j,s, a[100][100];
printf("Nr de linii= ");scanf("%d",&m);
printf("Nr de coloane= ");scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("a[%d][%d]= ",i,j);scanf("%d",&a[i][j]);}
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf(" %d ",a[i][j]);
printf("\n");
}
s=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++) s+=a[i][j];
printf("\n Suma elementelor este= %d ",s);
getch();
}
#include <stdio.h>
#include <conio.h>
void main(){
int n,m,i,j,s,max,min, a[100][100];
printf("Nr de linii= ");scanf("%d",&m);
printf("Nr de coloane= ");scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++) {
printf("a[%d][%d]= ",i,j); scanf("%d",&a[i][j]); }
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf(" %d ",a[i][j]); printf("\n");
}
max=a[0][0];min=a[0][0];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{if (max<a[i][j]) max=a[i][j];
if (min>a[i][j]) min=a[i][j];
}
printf("\n Maximul este= %d ",max);
printf("\n Minimul este= %d ",min);
getch();
}
#include <stdio.h>
#include <conio.h>
void main(){
int n,m,j,i,M;
int a[100][100],max[100];
printf("\nNr de linii= ");scanf("%d",&m);
printf("\nNr de coloane= ");scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("a[%d][%d]= ",i,j); scanf("%d",&a[i][j]); }
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
printf(" %d ",a[i][j]);
printf("\n");
}
for(i=0;i<m;i++){
max[i]=a[i][0];
for (j=0;j<n;j++)
if (max[i]<a[i][j]) max[i]=a[i][j];
}
M=max[0];
for(i=1;i<m;i++) if (M<max[i]) M=max[i];
for(i=0;i<m;i++) printf("\n Maximul pe linia %d este =
%d",i,max[i]);
printf("\n Maximul este = %d",M);
getch();
}
#include <stdio.h>
#include <conio.h>
void main()
{
int n,m,i,j,s,pozl,pozc,gas,val, a[100][100];
printf("Nr de linii= ");scanf("%d",&m);
printf("Nr de coloane= ");scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ printf("a[%d][%d]= ",i,j); scanf("%d",&a[i]
[j]); }
printf("Valoarea cautata este = ");scanf("%d",&val);
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
printf(" %d ",a[i][j]);
printf("\n");
}
gas=0;
i=0;
while ((i<m)&&(!gas)){
j=0;
while ((j<=n)&&(!gas)) {
if (a[i][j]==val) {gas=1; pozl=i; pozc=j;
} j+=1;}i+=1;
}
if (gas) printf("\n Valoarea cautata se afla pe linia
%d si coloana %d",pozl,pozc);
getch();
}
5. Să se realizeze programul care sortează elementele unei matrice
pătratice în ordine crescătoare.
Deoarece este dificil de modificat liniile şi coloanele dintr-o matrice astfel încât să
rezulte o soluţie optimă la această problemă din cât mai puţine schimbări de linii şi
coloane, algoritmul următor apelează la un artificiu de programare şi anume
copierea tuturor elementelor din matrice într-un vector. Acest vector este sortat şi,
ulterior, elementele sortate sunt redistribuite în matrice.
#include<stdio.h>
#include<conio.h>
void main()
{
int n,m,p,q,j,i,k;
int a[100][100],c[100][100];
printf("\n Matricea ");
printf("\nNr de linii = ");scanf("%d",&n);
printf("\nNr de coloane = ");scanf("%d",&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf(" %d ",a[i][j]);printf("\n");}
k=0;
int v[100],aux;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{ v[k]=a[i][j];k++;}
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
if (v[i]>v[j])
{aux=v[i];v[i]=v[j];v[j]=aux;}
printf("\n");
for (i=0;i<k;i++) printf("%d ",v[i]);
int l=0;
while (l<n*m)
{i=0;
while (i<n)
{j=0;
while (j<m)
{ c[i][j]=v[l]; j++; l++;}
i++; }
} printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf(" %d ",c[i][j]); printf("\n");
}
getch();
}
6. Să se verifice dacă matricea A de ordinul n este un pătrat magic.
Matricea reprezintă un pătrat magic dacă sumele elementelor de pe fiecare linie
sunt egale cu sumele elementelor de pe fiecare coloană şi de pe cele două
diagonale.
#include<stdio.h>
#include<conio.h>
void main()
{
int n,m,p,q,j,i,k,ss,sd, gas;
int a[100][100],sl[100],sc[100];
printf("\n Matricea ");
printf("\nNr de linii/coloane = ");scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]= ",i,j); scanf("%d",&a[i][j]);
}
sd=0;ss=0;
for (i=0;i<n;i++)
{(sd)+=a[i][i]; (ss)+=a[i][n-i-1]; }
if (ss==sd)
{
for(i=0;i<n;i++)
{ sl[i]=0;
for(j=0;j<n;j++) sl[i]+=a[i][j];
}
for(i=0;i<n;i++)
{ sc[i]=0;
for(j=0;j<n;j++) sc[i]+=a[j][i];
}
gas=0;
for (i=0;i<n;i++) if (sl[i]!=sc[i]) gas=1;
if (gas) printf("Matricea nu este un patrat
magic.");
else printf("Matricea este un patrat magic.");
}
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,k,n,m,a[100][100], aux;
printf("Numarul de linii/coloane =");scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf(" a[%d][%d] = ",i,j);scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%d ",a[i][j]);printf("\n");
}
int gas=0;
for(i=1;i<n;i++)
for(j=0;j<i-1;j++) if(a[i][j]!=0) gas=1;
if (!gas)
{for (i=1;i<n;i++)
for (j=0;j<i;j++)
{ aux=a[j][i];
a[j][i]=a[i][j];
a[i][j]=aux; } }
printf("\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%d ",a[i][j]); printf("\n");}
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,k,n,m,p,s,nr,a[100]
[100],v[100],b[100],h,r[100],q;
float med[100];
printf("Numarul de studenti =");scanf("%d",&n);
printf("Numarul de materii =");scanf("%d",&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf(" a[%d][%d] = ",i,j); scanf("%d",&a[i][j]);}
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
printf("%d ",a[i][j]); printf("\n");
}
for(i=0;i<n;i++)
{ int gas=0;
for(j=0;j<m;j++) if (a[i][j]<5) gas=1;
if(!gas) {v[k]=i;k++;}
}
printf("\nStudentii integralisti: ");
for(i=0;i<k;i++) printf("%d ",v[i]);
for(i=0;i<n;i++)
{s=0;
for(j=0;j<m;j++) s+=a[i][j];
float medie=s/m;
if (medie>8.50) {v[k]=i;k++;}
}
printf("\nStudentii bursieri: ");
for(i=0;i<k;i++) printf("%d ",b[i]);
for(i=0;i<m;i++)
{ nr=0;
for(j=0;j<n;j++)
if (a[i][j]<5) nr++;
r[i]=nr; }
int d=0; int nrr=r[0];
for(i=1;i<m;i++)
if ((nrr)<r[i]) {d=i;nrr=r[i];}
printf("\nDisciplina-restante: "); printf("%d - %d"
,d,nrr);
for (i=0;i<m;i++)
{ s=0; nr=0;
for(j=0;j<n;j++)
if (a[i][j]>=5) {s+=a[i][j];nr++;}
med[i]=s/nr; }
printf("Media pt fiecare disciplina.");
for(i=0;i<m;i++) printf("\n %d - %d ", i, med[i]);
getch();
}