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

9.3. Generare și prelucrare

Combinarea generării cu memorarea și prelucrarea listelor

GENEREAZĂ
→
MEMOREAZĂ
→
PRELUCREAZĂ
→
VERIFICĂ
01
OBIECTIVE

La finalul lecției vei putea...

01

Combini generarea cu prelucrarea

Generezi o listă și aplici operații asupra termenilor.

02

Memorezi valori

Construiești liste care pot fi folosite în mai multe prelucrări.

03

Prelucrezi eficient

Aplici sumă, numărare, minim și maxim în timpul generării atunci când memorarea nu este necesară.

04

Compari soluții

Alegi între generare → prelucrare și generare + prelucrare, argumentând alegerea.

✓
Checkpoint

Care sunt cele două strategii principale?

02
EXPLICAȚIE

Generare și prelucrare

În lecțiile 9.1 și 9.2 am generat secvențe folosind formule sau relații de recurență. Acum combinăm generarea cu operațiile asupra listelor învățate în Capitolul 8: parcurgere, sumă, minim, maxim, numărare și căutare.

Două etape sau o singură parcurgere?

Generare → prelucrare

Este clară și ușor de urmărit. Lista rămâne disponibilă pentru mai multe prelucrări.

Generare + prelucrare

Fiecare valoare este folosită imediat. Dacă nu avem nevoie de listă ulterior, putem evita memorarea ei.

Generarea și memorarea

n = int(input())
valori = []
for i in range(1, n + 1):
    valori.append(i * i)
print(valori)

Generarea și prelucrarea în aceeași parcurgere

n = int(input())
valori = []
suma = 0
numar_pare = 0

for i in range(1, n + 1):
    x = i * i
    valori.append(x)
    suma = suma + x
    if x % 2 == 0:
        numar_pare = numar_pare + 1

print(valori)
print(suma)
print(numar_pare)
✓
Checkpoint

Când este avantajoasă prelucrarea în timpul generării?

03
EXEMPLU INTUITIV

Un aparat care produce și verifică

Un aparat produce piese una câte una. Pentru fiecare piesă putem să o punem într-o cutie și să o analizăm mai târziu sau să o analizăm chiar în momentul producerii. A doua variantă este naturală atunci când nu avem nevoie să păstrăm toate piesele.

Compară cele două strategii

Pentru n=5, pătratele sunt 1, 4, 9, 16, 25.

Rezultate

Suma = 55 · Număr pare = 2 · Maxim = 25

04
PYTHON

Prelucrarea în timpul generării

n = int(input())
suma = 0
numar_pare = 0

for i in range(1, n + 1):
    x = i * i
    suma = suma + x
    if x % 2 == 0:
        numar_pare = numar_pare + 1

print(suma)
print(numar_pare)

Dacă nu avem nevoie de lista pătratelor, nu este necesar să o memorăm. Dacă însă trebuie să afișăm lista sau să facem mai multe prelucrări ulterioare, memorarea poate fi justificată.

Minim și maxim

Când valorile sunt generate, putem inițializa minimul și maximul cu primul termen și apoi actualiza aceste variabile pentru fiecare termen următor.

05
ALGORITM / PSEUDOCOD

Generare și prelucrare într-o singură parcurgere

citește n
valori []
suma 0
numar_pare 0
pentru i 1,n execută
    x i * i
    adaugă x la valori
    suma suma + x
    dacă x % 2 = 0 atunci
        numar_pare numar_pare + 1
    sfârșit dacă
sfârșit pentru
scrie valori
scrie suma
scrie numar_pare

Fiecare termen este calculat o singură dată și este folosit imediat pentru toate prelucrările necesare.

06
ATENȚIE!

Alege strategia potrivită

Nu elimina lista dacă ai nevoie de ea

Dacă problema cere mai multe prelucrări ulterioare sau afișarea listei, memorarea este utilă.

Un acumulator nu este un contor

suma = suma + x acumulează valori, în timp ce numar_pare = numar_pare + 1 numără aparițiile unei proprietăți.

