Școala Româno-Britanică
Modulul 4 Clasa a IX-a | Python

Ora 1: Generarea sistematică a secvențelor de valori

Ce vei învăța astăzi: Secvențe cu proprietăți date, termeni ai expresiilor matematice

Rezultat practic: Generezi sistematic secvențe de valori (pătrate perfecte, termeni ai expresiilor) după o regulă dată (Competența 1.2).

Competența 1.2 Săptămâna 18

Înainte de a începe

De ce contează? Generarea sistematică (producerea termenilor unui șir unul câte unul, după o regulă clară) este baza oricărei prelucrări automate de date: orice listă, de la notele clasei la pătrate perfecte, se construiește printr-o regulă aplicată în buclă. Înțelegând-o acum, vei putea genera și sorta orice șir în lecțiile următoare.

Ce știi deja?

În modulul anterior ai folosit bucle for și variabile acumulatoare. Poți scrie o buclă care afișează numerele de la 1 la n? Dar suma lor, 1 + 2 + ... + n?

Ideea-cheie: A genera o secvență înseamnă să produci termenii unul câte unul, după o regulă clară, de obicei într-o buclă for.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei învăța să generezi sistematic secvențe de valori în Python, folosind reguli clare și bucle.

Ce înseamnă a genera o secvență de valori
Termeni ai expresiilor matematice (pătrate perfecte, sume)
Secvențe cu proprietăți date (doar pare, doar prime)
Acumulatoare și liste în Python

Generarea unei liste de valori după o regulă

Definiție: A genera o secvență de valori înseamnă a produce termenii unul câte unul, după o regulă clară, de obicei cu ajutorul unei bucle for.

Regula poate fi o formulă (de exemplu i * i pentru pătrate perfecte), o condiție (doar valorile pare) sau o recurență.

De ce ne folosim?

Este ca atunci când numerotezi rândurile unui caiet: fiecare număr se obține din cel anterior adăugând 1. Regula este simplă și se aplică de fiecare dată.

Calculatorul

Execută regula mecanic, de mii de ori, fără greșeală

Omul

Obosește și poate greși la termenul 500

Termeni ai expresiilor matematice

Unele secvențe sunt formate din termeni ai expresiilor matematice. De exemplu, pătratele perfecte 1, 4, 9, 16, ... au termenul general (formula care calculează direct orice termen al șirului) i * i, iar suma 1 + 2 + ... + n se obține adunând pe rând fiecare i.

Exemplu: primele n pătrate perfecte

citește n pentru i = 1, n execută scrie i * i
Python - pătrate perfecte
n = int(input())
patrate = []

for i in range(1, n + 1):
    patrate.append(i * i)

print(patrate)

Observă: pentru n = 5 programul afișează [1, 4, 9, 16, 25]. Regula termenului general este i * i.

Discuție: factorialul 1 * 2 * ... * n

Python - factorial
n = int(input())
fact = 1

for i in range(2, n + 1):
    fact = fact * i

print(fact)

Observă: aici nu adunăm, ci înmulțim pe rând. Variabila fact este un acumulator (o variabilă în care înmulțim valorile pe rând) care reține produsul parțial.

Secvențe cu proprietăți date

Uneori vrem doar termenii care îndeplinesc o proprietate: doar numerele pare, doar numerele prime, doar multiplii lui 3. Regula conține atunci o condiție care selectează valorile.

Proprietate Regula în Python Exemplu de ieșire
Numere pare x % 2 == 0 2, 4, 6, 8, ...
Multipli ai lui k x % k == 0 k, 2k, 3k, ...
Pătrate perfecte x = i * i 1, 4, 9, 16, ...

Exemplu: doar numerele pare de la 2 la 2n

Python - numere pare
n = int(input())

for i in range(1, n + 1):
    print(2 * i, end=" ")

Acumulatoare și liste

