2975 - FRadical: Difference between revisions
Cuceu Andrei (talk | contribs) Pagină nouă: ==Cerința== Definiți funcția '''void FRadical(int n, int &x, int &y)''' cu parametrii: *'''n''', prin care primește un număr natural din intervalul '''[1, 1.000.000.000]''' *'''x''' și '''y''' – două numere naturale care se determină, cu proprietatea că '''x2 * y = n''', iar '''x''' este maxim posibil ==Exemplu== În urma apelului '''FRadical(15000, x, y)''', se obține '''x = 50''', '''y = 6'''. ==Important== Soluţia propusă va conţine definiţia funcţ... |
Vardai Erwin (talk | contribs) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
*'''x''' și '''y''' – două numere naturale care se determină, cu proprietatea că '''x2 * y = n''', iar '''x''' este maxim posibil | *'''x''' și '''y''' – două numere naturale care se determină, cu proprietatea că '''x2 * y = n''', iar '''x''' este maxim posibil | ||
==Date de intrare== | |||
Se citește de la tastatură un număr natural '''n''' din intervalul '''[1, 1.000.000.000]'''. | |||
==Date de ieșire== | |||
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." | |||
Programul va afișa două numere naturale '''x''' și''' y '''care satisfac proprietatea dată de enunțul problemei, respectiv''' x^2 * y = n''', iar '''x''' este maxim posibil. | |||
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.". | |||
==Exemplu== | ==Exemplu== | ||
;Intrare | |||
:15000 | |||
;Ieșire | |||
:Datele de intrare corespund restricțiilor impuse | |||
:x = 50, y = 6 | |||
==Important== | ==Important== | ||
Line 23: | Line 34: | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def | import math | ||
def validate_input(n): | |||
if n < 1 or n > 1000000000: | |||
print("Numarul n trebuie sa fie intre 1 si 1.000.000.000.") | |||
return False | |||
return True | |||
def FRadical(n): | |||
while x | x = int(math.sqrt(n)) | ||
while x >= 1: | |||
y = n // (x * x) | |||
if x * x * y == n: | |||
return x, y | |||
x -= 1 | |||
def validate_output(n, x, y): | |||
if x * x * y != n: | |||
return False | |||
if x * x * (y + 1) <= n: | |||
return False | |||
return True | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
n = int(input("Introduceti numarul n: ")) | |||
n | if validate_input(n): | ||
x, y = FRadical(n) | |||
if validate_output(n, x, y): | |||
print("Datele de intrare corespund restricțiilor impuse") | |||
print("Pentru n =", n, ", se obtine x =", x, ", y =", y) | |||
else: | |||
print("Datele de intrare nu corespund restricțiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicații== | |||
Funcția validate_input primește un număr natural n și verifică dacă acesta se află în intervalul [1, 1.000.000.000]. Dacă nu se respectă această condiție, funcția afișează un mesaj de eroare și returnează False, altfel returnează True. | |||
Funcția FRadical primește un număr natural n și calculează două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Pentru a calcula valorile x și y, funcția parcurge valorile posibile ale lui x, începând cu valoarea radicalului lui n și coborând către 1. Pentru fiecare valoare a lui x, se calculează valoarea lui y și se verifică dacă condiția x^2 * y = n este îndeplinită. Dacă este îndeplinită, atunci funcția returnează valorile x și y. | |||
Funcția validate_output primește trei parametri: numărul natural n, și două numere naturale x și y, și verifică dacă valorile x și y satisfac condiția specificată în enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Dacă valorile sunt corecte, funcția returnează True, altfel returnează False. | |||
În funcția main, se citește numărul natural n de la tastatură, se validează valorile de intrare cu ajutorul funcției validate_input, se calculează valorile x și y cu ajutorul funcției FRadical, se validează valorile de ieșire cu ajutorul funcției validate_output, și se afișează rezultatul final. Dacă valorile de intrare sau de ieșire nu sunt corecte, se afișează un mesaj de eroare corespunzător. |
Latest revision as of 17:28, 6 May 2023
Cerința[edit | edit source]
Definiți funcția
void FRadical(int n, int &x, int &y)
cu parametrii:
- n, prin care primește un număr natural din intervalul [1, 1.000.000.000]
- x și y – două numere naturale care se determină, cu proprietatea că x2 * y = n, iar x este maxim posibil
Date de intrare[edit | edit source]
Se citește de la tastatură un număr natural n din intervalul [1, 1.000.000.000].
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".
Exemplu[edit | edit source]
- Intrare
- 15000
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- x = 50, y = 6
Important[edit | edit source]
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 | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
import math
def validate_input(n):
if n < 1 or n > 1000000000: print("Numarul n trebuie sa fie intre 1 si 1.000.000.000.") return False return True
def FRadical(n):
x = int(math.sqrt(n)) while x >= 1: y = n // (x * x) if x * x * y == n: return x, y x -= 1
def validate_output(n, x, y):
if x * x * y != n: return False if x * x * (y + 1) <= n: return False return True
if __name__ == "__main__":
n = int(input("Introduceti numarul n: ")) if validate_input(n): x, y = FRadical(n) if validate_output(n, x, y): print("Datele de intrare corespund restricțiilor impuse") print("Pentru n =", n, ", se obtine x =", x, ", y =", y) else: print("Datele de intrare nu corespund restricțiilor impuse")
</syntaxhighlight>
Explicații[edit | edit source]
Funcția validate_input primește un număr natural n și verifică dacă acesta se află în intervalul [1, 1.000.000.000]. Dacă nu se respectă această condiție, funcția afișează un mesaj de eroare și returnează False, altfel returnează True.
Funcția FRadical primește un număr natural n și calculează două numere naturale x și y care satisfac proprietatea dată de enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Pentru a calcula valorile x și y, funcția parcurge valorile posibile ale lui x, începând cu valoarea radicalului lui n și coborând către 1. Pentru fiecare valoare a lui x, se calculează valoarea lui y și se verifică dacă condiția x^2 * y = n este îndeplinită. Dacă este îndeplinită, atunci funcția returnează valorile x și y.
Funcția validate_output primește trei parametri: numărul natural n, și două numere naturale x și y, și verifică dacă valorile x și y satisfac condiția specificată în enunțul problemei, respectiv x^2 * y = n, iar x este maxim posibil. Dacă valorile sunt corecte, funcția returnează True, altfel returnează False.
În funcția main, se citește numărul natural n de la tastatură, se validează valorile de intrare cu ajutorul funcției validate_input, se calculează valorile x și y cu ajutorul funcției FRadical, se validează valorile de ieșire cu ajutorul funcției validate_output, și se afișează rezultatul final. Dacă valorile de intrare sau de ieșire nu sunt corecte, se afișează un mesaj de eroare corespunzător.