Tematică științifică · 2.5
Subprograme predefinite
Funcții și metode puse la dispoziție de limbaj pentru prelucrarea numerelor, caracterelor, șirurilor și colecțiilor, cu alegerea corectă a bibliotecii, argumentelor și tipului rezultatului în C++ și Python.
Un subprogram este o parte distinctă a unui program, alcătuită din instrucțiuni care realizează o operație bine precizată și care poate fi apelată din program. El primește, dacă este nevoie, date prin parametri, execută instrucțiunile din corpul său și poate întoarce o valoare.
Subprogramele ajută la împărțirea unei probleme în operații mai mici și reutilizabile. În funcție de cine le scrie, ele pot fi:
- predefinite, puse la dispoziție de limbaj sau de bibliotecile lui;
- definite de utilizator, scrise de programator pentru problema rezolvată.
Un subprogram predefinit este o operație deja implementată în limbaj sau în bibliotecile lui. Programul îl apelează, îi transmite argumente și folosește rezultatul întors, fără să-i rescrie algoritmul.
De exemplu, pentru valoarea absolută nu este nevoie să testăm separat dacă numărul este pozitiv sau negativ. Putem apela funcția corespunzătoare:
rezultat = valoare_abs(n)
La examen, un subprogram predefinit trebuie ales după tipul datelor și după operația cerută. Trebuie verificat numele exact, numărul argumentelor, tipul rezultatului și biblioteca sau modulul necesar.
Apelul unui subprogram predefinit
Un apel are forma generală:
nume_subprogram(argument1, argument2, ...)
Argumentele sunt expresiile ale căror valori sunt transmise subprogramului. Ordinea lor contează. Rezultatul poate fi atribuit unei variabile, folosit într-o expresie sau comparat direct:
maxim = max(a, b)
if lungime(text) > 10:
...
Nu toate subprogramele întorc o valoare. Unele modifică un obiect sau efectuează o acțiune, cum este sortarea unei colecții.
Funcții matematice
În C++
Funcțiile matematice uzuale se găsesc în biblioteca <cmath>:
#include <cmath>
| Funcție | Rezultat | Observație |
|---|---|---|
sqrt(x) | rădăcina pătrată | pentru x >= 0 |
pow(x, y) | x la puterea y | întoarce un tip real |
fabs(x) | modulul unui real | include <cmath> |
sin(x), cos(x), tan(x) | funcții trigonometrice | argumentul este în radiani |
log(x) | logaritm natural | pentru x > 0 |
log10(x) | logaritm în baza 10 | pentru x > 0 |
ceil(x) | primul întreg mai mare sau egal | rezultat real |
floor(x) | ultimul întreg mai mic sau egal | rezultat real |
round(x) | rotunjire la cel mai apropiat întreg | rezultat real |
Pentru numere întregi se pot folosi abs, din <cstdlib> sau, în compilatoarele
moderne, varianta disponibilă prin bibliotecile standard:
#include <cstdlib>
int d = abs(a - b);
pow(2, 3) produce valoarea numerică 8, dar tipul rezultatului este de regulă
real. Dacă este necesar un întreg, conversia trebuie făcută numai când se
știe că rezultatul este exact:
int p = static_cast<int>(pow(2, 3));
Pentru o putere întreagă, o buclă sau o înmulțire repetată poate fi mai potrivită
decât pow, mai ales când se lucrează numai cu numere întregi.
int p = 1;
for (int i = 0; i < exponent; i++)
p *= baza;
În Python
Funcțiile matematice suplimentare se găsesc în modulul math:
import math
| Funcție | Rezultat | Observație |
|---|---|---|
math.sqrt(x) | rădăcina pătrată | rezultat real |
math.pow(x, y) | x la puterea y | rezultat real |
abs(x) | modulul | funcție predefinită, fără import |
math.sin(x), math.cos(x) | funcții trigonometrice | argumentul este în radiani |
math.log(x) | logaritm natural | pentru x > 0 |
math.log10(x) | logaritm în baza 10 | pentru x > 0 |
math.ceil(x) | primul întreg mai mare sau egal | rezultat întreg |
math.floor(x) | ultimul întreg mai mic sau egal | rezultat întreg |
round(x) | rotunjire | funcție predefinită |
Pentru puteri întregi se folosește operatorul **:
p = baza ** exponent
pow(a, b) este funcția predefinită pentru putere. Forma cu trei argumente,
pow(a, b, m), calculează eficient a**b % m pentru exponenți întregi:
rest = pow(a, b, m)
Rezultatul lui // este câtul întreg, iar % este restul împărțirii:
cat = a // b
rest = a % b
Valori extreme și funcții de comparare
În C++, pentru două valori se folosesc min și max. Ele se găsesc în
<algorithm>:
#include <algorithm>
int mic = min(a, b);
int mare = max(a, b);
Pentru mai multe valori se poate compune apelul:
int maxim = max(a, max(b, c));
O altă soluție, de obicei mai ușor de extins, este inițializarea cu primul element și parcurgerea valorilor:
int maxim = a;
maxim = max(maxim, b);
maxim = max(maxim, c);
În Python, min și max funcționează atât cu mai multe argumente, cât și cu
o colecție:
mic = min(a, b, c)
mare = max(a, b, c)
mare_din_lista = max(valori)
sum calculează suma elementelor unei colecții:
suma = sum(valori)
Pentru o colecție goală, sum([]) este 0, dar min([]) și max([]),
respectiv, semnalează eroare. Dacă enunțul nu garantează existența unui
element, cazul gol trebuie tratat înaintea apelului.
Materialul acesta se citește pe educamp.ro și nu se tipărește.
S-a încheiat minutul de citit liber.
Ce cuprinde subcapitolul
- Apelul unui subprogram predefinit
- Funcții matematice
- Valori extreme și funcții de comparare
- Conversia și citirea datelor
- Funcții și metode pentru șiruri
- Funcții pentru colecții
- Subprogramul potrivit pentru cerință
- Greșeli frecvente la examen
Continuă lectura ca și cursant
Cel puțin un subcapitol din fiecare capitol este disponibil gratuit și integral. Pentru a citi toate celelalte subcapitole ale disciplinei, te înscrii la cursul de pregătire.
Cursul cuprinde suportul de curs publicat până acum, care se completează capitol cu capitol, și două întâlniri de câte două ore în fiecare lună. Prima săptămână este gratuită, fără plată și fără card. Dacă vrei să vezi mai întâi cum este prezentată materia, poți reveni la primul subcapitol al capitolului.
Începe săptămâna gratuită Sunt cursant — login
Află când publicăm materiale noi
Materia este publicată treptat, capitol cu capitol. Înscrie-te pentru a primi un e-mail atunci când apare un capitol nou de informatică.
Nu am putut înregistra adresa. Verifică e-mailul și materia aleasă, apoi încearcă din nou.
Surse
- Cerchez, E., Șerban, M., „Programarea în limbajul C/C++ pentru liceu”, Editura Polirom, Iași, 2005
- „Informatică. Manual pentru clasa a IX-a”, Editura Didactică și Pedagogică, București
- „Informatică. Manual pentru clasa a XI-a”, Editura Didactică și Pedagogică, București
- „Tutorialul de Python”, documentația oficială a limbajului Python, https://docs.python.org/ro/3/library/functions.html