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