Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE · CAPITOLUL 7

7.4. Lista de frecvențe

Principiu, interpretare și utilizări

NUMĂRĂ
→
MEMOREAZĂ
→
INTERPRETEAZĂ
→
COMPARĂ
01
OBIECTIVE

La finalul lecției vei putea...

01

Explică frecvența

Definești frecvența unei valori ca numărul ei de apariții.

02

Construiește frecvențe

Construiești o structură de frecvențe pentru un domeniu mic și cunoscut.

03

Interpretează datele

Determini valori cu frecvență maximă și interpretezi frecvențele obținute.

04

Tratează cazuri-limită

Verifici domeniul, egalitățile și valorile aflate în afara domeniului.

✓
Checkpoint

Care este ideea centrală a lecției?

02
EXPLICAȚIE

Lista de frecvențe

Frecvența unei valori este numărul de apariții ale acelei valori într-o colecție.

O listă de frecvențe păstrează, pentru fiecare valoare dintr-un domeniu, numărul de apariții. Dacă citim valoarea x, incrementăm poziția corespunzătoare: frecventa[x] = frecventa[x] + 1.

Metoda este potrivită în special pentru domenii mici și cunoscute, de exemplu cifrele 0–9 sau notele 1–10. Domeniul trebuie cunoscut pentru dimensionarea structurii.

Valoarea și frecvența

Dacă frecventa[7] = 4, aceasta nu înseamnă că valoarea este 4. Înseamnă că valoarea 7 apare de 4 ori.

✓
Checkpoint

Ce idee trebuie reținută înainte de a aplica algoritmul?

03
EXEMPLU INTUITIV

Înțelegem modelul printr-o situație familiară

Imaginează-ți 10 căsuțe, câte una pentru fiecare cifră. De fiecare dată când apare cifra 7, crești cu 1 căsuța lui 7.

Construiește frecvențele

Șir: 2, 5, 2, 7, 5, 2

Apasă butonul pentru a vedea frecvențele.

Interpretează

Rezultatul va apărea aici.

04
PYTHON

Implementarea modelului

Frecvențele cifrelor 0–9

frecventa = [0] * 10

n = int(input())

for i in range(n):
    x = int(input())
    frecventa[x] = frecventa[x] + 1

for x in range(10):
    print(x, frecventa[x])

Lista are 10 poziții, cu indici 0–9. Toate pozițiile pornesc cu frecvența 0.

Frecvențele notelor 1–10

frecventa = [0] * 11

n = int(input())

for i in range(n):
    nota = int(input())
    frecventa[nota] = frecventa[nota] + 1

for nota in range(1, 11):
    print(nota, frecventa[nota])
05
ALGORITM / PSEUDOCOD

Descriem pașii înainte de cod

ALGORITM FrecventeCifre
    frecventa[0..9] ← 0
    citește n
    pentru i ← 1,n execută
        citește x
        frecventa[x] ← frecventa[x] + 1
    sfârșit pentru

    pentru x ← 0,9 execută
        scrie x, frecventa[x]
    sfârșit pentru
SFÂRȘIT ALGORITM

ALGORITM MaximFrecventa
    maxim ← -1
    valoare ← 0
    pentru x ← 0,9 execută
        dacă frecventa[x] > maxim atunci
            maxim ← frecventa[x]
            valoare ← x
        sfârșit dacă
    sfârșit pentru
    scrie valoare, maxim
SFÂRȘIT ALGORITM

În cazul unei egalități, regula trebuie precizată. Dacă domeniul este parcurs crescător și folosim >, rămâne prima valoare maximă, adică cea mai mică.

06
ATENȚIE!

Erori frecvente și cazuri-limită

Domeniul trebuie cunoscut

Pentru 0–9 sunt necesare 10 poziții, cu indici 0–9.

Valoare ≠ frecvență

frecventa[7]=4 înseamnă că 7 apare de 4 ori.

Verifică domeniul

O valoare din afara domeniului poate produce o eroare de indexare.

Egalitățile trebuie definite

