Sunteți pe pagina 1din 56

Bazele programarii

calculatoarelor
– proiect –
Baron Cristian Andrei

A. VECTORI

1. Să se scrie programul pentru determinarea elemntului maxim dintr-


un vector de dimensiune n şi a poziţiei primei şi ultimei sale apariţii.

-modul de reţinere al algoritmului:

Fie vectorul X = ( x1 , x 2 ,..., x n ) . Maximul din vectorul X este


MAX = max( xi ), i =1, n . Deoarece, la un moment dat, comparaţia se realizează
numai pentru doua valori, algoritmul poate fi descris astfel:
MAX 1 = max( x1 , x 2 );
MAX 2 = max( MAX 1 , x3 );
MAX 3 = max( MAX 2 , x 4 );
.......... .....
MAX n −1 = max( MAX n −2 , x n );
.......... ..
MAX = MAX n −1
Maximele parţiale MAX 1 , MAX 2 ,..., MAX
n −1 nu interesează şi de aceea se va

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:

{întreg n, ppoz, upoz, i;


real x[100], max;
citeşte n;
do-for i=1,n,1
citeşte x[i];
enddo
max = x[1];
ppoz = upoz = 1;
do-for i=2, n, 1
if ( x[i] >= max )
then { if ( x[i] > max )
then ppoz = i;
endif
max = x[i];
upoz = i;
}
endif
scrie max, ppoz, upoz;
}

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

2. Fie un vector care reprezinta varsta exprimata in ani a n persoane.Sa


se determine persoanele a caror varsta exprimata in luni formeaza un
numar palindrom.

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

Modul de retinere al algoritmului


Pentru determinarea personelor a caror varsta exrpimata in luni reprezinta un numar
palindrom trebuie sa transformam mai intai varstele in ani in varste in luni.Pentru
fiecare varsta in luni vom calcula inversul numarului astfel obtinut,prin descompunerea
numarului initial in cifre si formarea unui nou numar cu aceste cifre luate de la coada
la cap.Daca inversul si numarul initial sunt egale,atunci retinem intr-un alt vector
pozitia pe care se afla acest numar.La sfarsit,afisam vectorul obtinut cu pozitiile
respective.
3.Sa se scrie programul care verifica daca elementele unui vector
formeaza o progresie aritmetica.

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

Modul de retinere al algoritmului

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.

4. Sa se scrie programul care determina toate numerele prime dintr-un


sir de numere natural

Condiţia ca un număr să fie prim este ca acesta să nu se dividă cu nici un


număr din intervalul [1,n/2].Vom folosi o variabilă boolenă care va lua
valoarea 1 dacă numărul este prim şi 0,în caz contrar.Iniţial variabila va fi
iniţializată cu 1,presupunând că există cel puţin un număr prim.Pentru a
optimiza algoritmul în condiţia de verificare a divizorilor unui număr vom
adăuga şi condiţia ca variabila booleană să fie egală cu 1.

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

Considerăm vectorul v,de dimensiune 5,cu următoarele componente :15,8,2,3,5


k=1;
Pas1 i=1
1<=5?Da 
d=2;
ok=1;
2<=15/2 si ok==1? Da 
15%2==0?Nu
d=3
3<=15/2 si ok==1?Da
15%3==0?Da 
ok=0
d=4
4<=15/2 si ok==1?Nu
ok==1?Nu
Pas2 i=2
2<=5?Da
d=2;
ok=1;
2<=8/2 si ok==1?Da
8%2==0?Da
ok=0;
d=3
3<=8/2 si ok==1?Nu
ok==1?Nu
Pas3 i=3
3<=5?Da
d=2;
ok=1;
2<=2/2 si ok==1?Nu
ok==1?Da
nrprime[1]=2;
k=2;
Pas4 i=4
4<=5?Da
d=2;
ok=1;
2<=3/2?Nu
ok==1?Da
nrprime[2]=3;
k=3;
Pas5 i=5
5<=5?Da
d=2;
ok=1;
2<=5/2 si ok==1?Da
5%2==0?Nu
d=3
3<=5/2 si ok==1?Nu
ok==1?Da
nrprime[3]=5;
k=4;
Pas6 i=6
6<=5?Nu
Pas7 ok==0?NuNumerele prime sunt 2 3 5
Stop algoritm

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

