1660 - Fotbal: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Gigel se joacă fotbal. El fiind un informatician de excepție , ar vrea să determine in cate moduri poți ajunge la un anumit scor. ==Date de intrare== Se va introduce de la tastatură 2 numere naturale reprezentând scorul în timpul actual. Să se determine în câte moduri se poate ajunge de la 0-0 la acel scor. ==Date de ieșire== Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și p...
 
No edit summary
 
Line 30: Line 30:


===Exemplu 3===
===Exemplu 3===
<syntaxhighlight lang="python">
:Intrare:
Introduceti primul numar: abc
I;ntroduceti primul numar: abc
Datele de intrare nu corespund cerintei.
:Iesire:
invalid literal for int() with base 10: 'abc'
;Datele de intrare nu corespund cerintei.
</syntaxhighlight>
;invalid literal for int() with base 10: 'abc'
 




==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python" line="1">  
def validare(num1, num2):
def validare(num1, num2):
     if not isinstance(num1, int) or not isinstance(num2, int):
     if not isinstance(num1, int) or not isinstance(num2, int):
Line 75: Line 75:


==Explicații ==
==Explicații ==
Începem cu funcția validare(num1, num2). Aceasta primește cele două numere de intrare, num1 și num2, și verifică dacă sunt valide. Dacă unul dintre cele două numere nu este un număr întreg sau nu se încadrează în intervalul permis (mai mare decât 0 și mai mic sau egal cu 10), atunci funcția aruncă o excepție ValueError cu un mesaj corespunzător.
#1Începem cu funcția validare(num1, num2). Aceasta primește cele două numere de intrare, num1 și num2, și verifică dacă sunt valide. Dacă unul dintre cele două numere nu este un număr întreg sau nu se încadrează în intervalul permis (mai mare decât 0 și mai mic sau egal cu 10), atunci funcția aruncă o excepție ValueError cu un mesaj corespunzător.


Următoarea funcție, numar_moduri(a, b), primește scorul actual al jocului ca o pereche de numere, a și b, și calculează numărul de moduri de a ajunge la acel scor folosind formula combinatorică menționată în enunț. Pentru a calcula combinația de (a+b) luate câte a, am folosit o metodă iterativă care înmulțește fracțiuni succesive de la 1 la a și le împarte la fracțiuni succesive de la (n-k+1) la n. Dacă nu transformăm rezultatul final într-un întreg folosind int(rezultat), atunci acesta ar fi un float.
#2 Următoarea funcție, numar_moduri(a, b), primește scorul actual al jocului ca o pereche de numere, a și b, și calculează numărul de moduri de a ajunge la acel scor folosind formula combinatorică menționată în enunț. Pentru a calcula combinația de (a+b) luate câte a, am folosit o metodă iterativă care înmulțește fracțiuni succesive de la 1 la a și le împarte la fracțiuni succesive de la (n-k+1) la n. Dacă nu transformăm rezultatul final într-un întreg folosind int(rezultat), atunci acesta ar fi un float.


Funcția main() este punctul de intrare al programului. Aceasta primește intrările de la utilizator și validează datele folosind funcția validare(). Dacă datele sunt valide, se afișează un mesaj corespunzător, iar numărul de moduri de a ajunge la scorul respectiv se calculează folosind funcția numar_moduri() și se afișează.
#3 Funcția main() este punctul de intrare al programului. Aceasta primește intrările de la utilizator și validează datele folosind funcția validare(). Dacă datele sunt valide, se afișează un mesaj corespunzător, iar numărul de moduri de a ajunge la scorul respectiv se calculează folosind funcția numar_moduri() și se afișează.


În final, blocul if __name__ == '__main__': verifică dacă acesta este modulul principal și, în caz afirmativ, apelează funcția main(). Această verificare este importantă pentru a ne asigura că codul din modulul nostru nu va fi rulat accidental atunci când este importat ca modul în alt script.
#4 În final, blocul if __name__ == '__main__': verifică dacă acesta este modulul principal și, în caz afirmativ, apelează funcția main(). Această verificare este importantă pentru a ne asigura că codul din modulul nostru nu va fi rulat accidental atunci când este importat ca modul în alt script.

Latest revision as of 20:04, 14 May 2023