Un acumulator este o variabilă în care adunăm (sau înmulțim) valorile pe măsură ce le generăm. O listă reține toți termenii generați, ca un coș în care punem valorile unul câte unul.

Lista

Reține toate valorile, de exemplu lista notelor clasei

Acumulatorul

Reține doar o sumă sau un produs, de exemplu suma notelor

Listă și sumă împreună

Python - listă și sumă
n = int(input())
pare = []
s = 0

for i in range(1, n + 1):
    pare.append(2 * i)
    s = s + 2 * i

print(pare)
print("Suma:", s)

Exercițiu de completare

Completează programul care generează primele n pătrate perfecte:

Pentru a genera primele n pătrate perfecte folosim bucla ______(1, n+1) și adăugăm în listă valoarea ______. Valoarea o punem în listă cu ______. O variabilă în care adunăm valorile generate se numește ______.

Bancă de cuvinte:
range i*i append sumă

Test de înțelegere

Test rapid - generarea secvențelor:

1. Care sunt primele 3 pătrate perfecte?

2. Pentru a calcula suma 1 + 2 + ... + n folosim în buclă:

3. O listă generată după o regulă:

Test suplimentar - verifică ce ai reținut

Test rapid suplimentar - generarea secvențelor:

1. Pentru a genera primele n pătrate perfecte folosim bucla:

2. Instrucțiunea care adaugă o valoare la o listă este:

3. Secvența 2, 4, 6, 8, ... se obține după regula:

Ai grijă la: capătul buclei: range(1, n) generează doar valorile de la 1 la n-1, deci ultimul termen lipsește. Folosește range(1, n + 1) pentru a include și termenul n.

Aprofundare

În Python există o formă compactă de a genera liste după o regulă, numită list comprehension (construirea unei liste într-o singură expresie): [i * i for i in range(1, n + 1)]. Ea construiește lista într-o singură expresie, fără a apela explicit append(). Rezultatul este identic cu bucla clasică, dar codul este mai scurt și se citește mai ușor.

  • Generare deterministă: o secvență generată sistematic este complet determinată de regulă și de valorile de pornire; același program produce întotdeauna aceeași ieșire, ceea ce face testarea foarte ușoară.
  • Memorie: lista reține toți termenii generați, deci pentru milioane de valori consumăm memorie proporțional cu numărul lor. Dacă avem nevoie doar de termenul curent, îl putem afișa direct în buclă, fără a construi lista.
  • Cazul particular n = 0: pentru n = 0, bucla range(1, 1) este goală, deci lista rămâne vidă, iar suma rămâne 0; un program corect nu trebuie să eșueze în acest caz.
  • Reguli cu pas: range(1, n + 1, 2) generează doar indicii impari, util pentru secvențele de valori din 2 în 2.
  • Selecția după proprietate: dacă vrem doar numerele dintr-un interval care îndeplinesc o condiție (de exemplu pătrate perfecte), testăm condiția în buclă și adăugăm în listă doar valorile care o respectă.
  • Lista ca parametru: o listă generată poate fi transmisă mai departe în program, spre deosebire de afișarea directă, care pierde valorile după ce bucla s-a terminat.
APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Pătratele perfecte

Enunț:

Cerință: Se citește numărul natural n. Să se afișeze pe o singură linie primele n pătrate perfecte, separate prin spații.

Date de intrare:

Programul citește de la tastatură numărul natural n.

Date de ieșire:

Programul va afișa pe o singură linie primele n pătrate perfecte, separate prin spații.

Restricții și precizări:

n este un număr natural, cu 1 <= n <= 1000, iar elementele sunt numere întregi.

Exemplu:

Intrare:

5

Ieșire:

1 4 9 16 25
Cum gândim soluția:
  1. Citim n cu input() și îl transformăm cu int()
  2. Parcurgem i de la 1 la n cu range(1, n+1)
  3. Afișăm valoarea i * i, cu end=" " ca să rămână pe aceeași linie