5.Fiind dat vectorul x cu n elemente reale,sa se afiseze perechile „in


dezordine”. Intr-o pereche „in dezordine” sunt indeplinite conditiile:
i<j, x[i]>x[j].

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

Modul de retinere al algoritmului

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”.

6. Să se scrie programul care determină amplitudinea unui şir de


numere memorate într-un vector de elemente reale.

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

Numarul de elemente ale vectorului: 5


v=(16,8,27,5,3);
max=27
min=3
amplitudinea=24

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

Modul de retinere al algoritmului


Pentru determinarea amplitudinii unui sir de numere trebuie sa determinam maximul
si minimul din acel sir memorat intr-un vector de numere reale.Pentru a gasi maximul si
minimul sirului trebuie sa parcurgem vectorul si sa comparam elementele sale intre ele
pana cand determinam necunoscutele.Amplitudinea va fi diferenta dintre maximul si
minimul determinate in urma procesului anterior.

7.Se da un vector cu n componente intregi.Sa se ordoneze crescator


elementele situate intre elementul minim si elementul maxim( sau
invers,intre elementul maxim si elementul minim,daca maximul precede
minimul in vector) si sa se afiseze vectorul rezultat in urma prelucrarii.

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

Modul de retinere al algoritmului

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.

8. Sa se sorteze crescator un vector cu n elemente.

-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 {
auxa[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)

i=1; i=2; i=3 => a(4,5,3,12,23) ... se obtine (3,4,5,12,23)

9.Scrieti un program care elimina toate elementele nule dintr-un vector


de numere intregi.

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

Modul de retinere al algoritmului:

Se utilizeaza doi vectori:vectorul initial x si vectorul v in care vor fi puse


elementele diferite de 0.Se parcurge cu instructiunea for vectorul x si se verifica daca
elementele lui sunt diferite de 0.In cazul in care exista elemente diferite de
0,m(numarul lor) va creste cu o unitate si in vectorul v vor fi inserate aceste
elemente.Numarul elemenetelor vectoului v va fi m si se afiseaza acest vector.

10. Să se scrie programul care determină toate numerele prime dintr-un


şir de numere naturale.

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

Fie sirul X=(49, 13 , 4) unde X=( x[0], x[1], x[2] )


Dimensiunea sirului: 3
Sunt citite elementele sirului ale caror pozitii sunt numerotate de la 0.
k=0;
Pasul1: atata timp cat i<n se executa instructiunile din DO-FOR:
pentru i=0  a =sqrt(x[0])= sqrt(49)=7; j = 2;
Pasul 2: se verifica ,conditia lui WHILE DO 2<=7(A) si logic 49 modulo2 !=0 (A)
Deci se incrementeaza j ; j=3
3<=7 (A) si logic 49 modulo3 !=0 (A) j=4
4<=7(A) si logic 49 modulo3 !=0 (A) j=5
5<=7(A) si logic 49 modulo5 !=0(A)  j=6
6<=7(A) si logic 49 modulo6 !=0(A)  j=7
7<=7(A) si logic 49 modulo 7!=0(F) se iese din WHILE DO
Pasul 3: se verifica conditia lui IF : 7>7 (F) nu intra in IF
pentru i=1  a =sqrt(x[1])=sqrt(13)=3.6
Pasul 2: j=2 , 2<=3.6 (A); si logic 13 modulo2 !=0 (A) j=3
3 < 3.6 (A) si logic 13 modulo 3!=0(A)  j=4<3.4(F) se iese din WHILE DO
Pasul 3: se verifica conditia lui IF : 4>3.6 (A)nrprime[1]=x[1]=13
pentru i=2 a = sqrt 4 =2 j=2
Pasul 2:2<=2(A) si logic 4 modulo2 !=0 (F) se iese din WHILE DO
Vectorul numerelor prime din sirul x contine un singur element :13

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();
}

