Documente Academic
Documente Profesional
Documente Cultură
calculatoarelor
– proiect –
Baron Cristian Andrei
A. VECTORI
utiliza o singură variabilă (MAX) pentru reţinerea elementului maxim din vector.
De asemenea, pentru a putea exprima iterativ procesul, variabila MAX va fi iniţializată
cu x[1]. Algoritmul recursiv poate fi descris astfel:
- formula de start: MAX = x[1];
- formula recursivă: MAX = max(MAX,x[i]), i=2,n.
Pentru a reţine poziţia valorii maxime din vector se utilizează variabilele ppoz
şi upoz, iniţializate cu 1 (corespunzător poziţiei elementului cu care se iniţializează
variabila MAX). În procesul iterativ, variabila ppoz se modifică dacă un element x[i]
este strict mai mare decât MAX (pentru reţinerea poziţiei primei apariţii), iar variabila
upoz se modifică dacă un element x[i] este mai mare sau egal decât MAX (pentru
reţinerea poziţiei ultimei apariţii).
-pseudocod:
-set de valori:
n=4 max = 5;
x [1]=5 ppoz = upoz = 1;
x [2]=3 3 >= 5?
x [3]=5 5 >= 5?
x [4]=2 5 > 5?
max = 5;
upoz = 3;
2 >= 5?
afisează 5, 1, 3
-codificare:
#include<stdio.h>
#include<conio.h>
void main()
{
int i,pa,ua,n;
float x[100],max;
printf("Introduceti dimensiunea vectorului,n=");
scanf("%d",&n);
for(i=1;i<=n;i++){printf("x[%d]=",i);
scanf("%f",&x[i]);}
max=0;pa=0; ua=0;
for(i=1;i<=n;i++) if (x[i]>=max) {if (x[i]>max) {
pa=i;
max=x[i];}
ua=i;}
printf("\n maximul este %3.2f prima pozitie este %3.2d ultima aparitie este
%3.2d",max,pa,ua);
getch();
}
Pseudocod
{INTREG i,n,v[100],y[100],inv,nr,c,k=0;
scrie(‘n=’);
citeste(n);
DO-FOR i=1,n,1
scrie(‘v[‘,i,’]=’);
citeste(v[i]);
ENDDO
DO-FOR i=1,n,1
nr=v[i]*12;
c=nr;
WHILE c!=0 DO
inv=inv*10+c%10;
c=c/10;
ENDWHILE
IF nr=inv THEN
k=k+1;
y[k]=i;
ENDIF
ENDDO
IF k>0 THEN
scrie(’Persoanele a caror varsta exprimata in luni sunt: ’);
DO-FOR i=1,k,1 scrie(y[i]); ENDDO
ELSE scrie(’Nici o persoana nu are o varsta in luni numar palindrom’);
ENDIF
}
Set de valori
n=5
v=(5,11,17,3,8)
nr ia p rand valorile: 60,132,204,36,96→Nici o persoana nu are o varsta in luni numar
palindrom
-codificare:
#include<stdio.h>
#include<conio.h>
void main()
{int n,m, x[100],y[100],i;
printf (”Introduceti dimensiunea sirului:”); scanf(”%d”, &n) ;
for (int i=0;i<n;i++) {printf (”x[%d]=”,i) ;
scanf (”%d”, &x[i]) ; }
int nr= 0, inv, c;
for (i=0;i<n;i++)
{ inv =0;m = x[i]*12;
while (m) {inv =inv*10+m%10; m=m/10;c = inv; }
if (c == x[i]*12) {y[nr]=i; nr++;}
}
if (nr)
{printf (”Persoanele a caror varsta exprimata a luni formeaza un numar palindrom
sunt:”);
for (i=0;i<nr;i++) printf (”%d”,y[i]+1);
}
else printf(”Nu exista nici un numar palindrom!”);
getch();
}
Pseudocod
{INTREG i,n,v[100];
scrie(‘n=’);
citeste(n);
DO-FOR i=1,n,1
scrie(‘v[‘,i,’]=’);
citeste(v[i]);
ENDDO
IF n>2 THEN
i=2;
WHILE (i<n-1)&&(v[i]=(v[i-1]+v[i+1])/2) DO i=i+1;
ENDWHILE
ELSE scrie(‘vectorul are prea putine elemente’);
ENDIF
IF i=n-1 THEN scrie(‘elementele formeaza o progresie aritmetica’);
ELSE scrie(‘elementele nu sunt in progresie aritmetica’);
ENDIF
}
Set de valori
1)n=5
v=(7,10,13,16,19)→ elementele sunt in progresie aritmetica cu ratia 3
n>2
10=(7+13)/2
13=(10+16)/2
16=(13+19)/2
2) n=4
v=(3,5,14,2) → elementele nu sunt in progresie aritmetica
n>2
5!=(3+14)/2
14!=(5+2)/2
-codificare:
#include<stdio.h>
#include<conio.h>
void main ()
{ int n;float x[100];
printf(“introduceti dimensiunea vectorului”); scanf(“%d”,&n);
if(n<3) printf(“Vectorul are mai putin de 3 elemente!”);
else{
for (int i=0;i<n;i++)
{printf(“x[%d]=”,i); scanf (“%f”,&x[i]);}
i=1;
while((i<n-1) && (x[i] == (x[i-1]+x[i+1])/2)) i++;
if(i ==n-1)
printf(“Elementele formeaza o progresie aritmetica.”);
else
printf(“Elementele nu formeaza o progresie aritmetica!”);
}
getch();
}
Algoritmul determina daca elementele unui vector sunt in progresie aritmetica tinand
cont de conditiile: numarul de elemente ale vectorului trebuie sa fie mai mare decat 2 si
fiecare element,cu exceptia primului si ultimului sa fie egal cu media aritmetica a
elementului cu o pozitie inaintea sa si a elementului cu o pozitie dupa acesta.Daca aceste
conditii sunt indeplinite,elementele vectorului sunt in progresie aritmetica.
{natural v[100],nrprime[100];
intreg n,i,k,ok,d;
citeste(n);
do-for i=1,n,1
citeste(v[i]);
enddo
k=1;
do-for i=1,n,1
{d=2;
ok=1;
while d<=v[i] div 2 and ok==1
{if v[i] mod d==0 then
ok=0;
endif
d=d+1;
}
endwhile
if ok==1 then
{nrprime[k]=v[i];
k=k+1;
}
endif
}
enddo
if ok==0 then
scrie(“Nu exista nici un numar prim!”);
else
{scrie(“Numerele prime sunt :”);
do-for i=1,k-1,1
scrie(nrprime[i]);
enddo
}
endif
}
-codificare:
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main()
{
unsigned int n,i,k,j ;
unsigned int x[100], nrprime[100], a;
printf("Dimensiunea vectorului:"); scanf("%d",&n);
for (i=0;i<n;i++)
{printf("x[%d]=",i); scanf("%u", &x[i]);}
k=0;
for (i=0;i<n;i++){
a= (int)sqrt(x[i]) ; j=2;
while ((j<=a) && (x[i]%j !=0 )) j++;
if(j>a) nrprime[k++] =x[i];
}
if(!k) printf("Vectorul nu contine nici un numar prim.");
else { printf("Numerele prime sunt : \n");
for (i=0;i<k;i++) printf ("\n%u", nrprime[i]);
getch();
}
}
Pseudocod
{REAL i,j,n,x[100];
scrie(‘n=’);
citeste(n);
DO-FOR i=1,n,1
scrie(‘x[i’,i,’]=’);
citeste(x[i]);
ENDO
DO-FOR i=1,n-1,1
DO-FOR j=i+1,n,1
IF x[i]>x[j] THEN scrie(‘(‘,x[i],’,’,x[j],’)’);
ENDIF
ENDDO
ENDO
}
Set de valori
n=4
x=(1,13,2,4)
pt i=1 j=2 x[1]<x[2]
j=3 x[1]<x[3]
j=4 x[1]<x[4]
i=2 j=3 x[2]>x[3]→(13,2)
j=4 x[2]>x[4]→(13,4)
i=3 j=4 x[3]<x[4]
Date de iesire: (13,2), (13,4)
-codificare:
#include<stdio.h>
#include<conio.h>
void main ()
{ int n,i,j;float x[100];
printf("introduceti dimensiunea vectorului,n="); scanf("%d",&n);
for (int i=0;i<n;i++)
{printf("x[%d]=",i); scanf ("%f",&x[i]);}
for(i=0;i<n-1;i++)
for(j=1;j<n;j++) if (x[i]>x[j]) printf("%f %f",x[i],x[j]);
getch();
}
Algoritmul determina perechile de elemente reale in care primul element este mai
mare decat cel de-al doilea,iar pozitiile elementelor sunt in ordine crescatoare.Pentru
stabilirea acestor perechi trebuie sa se ia in calcul toate posibilitatile de combinare a
elementelor tinand cont de conditiile care trebuie indeplinite.Astfel se vor compara toate
elementele intre ele si se vor afisa perechile “in dezordine”.
Pseudocod
{REAL i,n,max,min,amplit=0,v[100];
scrie(‘n=’);
citeste(n);
DO-FOR i=1,n,1
scrie(‘v[‘,i,’]=’);
citeste(v[i]);
ENDDO
max=v[1];
min=v[1];
DO-FOR i=2,n,1
IF max<v[i] THEN max=v[i];
ENDIF
IF min>v[i] THEN min=v[i];
ENDIF
ENDDO
amplit=max-min;
scrie(‘amplitudinea sirului de numere este:’,amplit);}
Set de valori
-codificare:
#include<stdio.h>
#include<conio.h>
void main()
{int n,i; float x[100],max,min;
printf("Dimensiunea sirului:"); scanf("%d", &n);
for(int i=0;i<n;i++)
{printf ("x[%d]=",i); scanf ("%f", &x[i]);}
min=x[0]; max=x[0];for (i=1;i<n;i++)
if (x[i]<min) min = x[i];
else if (x[i]>max) max = x[i];
printf ("Amplitudinea este %5.2f", max-min);
getch();
}
Pseudocod
{INTREG i,j,n,v[100],max,min,pozmin=0,pozmax=0;
scrie(‘n=’);
citeste(n);
DO-FOR i=1,n,1
scrie(‘v[‘,i,’]=’);
citeste(v[i]);
ENDDO
max=v[1];
min=v[1];
DO-FOR i=2,n,1
IF max<v[i] THEN pozmax=i;
max=v[i];
ENDIF
IF min>v[i] THEN pozmin=i;
min=v[i];
ENDIF
ENDDO
IF pozmin<pozmax THEN
DO-FOR i=pozmin+1,pozmax-2,1
DO-FOR j=i+1,pozmax-1,1
IF v[i]>v[j] THEN aux=v[i];
v[i]=v[j];
v[j]=aux;
ENDIF
ENDDO
ENDDO
ELSE
DO-FOR i=pozmax+1,pozmin-2,1
DO-FOR j=i+1,pozmin-1,1
IF v[i]>v[j] THEN aux=v[i];
v[i]=v[j];
v[j]=aux;
ENDIF
ENDDO
ENDDO
ENDIF
scrie(‘vectorul final:’)’
DO-FOR i=1,n,1 scrie(v[i]);
ENDDO
}
Set de valori
n=10
v=(15,3,11,4,22,16,12,27,5,7)
min=3,pozmin=2
max=27,pozmax=8
v=(15,3,4,11,12,16,22,27,5,7)
-codificare:
#include<stdio.h>
#include<conio.h>
void main()
{int i,j,n,v[100],max,min,pozmin,pozmax,aux;
printf("Introduceti dimensiunea vectorului,n= ");
scanf("%d",&n);
for(i=0;i<n;i++){printf("v[%d]=",i);
scanf("%d",v[i]);
}
max=v[0];min=v[0];
for(i=1;i<n;i++){ if(max<v[i]) {pozmax=i;
max=v[i];}
if(min>v[i]){pozmin=i;
min=v[i];}
}
if (pozmin<pozmax){for(i=pozmin=1;i<pozmax-2;i++)
for(j=i+1;j<pozmax-2;i++) if (v[i]>v[j]) {aux=v[i];
v[i]=v[j];
v[j]=aux;}
}
else for(i=pozmax+1;i<pozmin-2;i++)
for(j=i+1;j<pozmin-1;j++) if(v[i]>v[j]){aux=v[i];
v[i]=v[j];
v[j]=aux;}
printf("Vectorul final este : ");
for(i=0;i,n;i++)
printf("%d",v[i]);
getch();
}
Pentru a obtine vectorul in varianta finala trebuie mai intai sa determinam minimul si
maximul din vector,cat si pozitiile unde se afla aceste numere,printr-o parcurgere a
vectorului si compararea elementelor sale.Apoi,intre pozitiile maximului(minimului) si
minimului(maximului) vom sorta descrescator(crescator) elementele
vectorului,comparand elementele intre ele si realizand interschimbari.Vectorul final va fi
afisat dupa terminarea procesului de sortare prin interschimbare.
-pseudocod:
{
intreg a[10],i,n,aux;
scrie ('n='); citeste (n);
do for i=1,n,1 {
scrie ('a[',i,']=');
citeste (a[i]); }
end for;
do for i=1,n-1,1 {
if a[i]>a[i+1] then {
auxa[i];
a[i][a[i+1];
a[i+1]aux;
end if;
end do;
do for 1=1,n,1
scrie (v[i]);
}
-codificare:
#include<stdio.h>
#include<conio.h>
void main(){//metoda bulelor
int n,i; float x[100],aux ;
printf("Introduceti dimensiunea vectorului, n=");scanf("%d",&n);
for(int i=0;i<n;i++){printf("x[%d]=",i); scanf("%f", &x[i]); }
int p=1;
while(p){
p = 0;
for(i=0;i<n-1;i++)
if(x[i]>x[i+1]){aux = x[i];x[i] = x[i+1];x[i+1] = aux;p = 1;
}
}
printf("Vectorul sortat este: \n");
for (i=0;i<n;i++)printf("%6.2f ", x[i]);
getch();
}
Set de valori:
n=5
a(4,5,23,12,3)
i=1
i=2
i=3 => a(4,5,12,23,3)
i=4 => a(4,5,12,3,23)
Pseudocod:
{intreg v[100],m=0,x[100],n,i;
citeste(n);
do for i=1,n,1 {citeste(x[i]);
if (x[i]≠0) then {m=m+1;
v[m]=x[i];} endif;}enddo;
do for i=1,m,1 scrie(v[i]); enddo;
}
Set de valori:
n=8 x=(10,0,0,3,0,5,0,9)
i=1, 1<=8 v[1]=10!=0 => m=1;
v[1]=x[1]=10;
i=2, 2<=8 v[2]=0!=0 Fals
i=3, 3<=8 v[3]=0!=0 Fals
i=4, 4<=8 v[4]=3!=0 => m=2;
v[2]=x[4]=3;
i=5, 5<=8 v[5]=0!=0 Fals
i=6, 6<=8 v[6]=5!=0 => m=3;
v[3]=x[6]=5;
i=7, 7<=8 v[7]=0!=0 Fals
i=8, 8<=8 v[8]=9!=0 => m=4;
v[4]=x[8]=9
se va afisa: 10 3 5 9
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int v[100],m=0,x[100],n,i;
printf("Introduceti dimensiunea,n=");
scanf("%d",&n);
for(i=1;i<=n;i++) {printf("x[%d]=",i);
scanf("%d",x[i]) ;}
for(i=1;i<=n;i++)
if(x[i]!=0) {m++;
v[m]=x[i];}
for(i=1;i<=m;i++) printf("%d",v[i]);
getch();
}
pseudocod
{ INTREG n , i ,k ,j,
REAL x [100], nrprime[100], a;
SCRIE( "Dimensiunea sirului:"); CITESTE (n);
DO-FOR i= 0,n,1 {SCRIE ("x[ ]= ",i); CITESTE(x);} ENDDO
K =0;
DO-FOR i= 0,n, 1 {a =(int)sqrt(x[i]); j = 2;
WHILE ((j<=a) && (x[i] % j != 0)) DO j++ ;ENDWHILE;
IF (j>a) THEN nrprime[k++]= x[i];}ENDDO;
IF (!k) THEN SCRIE(" Vectorul nu contine nici un numar prim. ");
ELSE { SCRIE (" Numerele prime sunt: " );
DO-FOR (i =0 ;i < k; i++) SCRIE ( nrprime[i]); ENDDO; }
}
Valori numerice
codificare
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main ( )
{unsigned int n , i, k,j ;
unsigned int x[100], nrprime[100], a ;
printf ("Dimensiunea sirului:"); scanf ("%d",&n);
for ( i = 0; i < n ; i++)
{printf ("x [%d]=",i); scanf ("%u", &x[i]);}
k =0 ;
for (i =0;i < n ;i++) { a =(int)sqrt(x[i]) ;j = 2;
while ((j<=a) && (x[i]%j != 0)) j++ ;
if (j>a) nrprime [k++] =x[i] ;}
if (!k) printf ("Vectorul nu contine nici un numar prim. ");
else { printf (" Numerele prime sunt: \n");
for (i =0; i< k; i++) printf (" %u" , nrprime[i]);}
getch();
}
Pseudocod:
{intreg v[100],n,i,b;
citeste(n);
do for i=1,n,1 citeste(v[i]); enddo;
do for i=1,n-2,1 if (2*v[i+1]=v[i]+v[i+2]) then{ b=1;
scrie(v[i],” “,v[i+1],” “,v[i+2]);}
else b=0;endif;enddo;
Set de valori:
1)n=4
v=(2,4,6,9)
v[1]=2
v[2]=4
v[3]=6
v[4]=9
i=1, 1<=2 => 2 * v[2]=v[1]+v[3]
2*4=2+6
8=8 (A)
i=2,2<=2 => 2*v[3]=v[2]+v[4]
2*6=4+9
12=13 (F)
i=3,3<=2 (F) => STOP
se va afisa v[1],v[2],v[3] : 2 4 6
2)n=5
v=(1,2,3,4,5) analog 1) se va afisa: 1 2 3
234
345
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int i,v[100],b,n;
printf("Introduceti dimensiunea,n=");
scanf("%d",&n);
for(i=1;i<=n;i++) {printf("v[%d]=",i);
scanf("%d",v[i]);}
for (i=1;i<=n-2;i++) if(2*v[i+1]==v[i]+v[i+2]) {b=1;
printf("%d,%d,%d",v[i],v[i+1],v[i+2]);
}
else b=0;
if(b=0) printf("nu exista triplete de nr in progresie aritmetica");
getch();
}
Set de valori:
n=5 v=(1,4,9,7,16)
x=0;
i=1 v[1]=1>0 => 1 *1=v[1]=1 => x=1;
y[1]=v[1]=1;
i=2 v[2]=4>0 => 2*2=v[2]=4 => x=2;
y[2]=v[2]=4;
i=3 v[3]=9>0 => 3*3=v[3]=9 => x=3;
y[3]=v[3]=9;
i=4 v[4]=7>0 => 2,64*2,64=v[7]=7 Fals
i=5 v[5]=16>0 => 4 *4=v[5]=16 => x=4;
y[4]=v[5]=16;
se va afisa: 1 4 9 16
Codificare:
#include <iostream.h>
#include <math.h>
#include<conio.h>
void main()
{int n,i,v[100],x,y[100];
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
x=0;
for(i=1;i<=n;i++) if(v[i]>0) if(floor(sqrt(v[i]))*floor(sqrt(v[i]))==v[i])
{ x++;
y[x]=v[i]; }
for(i=1;i<=x;i++) cout<<y[i]<<" ";
if(x==0) cout<<"nu este patrat perfect";
getch();}
Pseudocod
{REAL i,n,a[100],s;
scrie(‘n=’);
citeste(n);
s=0;
DO-FOR i=1,n,1 scrie(‘a[‘,i,’]=’);
citeste(a[i]);
s=s+a[i];
ENDDO
DO-FOR i=1,n,1 a[i]=(s-a[i])/(n-1);
ENDDO
DO-FOR i=1,n,1 scrie(‘a[‘,i,’]=’,a[i]);
ENDDO
}
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int i,v[100],s,n;
printf("Introduceti dimensiunea,n=");
scanf("%d",&n);
for(i=1;i<=n;i++) {printf("v[%d]=",i);
scanf("%d",&v[i]);}
for(i=1;i<=n;i++)
s=s+v[i];
for(i=1,i<=n;i++)
{v[i]=(s-v[i])/(n-1);
printf("%d",v[i]);}
getch();
}
Set de valori
n=4
a=(1,2,3,4)
s=10
a[1]=(10-1)/3=3
a[2]=(10-2)/3=2.66
a[3]=(10-3)/3=2.33
a[4]=(10-4)/3=2
Se va afisa: a=(3; 2.66; 2.33; 2)
Fie vectorul A cu elementele (a1, a2, …, an) si vectorul B cu elementele (b1, b1, …, bk)
care va contine elementele pare de pe pozitiile impare aflate in vectorul A. Dupa ce citim
lungimea vectorului A si elementele acestuia luam un contor care numara cate elemente
pare se afla pe pozitii impare. Initial contorul porneste de la 0. Pentru a afla pozitiile
impare verificam daca restul impartirii pozitiei la 2 este diferit de 0 (i%2<>0), iar
pentru a afla daca un element este par verificam daca restul impartirii acestuia la 2 este
egal cu 0 (A[i]%2=0). Daca ne sunt indeplinite aceaste conditie noul vector ia valoarea
fiecarui element par ce se afal pe pozitie impara in vectorul initial, iar contorul creste de
fiecare data cu o unitate. Procesu se opreste in momentul in care se termina elementele
vectorului initial. Daca s-a iesit cu contorul diferit de 0 afisam elementele vectorului
care contine elementele pare de pe pozitiile impare din vectorui initial, daca in schimb
contorul este egal cu 0 afisam pe ecran mesajul «Vectorul nu contine numere pare pe
pozitiile impare».
-pseudocod :
{
intreg A[100];
intreg B[100]; //va contine numerele pare de pe pozitiile impare din A
intreg n;
intreg i ;
intreg k ;//numara cate elemente pare se afla pe pozitii impare
scrie (“n=”);
citeste (n);
do_for i=1,n,1
{
scrie (“A[”, i, “]=”);
citeste (A[i]);
}
enddo
k=0 ;
do_for i=1,n,1
if i%2<>0 then
if A[i]%2=0 then
{
B[k]=A[i] ;
k=k+1 ;
}
endif
endif
enddo
if k<>0 then
{
scrie (“Numerele pare de pe pozitiile impare sunt: ”);
do_for i=0,k-1,1
{
scrie (“, “);
scrie (B[i]);
}
enddo
else
scrie (“Vectorul nu contine numere pare pe pozitii impare”);
endif
-codificare :
#include <stdio.h>
#include <conio.h>
void main()
{int i,A[100],B[100],n,k;
printf("Introduceti dimensiunea,n=");
scanf("%d",&n);
for(i=1;i<=n;i++) {printf("v[%d]=",i);
scanf("%d",A[i]);}
k=0;
for(i=1;i<=n;i++) if(i%2!=0) if(A[i]%2==0) {B[k]=A[i];
k=k+1;}
if (k!=0) { printf("Numerele pare de pe pozitiile impare sunt :");
for(i=0;i<=k-1;i++)
printf("%d",B[i]); }
else
printf("Vectorul nu contine numere pare pe pozitii impare");
getch();
}
PSEUDOCOD
{ INTREG n,i;
REAL x[100],y[100],ps;
Scrie („introduceti dimensiunea vectorilor”);
Citeste („n”);
Scrie(„introduceti elementele primului vector:”);
DO_FOR i=0,n,1 { Scrie (’x[i]=’);
Citeste (’x[i] ’);}
ENDDO
Scrie(’ introduceti elementele celui de-al doilea vector: ’);
DO-FOR i=p,n,1 { scrie(’y[i]= ’);
Citeste (’y[i’);}
ENDDO
Ps=0;
DO-FOR i=0,n,1 ps=ps+x[i]*y[i];
Scrie (’produsul scalar al celor doi vectori este ps=’,ps);
}
SET DE VALORI
X=( 1, 2, 3);
Y=(5, 2, 1);
Ps=1*5+2*2+3*1=12
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int n,i;float x[100], y[100], ps;
printf("Introduceti dimensiunea vectorilor, n=");
scanf("%d ", &n);
printf("Introduceti elementele primului vector: \n");
for(int i=0;i<n;i++)
{printf ("x[%d]=",i); scanf("%f",&x[i]);}
printf("Introduceti elementele celui de-al doilea vector:");
for(i=0;i<n;i++)
{printf("y[%d]=",i); scanf("%f", &y[i]);}
ps =0;
for(i=0;i<n;i++) ps+=x[i]*y[i];
printf("Produsul scalar este %10.2f . \n", ps);
getch();
}
MATRICI
1. Sa se construiasca transpusa unei matrici.
pseudocod
{
intreg m,n,i,j,a[30,30],aux;
scrie("n="); citeste(n);
scrie("m="); citeste(m);
do for (i=1,m,1)
do for(j=1,n,1) {
scrie("a[",",i,"][",j,"]=");
citeste(a[i][j]); }
scrie("Matricea: \n");
do for (i=1;n;1)
for(j=1;m;1)
scrie(a[i][j]);
for (i=2;in;1)
for(j=1;i;1) {
aux<--a[i][j];
a[i][j]<--a[j][i];
a[j][i]<--aux;
}
scrie("Matricea obtinuta: ");
for (i=1;m;1)
for(j=1;n;1)
scrie(a[i][j]);
}
codificare
#include<stdio.h>
#include<math.h>
#include<conio.h>
void main()
{ clrscr();
int m,n,i,j,a[30][30],aux;
printf("n="); scanf(" %d",&n);
printf("m="); scanf("%d",&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) {
printf("a[%d][%d]=",i,j);
scanf(" %d",&a[i][j]);
}
printf("Matricea: \n");
for (i=1;i<=n;i++) {
for(j=1;j<=m;j++)
printf(" %d ",a[i][j]);
printf("\n"); }
for (i=2;i<=n;i++)
for(j=1;j<i;j++) {
aux=a[i][j];
a[i][j]=a[j][i];
a[j][i]=aux;
}
printf("Matricea obtinuta: \n");
for (i=1;i<=m;i++) {
for(j=1;j<=n;j++)
printf(" %d ",a[i][j]);
printf("\n"); }
getch(); }
Set de valori
n=3
m=4
Matricea:
11 22 33 44
a = 55 66 77 88
99 10 20 30
Matricea obtinuta:
11 55 99
a = 22 66 10
33 77 20
44 88 30
Pseudocod:
{intreg a[100][100],n,m,i,j,max;
citeste(n);citeste(m);
do for i=1,n,1 do for j=1,m,1 citeste(a[i][j]); enddo; enddo;
do for i=1,n,1 {max=a[i][1];
do for j=1,m,1 if (max<a[i][j]) then max=a[i][j];endif;enddo;
do for j=1,m,1 a[i][j]=a[i][j]-max; enddo; } enddo;
do for i=1,n,1 {do for j=1,m,1 scrie(a[i][j]);
scrie(“ “);}enddo;enddo;}
Set de valori:
n=3 m=3
a=1 2 3
579
10 1 2
i=1 max=a[1][1]=1;
j=1 1<a[1][1]=1 => max=1;
j=2 1<a[1][2]=2 => max=2;
j=3 2<a[1][3]=3 => max=3;
j=1 a[1][1]=a[1][1]-max=1-3=-2;
j=2 a[1][2]=a[1][2]-max=2-3=-1;
j=3 a[1][3]=a[1][3]-max=3-3=0;
i=2 max=a[2][1]=5;
j=1 5<a[2][1]=5 =>max=5;
j=2 5<a[2][2]=7 =>max=7;
j=3 7<a[2][3]=9 =>max=9;
j=1 a[2][1]=a[2][1]-max=5-9=-4;
j=2 a[2][2]=a[2][2]-max=7-9=-2;
j=3 a[2][3]=a[2][3]-max=9-9=0;
i=3 max=a[3][1]=10;
j=1 10<a[3][1]=10 =>max=10;
j=2 10<a[3][2]=1 => max=10;
j=3 10<a[3][3]=2 => max=10;
j=1 a[3][1]=a[3][1]-max=10-10=0;
j=2 a[3][2]=a[3][2]-max=1-10=-9;
j=3 a[3][3]=a[3][3]-max=2-10=-8;
se va afisa: -2 -1 0
-4 -2 0
0 -9 -8
-codificare:
#include <stdio.h>
#include<conio.h>
void main()
{int a[100][100],i,j,n,m,max;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++)
{max=a[i][1];
for(j=1;j<=m;j++) if(max<a[i][j]) max=a[i][j];
for(j=1;j<=m;j++) a[i][j]=a[i][j]-max;}
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
printf("%d",a[i][j]);
getch();}}
Pseudocod:
{intreg a[100][100],i,j,m,n,aux;
natural x,y;
citeste(n);citeste(m);citeste(x);citeste(y);
do for i=1,n,1 do for j=1,m,1 citeste(a[i][j]);enddo;enddo;
do for j=1,m,1 {aux=a[x][j];
a[x][j]=a[y][j];
a[y][j]=aux;}enddo;
do for i=1,n,1 {do for j=1,m,1 scrie(a[i][j]);
scrie(“ “);}enddo;enddo;
}
Set de valori:
n=3 m=3 x=1 y=3
a=1 2 3
235
678
j=1 aux=a[1][1]=1;
a[1][1]=a[3][1]=6;
a[3][1]=aux=1;
j=2 aux=a[1][2]=2;
a[1][2]=a[3][2]=7;
a[3][2]=aux=2;
j=3 aux=a[1][3]=3;
a[1][3]=a[3][3]=8;
a[3][3]=aux=3;
se va afisa: 6 7 8
235
123
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],i,j,m,n,aux,x,y;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&m);
printf("x="); scanf("%d",x);
printf("y="); scanf("%d",y);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(j=1;j<=m;j++) {aux=a[x][j];
a[x][j]=a[y][j];
a[y][j]=aux;}
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
printf("%d",a[i][j]);
getch();}
}
{
real a[100][100]; intreg n,i,j,p,min;
Citeste(n);
p=1;
Do=for i=1,n,1
do-for j=1,n,1 citeste(a);
enddo;
enddo;
Do-for j=1,n,1 {
min=a[1 ][j];
do-for i=2,n,1
if a[i][j]<min then min=a[i][ j];
endif;
enddo;
if min=a[n-j+1][j] then p=p*min;
endif;
}
enddo;
scrie(p);
}
p=1
j=1
min=5
i=2
a[2,1]<min nu
i=3
a[3,1]<min da => min=4
min=a[3,1]? da => p=4
j=2
min=10
i=2
a[2,2]<min da => min=6
i=3
a[3,2]<min da => min=2
min=a[2,2]? nu
j=3
min=8
i=2
a[2,3]<min nu
i=3
a[3,3]<min nu
min=a[1,3]? da => p=32
scrie(32)
-codificare:
#include <stdio.h>
#include<conio.h>
void main ()
{int n,i,j,a[100][100],p,min;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&n);
p=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++)
{for (j=1;j<=n;j++)
printf("%d",a[i][j]);
printf("\n");
}
for(j=1;j<=n;j++){min=a[i][j];
for(i=2;i<=n;i++) if(a[i][j]<min) min=a[i][j];
if (min=a[n-j+1][j]) p=p*min;}
printf("produs este,= %d",p);
getch();
}
Pseudocod:
{intreg a[100][100],i,j,s,nr,n;
citeste(n);s=0;nr=0;
do for i=1,n,1 do for j=1,n,1 citeste(a[i][j]); enddo;enddo;
do for i=1,n-1,1 do for j=i+1,n,1 {s=s+a[i][j];
nr=nr+1;}enddo;enddo;
scrie(s/nr);}
Set de valori:
n=3 a=4 9 2
731
10 8 4
s=0;nr=0;
i=1 j=1+1=2 s=s+a[1][2]=0+9=9; nr=0+1=1;
j=1+2=3 s=s+a[1][3]=9+2=11; nr=1+1=2;
i=2 j=2+1=3 s=s+a[2][3] =11+1=12; nr=2+1=3;
i=3<=n-1=2 Fals => Stop
se va afisa: s/nr=12/3=4
Codificare:
#include <stdio.h>
#include<conio.h>
void main ()
{int n,i,j,a[100][100],s,nr;
float ma;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++)
{for (j=1;j<=n;j++)
printf("%d",a[i][j]);
printf("\n");
}
s=0;
for(i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++){s=s+a[i][j];
nr=nr+1;
}
ma=s/nr;
printf("media aritmetica a elementelor este %f",ma);
getch();
}
Pseudocod:
{intreg a[100][100],n,m,i,j,s;
citeste(m);citeste(n);
do for i=1,m,1 do for j=1,n,1 citeste(a[i][j]); enddo;enddo;
do for i=1,m,1 {s=0;
do for j=1,n,1 s=s+a[i][j];
a[i][n+1]=s;enddo;
}enddo;
do for j=1,n,1 {s=0;
do for i=1,m,1 s=s+a[i][j];
a[m+1][j]=s;enddo;
}enddo;
a[m+1][n+1]=0;
do for i=1,m+1,1 {do for j=1,n+1,1 scrie(a[i][j]);
scrie(“ “); enddo;
}enddo;
}
Set de valori:
m=2 n=3
a=1 5 3
472
i=1 s=0;
j=1 s=s+a[1][1]=0+1=1;
j=2 s=s+a[1][2]=1+5=6;
j=3 s=s+a[1][3]=6+3=9;
a[1][4]=s=9;
i=2 s=0;
j=1 s=s+a[2][1]=0+4=4;
j=2 s=s+a[2][2]=4+7=11;
j=3 s=s+a[2][3]=11+2=13;
a[2][4]=13;
j=1 s=0;
i=1 s=s+a[1][1]=0+1=1;
i=2 s=s+a[2][1]=1+4=5;
a[3][1]=5;
j=2 s=0;
i=1 s=s+a[1][2]=0+5=5;
i=2 s=s+a[2][2]=5+7=12;
a[3][2]=12;
j=3 s=0;
i=1 s=s+a[1][3]=0+3=3;
i=2 s=s+a[2][3]=3+2=5;
a[3][3]=5;
a[3][4]=0;
se va afisa:
1539
4 7 2 13
5 12 5 0
Codificare:
#include <iostream.h>
void main()
{int a[100][100],n,m,i,j,s;
cin>>m>>n;
for(i=1;i<=m;i++) for(j=1;j<=n;j++) cin>>a[i][j];
for(i=1;i<=m;i++) {s=0;
for(j=1;j<=n;j++) s=s+a[i][j];
a[i][n+1]=s;
}
for(j=1;j<=n;j++) {s=0;
for(i=1;i<=m;i++) s=s+a[i][j];
a[m+1][j]=s;
}
a[m+1][n+1]=0;
for(i=1;i<=m+1;i++) {for(j=1;j<=n+1;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
}
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],n,m,i,j,s;
printf("nr de linii=");
scanf("%d",&m);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=m;i++)
{for (j=1;j<=n;j++)
printf("%d",a[i][j]);
printf("\n");}
for(i=1;i<=m;i++){s=0;
for(j=1,j<=n;j++) {s=s+a[i][j];a[i][n+1]=s;}
}
for(j=1,j<=n;j++){s=0;
for(i=1;i<=m;i++){s=s+a[i[j];a[m+1][j]=s;}
}
for(i=1;i<=m+1;i++)
for(j=1,j<=n+1;j++)
printf("%d",a[i][j]);
}
codificare
#include <stdio.h>
#include <conio.h>
void main()
{int i,j,n,p,a[10][10],aux;
printf("Nr de linii/coloane = ");scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{printf("a[%d][%d]= ",i,j); scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%4d",a[i][j]);printf("\n");}
do
{p=0;
for(i=1;i<=n-1;i++)
if(a[i][i]>a[i+1][i+1])
{int l=i; int l1=i+1;p=1;
for(j=1;j<=n;j++)
{aux=a[l][j]; a[l][j]=a[l1][j];a[l][j]=aux;}
for(j=1;j<=n;j++)
{aux=a[j][l];a[j][l]=a[j][l1];a[j][l1]=aux;}
}
}while (p);
printf ("\n");
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++) printf("%4d",a[i][j]);
printf("\n");}
getch();
}
Pt.sortarea elementelor de pe diagonala principala se foloseste metoda bulelor de
sortare a unui vector.In momentul in care 2 elemente consecutive de pe diagonala nu
corespund criteriului de sortare se va proceda la interschimbarea liniilor care contin
elementele date si apoi se vor schimba si coloanele care contin elementele date.
{intreg a[100][100],n,m,i,j,p=1,b,d;
citeste(m);citeste(n);
do for i=1,m,1 do for j=1,n,1 citeste(a[i][j]); enddo;enddo;
do for i=1,m,1 do for j=1,n,1 {b=0;
if (a[i][j]=1 || a[i][j]=0) then b=1;
else do for d=2,a[i][j]/2,1 if (a[i][j]%d=0) then b=1; endif; endif;enddo;
if (b=0) then p=p*a[i][j];endif;}enddo;enddo;
scrie(p);}
Set de valori:
m=2 n=3
a=12 5 1
730
se va afisa :105
Codificare:
#include <iostream.h>
void main()
{int a[100][100],n,m,i,j,p,b,d;p=1;
cin>>m>>n;
for(i=1;i<=m;i++) for(j=1;j<=n;j++) cin>>a[i][j];
for(i=1;i<=m;i++) for(j=1;j<=n;j++) {b=0;
if(a[i][j]==1 || a[i][j]==0) b=1;
else for(d=2;d<=a[i][j]/2;d++) if(a[i][j]%d==0) b=1;
if(b==0) p=p*a[i][j];}
cout<<p;}
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],n,m,i,j,b,d,p=1;
printf("nr de linii=");
scanf("%d",&m);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=m;i++) for(j=1;j<=n;j++)
{printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);};
for(i=1;i<=m;i++) for(j=1;j<=n;j++) {b=0;
if(a[i][j]==1 || a[i][j]==0) b=1;
else for(d=2;d<=a[i][j]/2;d++) if(a[i][j]%d==0) b=1;
if(b==0) p=p*a[i][j];}
printf("%d",p);
getch();}
Algoritmul de mai sus verifica daca in matrice exista elemente prime.In cazul in care
exista,el calculeaza produsul lor.Se parcurge matricea atat pe linii,cat si pe coloane si se
verifica fiecare element.Daca acesta nu are divizori inseamna ca este numar prim si se
inmulteste cu produsul initial care este egal cu 1.Dupa ce au fost gasite toate numerele
prime din matrice se afiseaza produsul lor.
{intreg a[100][100],n,m,i,j,b,aux;
citeste(n); citeste(m);
do for i=1,n,1 do for j=1,m,1 citeste(a[i][j]);enddo;enddo;
do for i=1,n,1 {
b=0;
while (b=0) do {b=1;
do for j=1,m-1,1 if (a[i][j]>a[i][j+1]) then {aux=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=aux;
b=0;
}endif;
enddo;}endwhile;
}enddo;
do for j=1,m,1 {
b=0;
while (b=0) do {b=1;
do for i=1,n-1,1 if (a[i][j]>a[i+1][j]) then {aux=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=aux;
b=0;
}endif;
enddo;}endwhile;
}enddo;
do for i=1,n,1 {do for j=1,m,1 scrie(a[i][j]);
scrie(“ “); enddo;}enddo;
}
Set de valori:
n=3 m=3
a= 2 98 36
1 14 7
55 18 12
i=1 b=0
a[1][1]>a[1][2]=>2>98 Fals => b=1
a[1][2]>a[1][3]=> 98>36 => aux=a[1][2]=98
a[1][2]=a[1][3]=36
a[1][3]=aux=98;b=0
i=2 b=0
a[2][1]>a[2][2]=> 1 >14 Fals => b=1
a[2][2]>a[2][3]=> 14>7 => aux=a[2][2]=14
a[2][2]=a[2][3]=7
a[2][3]=aux=14; b=0
i=3 b=0
a[3][1]>a[3][2]=> 55>18 => aux=a[3][1]=55
a[3][1]=a[3][2]=18
a[3][2]=a[3][3]=55; b=0
a[3][2]>a[3][3]=> 18>12 => aux=a[3][2]=18
a[3][2]=a[3][3]=12
a[3][3]=aux=18;b=0
2 36 98
1 7 14
12 18 55
j=1 b=0
a[1][1]>a[2][1]=>2>1 => aux=a[1][1]=2
a[1][1]=a[1][2]=1
a[1][2]=aux=2;b=0
a[2][1]>a[3][1]=> 1>55 Fals=> b=1
j=2 b=0
a[1][2]>a[2][2] => 98 >14=> aux=a[1][2]=98
a[1][2]=a[2][2]=14
a[2][2]=aux=98;b=0
a[2][2]>a[3][2]=> 14>18 Fals =>b=1
j=3 b=0
a[1][3]>a[2][3]=>36>7=> aux=a[1][3]=36
a[1][3]=a[2][3]=7
a[2][3]=aux=36;b=0
a[2][3]>a[3][3]=> 7>12 Fals => b=1
se va afisa: 1 7 14
2 18 55
12 36 98
Codificare:
#include <iostream.h>
void main()
{int a[100][100],n,m,i,j,b,aux;
cin>>n>>m;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j];
for(i=1;i<=n;i++) {b=0;
while(b==0) {b=1;
for(j=1;j<=m-1;j++) if(a[i][j]>a[i][j+1]){aux=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=aux;
b=0;}
} }
for(j=1;j<=m;j++) {b=0;
while(b==0) {b=1;
for(i=1;i<=n-1;i++) if(a[i][j]>a[i+1][j]) {aux=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=aux;
b=0;}
} }
for(i=1;i<=n;i++){ for(j=1;j<=m;j++) cout<<a[i][j]<<" ";
cout<<endl;
}
}
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],n,m,i,j,b,aux;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&m);
for(i=1;i<=n;i++) for(j=1;j<=m;j++)
{printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++) {b=0;
while(b==0) {b=1;
for(j=1;j<=m-1;j++) if(a[i][j]>a[i][j+1]){aux=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=aux;
b=0;}
} }
for(j=1;j<=m;j++) {b=0;
while(b==0) {b=1;
for(i=1;i<=n-1;i++) if(a[i][j]>a[i+1][j]) {aux=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=aux;
b=0;}
} }
for(i=1;i<=n;i++) { for(j=1;j<=m;j++) printf ("%d", a[i][j] );
printf("\n");}
getch();
}
Pseudocod
{REAL i,j,m,n,k,s,a[10][8],v[8];
scrie(’m=’);
citeste(m);
scrie(’n=’);
citeste(n);
DO-FOR i=1,m,1
DO-FOR j=1,n,1 scrie(’a[’,i,’][’,j,’]=);
citeste(a[i][j]);
ENDDO
ENDDO
DO-FOR i=1,n,1 v[i]=0
ENDDO
WHILE i<=m DO
DO-FOR j=1,n,1
nr=1;
IF a[i][j]<>0 THEN DO-FOR k=1,j-1,1 nr=nr*10;
ENDDO
ENDIF
v[i]=v[i]+a[i][j]*nr;
ENDDO
i=i+1;
ENDWHILE
s=0;
DO-FOR i=1,m,1 s=s+v[i];
ENDDO
DO-FOR i=1,m-1,1 scrie(v[i],’+’);
ENDDO
scrie(v[m],’=’,s);
}
Set de valori
m=4
n=6
a= 0 0 0 5 2 3
032278
456789
000007
Vectorul v,cu m=4 elemente, va fi format din numerele obtinute pe fiecare linie si va
contine elementele: 523=5*100+2*10+3
32278=3*10000+2*1000+2*100+7*10+8
456789=4*100000+5*10000+6*1000+7*100+8*10+9
7
Suma,calculata in variabila s, va fi 489597.
In final se va afisa: 523+32278+456789+7=489597
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[10][8],v[8],n,i,j,m,k,s,nr;
printf("nr de linii=");
scanf("%d",&m);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=m;i++)
{for (j=1;j<=n;j++)
printf("%d",a[i][j]);
printf("\n");}
for(i=1;i<=n;i++) v[i]=0;
while (i<=m) for(j=1;j<=n;j++){ nr=1;
if (a[i][j]!=0) for(k=1;k<=j-1;j++) nr=nr*10;
v[i]=v[i]+a[i][j]*nr;
i=i+1;
}
s=0;
for(i=1;i<=m;i++) s=s+v[i];
for(i=1;i<=m-1;i++) printf("%d + ",v[i]);
printf("Suma este %d",s);
getch();
}
{REAL i,j,n,a[100][100],max,min;
scrie(’n=’);
citeste(n);
DO-FOR i=1,n,1
DO-FOR j=1,n,1 scrie(’a[’,i,’][’,j,’]=);
citeste(a[i][j]);
ENDDO
ENDDO
max=a[2][1];
min=a[2][1];
DO-FOR i=2,n/2,1
DO-FOR j=1,i-1,1
IF max<a[i][j] THEN max=a[i][j]
ENDIF
IF min>a[i][j] THEN min=a[i][j]
ENDIF
ENDDO
ENDDO
DO-FOR i=n/2+1,n-1,1
DO-FOR j=1,n-i,1
IF max<a[i][j] THEN max=a[i][j]
ENDIF
IF min>a[i][j] THEN min=a[i][j]
ENDIF
ENDDO
ENDDO
scrie(’produsul dintre minimul si maximul din stanga intersectiei diagonalelor
este:’max*min);
}
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],n,i,j,min,max,p;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++)
{for (j=1;j<=n;j++)
printf("%d",a[i][j]);
printf("\n");}
max=a[2][1];
min=a[2][1];
for(i=2;i<=n/2;i++)
for(j=1;j<=i-1;j++) {if (max<a[i][j]) max=a[i][j];
if (min>a[i][j]) min=a[i][j];}
for(i=n/2+1;i<=n-1;i++)
for(j=1;j<=n-i;j++)
{if (max<a[i][j]) max=a[i][j];
if (min>a[i][j]) min=a[i][j];
}
p=min*max;
printf("produsul dintre minimul si maximul din stanga intersectiei diagonalelor este:",p);
getch();
}
Set de valori
n=5
a= 2 5 2 7 11
-1 3 12 13 23
11 15 1 25 1
4 0 -5 3 -7
7 8 9 1 2
max=-1
min=-1
i=2 j=1 min=-1
max=-1
i=3 j=1 min=-1
max=11
j=2 min=-1
max=15
i=4 j=1 min=-1
max=15
Se va afisa: produsul dintre minimul si maximul din stanga intersectiei diagonalelor este:
-15
Pseudocod:
codificare
#include <stdio.h>
#include <conio.h>
void main ( )
{ int m, p, q, i, j, k, a[100][100], b[100][100], c[100][100];
printf ("\nNr de linii si de coloane = "); scanf ("%d",&m);
for ( i=1; i<=m; i++)
for ( j=1; j<=m; j++)
{printf("a[%d][%d]= ",i ,j); scanf ("%d", &a[i][j]);}
printf ("puterea este :"); scanf ("%d", &p);
for (i=1; i<=m; i++)
for ( j=1; j<=m; j++) if(i==j) b[i][j]=1;
else b[i][j]=0;
for ( q=1; q<=p; q++)
{ for ( i=1 ; i<=m; i++)
for ( j=1; j<=m; j++)
{c[i][j]=0;
for( k=1; k<=m; k++)
c[i][j]= c[i][j]+b[i][k]*a[k][j];
}
for( i=1; i<=m; i++)
for ( j=1; j<=m; j++)
b[i][j]=c[i][j];
}
for ( i=1; i<=m; i++)
{ for ( j=1; j<=m; j++)
printf("%d ",b[i][j]);
printf ("\n"); }
getch();
}
Pseudocod
{REAL i,j,n,a[100][100],v[100],s1,s2;
scrie(’n=’);
citeste(n);
DO-FOR i=1,n,1
DO-FOR j=1,n,1 scrie(’a[’,i,’][’,j,’]=);
citeste(a[i][j]);
ENDDO
ENDDO
DO-FOR i-1,n,1 v[i]=0
ENDDO
i=1;
WHILE i<=n DO
s1=0;
s2=0;
DO-FOR j=1,n,1 s1=a[i][j]+s1;
s2=s2+a[j][i];
ENDDO
IF s2=0 THEN v[i]=0
ELSE v[i]=s1/s2
ENDIF
i=i+1;
ENDWHILE
DO-FOR i=1,n,1 scrie(’v[’,i,’]=’,v[i])
ENDDO
}
Codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int i,j,n,a[100][100]; float v[100],s1,s2;
printf("nr de linii=");
scanf("%d",&n);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=n;i++) for(j=1;j<=n;j++)
{printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
for(i=1;i<=n;i++){for (j=1;j<=n;j++) printf("%d",a[i][j]);
printf("\n");}
for(i=1;i<=n;i++) v[i]=0;
i=1;
while (i<=n){
s1=0;
s2=0;
for(j=1;j<=n;j++) {s1=a[i][j]+s1;
s2=s2+a[j][i];}
if(s2=0) v[i]=0; else v[i]=s1/s2;
i=i+1;
}
for(i=1;i<=n;i++) printf("%f",v[i]);
getch();
}
Set de valori
n=4
a= 5 0 61
2 -5 83
2 0 40
-1 5 27
i=1 s1=5+0+6+1=12
s2=5+2+2-1=7
i=2 s1=2-5+8+3=8
s2=0+5-5+0=0
i=3 s1=2+0+4+0=6
s2=6+8+4+2=20
i=4 s1=-1+5+2+7=13
s2=1+3+0+7=11
Vectorul va fi: v=(1.5;0;0.3;1.18)
Modul de retinere al algoritmului
Algoritmul genereaza un vector ale carui elemente sunt rapoarte de sume pe aceeasi
linie si cloana.Pentru a determina aceste elemente trebuie sa calculam sumele
corespunzatoare liniilor si coloanelor carora le corespunde acelasi indice.In cazul in care
suma de pe coloana este nula,elementul corespunzator indicelui acestei cloane in verctor
va fi nul,iar in caz contrat va fi obtinut ca raport intre suma de pe linie sisuma de pe
coloana.
Pseudocod
{REAL i,j,m,n,a[100][100],cresc,k;
scrie(’m=’);
citeste(m);
scrie(’n=’);
citeste(n);
DO-FOR i=1,m,1
DO-FOR j=1,n,1 scrie(’a[’,i,’][’,j,’]=);
citeste(a[i][j]);
ENDDO
k=0;
DO-FOR i=1,m,1
cresc=0;
DO-FOR j=1,n-1,1
IF a[i,j]>a[i,j+1] THEN cresc=1;
ENDIF
ENDDO
IF cresc=0 THEN k=k+1;
ENDIF
ENDDO
IF k=0 THEN scrie(’nu exista linii ale caror elemente sunt in ordine crescatoare’)
ELSE scrie(’exista ’,k,’ linii ale caror elemente sunt in ordine crescatoare’)
ENDIF
}
Set de valori
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{int a[100][100],n,m,i,j,cresc,k;
printf("nr de linii=");
scanf("%d",&m);
printf("nr de coloane=");
scanf("%d",&n);
for(i=1;i<=m;i++) for(j=1;j<=n;j++)
{printf("a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);}
k=0;
for(i=1;i<=m;i++)
cresc=0;
for(j=1;j<=n-1;j++)
{if(a[i][j]>a[i][j+1])
cresc=1;
if (cresc==0)
k=k+1;}
if(k==0)
printf("nu exista linii ale caror elemente sunt in ordine crescatoare");
else
printf("nr liniile ale caror elemente sunt in ordine cresc este: %d", k);
getch();}
Pseudocod
{REAL i,j,n,m,a[100][100];
scrie(’m=’);
citeste(m);
scrie(’n=’);
citeste(n);
DO-FOR i=1,m,1
DO-FOR j=1,n,1 scrie(’a[’,i,’][’,j,’]=);
citeste(a[i][j]);
ENDDO
DO-FOR i=1,n,1
DO-FOR j=1,n,1
IF (a[i][j]%2=0) || (i%2=1) || (j%3=0) THEN scrie(a[i][j]);
ENDIF
ENDDO
ENDDO
}
Set de valori
m=4, n=9
a= 1 38 2 4 54 8 62 177 7
10 11 212 13 14 15 16 17 18
21 22 91 23 24 6 25 26 3
29 30 31 32 33 34 35 36 37
-codificare:
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j,n,m,a[100][100];
printf("n="); scanf("%d",&n);
printf("Introduceti elementele matricei:\n");
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%i",&a[i][j]);
}
for (i=1;i<=n;i++) {
for(j=1;j<=n;j++)
printf(" %d",a[i][j]);
printf("\n"); }
for(i=1;i<n;i++)
{for(j=1;j<n;j++)
if((a[i][j]%2==0) && (i%2==0) && (j%3==0))
printf("%d",a[i][j]);}
getch();
}
Modul de retinere al algoritmului