4207 - SumProdRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
validare + main, explicatii
Cata (talk | contribs)
No edit summary
Line 1: Line 1:
== Cerința ==
== Cerința ==
Scrieți funcția recursivă care primind ca parametru un număr natural nenul n, returnează valoarea sumei <span style="color: red;">1•2 + 2•3 + ... (n-1)•n.</span>
Scrieți funcția recursivă care primind ca parametru un număr natural nenul n, returnează valoarea sumei 1•2 + 2•3 + ... (n-1)•n.
== Restricții și precizări ==
== Restricții și precizări ==
* <span style="color: red;">2 ≤ n ≤ 10.000</span>.
* 2 ≤ n ≤ 10.000.
* Numele funcției este <span style="color: red;">SumProdRec</span>.
* Numele funcției este SumProdRec.
* Se recomandă utilizarea recursivității în rezolvarea problemei.
* Se recomandă utilizarea recursivității în rezolvarea problemei.
==Date de intrare==
Programul citește de la tastatură un număr cuprins între 2 și 10000.
==Date de ieșire==
Programul afișează un mesaj de validare a datelor ("Datele introduse sunt corecte."), iar apoi suma cerută ale numerelor între 1 și n-1, n fiind numărul introdus de la tastatură.
== Exemplu ==
== Exemplu ==
<span style="color: red;">SumProdRec(4) = 20</span>.
SumProdRec(4) = 20.
== Explicație ==
== Explicație ==
Aceasta este o funcție recursivă numită SumProdRec, care ia un argument n și calculează suma produselor consecutive ale numerelor intre 1 și n-1, folosind recursivitatea.
Aceasta este o funcție recursivă numită SumProdRec, care ia un argument n și calculează suma produselor consecutive ale numerelor între 1 și n-1, folosind recursivitatea.


Pentru cazul de bază, dacă n este 1, funcția returnează 0. În caz contrar, funcția returnează (n-1)*n + SumProdRec(n-1), adică produsul dintre n-1 si n, plus rezultatul funcției SumProdRec apelată cu n-1 ca argument.
Pentru cazul de bază, dacă n este 1, funcția returnează 0. În caz contrar, funcția returnează (n-1)*n + SumProdRec(n-1), adică produsul dintre n-1 și n, plus rezultatul funcției SumProdRec apelată cu n-1 ca argument.


== Rezolvare ==
== Rezolvare ==
=== Varianta 1 ===
<syntaxhighlight lang="python" line="1">
<syntaxhighlight lang="python" line="1">
def validate_n(n):
def validate_n(n):
Line 33: Line 36:
         if validate_n(n):
         if validate_n(n):
             result = SumProdRec(n)
             result = SumProdRec(n)
            print("Datele introduse sunt corecte.")
             print(f"Suma produselor consecutive ale numerelor intre 1 si {n-1} este: {result}")
             print(f"Suma produselor consecutive ale numerelor intre 1 si {n-1} este: {result}")
         else:
         else:
Line 38: Line 42:
     except ValueError:
     except ValueError:
         print("Nu ati introdus un numar intreg.")
         print("Nu ati introdus un numar intreg.")
if __name__ == "__main__":
    main()
</syntaxhighlight>
</syntaxhighlight>

Revision as of 15:30, 26 April 2023

Cerința

Scrieți funcția recursivă care primind ca parametru un număr natural nenul n, returnează valoarea sumei 1•2 + 2•3 + ... (n-1)•n.

Restricții și precizări

  • 2 ≤ n ≤ 10.000.
  • Numele funcției este SumProdRec.
  • Se recomandă utilizarea recursivității în rezolvarea problemei.

Date de intrare

Programul citește de la tastatură un număr cuprins între 2 și 10000.

Date de ieșire

Programul afișează un mesaj de validare a datelor ("Datele introduse sunt corecte."), iar apoi suma cerută ale numerelor între 1 și n-1, n fiind numărul introdus de la tastatură.

Exemplu

SumProdRec(4) = 20.

Explicație

Aceasta este o funcție recursivă numită SumProdRec, care ia un argument n și calculează suma produselor consecutive ale numerelor între 1 și n-1, folosind recursivitatea.

Pentru cazul de bază, dacă n este 1, funcția returnează 0. În caz contrar, funcția returnează (n-1)*n + SumProdRec(n-1), adică produsul dintre n-1 și n, plus rezultatul funcției SumProdRec apelată cu n-1 ca argument.

Rezolvare

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

   if isinstance(n, int) and n >= 2 and n <= 10000:
       return True
   else:
       return False

def SumProdRec(n):

   if n == 1:
       return 0
   else:
       return (n-1)*n + SumProdRec(n-1)

def main():

   n = input("Introduceti un numar intreg intre 2 si 10.000: ")
   try:
       n = int(n)
       if validate_n(n):
           result = SumProdRec(n)
           print("Datele introduse sunt corecte.")
           print(f"Suma produselor consecutive ale numerelor intre 1 si {n-1} este: {result}")
       else:
           print("Numarul introdus nu este valid.")
   except ValueError:
       print("Nu ati introdus un numar intreg.")

if __name__ == "__main__":

   main()

</syntaxhighlight>