11.Fie un vector cu numere naturate citite de la tastatura.Sa se afiseze


toate tripletele de numere consecutive din vector care sunt in progresie
aritmetica.

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;

if(b=0) then scrie(“nu exista triplete de nr in progresie aritmetica”);endif;


}

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

Modul de retinere al algoritmului:

Se citesc cele n elemente ale vectorului v,parcurgandu-le cu instructiunea


for.Pentru ca trei numere sa fie in progresie aritmetica trebuie ca cel din mijloc sa
fie egal cu media aritmetica a celui dinainte si celui de dupa el.Pentru a verifica
aceasta conditie,vectorul va fi parcurs pana la n-2(pentru ca avem v[i+1] si v[i+2]
in conditie si sunt n elemente).In cazul in care 3 elemente consecutive ale vectorului
indeplinesc aceasta conditie,ele se vor afisa.Altfel, se va afisa un mesaj
corespunzator.

12. Se citeste de la tastatura un vector cu n(1<=n<=100) componente de


tip intreg. Se cere sa se construiasca si sa se afiseze un nou vector cu
componente patrate perfecte din
vectorul initial.
Pseudocod:
{intreg n,i,v[100],x,y[100];
citeste(n);
do for i=1,n,1 citeste(v[i]); enddo;
x=0;
do for i=1,n,1 if(v[i]>0) then if( v[i ] * v[i ] =v[i]) then{
x=x+1;
y[x]=v[i];}endif;endif;enddo;
do for i=1,x,1 scrie(y[i],” ”); enddo;
if (x=0) then scrie(“nu este patrat perfect”);endif;}

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

Modul de retinere al algoritmului:


Se citesc elementele vectorului cu ajutorul instructiunii for,element cu element.Pentru ca
un numar sa fie patrat perfect el trebuie sa fie in primul rand pozitiv si radical din el sa
fie un numar natural(sau inmultirea radicalurilor dintr-un numar sa fie fix egal cu
numarul).Daca conditia ca numarul sa fie patrat perfect este indeplinita,atunci numarul
va fi pus intr-un vector y de x elemente si se va afisa.In cazul in care in vector nu exista
nici un patrat perfect,atunci se va afisa un mesaj corespunzator.

13.Fiind dat un vector a cu n elemente,sa se inlocuiasca fiecare element


al sau cu media aritmetica a celorlalte n-1 elemente.

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)

Modul de retinere al algoritmului

Algoritmul transforma valorile dintr-un vector initial in valori egale cu media


aritmetica a celorlalte n-1 valori aflate in vectorul initial.Pentru inceput trebuie sa
calculam suma elementelor din vector pentru ca vectorul isi va modifica pe parcurs
valorile,iar suma nu va fi aceeasi.Fiecare element se va obtine prin scaderea din suma
elementelor a elementui respectiv si impartirea la numarul de elemente -1.In final se va
afisa noul vector de medii aritmetice.

14.Sa se afiseze numerele pare situate pe pozitiile impare ale unui


vector.

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

Executarea programului anterior:

Pasul 1 : Luam vectorul A de dimensiune n=3 si introducem elementele vectorului :


A[1]=1
A[2]=3
A[3]=2
Variabila k numara cate elemente pare pe pozitiile impare sunt in vactorul A, de aceea il
initializam cu 0 (k=0).
Pasul 2 : Parcurgem sirul si :
Pasul 2.1 : i=1
1<3 =>adevarat
1%2<>0 =>adevarat
1%2=0 =>fals //se iese din al doilea if
i=1+1=2
Pasul 2.2 : 2<3 =>adevarat
2%2<>0 =>fals //se iese din if
i=2+1=3
Pasul 2.3 : 3=3 =>adevarat
3%2<>0 =>adevarat
2%2=0 =>adevarat
B[0]=2
k=0+1=1
i=3+1=4
Pasul 2.4 : 4<3 =>fals //se iese din do_for
Pasul 3 : 1<>0 =>adevarat
i=0
0=0=>adevarat
Numerele pare de pe pozitiile impare sunt: 2

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

