Combini generarea cu prelucrarea
Generezi o listă și aplici operații asupra termenilor.
Combinarea generării cu memorarea și prelucrarea listelor
Generezi o listă și aplici operații asupra termenilor.
Construiești liste care pot fi folosite în mai multe prelucrări.
Aplici sumă, numărare, minim și maxim în timpul generării atunci când memorarea nu este necesară.
Alegi între generare → prelucrare și generare + prelucrare, argumentând alegerea.
Care sunt cele două strategii principale?
Î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.
Este clară și ușor de urmărit. Lista rămâne disponibilă pentru mai multe prelucrări.
Fiecare valoare este folosită imediat. Dacă nu avem nevoie de listă ulterior, putem evita memorarea ei.
n = int(input())
valori = []
for i in range(1, n + 1):
valori.append(i * i)
print(valori)
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)Când este avantajoasă prelucrarea în timpul generării?
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.
Pentru n=5, pătratele sunt 1, 4, 9, 16, 25.
Suma = 55 · Număr pare = 2 · Maxim = 25
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ă.
Când valorile sunt generate, putem inițializa minimul și maximul cu primul termen și apoi actualiza aceste variabile pentru fiecare termen următor.
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_pareFiecare termen este calculat o singură dată și este folosit imediat pentru toate prelucrările necesare.
Dacă problema cere mai multe prelucrări ulterioare sau afișarea listei, memorarea este utilă.
suma = suma + x acumulează valori, în timp ce numar_pare = numar_pare + 1 numără aparițiile unei proprietăți.
Nu le inițializa arbitrar dacă valorile pot avea semne diferite. Folosește primul termen.
Dacă păstrăm lista, memoria necesară pentru listă rămâne; câștigul este reducerea unei parcurgeri suplimentare.
Pentru n citit, generați lista [1², 2², ..., n²], determinați suma pătratelor și numărul pătratelor pare.
Intrare: n. Ieșire: lista, suma și numărul valorilor pare. Idee: generăm fiecare pătrat și actualizăm imediat cele două rezultate.
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_paren = 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)| i | x | suma | numar_pare |
|---|---|---|---|
| 1 | 1 | 1 | 0 |
| 2 | 4 | 5 | 1 |
| 3 | 9 | 14 | 1 |
| 4 | 16 | 30 | 2 |
| 5 | 25 | 55 | 2 |
| Test | Date | Rezultat așteptat |
|---|---|---|
| Caz-limită | n = 1 | lista [1], suma 1, pare 0 |
| Caz normal | n = 5 | [1,4,9,16,25], 55, 2 |
| Valoare relevantă | n = 10 | suma 385, 5 pătrate pare |
3i + 2 și numărați valorile pare.i² - 3i + 2 și determinați câte sunt negative.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:
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ă.
Compară claritatea și memoria celor două strategii și justifică alegerea pentru aplicația ta.