Sunteți pe pagina 1din 8

Academia de Studii Economice din Bucuresti

PORTOFOLIU
BAZELE PROGRAMARII

Georgescu Cristian
CSIE, An I, Seria B, Grupa 1008
1. Să se scrie un program care compară diagonala secundară a
unei matrici cu diagonala principală.
INTREG n, i, j, t;
REAL a[10][10];
t=1;
CITESTE (n);
DO-FOR i=1,n,1
DO-FOR j=1,n,1
CITESTE (a[i][j]);
ENDDO
ENDDO
DO-FOR i=1,n,1
IF a[i][i]!=a[i][n+1-i]
THEN t=0;
ENDIF
ENDDO
IF t=1
THEN SCRIE (“Diagonala principala e identica cu diagonala secundara);
ELSE SCRIE (“Diagonala principala nu e identica cu diagonala
secundara”);
ENDIF

Citim matricea, apoi verificăm fiecare element de pe diagolana


principală (a[i][i]), dacă este diferit de cel de pe diagonala secundară (a[i]
[n+1-i]), folosind functia if. Daca adevarat, t ia valoarea 0 (fals) se
afişează „Diagonala principala nu e identica cu diagonala secundara”, iar
daca t este 1 (adevarat), se afişează „Diagonala principala e identica cu
diagonala secundara”.

Verificare: n=2, a[1][1]=1, a[1][2]=3, a[2][1]=2, a[2][2]=5


a[1][1]!=a[1][2], t=0
Scrie „Diagonala principala nu e identica cu
diagonala secundara”

2. Să se verifice dacă trei numere introduse de la tastatură


coincid cu 1,2,3. Dacă nu, să se afişeze un mesaj corespunzător.

INTREG a,b,c;
CITESTE (a);
CITESTE (b);
CITESTE (c);
IF a+b+c=6 & a*b*c=6
THEN SCRIE („Numerele coincid cu 1,2,3”);
ELSE SCRIE („Numerele nu coincid cu 1,2,3”);
ENDIF

Citim cele trei numere, apoi verificăm dacă ele coincid cu 1,2,3
folosind funcţia if: dacă suma lor este egală cu 6 si produsul lor este egal
cu 6, atunci coincid si se afiseaza mesajul corespunzător. Dacă nu, se
afişează următorul mesaj: „Numerele nu coincid cu 1,2,3”.

Verificare: a=1, b=2, c=3


1+2+3=1*2*3
Scrie „Numerele coincid cu 1,2,3”

3. Să se scrie un program care realizează intersecţia a două


mulţimi.

INTREG n,m,p,i,j;
REAL x[80], y[50], z[50];
SCRIE („Numarul de elemente al primei multimi:”);
CITESTE (m);
DO-FOR i=0,m-1,1;
CITESTE (x[i]);
ENDDO
SCRIE („Numarul de elemente al celei de-a 2-a multimi:”);
CITESTE (n);
DO-FOR i=0,n-1,1;
CITESTE (y[i]);
ENDDO
p=0;
DO-FOR i=0,m-1,1;
j=0;
WHILE j<n & x[i]!=y[j]
DO j=j+1;
ENDWHILE
IF j<n
THEN z[p]=x[i];
p=p+1;
ENDIF
ENDDO
IF p!=0
THEN SCRIE („Intersectia celor 2 multimi:”);
DO-FOR i=0,p-1,1
SCRIE (z[i]);
END DO
ELSE SCRIE („Intersectia este multimea vida”);
ENDIF

Se citesc cele două mulţimi, iar in urma intersecţiei se obţine o


mulţime cu elementele comune mulţimilor iniţiale. Dacă intersecţia e vidă,
cardinalul mulţimii va fi 0. Se parcurge una dintre mulţimi şi se verifică
existenţa fiecărui element in cealaltă mulţime. Dacă se găseşte
elementul, va fi copiat in mulţimea rezultată.

Verificare: m=3, x[0]=1, x[1]=3, x[2]=2