15.Sa se scrie programul pentru determinarea produsului scalar dintre


doi vectori de dimensiune n.

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

MODUL DE RETINERE AL ALGORITMULUI

Fie vectorii X=(x1,x2,..xn) si Y=(y1,y2,..yn) de aceiasi dimensiune n.Produsul scalar al


celor doi vectori este ps= x1*y1+ x2*y2 +x3*y3+...+ xn*yn. Se va inmulti fiecare
element al vectorului X cu fiecare element al vectorului Y de pe aceiasi pozitie,ps
retinand suma produselor respective.In final,programul va afisa produsul scalar.

-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

2.Pentru fiecare linie a unei matrice sa se scada din elementele sale


valoarea maxima din acea linie.

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

Modul de retinere al algoritmului:

Algoritmul calculeaza maximul elementelor de pe fiecare linie a unei matrice si apoi


scade din fiecare element maximul gasit.Pentru a calcula maximul pe fiecare linie se
parcurge cu instructiunea for fiecare linie a matricei.Initial,maximul este primul element
de pe linie.Daca pe acea linie exista un element mai mare decat primul element,atunci
maximul va lua valoarea acelui element.Apoi se scade din fiecare element maximul gasit
de pe fiecare linie si se afiseaza matricea nou formata.

3.Se citeste un tablou cu m linii si n coloane.Se citesc de asemenea si


doua numere naturale,distincte,x si y,cuprinse intre 1 si m.Se cere sa se
interschimbe linia x cu linia y.

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

Modul de retinere al algoritmului:

Se citeste matricea element cu element,cu ajutorul instructiunii for,folosind un for


pentru linii si un for pentru coloane.Algoritmul interschimba linia x cu linia y,parcurgand
initial pe coloane matricea a.Se foloseste o variabila aux in care se salveaza fiecare
element de pe linia x si se interschimba cu fiecare element de pe linia y si se afiseaza
matricea astfel obtinuta.

4. Se considera o matrice patratica cu n linii si n coloane. Scrieti un


program care citeste de la tastatura valoarea n si elementele matricei si
care afiseaza pe ecran, produsul acelor elemente de pe diagonala
secundara care au proprietatea ca sunt valori minime pe coloanele lor.

Se intializeaza produsul cu 1, iar apoi se citeste matricea.Se afla minimul de pe


fiecare coloana a tabloului si se verifica daca fiecare minim indeplineste conditia
de a se afla pe diagonala secundara,iar in caz afirmativ se adauga la produs.

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

Exemplu: pentru n=3 si matricea: 5 10 8


11 6 9
4 2 12

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

5. Se da o matrice patratica de dimensiune n.Sa se calculeze media


aritmetica a elementelor de deasupra diagonalei principale(exclusiv
diagonala).

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

Modul de retinere al algoritmului:

Se citeste matricea element cu element,cu ajutorul instructiunii for.Pentru a calcula


media aritmetica a elementelor situate deasupra diagonalei principale se parcurge
matricea pe linii pana la linia n-1,deoarece nu se ia in calcul nici un element de pe ultima
linie (se calculeaza media aritmetica a elementelor de deasupra diagonalei
principale,exclusiv diagonala).Pentru coloane,parcurgerea se porneste de la coloana
i+1,deoarece elementul a[1][1] se afla pe diagonala si nu intra in calcul.Cu fiecare
element adaugat in suma,nr creste cu o unitate,numarand elementele de deasupra
diagonalei principale.Dupa acesti pasi, se afiseaza media aritmetica ce are formula : s/nr.
(unde s este suma elementelor de deasupra diagonalei).
6.Sa se bordeze o matrice a care are m linii si n coloane,cu linia m+1 si
coloana n+1,unde a[m+1][j] sa fie suma elementelor de pe coloana j,iar
a[i][n+1] sa fie suma elementelor de pe linia i

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;

i=3 3<=2 Fals

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

Modul de retinere al algoritmului:

Se citesc elementele matricei si se calculeaza suma pe fiecare linie si pe fiecare


coloana.La sfarsitul fiecarei linii,respectiv coloane se insereaza suma de pe linia sau
coloana respectiva. Aceasta operatie se face,pentru linii,prin parcurgerea cu instructiunea
for a liniilor matricei,se calculeaza suma si se adauga inca o coloana la sfarsit care
cuprinde suma de pe fiecare linie.Analog,pentru coloane, se adauga inca o linie ce
cuprinde suma elementelor de pe fiecare coloana.La intersectia dintre noua linie si noua
coloana formata va fi elementul a[m+1][n+1]=0.

7. Fie o matrice patratica de dimensiune n.Sa se sorteze crescator


elementele de pe diagonala principala, prin interschimbari de linii si
coloane.
 pseudocod
begin
read n
DO-FOR i=1,n,1
DO-FOR j=1,n,1
read a[i][j];
ENDDO;
ENDDO;
DO-FOR i=1,n-1,1
DO-FOR j=i+1,n,1
IF (a[i][j]>a[j][i]) THEN
aux=a[i][j]
a[i][i]=a[j][j];
a[j][j]=aux;
ENDIF;
ENDDO;
ENDDO;
DO-FOR i=1,n,1;
DO-FOR j=1,n,1
write a[i][j];
ENDDO;
ENDDO;
End;

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.

8. Fie o matrice cu m linii si n coloane,cu elemente numere intregi.Sa se


calculeze produsul numerelor prime din matrice.
Pseudocod:

{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

i=1 j=1 b=0


a[1][1]=12 => d=2,d<=12/2=6
12%2=0 b=1;
d=2+1=3<6
12%3=0 b=1;
d=3+1=4<6
12%4=0 b=1;
d=4+1=5<6
12%5!=0 b=0;
d=5+1=6<=6
12%6=0 b=1;

i=1 j=2 b=0


a[1][2]=5 =>d=2<5/2=2
5%2!=0 b=0
d=3<2 Fals => p=p*a[1][2]=1*5=5;

i=1 j=3 b=0


a[1][3]=1 => b=1;

i=2 j=1 b=0


a[2][1]=7 =>d=2<7/2=3
7%2!=0 b=0
d=3<=3
7%3!=0 b=0
d=4<3 Fals => p=p*a[2][1]=5*7=35

i=2 j=2 b=0


a[2][2]=3 => d=2
3%2!=0 b=0 => p=p*a[2][2]=35*3=105

i=2 j=3 b=0


a[2][3]=0 =>b=1

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

Modul de retinere al algoritmului:

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.

9.Se considera o matrice a de dimensiune n*m.Sa se reaseze elementele


in matrice astfel incat ele sa apara in ordine crescatoare,atat pe linii,cat
si pe coloane.
Pseudocod:

{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();
}

Modul de retinere al algoritmului:

Se citeste matricea a,element cu element cu ajutorul instructiunii for.Pentru a reaseza


elementele in ordine crescatoare atat pe linii cat si pe coloane se sorteaza mai intai
matricea pe linii,folosind metoda bulelor,apoi pe coloane.La metoda bulelor se foloseste
o variabila booleana b care initial are valoarea 0.Se verifica daca primul element este mai
mare decat cel de al doilea.Daca da,atunci ele se interschimba intre ele cu ajutorul unei
variabile auxiliare. Daca are loc interschimbare,b va lua valoarea 0.Algoritmul se aplica
pentru toate elementele de pe linie.Analog,se sorteaza elementele de pe coloana.Daca nu
are loc interschimbare,b va lua valoarea 1.Algoritmul se repeta cat timp b=0.La sfarsit,se
afiseaza matricea sortata.

10. Se da o matrice a de tip mxn cu elemente cifre zecimale


(0<m<=10,0<n<=8). Fiecare linie a matricei retine cifrele unui numar
natural.Sa se afiseze suma celor m numere naturale(se vor afisa si
termenii sumei).

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

Modul de retinere al algoritmului

Algoritmul genereaza suma numerelor obtinute pe fiecare linie a matricii citite.Pe


fiecare linie,numarul se calculeaza astfel:daca elementul corespunzator intersectiei liniei
si coloanei este nenul se calculeaza puterea lui 10 corespunzatoare pozitiei,adica la
puterea pozitie minus 1.Apoi aceasta putere se inmulteste cu valoarea corespunzatoare
pozitiei respective si se aduna intr-un vector.In vector se vor obtine toate numerele
corespunzatoare fiecarei linii din matrice.Se calculeaza apoi suma acestor numere prin
parcurgerea vectorului obtinut.In final,se afiseaza elementele si suma in formatul cerut.

11. Sa se determine produsul dintre elementul minim si maxim din


triunghiul din stanga diagonalelor unei matrice patrate(exclusiv
diagonalele).
Pseudocod

{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

Modul de retinere al algoritmului


Algoritmul determina maximul si minimul din regiunea aflata in stanga intersectiei
diagonalelor matricii prin compararea elementelor aflate in acea regiune.Triunghiul
obtinut in stanga intersectiei diagonalelor are un numar de elemente crescator pana la
jumatatea matricii,iar apoi numarul elementelor descreste.Astfel vom avea doua
parcurgeri ale matricii pe fiecare portiune.In final,afisam produsul dintre elementul
minim si elementul maxim descoperite in acel triunghi.

12. Ridicarea la putere a unei matrici

Pseudocod:

{ întreg m, p, q, j, i, k, a[100][100], b[100][100], c[100][100];


citeşte(m);
do for i=1,m,1 do for j=1,m,1 citeşte (a[i][j]);
enddo
enddo
citeşte(p);
do for i=1,m,1 do for j=1,m,1
if ( i=j) then b[i][j]=1;
else b[i][j]=0;endif
enddo
enddo
do for q=1,p,1
{ do for i=1,m,1
do for j=1,m,1
{ c[i][j]=0;
do for k=1,m,1
c[i][j]= c[i][j]+b[i][k]*a[k][j];
enddo
}
enddo
enddo
do for i=1,m,1
do for j=1,m,1
b[i][j]=c[i][j];
enddo
enddo
}
do for i=1,m,1
do for j=1,m,1 scrie(b[i][j], ” ”);
}

 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();
}

13. Se da o matrice patratica a de ordinul n.Sa se genereze si sa se


afiseze un vector v cu n componente in care componenta i a vectorului
sa fie egala cu raportul dintre suma elementelor de pe linia i si suma
elementelor de pe coloana i din matricea a.Daca suma elementelor de pe
coloana i este nula,atunci componenta i din vector va fi 0.

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.

14. Se considera o matrice a cu m linii si n coloane.Sa se afle numarul


liniilor ale caror elemente sunt in ordine crescatoare.

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

m=3 ,n=3 a= 123


456
062
Se observa ca primele doua linii au elementele in ordine crescatoare: 1<2<3
4<5<6
Se va afisa: exista 2 linii ale caror elemente sunt in ordine crescatoare

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

Modul de retinere al algoritmului

Algoritmul calculeaza folosind un contor cate linii au elementele in ordine


crescatoare.Pentru a verifica daca elementele unei linii sunt in ordine crescatoare trebuie
sa comparam elementele intre ele.In cazul in care acestea nu sunt in ordine crescatoare
folosim o variabila booleana ce va lua valoarea 1,echivalentul lui fals.La sfarsit,afisam
contorul si un mesaj corespunzator.

16. Se da o matrice a de tip mxn.Sa se afiseze elementele pare aflate pe


linii impare si coloane divizibile cu 3.

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

Elementele pare de pe linii impare(1,3) si coloane divizibile cu 3(3,6,9): 2,8,6

-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

Algoritmul verifica daca elementele aflate pe linii impare si coloane divizibile cu 3


sunt numere pare.In cazul in care aceste conditii sunt verificate se afiseaza aceste
elemente.

Baron Cristian Andrei


- Grupa 1001 -

S-ar putea să vă placă și