4190 - FPatrate: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Subprogramul '''patrate''' are trei parametri: *'''n''', prin care primește un număr natural ('''n∈[2,109])'''; *'''x''' și '''y''', prin care furnizează câte un număr natural cu proprietatea că '''x2⋅y2=n'''și '''2≤x<y'''sau valoarea '''0''', prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui '''x'''. Scrieți definiția compl...
 
 
(5 intermediate revisions by 2 users not shown)
Line 8: Line 8:
Scrieți definiția completă a subprogramului.
Scrieți definiția completă a subprogramului.


==Exemplu==


Pentru '''n=400''', după apel, '''x=2''' şi '''y=10''', iar pentru '''n=16''' sau '''n=24''', după apel, '''x=0''' și '''y=0'''.
==Date de intrare==
Se citește de la tastatură '''n''': un număr natural între '''2 și 10^9''' inclusiv.


==Date de ieșire==
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa:
'''x''': un număr natural care să îndeplinească proprietatea că '''x^2 * y^2 = n și 2 ≤ x < y'''. Dacă nu există astfel de numere, '''x''' este '''0'''.
'''y'''': un număr natural care să îndeplinească proprietatea că '''x^2 * y^2 = n și 2 ≤ x < y'''. Dacă nu există astfel de numere, '''y''' este '''0'''. Dacă există mai multe perechi '''(x, y)''' care să satisfacă condiția, se va returna perechea care are '''x minim'''.
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".
==Exemplu==
===Exemplul 1===
;Intrare
:400
;Ieșire
:2 10
===Exemplul 2===
;Intrare
:16
;Ieșire
:0 0
===Exemplul 3===
;Intrare
:24
;Ieșire
:0 0


==Important==
==Important==
Line 20: Line 42:
===Rezolvare ver. 1===
===Rezolvare ver. 1===
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def validare_n(n):
    if isinstance(n, int) and 2 <= n <= 10**9:
        return True
    return False


def patrate(n):
def patrate(n):
     x = 0
     x = 0
     y = 0
     y = 0
    min_x = float('inf')  # valoare inițială infinită pentru a găsi cel mai mic x
     for i in range(2, int(n**0.5) + 1):
     for i in range(2, int(n ** 0.5) + 1): # caută toate valorile posibile pentru x
         if n % (i**2) == 0:
         if n % (i ** 2) == 0: # dacă x este factor al lui n, încercă să găsești y
            if x == 0 or i < x:
            j = n // (i ** 2)
                x = i
            if i < j and j <= int(n ** 0.5) and n == i ** 2 * j ** 2: # verifică condițiile y-ului
                y = n // (i**2)
                if i < min_x:  # dacă acest x este mai mic decât cele găsite anterior, actualizează x și y
    return x, y
                    min_x = i
 
                    x = i
if __name__ == '__main__':
                    y = j
    n = int(input("Introduceți n: "))
    if x == 0 and y == 0:  # dacă nu se găsesc perechi x, y care să satisfacă condițiile, returnează 0, 0
    if validare_n(n):
        return 0, 0
        print("Datele de intrare corespund restrictiilor impuse.")
        x, y = patrate(n)
        print(f"x = {x}, y = {y}")
     else:
     else:
         return x, y
         print("Datele de intrare nu corespund restrictiilor impuse.")




def main():
    n = 400
    x, y = patrate(n)
    print(f"Pentru n = {n}, x = {x} și y = {y}")
   
    n = 16
    x, y = patrate(n)
    print(f"Pentru n = {n}, x = {x} și y = {y}")
   
    n = 24
    x, y = patrate(n)
    print(f"Pentru n = {n}, x = {x} și y = {y}")




if __name__ == '__main__':
</syntaxhighlight>
    main()
 


</syntaxhighlight>
==Explicatii==
Acest cod definește mai întâi funcția de validare "validare_n", apoi subprogramul "patrate", care primește un număr natural n și returnează o pereche (x, y) care îndeplinește proprietatea dată sau (0, 0) în caz contrar. În final, în cadrul unui bloc "if name == 'main':", este preluată valoarea de intrare de la utilizator și apoi se apelează funcția "patrate".

Latest revision as of 17:24, 6 May 2023

Cerința[edit]

Subprogramul patrate are trei parametri:

  • n, prin care primește un număr natural (n∈[2,109]);
  • x și y, prin care furnizează câte un număr natural cu proprietatea că x2⋅y2=nși 2≤x<ysau valoarea 0, prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui x.

Scrieți definiția completă a subprogramului.


Date de intrare[edit]

Se citește de la tastatură n: un număr natural între 2 și 10^9 inclusiv.

Date de ieșire[edit]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa: x: un număr natural care să îndeplinească proprietatea că x^2 * y^2 = n și 2 ≤ x < y. Dacă nu există astfel de numere, x este 0. y': un număr natural care să îndeplinească proprietatea că x^2 * y^2 = n și 2 ≤ x < y. Dacă nu există astfel de numere, y este 0. Dacă există mai multe perechi (x, y) care să satisfacă condiția, se va returna perechea care are x minim. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".

Exemplu[edit]

Exemplul 1[edit]

Intrare
400
Ieșire
2 10

Exemplul 2[edit]

Intrare
16
Ieșire
0 0

Exemplul 3[edit]

Intrare
24
Ieșire
0 0

Important[edit]

Soluția propusă va conține definiția funcţiei cerute. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluției.

Rezolvare[edit]

Rezolvare ver. 1[edit]

<syntaxhighlight lang="python" line="1" start="1"> def validare_n(n):

   if isinstance(n, int) and 2 <= n <= 10**9:
       return True
   return False

def patrate(n):

   x = 0
   y = 0
   for i in range(2, int(n**0.5) + 1):
       if n % (i**2) == 0:
           if x == 0 or i < x:
               x = i
               y = n // (i**2)
   return x, y

if __name__ == '__main__':

   n = int(input("Introduceți n: "))
   if validare_n(n):
       print("Datele de intrare corespund restrictiilor impuse.")
       x, y = patrate(n)
       print(f"x = {x}, y = {y}")
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")



</syntaxhighlight>

Explicatii[edit]

Acest cod definește mai întâi funcția de validare "validare_n", apoi subprogramul "patrate", care primește un număr natural n și returnează o pereche (x, y) care îndeplinește proprietatea dată sau (0, 0) în caz contrar. În final, în cadrul unui bloc "if name == 'main':", este preluată valoarea de intrare de la utilizator și apoi se apelează funcția "patrate".