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

7.2. Prelucrarea cu și fără memorare

Căutare, selecție, numărare și prelucrare secvențială

CITEȘTE
→
CAUTĂ
→
SELECTEAZĂ
→
NUMĂRĂ
01
OBIECTIVE

La finalul lecției vei putea...

01

Explică memorarea

Diferențiezi prelucrarea cu memorare de prelucrarea fără memorare.

02

Realizează căutări

Construiești căutări secvențiale pentru existența unei valori.

03

Selectează și numără

Prelucrezi valorile care satisfac o condiție și numeri aparițiile.

04

Alegi reprezentarea

Alegi ce informație trebuie păstrată și testezi soluția pe cazuri relevante.

✓
Checkpoint

Care este ideea centrală a lecției?

02
EXPLICAȚIE

Prelucrarea cu și fără memorare

Fără memorare înseamnă că nu păstrăm toate valorile citite. Păstrăm doar informația necesară rezultatului: un contor, o sumă, un minim, un maxim sau o variabilă logică.

Cu memorare înseamnă că păstrăm valorile pentru utilizări ulterioare. În Capitolul 8 vom studia sistematic clasa list din Python.

Căutarea secvențială

Verificăm elementele în ordine până când rezultatul cerut este cunoscut. Pentru simpla existență este suficientă o variabilă logică, precum gasit.

Selecția

Selecția prelucrează numai valorile care satisfac o condiție. De exemplu, putem calcula suma valorilor pozitive fără să memorăm celelalte valori.

Numărarea

Pentru numărare folosim un contor inițializat cu 0. Este important să nu confundăm „există?” cu „de câte ori apare?”.

✓
Checkpoint

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

03
EXEMPLU INTUITIV

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

Întrebarea „Există o notă de 10?” are nevoie doar de răspunsul DA/NU. În schimb, „Care sunt toate notele de 10?” cere păstrarea valorilor selectate.

Caută o valoare

Rezultatul va apărea aici.

Selectează

Selectăm valorile pozitive din 3 -2 8 0 -5 4.

Apasă butonul.

04
PYTHON

Implementarea modelului

Existență fără memorare

n = int(input())
k = int(input())

gasit = False

for i in range(n):
    x = int(input())
    if x == k:
        gasit = True

if gasit:
    print("DA")
else:
    print("NU")

Variabila gasit păstrează o singură informație: dacă valoarea a fost întâlnită sau nu.

Numărare fără memorare

n = int(input())
k = int(input())
numar = 0

for i in range(n):
    x = int(input())
    if x == k:
        numar = numar + 1

print(numar)

Selecție și prelucrare

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

for i in range(n):
    x = int(input())
    if x > 0:
        numar = numar + 1
        suma = suma + x

print(numar)
print(suma)
05
ALGORITM / PSEUDOCOD

Descriem pașii înainte de cod

ALGORITM Cautare
    citește n, k
    gasit ← fals
    pentru i ← 1,n execută
        citește x
        dacă x = k atunci
            gasit ← adevărat
        sfârșit dacă
    sfârșit pentru
    dacă gasit atunci
        scrie "DA"
    altfel
        scrie "NU"
    sfârșit dacă
SFÂRȘIT ALGORITM

Pentru numărare, înlocuim variabila logică cu un contor inițializat cu 0 și îl incrementăm la fiecare apariție.

06
ATENȚIE!

Erori frecvente și cazuri-limită

Existență ≠ numărare

gasit răspunde la DA/NU; un contor răspunde la „de câte ori?”.

Inițializări

Variabila logică începe cu False, iar contorul începe cu 0.

Selecție ≠ memorare automată

A selecta înseamnă a prelucra valorile care respectă o condiție; dacă trebuie păstrate toate, este necesară memorarea.

Alegerea reprezentării

Păstrează numai ceea ce cere problema. Nu memora date inutil.

07
EXEMPLU REZOLVAT

Problemă completă

Problemă

Se citesc n rezultate întregi. Determinați numărul și suma rezultatelor cel puțin 5, numărul valorilor 10 și dacă există valoarea 1. Nu memorați șirul.

Analiză

Avem trei prelucrări care pot fi realizate simultan. Folosim două contoare, o sumă și o variabilă logică.

Algoritm

citește n
numar5 ← 0
suma5 ← 0
numar10 ← 0
exista1 ← fals

pentru fiecare x execută
    dacă x ≥ 5 atunci
        numar5 ← numar5 + 1
        suma5 ← suma5 + x
    sfârșit dacă
    dacă x = 10 atunci
        numar10 ← numar10 + 1
    sfârșit dacă
    dacă x = 1 atunci
        exista1 ← adevărat
    sfârșit dacă
sfârșit pentru

scrie numar5, suma5, numar10, exista1

Python

n = int(input())
numar5 = 0
suma5 = 0
numar10 = 0
exista1 = False

for i in range(n):
    x = int(input())

    if x >= 5:
        numar5 = numar5 + 1
        suma5 = suma5 + x

    if x == 10:
        numar10 = numar10 + 1

    if x == 1:
        exista1 = True

print("Cel puțin 5:", numar5)
print("Suma lor:", suma5)
print("Valori 10:", numar10)
print("Există 1:", exista1)

Urmărirea variabilelor

Pentru 2, 4, 7, 4, 4, 1 și k=4, contorul aparițiilor lui 4 evoluează: 0 → 1 → 1 → 2 → 3 → 3.

Testare

Caz normal: există mai multe valori ≥5 și apare 10.

Caz-limită: n=1.

Caz particular: valoarea căutată nu apare; apoi toate valorile sunt egale cu ea.

Justificarea soluției

Fiecare valoare este analizată o singură dată. Contoarele se modifică exact atunci când condițiile cerute sunt adevărate, iar exista1 devine adevărat dacă și numai dacă întâlnim valoarea 1.

08
EXERCIȚII DE BAZĂ

Aplicare progresivă

  1. Numărați valorile pare.
  2. Numărați valorile mai mari decât 10.
  3. Determinați suma valorilor negative.
  4. Verificați dacă apare valoarea 0.
  5. Verificați dacă toate valorile sunt pozitive.
09
EXERCIȚII DE APROFUNDARE

Generalizare și analiză

  1. Determinați primul pozitiv întâlnit și explicați folosirea lui break, dacă o folosiți.
  2. Determinați câte valori sunt divizibile cu 3 și câte nu sunt.
  3. Determinați dacă valoarea maximă apare cel puțin de două ori.
  4. Comparați două parcurgeri separate cu una singură pentru rezultate independente.
10
VERIFICARE

Verifică înțelegerea lecției

1. Ce înseamnă prelucrare fără memorare?

2. Pentru a număra valorile pozitive, ce tip de variabilă este potrivit?

3. Cu ce valoare se inițializează în mod obișnuit un contor?

4. Ce urmărește o căutare secvențială pentru verificarea existenței unei valori?

5. Ce este selecția într-o prelucrare secvențială?

6. Când este necesară memorarea valorilor?

7. Ce diferență există între „există o valoare 10” și „de câte ori apare 10”?

8. De ce trebuie testat și cazul în care nu există nicio valoare selectată?

11
MINI-PROIECT

Filtrul de rezultate

MISIUNE

Filtrul de rezultate

Filtrul de rezultate. Citiți n rezultate întregi. Calculați numărul și suma celor cel puțin 5, numărul valorilor 10 și dacă există valoarea 1. Nu memorați șirul. Includeți trei teste.

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ă.