luni, 16 martie 2020

clasa IX,X,16.03-20.03, Tema: Tipuri de date tablou (Array) (aplicatii-probleme de numarare)


Probleme de numărare a elementelor dintr-un tablou.

     Probleme în care apare necesitatea de a număra cîte  elemente cu o anumită proprietate figurează în tabloul dat întîlnim în diferite domenii. Numărarea se face în cadrul ciclurilor care asigură parcurgerea întregului tablou şi selectarea elementelor ce se numără conform anumitor condiţii logice. În algoritmii de numărare se aplică contoarele – mărimi variabile la care se adună cîte o unitate de fiecare dată cînd în tablou se întîlneşte elementul respectiv. Înainte de începerea ciclurilor acestor contoare li se atribuie valori iniţiale, de regulă 0. Algoritmii de numărare sunt foarte simpli, deaceea ei pot fi propuşi printre primii la rezolvarea problemelor cu utilizarea tablourilor. Propun în continuare cîteva probleme, care prezintă interes şi pot fi propuse la lecţiile de informatică la studierea temei respective.
1.    Problema Nr. 1. Fie dat tabloul unidimensional Note[1..31] în care au fost înscrise  notele elevilor unei clase de la o lucrare de control. Scrieţi un program care determină numărul de note de 1, 2,...,10.
 Intrare: valorile notelor pentru fiecare elev se citesc de la tastatură.
 Ieşire: pe ecran se afişează numărul de note de 1, 2, ...,10 cîte o valoare pe linie în ordine
            descrescătoare a valorilor notelor.
 Algoritmul: Deoarece notele reprezintă numere diferite şi numărul lor este cunoscut, vom număra notele fără a efectua vre-o comparare a lor în cadrul instrucţiunilor de ramificare(If) sau de selectare (Case). Definim un tablou suplimentar cu 10 elemente naturale Num[1..10];  Num[1] reprezintă numărul de elevi cu note de 1, Num[2] – numărul de elevi cu note de 2, ş.a.m.d. Iniţial tabloul se zerografiază. Se parcurge tabloul cu notele elevilor de la lucrare şi se adună cîte o unitate la elementul tabloului Num cu indicele egal cu nota respectivă. Pentru a obţine numărul de note în ordine descrescătoare a valorilor, se afişează la ecran elementele tabloului Num parcurgîndu-l de la sfîrşit spre început.
Program Tablou_problema_nr1;
Uses CRT;
Type  Lin=Array[1..31] Of  Integer;
      Num_note=Array[1..10] Of Byte;
Var Note:Lin;
    Num:Num_note;
    I:Byte;
Begin
  ClrScr;
WriteLn(’Introduceti notele de la lucrare’);
     For I:=1 To 31 Do
         Begin
      Write(’nota  ’,I,’ elev este:’);
      ReadLn(Note[I])
          End;
{ Initializarea tabloului cu nr de note }
      For I:=1 To 10 Do Num[I]:=0;
{ Calcularea }
 For I:=1 To 31 Do Inc(Num[A[I]]);
 WriteLn(’Numarul de note este : ’); 
      For I:=10 DownTo 1 Do WriteLn(I, ’->’,Num[I]);
ReadLn End.
2.    Problema Nr. 2. Fie dat tabloul unidimensional A[1..N], N≤100 de elemente întregi, nenule. Scrieţi un program care determină numărul de elemente distincte din acest tablou.
Intrare: numărul N şi elementele tabloului se citesc de la tastatură.
Ieşire: pe ecran se afişează numărul de elemente distincte.
Algoritmul: Variabilei contor iniţial i se atribuie valoarea N. Se parcurge tabloul în cadrul a două cicluri I=1,…,N-1 şi J:=I+1,..,N şi se compară perechile de elemente nenule A[I] şi A[J] între ele. Dacă se întîlnesc elemente egale, din valoarea variabilei N se scade o unitate, iar elementul egal cu cel verificat se înlocuieşte cu 0 pentru a nu fi cercetat încă o dată.
Program Tablou_problema_nr2;
Uses CRT;
Type  Lin=Array[1..100] Of  Integer;
Var A:Lin;
    Num, N,I,K:Byte;
