Probleme de calcul a totalurilor,
mediilor etc. elementelor dintr-un tablou.
În multe cazuri apare necesitatea de a obţine careva valori
rezumative referitoare la datele din tablou: sume, produse, valori medii etc.
Ca şi în cazul problemelor de numărare se asigură parcurgerea elementelor tabloului în cadrul ciclurilor şi
selectarea elementelor de care avem nevoie. În algoritmii de calculare a sumei
sau produsului se foloseşte o mărime variabilă la care se adună, respectiv se
înmulţeşte elementul ce respectă condiţia cerută. Înainte de începerea
parcurgerii elementelor tabloului acestor mărimi li se atribuie valori
iniţiale, de regulă pentru sume 0, iar pentru produse 1.
1. Problema
Nr. 1. Fie dat tabloul bidimensional A[1..N,1..M],
N,M≤20, elementele căruia sunt numere întregi. Scrieţi un program care
calculează produsul elementelor din fiecare linie.
Intrare:
numerele N, M şi elementele tabloului se citesc de la tastatură.
Ieşire: pe
ecran se afişează produsele din fiecare linie, despărţite prin spaţiu.
Algoritmul: Declarăm un tablou unidimensional,
în care vom înregistra produsul elementelor din fiecare linie. Iniţial tabloul
se completează cu 1. Parcurgem fiecare linie şi înmulţim elementul cercetat din
tabloul bidimensional la elementul tabloului unidimensional, locul căruia î-l
indică numărul de ordine al liniei ce este verificată la momentul dat.
Program Tablou_problema_nr1;
Uses CRT;
Type
Lin=Array[1..20] Of Integer;
Tab=Array[1..20,1..20] Of Integer;
Var A:Tab;
N,M,I,K:Byte;
P:Lin;
Begin
ClrScr;
Write(’Introduceti nr. de linii:’);
ReadLn(N);
Write(’Introduceti nr. de coloane:’);
ReadLn(M);
WriteLn(’Introduceti elementele
tabloului’);
For I:=1 To N Do
For K:=1 To M Do
Begin
Write(’A[’,I,’,’,K,’ ]=’); ReadLn(A[I,K])
End;
For I:=1 To N Do
Begin
P[I]:=1;
For K:=1 To M Do P[I]:=P[I]*A[I,K]
End;
For I:=1 To N Do Write( P[I],’ ’);
ReadLn End.
2. Problema
Nr. 2. Fie dat tabloul bidimensional A[1..N,1..N],
N≤20, elementele căruia sunt numere
reale. Scrieţi un program care calculează suma pătratelor elementelor de pe
perimetrul tabloului.
Intrare:
numărul N şi elementele tabloului se citesc de la tastatură.
Ieşire: pe
ecran se afişează suma calculată.
Algoritmul: Se declară o variabilă de tip real
pentru calcularea sumei cerute, căreia
iniţial i se atribuie valoarea 0. Se parcurge perimetrul tabloului
(pentru început prima şi ultima linie, apoi prima şi ultima coloană, dar fără
primul şi ultimul element, care au fost deja verificate) şi se adună pătratul elementului tabloului la
valoarea variabilei S pentru calcularea sumei.
Program Tablou_problema_nr2;
Uses CRT;
Type
Tab=Array[1..20,1..20] Of Real;
Var A:Tab;
N,I,K:Byte; Sc:Real;
Begin
ClrScr;
Write(’Introduceti nr. de linii si
coloane:’); ReadLn(N);
WriteLn(’Introduceti elementele
tabloului’);
For I:=1 To N Do
For K:=1 To N Do
Begin
Write(’A[’,I,’,’,K,’ ]=’); ReadLn(A[I,K])
End;
Sc:=0;
For I:=1 To N Do Sc:=Sc+Sqr(A[I,1]) +Sqr (A[I,M]);
For I:=2 To M-1 Do Sc:=Sc+Sqr(A[1,I])+Sqr(A[N,I])
WriteLn(’Suma patratelor elementelor de
pe perimetru= ’, Sc);
ReadLn End.
3.
Problema Nr. 3.
Fie dat tabloul bidimensional A[1..N,1..N], N≤20, elementele căruia sunt numere întregi.
Scrieţi un program care calculează suma elementelor pe diagonala principală,
suma elementelor situate mai sus de diagonala principală şi suma elementelor
situate mai jos de diagonala principală.
Intrare:
numărul N şi elementele tabloului se citesc de la tastatură.
Ieşire: pe
ecran se afişează valorile sumelor calculate, despărţite prin spaţiu.
Algoritmul: Se iau 3 variabile S1, S2, S3 pentru
calcularea sumelor elementelor de pe diagonala principală, mai sus de diagonala
principală şi mai jos de diagonala principală. Iniţial li se atribuie valoarea
0. Se parcurg elementele de pe diagonala principală în cadrul unui ciclu şi se
adună valoarea elementului tabloului la valoarea variabilei S1 pentru
calcularea sumei elementelor diagonalei principale. Parcurgem elementele aflate deasupra diagonalei
principale ( liniile i ale tabloului (i=1,2,...,N-1), iar pentru fiecare linie
i parcurgem numai coloanele j mai mari decît i, adică j=i+1,...,N) şi adunăm
valoarea elementelor respective A[i,j] la valoarea variabilei S2. În cadrul
aceloraşi cicluri calculăm S3 adunînd la valoarea variabilei date valoarea
elementului situat mai jos de diagonala principală A[j,i].
Program Tablou_problema_nr3;
Uses CRT;
Type
Tab=Array[1..20,1..20] Of Integer;
Var A:Tab;
N,I,K:Byte;
S1,S2,S3:Integer;
Begin
ClrScr;
Write(’Introduceti nr. de linii si
coloane:’); ReadLn(N);
WriteLn(’Introduceti elementele tabloului’);
For I:=1 To N Do
For K:=1 To N Do
Begin
Write(’A[’,I,’,’,K,’ ]=’);
ReadLn(A[I,K])
End;
S1:=0; S2:=0; S3:=0;
For I:=1 To N Do
S1:=S1+A[I,I];
For I:=1 To N-1 Do
For J:=I+1 To N Do
Begin
S2:=S2+A[I,J];
S3:=S3+A[J,I]
End;
WriteLn(S1,’ ’,S2,’ ’,S3, ’ ’ );
ReadLn End.
Niciun comentariu:
Trimiteți un comentariu