Cerința[edit | edit source]

Gigel se joacă fotbal. El fiind un informatician de excepție , ar vrea să determine in cate moduri poți ajunge la un anumit scor.

Date de intrare[edit | edit source]

Se va introduce de la tastatură 2 numere naturale reprezentând scorul în timpul actual. Să se determine în câte moduri se poate ajunge de la 0-0 la acel scor.

Date de ieșire[edit | edit source]

Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și pe un rând nou se afișează ceea ce se cere. Altfel, dacă datele de intrare nu corespund cerinței se va afișa mesajul: "Datele de intrare nu corespund cerinței".

Restricții și precizări[edit | edit source]

cele 2 numere citite vor fi mai mici decât 10

Exemplu[edit | edit source]

Exemplu 1[edit | edit source]

<syntaxhighlight lang="python">

Introduceti primul numar: 3 Introduceti al doilea numar: 0 Datele de intrare corespund restrictiilor Numarul de moduri de a ajunge la scorul 3-0 este 1 </syntaxhighlight>

Exemplu 2[edit | edit source]

<syntaxhighlight lang="python">

Introduceti primul numar: 11 Introduceti al doilea numar: 10 Datele de intrare nu corespund cerintei. Numerele introduse trebuie sa fie numere intregi pozitive mai mici sau egale cu 10 </syntaxhighlight>

Exemplu 3[edit | edit source]

Intrare:

I;ntroduceti primul numar: abc

Iesire:
Datele de intrare nu corespund cerintei.
invalid literal for int() with base 10
'abc'


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def validare(num1, num2):

   if not isinstance(num1, int) or not isinstance(num2, int):
       raise ValueError("Numerele introduse trebuie sa fie numere intregi")
   if num1 < 0 or num1 > 10 or num2 < 0 or num2 > 10:
       raise ValueError("Numerele introduse trebuie sa fie numere intregi pozitive mai mici sau egale cu 10")


def numar_moduri(a, b):

   n = a + b
   k = a
   rezultat = 1
   for i in range(1, k + 1):
       rezultat *= (n - k + i) / i
   return int(rezultat)


def main():

   try:
       num1 = int(input("Introduceti primul numar: "))
       num2 = int(input("Introduceti al doilea numar: "))
       validare(num1, num2)
       print("Datele de intrare corespund restrictiilor")
       rezultat = numar_moduri(num1, num2)
       print(f"Numarul de moduri de a ajunge la scorul {num1}-{num2} este {rezultat}")
   except ValueError as e:
       print(f"Datele de intrare nu corespund cerintei.\n{e}")


if __name__ == '__main__':

   main()


</syntaxhighlight>

Explicații[edit | edit source]

  1. 1Începem cu funcția validare(num1, num2). Aceasta primește cele două numere de intrare, num1 și num2, și verifică dacă sunt valide. Dacă unul dintre cele două numere nu este un număr întreg sau nu se încadrează în intervalul permis (mai mare decât 0 și mai mic sau egal cu 10), atunci funcția aruncă o excepție ValueError cu un mesaj corespunzător.
  1. 2 Următoarea funcție, numar_moduri(a, b), primește scorul actual al jocului ca o pereche de numere, a și b, și calculează numărul de moduri de a ajunge la acel scor folosind formula combinatorică menționată în enunț. Pentru a calcula combinația de (a+b) luate câte a, am folosit o metodă iterativă care înmulțește fracțiuni succesive de la 1 la a și le împarte la fracțiuni succesive de la (n-k+1) la n. Dacă nu transformăm rezultatul final într-un întreg folosind int(rezultat), atunci acesta ar fi un float.
  1. 3 Funcția main() este punctul de intrare al programului. Aceasta primește intrările de la utilizator și validează datele folosind funcția validare(). Dacă datele sunt valide, se afișează un mesaj corespunzător, iar numărul de moduri de a ajunge la scorul respectiv se calculează folosind funcția numar_moduri() și se afișează.
  1. 4 În final, blocul if __name__ == '__main__': verifică dacă acesta este modulul principal și, în caz afirmativ, apelează funcția main(). Această verificare este importantă pentru a ne asigura că codul din modulul nostru nu va fi rulat accidental atunci când este importat ca modul în alt script.