Explică structura liniară
Identifici elementele așezate într-o succesiune și explici de ce ordinea lor este importantă.
Acces direct și secvențial; parcurgerea liniară
Identifici elementele așezate într-o succesiune și explici de ce ordinea lor este importantă.
Diferențiezi accesul direct de accesul secvențial.
Parcurgi elementele unul câte unul și actualizezi rezultate precum suma, minimul, maximul sau un contor.
Scrii pseudocod și Python, urmărești variabilele și testezi soluția pe cazuri relevante.
Care este ideea centrală a lecției?
O structură liniară descrie date așezate într-o succesiune: primul element, al doilea, al treilea și așa mai departe. Ordinea elementelor face parte din model.
În acest capitol folosim modelul conceptual liniar pentru a înțelege algoritmi de prelucrare a datelor. Operațiile specifice clasei list din Python vor fi dezvoltate sistematic în Capitolul 8.
La acces direct, poziția elementului ne permite să ajungem direct la acesta. În Python, indexarea începe de la 0. Pentru șirul [4, 7, 2, 9, 5], valoarea de la indexul 2 este 2.
La acces secvențial, elementele sunt analizate în ordine, unul după altul. Este natural atunci când vrem să verificăm sau să prelucrăm toate valorile.
O parcurgere liniară vizitează fiecare element o singură dată. În timpul parcurgerii putem actualiza o sumă, un contor, un minim, un maxim sau o variabilă logică. Pentru n elemente, timpul de lucru este, în general, proporțional cu n, adică O(n).
Ce idee trebuie reținută înainte de a aplica algoritmul?
Imaginează-ți un rând de cutii numerotate. Dacă vrei să verifici toate cutiile, le examinezi de la prima la ultima. Dacă știi numărul unei cutii și modelul permite accesul direct, poți ajunge la poziția respectivă fără să verifici toate cutiile dinainte.
Apasă pe elemente în ordinea unei parcurgeri liniare.
Începe cu primul element.
Valori: [4, 7, 2, 9, 5]
valori = [4, 7, 2, 9, 5]
suma = 0
for i in range(len(valori)):
suma = suma + valori[i]
print(suma)
Variabila i reprezintă indexul curent. Pentru această secvență, valorile lui i sunt 0, 1, 2, 3 și 4.
n = int(input())
suma = 0
for i in range(n):
x = int(input())
suma = suma + x
print(suma)
A doua variantă citește fiecare valoare și o prelucrează imediat. Nu este necesară memorarea tuturor valorilor.
ALGORITM SumaSir
citește n
suma ← 0
pentru i ← 1,n execută
citește x
suma ← suma + x
sfârșit pentru
scrie suma
SFÂRȘIT ALGORITM
Același model de parcurgere poate fi adaptat pentru numărare, minim, maxim sau alte prelucrări.
În Python, primul element are indexul 0, nu 1.
A accesa un element după index nu înseamnă că ai parcurs toate elementele.
O sumă se inițializează cu 0; pentru minim și maxim trebuie aleasă o inițializare corectă.
O parcurgere liniară a n elemente necesită, în general, O(n) pași.
Se citesc n numere întregi. Determinați suma lor, numărul valorilor pare, minimul și maximul.
Datele de intrare sunt n și cele n valori. Toate cele patru rezultate pot fi actualizate în aceeași parcurgere. Nu este necesară o a doua parcurgere.
citește n
citește primul x
suma ← x
minim ← x
maxim ← x
pare ← 0
dacă x mod 2 = 0 atunci
pare ← 1
sfârșit dacă
pentru restul valorilor execută
citește x
suma ← suma + x
dacă x < minim atunci minim ← x
dacă x > maxim atunci maxim ← x
dacă x mod 2 = 0 atunci pare ← pare + 1
sfârșit pentru
scrie suma, pare, minim, maxim
n = int(input())
x = int(input())
suma = x
minim = x
maxim = x
pare = 0
if x % 2 == 0:
pare = 1
for i in range(1, n):
x = int(input())
suma = suma + x
if x < minim:
minim = x
if x > maxim:
maxim = x
if x % 2 == 0:
pare = pare + 1
print("Suma:", suma)
print("Pare:", pare)
print("Minim:", minim)
print("Maxim:", maxim)
| x | suma | minim | maxim | pare |
|---|---|---|---|---|
| 4 | 4 | 4 | 4 | 1 |
| 7 | 11 | 4 | 7 | 1 |
| 2 | 13 | 2 | 7 | 2 |
| 9 | 22 | 2 | 9 | 2 |
| 5 | 27 | 2 | 9 | 2 |
Caz normal: 4, 7, 2, 9, 5 → suma 27, două valori pare, minim 2, maxim 9.
Caz-limită: n=1, x=8 → suma 8, o valoare pară, minim=8, maxim=8.
Caz particular: toate valorile impare → numărul valorilor pare este 0.
După fiecare pas, suma reprezintă suma valorilor deja citite, minim și maxim sunt extremele acestora, iar pare este numărul valorilor pare întâlnite. Prin urmare, după ultima valoare, rezultatele sunt cele cerute.
1. Ce reprezintă o listă, din punct de vedere conceptual?
2. Într-o listă cu acces direct, cum identificăm un element?
3. Într-o listă cu acces secvențial, cum sunt examinate elementele?
4. Pentru ce este folosită o listă de frecvențe?
5. O listă conține 4, 7, 2, 9. Care este primul element dacă parcurgem lista de la început?
6. Care afirmație descrie corect o parcurgere secvențială?
7. De ce este util să identificăm modul de acces la elemente?
8. Ce trebuie stabilit înainte de aplicarea unui algoritm asupra unei liste?
Analizor de măsurători. Citiți n măsurători întregi și afișați suma, minimul, maximul, numărul valorilor pozitive și numărul valorilor negative. Realizați o singură parcurgere. Includeți analiza, pseudocodul, Python și cel puțin trei teste.
Revizuiește activitățile, verifică testele și apoi marchează lecția ca finalizată.