n=2, y[0]=1, y[1]=7
p=0, i=0, j=0
j<n, z[0]=1, p=1
i=1, j=0
j=1 ...
Scrie „Intersectia celor 2 multimi:” 1.

4. Să se scrie un program care scade din fiecare linie minimul de


pe acea linie dintr-o matrice A[m,n].

INTREG a[10][10],i,j,m,n,min;
SCRIE („Dati nr de linii”);
CITESTE (m);
SCRIE („Dati nr de coloane”);
CITESTE (n);
DO-FOR i=0,m-1,1;
DO-FOR j=0,n-1,1;
CITESTE (a[i][j]);
ENDDO
ENDDO
DO-FOR i=0,m-1,1;
min=a[i][0];
DO-FOR j=1,n-1,1;
IF min>a[i][j] THEN min=a[i][j];
ENDIF
ENDDO
DO-FOR j=0,n-1,1;
a[i][j]=a[i][j]-min;
ENDDO
ENDDO
DO-FOR i=0,m-1,1;
DO-FOR j=0,n-1,1;
SCRIE (a[i][j]);
ENDDO
SCRIE (\n);
ENDDO

Se citeşte matricea, minimul ia prima valoare a[i][0], primul element


al fiecărei linii. Se citesc liniile si folosind IF, se compara fiecare element
cu minimul, interschimbându-se cu acesta dacă este mai mic. Se scade
minimul de pe fiecare coloană utilizand structura FOR, apoi se afişează
noua matrice.

Verificare: m=2, n=3


a[0][0]=1, a[0][1]=3, a[0][2]=7
a[1][0]=4, a[1][1]=5, a[1][2]=8

i=0, min=1
a[0][0]=0, a[0][1]=2, a[0][2]=5
i=1, min=4
a[1][0]=0, a[1][1]=1, a[1][2]=4
Se afişează noua matrice.

5. Să se scrie un program care returnează maximul din triunghiul


de deasupra diagonalelor unei matrice.

INTREG a[10][10],i,j,m,max;
SCRIE („m=”);
CITESTE (m);
DO-FOR i=0,m-1,1;
DO-FOR j=0,m-1,1;
CITESTE a[i][j];
ENDDO
ENDDO
max=a[0][1];
DO-FOR i=0,(m-1)/2-1,1;
DO-FOR j=i+1,m-2-i,1;
IF a[i][j]>max
THEN max=a[i][j];
ENDIF
ENDDO
ENDO
SCRIE („Maximul este”,max);

Se citeşte matricea, maximul ia prima valoare a[0][1]. Utilizand


FOR, citim doar elementele de deasupra diagonalelor şi le comparăm cu
maximul. Dacă acestea sunt mai mari decat max, max ia valoare
respectivă şi este returnat.

6. Să se realizeze un program care calculează produsul scalar


dintre doi vectori.

INTREG n,i;
REAL u[100],v[100],P;
SCRIE („Introduceti dimensiunea vectorilor, n=”);
CITESTE (n);
SCRIE („Introduceti elementele primului vector”);
DO-FOR i=0,n-1,1;
CITESTE (u[i]);
ENDDO
SCRIE („Introduceti elementele celui de-al doilea vector”);
DO-FOR i=0,n-1,1;
CITESTE (v[i]);
ENDDO
P=0;
DO-FOR i=0,n-1,1;
P=P+u[i]*v[i];
ENDDO
SCRIE („Produsul scalar este:”, P);
Dacă avem vectorii: X = ( x1 , ..., xn)
Y = ( y1 , ..., yn), atunci:
Produsul lor scalar va fi: P = x1 x y1 +...+ xn x yn. Cei doi vectori
trebuie sa aibă aceeaşi lungime pentru a putea calcula produsul lor scalar.

Verificare: n=2, u[0]=2, u[1]=4, v[0]=3, v[1]=5


P=0, P=0+2*3=6, P=6+4*5=26
Scrie „Produsul scalar este:” 26