Begin
  ClrScr;
 Write(’Introduceti nr. de elemente:’); ReadLn(N);
 WriteLn(’Introduceti elementele tabloului’);
     For I:=1 To N Do
         Begin
      Write(’A[’,I,’ ]=’); ReadLn(A[I])
          End;
          Num:=N;
      For I:=1 To N-1 Do
      If A[I]<>0 Then
          For K:=I+1 To N Do
              If  A[I]=A[K] Then Begin
                                            Dec(Num); A[K]:=0
                                          End;      
  WriteLn(’Numarul de elemente distincte este ’,Num);
  ReadLn  End.
3.    Problema Nr. 3. Fie dat tabloul unidimensional A[1..N], N≤100 de elemente întregi, nenule. Scrieţi un program care numără, de cîte ori alternează semnul valorilor elementelor vecine din acest tablou.
Intrare: numărul N şi elementele tabloului se citesc de la tastatură.
Ieşire: pe ecran se afişează numărul alternărilor de semn între elementele vecine ale tabloului A.
Algoritmul: Variabilei contor iniţial i se atribuie valoarea 0. Se parcurge tabloul şi se cercetează semnul produsului elementelor vecine. Dacă este negativ, înseamnă că avem o schimbare de semn şi la variabila contor se adună o unitate.
Program Tablou_problema_nr3;
Uses CRT;
Type  Lin=Array[1..100] Of  Integer;
Var A:Lin;
    N,I,H:Byte;
Begin
  ClrScr;
Write(’Introduceti nr. de elemente:’); ReadLn(N);
WriteLn(’Introduceti elementele tabloului’);
   For I:=1 To N Do
       Begin
   Write(’A[’,I,’ ]=’); ReadLn(A[I])
       End;
       H:=0;
   For I:=1 To N-1 Do
   If A[I]*A[I+1]<0 Then Inc(H);
  WriteLn(’Numarul alternarilor de semn este ’,H);
 ReadLn End.
4.    Problema Nr. 4. Fie dat tabloul bidimensional A[1..N,1..N], N≤20,  elementele căruia sunt numere întregi, nenule. Scrieţi un program care determină numărul de elemente, ce conţin repetări.
Intrare: numărul N şi elementele tabloului se citesc de la tastatură.
Ieşire: pe ecran se afişează numărul de elemente ce conţin repetări.
Algoritmul: Se declară o variabilă contor, căreia  iniţial i se atribuie valoarea 0. Se parcurge tabloul şi se compară elementele între ele. Se utilizează o variabilă logică, care verifică dacă elementul ce se repetă este întîlnit pentru prima dată. În aşa caz la variabila contor se adună o unitate, iar elementul este înlocuit cu zero, pentru a nu fi cercetat încă o dată. În caz dacă elementul a fost numărat, la o nouă obţinere a lui, el este doar înlocuit cu zero.
Program Problema_nr_4;
Uses CRT;
Type T=Array[1..20,1..20] Of Integer;
Var A:T;
    N,I,J,L,C,B,Num:Byte;
    V:Boolean;
Begin
  ClrScr;
  Write(’introduceti dimensiunea tabloului: ’); ReadLn(N);
  WriteLn(’Introduceti elementele tabloului’);
  For I:=1 To N Do
      For J:=1 To n Do
          Begin
  Write(’elementul din linia ’,I, ’ coloana ’,J, ’ este: ’);
  ReadLn(A[I,J])
          End;
          Num:=0;
  For I:=1 To N Do
      For J:=1 To N Do
  If A[I,J]<>0 Then Begin V:=False;
          For L:=I To N Do
              Begin
  If L>I Then B:=1 Else B:=J+1;
              For C:=B To N Do
  If A[I,J]=A[L,C] Then Begin
                        If Not V Then Begin
                                      V:=True; Inc(Num);
                                      End;
                         A[L,C]:=0
                         End
               End
                   End;
  WriteLn(’Numarul de elemente ce contin repetari=’,Num);
  ReadLn  End.

Niciun comentariu:

Trimiteți un comentariu