Minimul și maximul

Nu le inițializa arbitrar dacă valorile pot avea semne diferite. Folosește primul termen.

O singură parcurgere nu înseamnă neapărat mai puțină memorie

Dacă păstrăm lista, memoria necesară pentru listă rămâne; câștigul este reducerea unei parcurgeri suplimentare.

07
EXEMPLU REZOLVAT

Pătratele, suma și numărul valorilor pare

Problemă

Pentru n citit, generați lista [1², 2², ..., n²], determinați suma pătratelor și numărul pătratelor pare.

Analiză

Intrare: n. Ieșire: lista, suma și numărul valorilor pare. Idee: generăm fiecare pătrat și actualizăm imediat cele două rezultate.

Algoritm

citește n
valori []
suma 0
numar_pare 0
pentru i 1,n execută
    x i * i
    adaugă x la valori
    suma suma + x
    dacă x % 2 = 0 atunci
        numar_pare numar_pare + 1
sfârșit pentru
scrie valori, suma, numar_pare

Python

n = int(input())
valori = []
suma = 0
numar_pare = 0

for i in range(1, n + 1):
    x = i * i
    valori.append(x)
    suma = suma + x
    if x % 2 == 0:
        numar_pare = numar_pare + 1

print(valori)
print(suma)
print(numar_pare)

Urmărirea variabilelor pentru n = 5

ixsumanumar_pare
1110
2451
39141
416302
525552

Testare

TestDateRezultat așteptat
Caz-limităn = 1lista [1], suma 1, pare 0
Caz normaln = 5[1,4,9,16,25], 55, 2
Valoare relevantăn = 10suma 385, 5 pătrate pare
Justificarea soluției: fiecare pătrat este generat o singură dată. În aceeași etapă este adăugat în listă, inclus în sumă și verificat pentru paritate.
08
EXERCIȚII DE BAZĂ

Aplică direct

  1. Generați pătratele primelor n numere și calculați suma lor.
  2. Generați cuburile primelor n numere și calculați maximul.
  3. Generați n numere pare și calculați suma și numărul lor.
  4. Generați n valori de forma 3i + 2 și numărați valorile pare.
  5. Generați n valori începând de la 0 cu pasul p și determinați maximul.
09
EXERCIȚII DE APROFUNDARE

Alege soluția eficientă

  1. Generați primele n numere pare și determinați într-o singură parcurgere lista și suma lor.
  2. Generați valorile i² - 3i + 2 și determinați câte sunt negative.
  3. Comparați două programe: unul care generează lista și apoi o prelucrează și unul care prelucrează fiecare termen imediat. Precizați avantajele și dezavantajele.
  4. Generați o secvență prin recurență și determinați suma și maximul în aceeași parcurgere.
  5. Analizați memoria folosită de o soluție care păstrează lista și de una care păstrează numai rezultatele necesare.
  6. Realizați o variantă în care lista este necesară pentru o a doua prelucrare și explicați de ce memorarea este justificată.
10
VERIFICARE

Quiz final

1. Care este avantajul principal al generării și prelucrării în aceeași parcurgere?

2. Ce face suma = suma + x?

3. Ce inițializare este potrivită pentru minim?

4. Dacă avem nevoie de lista generată pentru o prelucrare ulterioară:

5. Pentru n=5, câte pătrate sunt pare în 1²,...,5²?

6. O singură parcurgere poate reduce:

11
MINI-PROIECT

Generator și analizor de secvențe

MISIUNE

Generator și analizor de secvențe

Realizați o aplicație care citește n și generează una dintre mai multe secvențe: pătrate, cuburi, numere pare sau o secvență recurentă. Aplicația trebuie să memoreze lista, să calculeze suma și maximul și să numere termenii care respectă o condiție aleasă.

Cerințe

regulă de generare01
memorarea listei02
sumă și maxim03
numărare condiționată04
o singură parcurgere05
testare și justificare06

Ai terminat lecția?

Compară claritatea și memoria celor două strategii și justifică alegerea pentru aplicația ta.