7. Să se realizeze un program care verifică dacă elementele unui


vector formează o progresie aritmetică.

INTREG n,i;
REAL a[100];
SCRIE („Introduceti dimensiunea vectorului:”);
CITESTE (n);
IF n<3 THEN SCRIE („Vectorulul are mai putin de trei elemente”);
ELSE
DO-FOR i=0,n-1,1;
CITESTE (a[i]);
ENDDO
i=1;
WHILE i<n-1 & a[i]=(a[i-1]+a[i+1])/2
DO i++;
ENDWHILE
IF i=n-1 THEN SCRIE („Elementele formeaza o progresie aritmetica”);
ELSE SCRIE („Elementele nu formeaza o progresie aritmetica”);
ENDIF
ENDIF

Vectorul trebuie sa aibă cel puţin trei elemente. Dacă între fiecare 3
termeni consecutivi are loc relaţia a[i] == (a[i-1]+a[i+1])/2), adică
termenul din mijloc este egal cu jumătate din suma termenilor precedent
si următor, atunci elementele formează o progresie aritmetică.

Verificare: n=3, a[0]=1, a[1]=2, a[2]=3


i=1, a[1]=(a[0]+a[2])/2
i=2
Scrie „Elementele formeaza o progresie aritmetica”

8. Să se realizeze un program care verifică dacă doi vectori sunt


proporţionali.

INTREG a[10],b[10],i,n,m;
SCRIE („Dati dimensiunea vectorului:”);
CITESTE (n);
DO-FOR i=1,n,1;
CITESTE (a[i]);
ENDDO
DO-FOR i=1,n,1;
CITESTE (b[i]);
ENDDO
m=0;
DO-FOR i=1;n;1;
IF a[i]*b[i-1]=a[i-1]*b[i]
THEN m=m+1;
ENDIF
ENDDO
IF m=n THEN SCRIE („Cei doi vectori sunt proportionali”);
ELSE SCRIE („Cei doi vectori nu sunt proportionali”);
ENDIF

Dacă avem 2 vectori: a = ( a[1] , ..., a[n])


b = ( b[1] , ..., b[n[), iar între elementele sale se
poate stabili relaţia a[i]*b[i-1]==a[i-1]*b[i], atunci cei doi vectori sunt
proporţionali.

9. Să se realizeze un program care calculează suma elementelor


de deasupra diagonalei principale a unei matrici.

INTREG a[10][10],i,j,m,n,s;
SCRIE („Dati numarul de linii:”);
CITESTE (n);
DO-FOR i=1,n,1;
DO-FOR j=1,n,1;
CITESTE (a[i][j]);
ENDDO
ENDDO
s=0;
DO-FOR i=1,n,1;
DO-FOR j=i+1,n,1;
s=s+a[i][j];
ENDDO
ENDDO
SCRIE („Suma elementelor de deasupra diagonalei principale:”, s);

Utilizând structura FOR, se citesc doar elementele de deasupra


diagonalei principale si se returnează suma s.

10. Să se sorteze elementele unui vector prin metoda selecţiei.

INTREG i,n,poz,k;
REAL x[100],aux;
SCRIE („Introduceti dimensiunea vectorului:”)
CITESTE (n);
DO-FOR i=0,n-1,1;
CITESTE (x[i]);
ENDDO
DO-FOR i=0,n-2,1;
DO-FOR j=i+1,n-1,1;
IF x[i]>x[j] THEN aux=x[i];
x[i]=x[j];
x[j]=aux;
ENDIF
ENDDO
ENDDO
SCRIE („Vectorul sortat este:”)
DO-FOR i=0,n-1,1;
SCRIE (x[i]);
ENDDO

Se determina elementul minim din vector si se aduce pe prima


pozitie, apoi se determină minimul din vectorul rămas si se aduce pe a
doua poziţie şi aşa mai departe.Se determină minimul comparând fiecare
element cu cele care il succed, interschimbându-le.

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