0350 - Produs Cartezian: Diferență între versiuni

De la Universitas MediaWiki
Linia 27: Linia 27:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#0350
def patrate_perfecte(n):
def build_cartesian_product(n, m):
     patrate = []
     produs_cartezian = "{"
     i = 1
     for a in range(1, n+1):
    while len(patrate) < n:
        for b in range(1, m+1):
        patrat = i * i
            produs_cartezian += f"({a},{b}),"
        patrate.append(patrat)
    produs_cartezian = produs_cartezian[:-1] + "}"
        i += 1
     return produs_cartezian
     return patrate


 
def validate_input(n, m):
def calculeaza(numbers):
     if not (1 <= n <= 10 and 1 <= m <= 10):
     product = 1
    for number in numbers:
        product *= number
    return product
 
 
def validare_numar(n):
    if n < 1 or n > 10:
         return False
         return False
     return True
     return True


def main():
    n = int(input("Introduceti numarul n: "))
    m = int(input("Introduceti numarul m: "))


if __name__ == '__main__':
     if not validate_input(n, m):
    n = int(input("Introduceți numărul n: "))
         print("Input invalid pentru n sau m.")
     if not validare_numar(n):
         print("Datele introduse nu corespund cerintelor.")
     else:
     else:
         squares = patrate_perfecte(n)
         produs_cartezian = build_cartesian_product(n, m)
        product = calculeaza(squares)
         print(produs_cartezian)
        print("Datele introduse corespund cerintelor.")
         print(product)


if __name__ == '__main__':
    main()


</syntaxhighlight>
</syntaxhighlight>
'''Explicatie cod:'''
Acest cod construiește produsul cartezian al două mulțimi A și B, unde A este mulțimea numerelor naturale de la 1 la n, iar B este mulțimea numerelor naturale de la 1 la m.
Funcția build_cartesian_product(n, m) primește ca argumente n și m și returnează produsul cartezian AxB sub forma unei șiruri de caractere, care este construit prin intermediul unui dublu for loop. Acesta iterează prin fiecare element din A și pentru fiecare element din A, iterează prin fiecare element din B. În fiecare iterație, o pereche formată din elementele curente ale lui A și B este adăugată la șirul de caractere.
Funcția validate_input(n, m) primește ca argumente n și m și returnează True dacă valorile sunt în intervalul [1, 10] și False în caz contrar.
Funcția main() citește n și m de la tastatură, validează valorile citite și, dacă sunt valabile, construiește și afișează produsul cartezian AxB. În caz contrar, afișează un mesaj de eroare.
In fine, if __name__ == '__main__': este o construcție utilizată în Python pentru a verifica dacă acest script este rulat ca un program independent (și nu ca modul în care alte programe îl importă). Dacă acest script este rulat ca un program independent, funcția main() va fi apelată pentru a începe programul.

Versiunea de la data 3 aprilie 2023 11:13

Sursa: [1]

Cerinţa

Se dau două numere naturale nenule n și m. Pentru mulțimile A={1,2,..,n} și B={1,2,...,m}, să se afișeze mulțimea A×B={(a,b) | a∈A, b∈B}produsul cartezian al mulțimilor A și B.

Date de intrare

Programul citește de la tastatură numerele n și m.

Date de ieșire

Programul afișează pe ecran mulțimea cerută astfel:

elementele mulțimii vor fi scrise între acolade și separate prin virgule fiecare element este o pereche de numere, care va fi scrisă între paranteze rotunde, numerele din pereche fiind separate prin virgulă mai întâi se vor scrie perechile (a,b) pentru care a=1, cu b în ordine crescătoare, apoi perechile pentru care a=2 cu b în ordine crescătoare, etc, ca în exemplu.

Dacă datele sunt introduse corect, programul va rula.

În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

1 ≤ n,m ≤ 10

Exemplul 1

Intrare
3 2
Ieșire
{(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)}


Rezolvare

#0350
def build_cartesian_product(n, m):
    produs_cartezian = "{"
    for a in range(1, n+1):
        for b in range(1, m+1):
            produs_cartezian += f"({a},{b}),"
    produs_cartezian = produs_cartezian[:-1] + "}"
    return produs_cartezian

def validate_input(n, m):
    if not (1 <= n <= 10 and 1 <= m <= 10):
        return False
    return True

def main():
    n = int(input("Introduceti numarul n: "))
    m = int(input("Introduceti numarul m: "))

    if not validate_input(n, m):
        print("Input invalid pentru n sau m.")
    else:
        produs_cartezian = build_cartesian_product(n, m)
        print(produs_cartezian)

if __name__ == '__main__':
    main()

Explicatie cod:

Acest cod construiește produsul cartezian al două mulțimi A și B, unde A este mulțimea numerelor naturale de la 1 la n, iar B este mulțimea numerelor naturale de la 1 la m.

Funcția build_cartesian_product(n, m) primește ca argumente n și m și returnează produsul cartezian AxB sub forma unei șiruri de caractere, care este construit prin intermediul unui dublu for loop. Acesta iterează prin fiecare element din A și pentru fiecare element din A, iterează prin fiecare element din B. În fiecare iterație, o pereche formată din elementele curente ale lui A și B este adăugată la șirul de caractere.

Funcția validate_input(n, m) primește ca argumente n și m și returnează True dacă valorile sunt în intervalul [1, 10] și False în caz contrar.

Funcția main() citește n și m de la tastatură, validează valorile citite și, dacă sunt valabile, construiește și afișează produsul cartezian AxB. În caz contrar, afișează un mesaj de eroare.

In fine, if __name__ == '__main__': este o construcție utilizată în Python pentru a verifica dacă acest script este rulat ca un program independent (și nu ca modul în care alte programe îl importă). Dacă acest script este rulat ca un program independent, funcția main() va fi apelată pentru a începe programul.