0798 - Interval Factorial: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: ==Enunt== Un interval cu proprietatea că există un singur număr natural, '''n (2≤n)''', pentru care valoarea produsului '''1·2·3·...·n''' aparține acestui interval este numit interval factorial al lui '''n'''. '''Exemplu''': '''[5,8]''' și '''[3,23]''' sunt intervale factoriale ale lui '''3''', dar '''[1,15]''' și '''[7,10]''' nu sunt intervale factoriale ale niciunui număr. ==Cerinţa== Să se scrie o funcție Python care, pentru un număr natural n transmi...)
 
 
(Nu s-au afișat 6 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 1: Linia 1:


==Enunt==
==Enunț==


Un interval cu proprietatea că există un singur număr natural, '''n (2≤n)''', pentru care valoarea produsului '''1·2·3·...·n''' aparține acestui interval este numit interval factorial al lui '''n'''.
Un interval cu proprietatea că există un singur număr natural, '''n (2≤n)''', pentru care valoarea produsului '''1·2·3·...·n''' aparține acestui interval este numit interval factorial al lui '''n'''.
'''Exemplu''': '''[5,8]''' și '''[3,23]''' sunt intervale factoriale ale lui '''3''', dar '''[1,15]''' și '''[7,10]''' nu sunt intervale factoriale ale niciunui număr.
'''Exemplu''': '''[5,8]''' și '''[3,23]''' sunt intervale factoriale ale lui '''3''', dar '''[1,15]''' și '''[7,10]''' nu sunt intervale factoriale ale niciunui număr.


==Cerinţa==
==Cerinţa==
Linia 10: Linia 9:
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii de ieșire un interval factorial al lui '''n''' de lungime maximă.
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii de ieșire un interval factorial al lui '''n''' de lungime maximă.


==Date de intrare==
Se citește de la tastatură un număr natural '''n''', reprezentând numărul pentru care se caută intervalul factorial.
==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 două numere naturale '''a''' și '''b''', care reprezintă capetele intervalului factorial al lui n de lungime maximă. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".


==Restricţii şi precizări==
==Restricţii şi precizări==
Linia 20: Linia 25:


==Exemplu==
==Exemplu==
 
;Intrare
Dacă '''n=3''', apelul subprogramului va furniza prin parametrul '''a''' valoarea '''3''', iar prin '''b''' valoarea '''23'''.
:3
 
;Ieșire
:[3, 23]


==Important==
==Important==
Linia 32: Linia 38:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


def interval(n, a, b):
def validare(n):
     if n < 2 or n > 10:
     if n < 2 or n > 10:
         return "n trebuie fie un număr natural în intervalul [2,10]"
         print("Numarul introdus trebuie sa fie intre 2 si 10.")
      
        return False
     produs = i = 1
     return True
     a = b = 1
 
   
def interval(n):
     while produs <= b:
     produs = 1
         if produs < a:
     i = 1
            i += 1
     while produs <= n:
            produs *= i
         produs *= i
        else:
        i += 1
            b += 1
    a = 2
            produs *= b
    while produs > n:
           
        produs //= a
    a = i
        a += 1
      
     b = a - 1
     while produs >= a:
     while produs <= i:
        produs *= b + 1
         b += 1
         b += 1
        produs *= b
       
    b -= 1
   
     return a, b
     return a, b


def main():
def main():
     n = 3
     n = int(input("Introduceti numarul n: "))
     a, b = interval(n, 1, 100)
     if validare(n):
    print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
        a, b = interval(n)
        print(f"Intervalul factorial al lui {n} este [{a}, {b}].")


    n = 5
if __name__ == "__main__":
    a, b = interval(n, 1, 100)
     main()
     print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")


    n = 7
    a, b = interval(n, 1, 100)
    print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")


if __name__ == '__main__':
</syntaxhighlight>
    main()
 
 
==Explicații==
In acest cod, functia validare verifica daca numarul n primit ca parametru este in intervalul [2,10]. Daca numarul este in afara acestui interval, se afiseaza un mesaj de eroare si se returneaza False. Daca numarul este in interval, se returneaza True.
 
Functia interval determina intervalul factorial al lui n de lungime maxima. Pentru aceasta, se calculeaza produsul primelor i numere naturale pana cand produsul depaseste n. De aici, se calculeaza capatul inferior a al intervalului factorial, prin impartirea succesiva a produsului la numerele naturale de la 2 la a-1, pana cand produsul devine mai mic sau egal cu i. Apoi, se calculeaza capatul superior b al intervalului factorial, prin inmultirea succesiva a produsului cu numerele naturale de la b+1 la i-1, pana cand produsul devine mai mare sau egal cu i.


In functia main, se citeste numarul n de la tastatura si se verifica daca este un numar valid prin apelarea functiei validare. Daca numarul este valid, se determina intervalul factorial al lui n prin apelarea functiei interval si se afiseaza intervalul respectiv.


</syntaxhighlight>
La final, daca acest cod este rulat ca program principal (__name__ == "__main__"), functia main este apelata pentru a rula intregul program.

Versiunea curentă din 6 mai 2023 17:19

Enunț

Un interval cu proprietatea că există un singur număr natural, n (2≤n), pentru care valoarea produsului 1·2·3·...·n aparține acestui interval este numit interval factorial al lui n. Exemplu: [5,8] și [3,23] sunt intervale factoriale ale lui 3, dar [1,15] și [7,10] nu sunt intervale factoriale ale niciunui număr.

Cerinţa

Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii de ieșire un interval factorial al lui n de lungime maximă.


Date de intrare

Se citește de la tastatură un număr natural n, reprezentând numărul pentru care se caută intervalul factorial.

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 două numere naturale a și b, care reprezintă capetele intervalului factorial al lui n de lungime maximă. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

Numele funcției va fi interval și va avea exact trei parametri, în această ordine:

  • primul parametru, n, reprezintă un număr natural din intervalul [2,10]
  • a și b, prin care furnizează câte un număr natural, astfel încât expresia b-a să aibă valoare maximă, iar [a,b] să fie interval factorial al lui n.


Exemplu

Intrare
3
Ieșire
[3, 23]

Important

Soluţia propusă va conţine doar 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

def validare(n):
    if n < 2 or n > 10:
        print("Numarul introdus trebuie sa fie intre 2 si 10.")
        return False
    return True

def interval(n):
    produs = 1
    i = 1
    while produs <= n:
        produs *= i
        i += 1
    a = 2
    while produs > n:
        produs //= a
        a += 1
    b = a - 1
    while produs <= i:
        produs *= b + 1
        b += 1
    return a, b

def main():
    n = int(input("Introduceti numarul n: "))
    if validare(n):
        a, b = interval(n)
        print(f"Intervalul factorial al lui {n} este [{a}, {b}].")

if __name__ == "__main__":
    main()


Explicații

In acest cod, functia validare verifica daca numarul n primit ca parametru este in intervalul [2,10]. Daca numarul este in afara acestui interval, se afiseaza un mesaj de eroare si se returneaza False. Daca numarul este in interval, se returneaza True.

Functia interval determina intervalul factorial al lui n de lungime maxima. Pentru aceasta, se calculeaza produsul primelor i numere naturale pana cand produsul depaseste n. De aici, se calculeaza capatul inferior a al intervalului factorial, prin impartirea succesiva a produsului la numerele naturale de la 2 la a-1, pana cand produsul devine mai mic sau egal cu i. Apoi, se calculeaza capatul superior b al intervalului factorial, prin inmultirea succesiva a produsului cu numerele naturale de la b+1 la i-1, pana cand produsul devine mai mare sau egal cu i.

In functia main, se citeste numarul n de la tastatura si se verifica daca este un numar valid prin apelarea functiei validare. Daca numarul este valid, se determina intervalul factorial al lui n prin apelarea functiei interval si se afiseaza intervalul respectiv.

La final, daca acest cod este rulat ca program principal (__name__ == "__main__"), functia main este apelata pentru a rula intregul program.