Universitatea Tehnică a Moldovei
Facultatea Calculatoare Informatică și Microelectronică Departamentul
Ingineria Software și Automatică
RAPORT
Laborator la Programarea Declarativa
Tema: Funcții de ordin înalt în Python
A efectuat: Mudrenco Vlada
A verificat: Rusu M.
Chișinău 2025
# 1
produse = {
"pâine": 5.50,
"lapte": 7.25,
"ouă": 12.80,
"brânză": 25.99,
"unt": 18.45
print("Exercițiul 1: Dicționar")
print("\nCheile dicționarului:")
for cheie in [Link]():
print(f" {cheie}")
print("\nTupluri (cheie, valoare):")
for item in [Link]():
print(f" {item}")
print("\nAlternativ - chei și valori separate:")
for cheie, valoare in [Link]():
print(f" {cheie}: {valoare}")
# 2
import random
import datetime
print("\nExercițiul 2: Conversie timp")
secunde_totale = [Link](0, 10000)
print(f"\nNumăr aleator de secunde: {secunde_totale}")
# Metoda 1
ore = secunde_totale // 3600
minute = (secunde_totale % 3600) // 60
secunde = secunde_totale % 60
print(f"Metoda 1 (calcul manual): {ore:02d}:{minute:02d}:{secunde:02d}")
# Metoda 2
timp_delta = [Link](seconds=secunde_totale)
print(f"Metoda 2 (datetime): { timp_delta }")
from functools import reduce
print("Exercițiul 3")
# Definire două obiecte float
a = 15.5
b = 7.3
# Funcții lambda pentru operații
suma = lambda x, y: x + y
diferenta = lambda x, y: x - y
produs = lambda x, y: x * y
impartire = lambda x, y: x / y if y != 0 else "Diviziune prin 0"
# Lista de funcții
functii = [suma, diferenta, produs, impartire]
print(f"\nOperații cu a={a} și b={b}:")
print(f"Suma: {suma(a, b)}")
print(f"Diferența: {diferenta(a, b)}")
print(f"Produsul: {produs(a, b)}")
print(f"Împărțirea: {impartire(a, b)}")
# Aplicare funcții cu map() pe liste de valori
valori1 = [10, 20, 30, 40]
valori2 = [2, 4, 6, 8]
print("\nFolosind map() pentru aplicarea funcțiilor")
print(f"Valori1: {valori1}")
print(f"Valori2: {valori2}")
for i, functie in enumerate(functii):
nume_operatie = ["Suma", "Diferența", "Produsul", "Împărțirea"][i]
rezultate = list(map(functie, valori1, valori2))
print(f"{nume_operatie}: {rezultate}")
# Aplicare pe alte tipuri de date
print("\n--- Aplicare pe stringuri (concatenare) ---")
stringuri1 = ["Hello", "Bună", "Salut"]
stringuri2 = [" World", " ziua", " prietene"]
rezultat_str = list(map(suma, stringuri1, stringuri2))
print(f"Concatenare: {rezultat_str}")
print("\nExercițiul 4: Valori distincte cu filter()")
# Listă cu duplicate
lista_intregi = [5, 2, 8, 2, 9, 5, 3, 8, 1, 9, 5, 7, 3]
print(f"\nLista originală: {lista_intregi}")
valori_distincte = list(filter(lambda x, seen=set(): not (x in seen or
[Link](x)), lista_intregi))
print(valori_distincte)
print("\nExercițiul 5")
from functools import reduce
def numar_aparitii(string, caracter):
return reduce(
lambda freq, c: freq + 1 if c == caracter else freq,
string,
text = "abracadabra"
litera = "a"
print(f"Numărul de apariții ale lui '{litera}' în '{text}' este:
{numar_aparitii(text, litera)}")
print(" Exercițiul 6: Concatenare stringuri")
def concateneaza(*stringuri):
return ''.join(stringuri)
print(concateneaza("Un", "singur", "string"))
print(concateneaza("A", "B", "C", "D", "E", "F"))
print("\nExercițiul 7: Listă de funcții lambda")
# Definirea listei de funcții lambda
functii_lambda = [
lambda s: s[1] if len(s) > 1 else "String prea scurt", # al doilea
caracter
lambda s: [Link](), # litere majuscule
lambda s, c: [Link](c) if c in s else -1 # poziția caracterului
# String de test
text_test = "programare"
print(f"\nString de test: '{text_test}'")
print("\n--- Apelarea funcțiilor lambda ---")
print(f"1. Al doilea caracter: '{functii_lambda[0](text_test)}'")
print(f"2. Litere majuscule: '{functii_lambda[1](text_test)}'")
caracter_cautat = 'a'
print(f"3. Poziția caracterului '{caracter_cautat}': {functii_lambda[2]
(text_test, caracter_cautat)}")
print("\n--- Testare pe multiple stringuri ---")
stringuri_test = ["Python", "lambda", "funcții", "a"]
for s in stringuri_test:
print(f"\nString: '{s}'")
print(f" Al doilea caracter: {functii_lambda[0](s)}")
print(f" Majuscule: {functii_lambda[1](s)}")
print(f" Poziția lui 'a': {functii_lambda[2](s, 'a')}")
print("\nExercițiul 8: Media cu valori implicite")
def calculeaza_media(nota1=4, nota2=4, nota3=4):
media = (nota1 + nota2 + nota3) / 3
return round(media, 2)
print(f"1. Fără argumente: {calculeaza_media()}")
print(f"2. Un argument (8): {calculeaza_media(8)}")
print(f"3. Două argumente (9, 7): {calculeaza_media(9, 7)}")
print(f"4. Trei argumente (10, 8, 9): {calculeaza_media(10, 8, 9)}")
print(f"5. Keyword nota1=7: {calculeaza_media(nota1=7)}")
print(f"6. Keyword nota2=8, nota3=9: {calculeaza_media(nota2=8, nota3=9)}")
print("\nExercițiul 9: Funcție recursivă - Suma primelor N numere ")
def suma_recursiv(n):
# Cazul de bază
if n <= 0:
return 0
if n == 1:
return 1
# Cazul recursiv
return n + suma_recursiv(n - 1)
# Testare funcție
print("\n Calcul suma primelor 4 numere naturale: ",suma_recursiv(4),"suma
primelor 4 numere naturale: ",suma_recursiv(472))