0350 - Produs Cartezian: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieșire == Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar prog...
 
Sinn Erich (talk | contribs)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. se determine produsul primelor '''n''' pătrate perfecte nenule.
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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
Programul citește de la tastatură numerele '''n și m'''.
 
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran,  mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează mulțimea A×B={(a,b) | a∈A, b∈B} – produsul cartezian al mulțimilor A și B. 


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


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
1 ≤ '''n,m''' 10


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 4
:Introduceti numarul n:
; Ieșire
: 3
: Datele corespund cerințelor.
:Introduceti numarul m:
: 576
: 2
; Datele de ieșire
: Datele sunt introduse corect.
: {(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)}
<br>
<br>


== 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 calculeaza(numbers):
     product = 1
    for number in numbers:
        product *= number
     return product


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


if __name__ == '__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("Datele nu corespund restricțiilor impuse.")
     if not validare_numar(n):
         print("Datele introduse nu corespund cerintelor.")
     else:
     else:
        squares = patrate_perfecte(n)
         print("Datele sunt introduse corect.")
        product = calculeaza(squares)
        produs_cartezian = build_cartesian_product(n, m)
         print("Datele introduse corespund cerintelor.")
         print(produs_cartezian)
         print(product)




</syntaxhighlight>
</syntaxhighlight>
'''Explicatie cod:'''
Acest cod definește o funcție care construiește produsul cartezian dintre două seturi de numere, și o funcție care validează datele de intrare.
Funcția `build_cartesian_product(n, m)` primește două numere `n` și `m` și construiește produsul cartezian dintre seturile `{1,2,3,...,n}` și `{1,2,3,...,m}`. Produsul cartezian este o mulțime de perechi ordonate formate din elemente din fiecare set. În acest caz, perechile sunt construite astfel: `({1,2,...,n},{1,2,...,m})`. Produsul cartezian este returnat sub forma unui șir de caractere care conține toate perechile ordonate separate prin virgulă și încadrate între acolade: `{(1,1),(1,2),...,(n,m)}`.
Funcția `validate_input(n, m)` primește două numere întregi și validează dacă acestea respectă restricțiile impuse. În cazul de față, acestea trebuie să fie între 1 și 10 inclusiv. Funcția returnează `False` dacă datele de intrare nu sunt valide și `True` în caz contrar.
În secțiunea `if __name__ == '__main__':`, utilizatorul este întrebat să introducă două numere întregi `n` și `m`. Dacă acestea nu respectă restricțiile, se va afișa un mesaj corespunzător și programul se va încheia. În caz contrar, se va afișa un mesaj de confirmare și se va apela funcția `build_cartesian_product(n, m)` pentru a construi produsul cartezian, care va fi apoi afișat pe ecran.

Latest revision as of 09:24, 29 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează mulțimea A×B={(a,b) | a∈A, b∈B} – produsul cartezian al mulțimilor A și B.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări[edit | edit source]

1 ≤ n,m ≤ 10

Exemplul 1[edit | edit source]

Datele de intrare
Introduceti numarul n:
3
Introduceti numarul m:
2
Datele de ieșire
Datele sunt introduse corect.
{(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)}


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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

if __name__ == '__main__':

   n = int(input("Introduceti numarul n: "))
   m = int(input("Introduceti numarul m: "))
   if not validate_input(n, m):
       print("Datele nu corespund restricțiilor impuse.")
   else:
       print("Datele sunt introduse corect.")
       produs_cartezian = build_cartesian_product(n, m)
       print(produs_cartezian)


</syntaxhighlight>

Explicatie cod:

Acest cod definește o funcție care construiește produsul cartezian dintre două seturi de numere, și o funcție care validează datele de intrare.

Funcția `build_cartesian_product(n, m)` primește două numere `n` și `m` și construiește produsul cartezian dintre seturile `{1,2,3,...,n}` și `{1,2,3,...,m}`. Produsul cartezian este o mulțime de perechi ordonate formate din elemente din fiecare set. În acest caz, perechile sunt construite astfel: `({1,2,...,n},{1,2,...,m})`. Produsul cartezian este returnat sub forma unui șir de caractere care conține toate perechile ordonate separate prin virgulă și încadrate între acolade: `{(1,1),(1,2),...,(n,m)}`.

Funcția `validate_input(n, m)` primește două numere întregi și validează dacă acestea respectă restricțiile impuse. În cazul de față, acestea trebuie să fie între 1 și 10 inclusiv. Funcția returnează `False` dacă datele de intrare nu sunt valide și `True` în caz contrar.

În secțiunea `if __name__ == '__main__':`, utilizatorul este întrebat să introducă două numere întregi `n` și `m`. Dacă acestea nu respectă restricțiile, se va afișa un mesaj corespunzător și programul se va încheia. În caz contrar, se va afișa un mesaj de confirmare și se va apela funcția `build_cartesian_product(n, m)` pentru a construi produsul cartezian, care va fi apoi afișat pe ecran.