Spune dacă alegi prima valoare maximă, cea mai mică sau toate valorile cu frecvență maximă.

07
EXEMPLU REZOLVAT

Problemă completă

Problemă

Se citesc n cifre. Determinați frecvența fiecărei cifre și cifra cu frecvență maximă; la egalitate alegeți cifra cea mai mică.

Analiză

Construim frecvențele într-o singură parcurgere, apoi parcurgem domeniul 0–9. Folosim >, nu >=, astfel prima valoare maximă rămâne răspunsul. Deoarece domeniul este parcurs crescător, ea este cea mai mică.

Algoritm

frecventa[0..9] ← 0
citește n

pentru i ← 1,n execută
    citește x
    frecventa[x] ← frecventa[x] + 1
sfârșit pentru

maxim ← -1
cifra ← 0
pentru x ← 0,9 execută
    dacă frecventa[x] > maxim atunci
        maxim ← frecventa[x]
        cifra ← x
    sfârșit dacă
sfârșit pentru

scrie frecvențele
scrie cifra, maxim

Python

n = int(input())
frecventa = [0] * 10

for i in range(n):
    x = int(input())
    frecventa[x] = frecventa[x] + 1

maxim = -1
cifra = 0

for x in range(10):
    if frecventa[x] > maxim:
        maxim = frecventa[x]
        cifra = x

for x in range(10):
    print(x, frecventa[x])

print("Cifra cu frecvența maximă:", cifra)
print("Frecvență:", maxim)

Urmărirea variabilelor

Pentru 2,5,2,7,5,2,7: f[2]=3, f[5]=2, f[7]=2. Maximul este 3 la cifra 2.

Testare

Caz normal: mai multe cifre, cu frecvențe diferite.

Caz-limită: n=1.

Caz particular: toate cifrele sunt egale; apoi două valori au aceeași frecvență maximă.

Justificarea soluției

După citirea tuturor cifrelor, fiecare poziție frecventa[x] este exact numărul aparițiilor lui x. Parcurgerea crescătoare a domeniului și folosirea lui > selectează cea mai mică valoare în caz de egalitate.

08
EXERCIȚII DE BAZĂ

Aplicare progresivă

  1. Construiți frecvențele pentru 1,2,1,4,2,1.
  2. Construiți frecvențele pentru note 1–10.
  3. Determinați câte valori au frecvența 0 în 0–9.
  4. Determinați cifra cu frecvență maximă.
  5. Determinați numărul de valori distincte.
09
EXERCIȚII DE APROFUNDARE

Generalizare și analiză

  1. Determinați toate valorile cu frecvență maximă.
  2. Determinați frecvența minimă strict pozitivă.
  3. Explicați de ce metoda este potrivită domeniilor mici.
  4. Calculați media notelor folosind frecvențele.
  5. Comparați lista de frecvențe cu numărarea prin căutări repetate.
10
VERIFICARE

Verifică înțelegerea lecției

1. Ce reprezintă frecventa[x]?

2. Pentru domeniul cifrelor 0–9, câte poziții are lista de frecvențe?

3. Cu ce valori se inițializează frecvențele înainte de citirea datelor?

4. Pentru șirul 2, 5, 2, 7, 5, 2, care este frecventa[2]?

5. Ce înseamnă frecventa[7] = 4?

6. De ce sunt potrivite listele de frecvențe pentru cifrele 0–9?

7. Dacă două valori au aceeași frecvență maximă, ce trebuie făcut?

8. Care este diferența dintre valoare și frecvență?

11
MINI-PROIECT

Analizor de note

MISIUNE

Analizor de note

Analizor de note. Citiți n note între 1 și 10, construiți frecvențele, afișați fiecare frecvență, nota cu frecvența maximă, numărul de note distincte și media calculată din frecvențe. Tratați egalitățile și testați cel puțin trei cazuri.

Cerințe

Analiză și pseudocod01
Implementare Python02
Testare03
Cazuri-limită04
Explicația soluției05

Ai terminat lecția?

Revizuiește activitățile, verifică testele și apoi marchează lecția ca finalizată.