3.1. Subprograme predefinite în Python
Funcții matematice, conversii și funcții pentru colecții
La finalul lecției vei putea...
- să explici rolul unui subprogram predefinit și diferența dintre o funcție și o simplă expresie;
- să utilizezi funcții matematice uzuale, precum sqrt(), abs(), floor() și ceil();
- să utilizezi funcțiile de conversie int(), float() și str() în situații potrivite;
- să utilizezi len(), min(), max() și sum() pentru prelucrări simple ale colecțiilor de valori;
- să identifici argumentele unei funcții și valoarea produsă de apelul ei;
- să alegi o funcție predefinită potrivită pentru o operație, evitând scrierea inutilă a unui algoritm mai lung;
- să integrezi subprogramele predefinite în algoritmi deja cunoscuți.
Subprograme predefinite în Python
Un subprogram este o componentă de program care realizează o operație bine determinată. Python pune la dispoziție numeroase subprograme gata definite, numite subprograme predefinite.
Un apel de funcție are forma simplificată nume(argumente). Argumentele sunt datele transmise funcției.
2.1. Funcții matematice din modulul math
Pentru unele operații matematice Python folosește modulul math. Un modul este un ansamblu de definiții pe care le putem importa și utiliza.
from math import sqrt, floor, ceil x = 25 print(sqrt(x)) print(floor(4.8)) print(ceil(4.2))
Instrucțiunea from math import ... face disponibile funcțiile indicate. După import, ele pot fi apelate direct.
2.2. Conversii
Conversia schimbă forma în care este reprezentată o valoare. int(), float() și str() sunt utile atunci când datele trebuie folosite într-un alt tip de prelucrare.
a = int('27')
b = float('3.5')
c = str(2026)
print(a, b, c)2.3. Funcții pentru colecții de valori
În această etapă folosim în special len(), min(), max() și sum(). Exemplele pot utiliza tupluri, fără a introduce prematur operații specifice clasei list.
note = (8, 10, 7, 9, 10) print(len(note)) print(min(note)) print(max(note)) print(sum(note))
| Funcție | Rol | Exemplu |
|---|---|---|
abs(x) | valoarea absolută | abs(-7) → 7 |
round(x) | rotunjirea unui număr | round(3.6) → 4 |
int(x) | conversie la întreg | int(7.9) → 7 |
float(x) | conversie la real | float(8) → 8.0 |
str(x) | conversie la șir | str(25) → '25' |
len(x) | numărul de elemente/caractere | len('informatica') → 11 |
min(x) | cea mai mică valoare | min(7, 2, 9) → 2 |
max(x) | cea mai mare valoare | max(7, 2, 9) → 9 |
sum(x) | suma valorilor unei colecții | sum((2, 4, 6)) → 12 |
Alegem operația potrivită
Operație disponibilă
Un calculator are deja operații precum radicalul și valoarea absolută. Este mai natural să apelăm funcția potrivită decât să rescriem algoritmul.
Conversie
Dacă primim "15" ca text și vrem să-l adunăm cu 7, îl convertim mai întâi cu int("15").
Alege funcția
Ce funcție determină suma valorilor unei colecții?
Apeluri de funcții predefinite
from math import sqrt
x = 16
print("Radical:", sqrt(x))
print("Valoare absolută:", abs(-12))
print("Rotunjire:", round(7.6))
note = (8, 10, 7, 9)
print("Număr de valori:", len(note))
print("Minim:", min(note))
print("Maxim:", max(note))
print("Suma:", sum(note))Fiecare apel produce o valoare care poate fi afișată, memorată sau folosită într-o expresie.
Interactiv: conversii
Ce produce int(7.9)?
Folosim funcția ca operație elementară
Pentru folosirea unei funcții predefinite, algoritmul nu trebuie să descrie intern operația realizată de funcție.
citește x r ← radical(x) a ← |x| afișează r, a
În Python, radical(x) din pseudocod este implementat prin sqrt(x), iar |x| prin abs(x).
Erori și confuzii frecvente
sqrt(x)se utilizează pentru valori pentru care radicalul are sens în domeniul real. Nu îl confunda cux*x.int(7.9)nu rotunjește la 8; elimină partea fracționară și obține 7.round()șiint()nu au același rol.len()determină numărul de elemente sau caractere; nu calculează suma.- Pentru funcțiile din
mathtrebuie realizat importul corespunzător. sqrteste numele funcției, iarsqrt(25)este un apel.
Prelucrăm un număr real
Problemă
Se citește un număr real x. Să se afișeze partea întreagă inferioară, partea întreagă superioară, valoarea absolută și radicalul său, dacă x este nenegativ.
Analiză
Intrare: x. Ieșire: floor(x), ceil(x), abs(x) și, dacă x ≥ 0, sqrt(x).
Algoritm
citește x
a ← floor(x)
b ← ceil(x)
c ← |x|
afișează a, b, c
dacă x ≥ 0 atunci
r ← radical(x)
afișează rPython
from math import sqrt, floor, ceil
x = float(input("x = "))
print("Partea întreagă inferioară:", floor(x))
print("Partea întreagă superioară:", ceil(x))
print("Valoarea absolută:", abs(x))
if x >= 0:
print("Radical:", sqrt(x))
else:
print("Radicalul nu este real.")Testare
Pentru x = 6.3, obținem 6, 7, 6.3 și aproximativ 2.51. Pentru x = -2.7, radicalul real nu este calculat.
Verificare rapidă
Care este floor(-2.7)?
Aplicarea directă a funcțiilor
- Citește un număr întreg și afișează valoarea sa absolută.
- Citește un număr real și afișează rotunjirea lui, partea întreagă inferioară și partea întreagă superioară.
- Citește trei numere și afișează minimul și maximul lor folosind funcțiile predefinite.
- Se citesc cinci valori numerice. Memorează-le într-un tuplu și afișează numărul de valori și suma lor.
- Citește un număr întreg n și afișează dacă este mai aproape de 10 sau de 20, folosind abs().
- Citește un text și afișează numărul de caractere folosind len().
- Citește un număr real nenegativ și calculează radicalul folosind sqrt().
- Citește două valori sub formă de text, transformă-le în numere întregi și afișează suma lor.
Combinăm mai multe funcții
- Se citesc trei lungimi reale. Verifică dacă pot reprezenta laturile unui triunghi și, dacă da, calculează semiperimetrul și o expresie pentru aria lui folosind funcțiile predefinite potrivite.
- Se citesc n valori reale într-un tuplu. Afișează minimul, maximul, suma și media aritmetică.
- Se citește o valoare reală x. Afișează distanța ei față de cel mai apropiat dintre numerele 0 și 100.
- Se citesc coordonatele a două puncte în plan. Calculează distanța dintre ele folosind sqrt().
- Se citește un număr real. Afișează-l cu partea fracționară eliminată și apoi cu partea fracționară rotunjită; explică diferența dintre int() și round().
- Analizează ce se întâmplă pentru valorile -3.2, -3.0, 0 și 3.2 când se aplică floor(), ceil(), int() și round().
Verifică-ți înțelegerea
Mini-quiz
1. Ce produce int(8.9)?
2. Ce funcție determină suma unei colecții?
3. Ce funcție determină numărul de caractere?
4. Ce trebuie făcut înainte de a apela sqrt() în forma din lecție?
5. Ce produce floor(3.8)?
Analizor simplu de rezultate
Analizor simplu de rezultate
Realizează un program care primește un set mic de rezultate numerice și afișează numărul de rezultate, suma, media, valoarea minimă, valoarea maximă și distanța dintre minim și maxim. Programul trebuie să trateze separat cazul în care nu există valori. Pentru radicalul unei expresii matematice, verifică înainte condiția necesară.
- utilizează
len(),sum(),min()șimax(); - utilizează cel puțin o funcție matematică din
math; - include date de test pentru un caz normal și un caz-limită;
- afișează rezultate clare, cu etichete.