duminică, 22 martie 2020

clasa IX,X,23.03-27.03, Tema: Tipuri de date tablou (Array) (aplicatii-probleme de totalizare)


                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