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...
 
No edit summary
Line 7: Line 7:


Scrieți definiția completă a subprogramului.
Scrieți definiția completă a subprogramului.
==Date de intrare== 
*'''n''': un număr natural între '''2 și 10^9''' inclusiv.
==Date de ieșire==
*'''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'''.


==Exemplu==
==Exemplu==
Line 20: Line 30:
===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
        x, y = patrate(n)
        print(f"x = {x}, y = {y}")
     else:
     else:
         return x, y
         print("n nu este un număr natural între 2 și 10^9 inclusiv")




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__':
    main()




</syntaxhighlight>
</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".

Revision as of 17:28, 30 April 2023

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

  • n: un număr natural între 2 și 10^9 inclusiv.


Date de ieșire

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


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.


Important

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

Rezolvare ver. 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):

   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):
       x, y = patrate(n)
       print(f"x = {x}, y = {y}")
   else:
       print("n nu este un număr natural între 2 și 10^9 inclusiv")



</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".