Scrie soluția în Python:
Soluție corectă:
Soluție Python
n = int(input())

for i in range(1, n + 1):
    print(i * i, end=" ")

Ce învățăm: generăm termenii după regula i * i și îi afișăm unul câte unul, pe aceeași linie.

PbInfo - Suma 1+2+...+n

Enunț:

Cerință: Se citește numărul natural n. Să se calculeze și să se afișeze suma 1 + 2 + ... + n.

Date de intrare:

Programul citește de la tastatură numărul natural n.

Date de ieșire:

Programul va afișa pe ecran suma numerelor de la 1 la n.

Restricții și precizări:

n este un număr natural, cu 1 <= n <= 1000, iar elementele sunt numere întregi.

Exemplu:

Intrare:

5

Ieșire:

15
Cum gândim soluția:
  1. Citim n și inițializăm acumulatorul s = 0
  2. Parcurgem i de la 1 la n și adunăm: s = s + i
  3. Afișăm rezultatul cu print()
Scrie soluția în Python:
Soluție corectă:
Soluție Python
n = int(input())
s = 0

for i in range(1, n + 1):
    s = s + i

print(s)

Ce învățăm: folosim un acumulator (variabila s) în care adunăm pe rând fiecare termen al sumei.

EXERCIȚII PRACTICE

Exercițiul Practic: Generarea secvențelor de valori

Sarcini de lucru

Aplică regulile de generare a secvențelor în programe complete, cu citire de la tastatură.

Sarcina 1: Primele n numere pare

Cerință: Scrie un program care citește n și afișează primele n numere pare, adică 2, 4, 6, ...

Soluție:
n = int(input())

for i in range(1, n + 1):
    print(2 * i, end=" ")

Verifică: pentru n = 3 se afișează 2 4 6. Termenul general al numerelor pare este 2 * i.

Sarcina 2: Șirul k, 2k, 3k, ...

Cerință: Scrie un program care citește k și n și generează o listă cu primii n termeni ai șirului k, 2k, 3k, ...

Soluție:
k = int(input())
n = int(input())

for i in range(1, n + 1):
    print(i * k, end=" ")

Verifică: pentru k = 3 și n = 4 se afișează 3 6 9 12. Regula este i * k.

Scrie pe caiet - De reținut

Titlul lecției

Generarea sistematică a secvențelor de valori

Definiția lecției

A genera sistematic o secvență de valori înseamnă a produce termenii unul câte unul, după o regulă clară, de obicei cu o buclă for. Regula poate fi o formulă (pătratele perfecte 1, 4, 9, 16, ... prin i * i), o condiție (doar numerele pare) sau o recurență (fiecare termen depinde de cei anteriori). Valorile se afișează direct în buclă sau se rețin într-o listă cu lista.append(x), iar sumele și produsele se acumulează într-o variabilă inițializată înainte de buclă. De exemplu, primele n numere pare se generează cu regula 2 * i, iar suma 1 + 2 + ... + n se obține adunând pe rând fiecare i în s = s + i. Această tehnică stă la baza oricărei prelucrări automate de date și se folosește în toate lecțiile următoare, inclusiv la sortare.

Definiții esențiale

Algoritmul cheie - pseudocod

citește n pentru i = 1, n execută scrie i * i

Algoritmul cheie - cod Python

Python - primele n pătrate perfecte
n = int(input())
patrate = []

for i in range(1, n + 1):
    patrate.append(i * i)

print(patrate)

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

Un profesor vrea să afișeze pe tablă primele n pătrate perfecte, pentru ca elevii să observe cât de repede cresc valorile. Programul citește n și construiește lista:

Python - pătrate perfecte pe tablă
n = int(input())
patrate = []

for i in range(1, n + 1):
    patrate.append(i * i)

print(patrate)

Verifică: pentru n = 4 programul afișează [1, 4, 9, 16].