0116 - Medie Prime: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Să se scrie un program care citeşte de la tastatură un număr natural '''numar''' şi apoi un şir de '''n''' numere naturale şi determină media aritmetică a celor prime. == Date de intrare == Programul citește de la tastatură numărul '''numar''', iar apoi '''n''' numere naturale.. == Date de ieşire == Programul afișează pe ecran numărul M, reprezentând media aritmetică a valorilor prime. == Restricții și precizări == * numar ∈ Ν * 0 &...)
 
 
(Nu s-au afișat 10 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 4: Linia 4:
Programul citește de la tastatură numărul '''numar''', iar apoi '''n''' numere naturale..
Programul citește de la tastatură numărul '''numar''', iar apoi '''n''' numere naturale..
== Date de ieşire ==
== Date de ieşire ==
Programul afișează pe ecran numărul M, reprezentând media aritmetică a valorilor prime.
Programul afișează pe ecran numărul '''M''', reprezentând media aritmetică a valorilor prime.
 
== Restricții și precizări ==
== Restricții și precizări ==
* numar ∈ Ν
* numar ∈ Ν
* 0 ⩽ n ⩽ 1.000
* 0 ⩽ n ⩽ 1.000
* cele n numere citite vor fi mai mici decât 10000;
* cele n numere citite vor fi mai mici decât 10000
*rezultatul se va afişa cu cel puțin două zecimale exacte;
*rezultatul se va afişa cu cel puțin două zecimale exacte
*în toate testele, printre cele n numere va exista cel puțin un număr prim.
*printre cele n numere va exista cel puțin un număr prim
 
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
Linia 16: Linia 18:
: 8 7 5 9 11
: 8 7 5 9 11
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 7.66
: 7.666666666666667
 
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validare_date_numar(numar):
def validare_date_numar(numar):
    flag = False
     if numar.isdigit():
     if numar.isdigit():
         if 0 <= int(numar) <= 1000:
         if 0 <= int(numar) <= 1000:
             flag = True
             return True
     return flag
     return False
 


def validare_date_numere(n):
def validare_date_numere(n):
     flag = False
     if n.isdigit():
    if 0 <= int(n) <= 10000:
        if 0 <= int(n) <= 10000:
        flag = True
            return True
     return flag
     return False


def is_prime(numar):
def este_prim(numar):
     if numar < 2:
     if numar < 2:
         return False
         return False
Linia 42: Linia 43:
     return True
     return True


def avg_prime(numere):
def lista_numere_prime(numere):
     prime_numere = [numar for numar in numere if is_prime(numar)]
     numere_prime = [numar for numar in numere if este_prim(numar)]
     if len(prime_numere) > 0:
     if len(numere_prime) > 0:
         return sum(prime_numere) / len(prime_numere)
         return sum(numere_prime) / len(numere_prime)
     else:
     else:
         return None
         return None


if __name__ == "__main__":
if __name__ == "__main__":
     n = int(input("Introduceti numarul de elemente: "))
     n = input("Introduceti numarul de elemente: ")
    numere = list(map(int, input("Introduceti numerele separate prin spatiu: ").split()))
    if validare_date_numere(n):
    result = avg_prime(numere)
        print("Datele de intrare corespund restricțiilor impuse.")
    if result is not None:
        numere = list(map(int, input("Introduceti numerele: ").split()))
        print("Media aritmetica a numerelor prime din lista este:", result)
        if validare_date_numere(str(len(numere))):
            print("Datele de intrare corespund restricțiilor impuse.")
            rezultat = lista_numere_prime(numere)
            if rezultat is not None:
                print("Media aritmetica a numerelor prime din lista este:", rezultat)
            else:
                print("Nu exista numere prime in lista!")
        else:
            print("Numarul de numere introdus nu corespunde cu numarul specificat anterior.")
     else:
     else:
         print("Nu exista numere prime in lista!")
         print("Numarul de elemente introdus nu corespunde cu restrictiile impuse.")


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
Programul începe prin definirea a trei funcții:
1.'''validare_date_numar(numar)''': Această funcție verifică dacă un șir de caractere numar dat poate fi convertit la un număr întreg între 0 și 1000. Ea returnează '''True''' dacă condiția este satisfăcută și '''False''' în caz contrar.
2.'''validare_date_numere(n)''': Această funcție verifică dacă un șir de caractere n dat poate fi convertit la un număr întreg între 0 și 10000. Ea returnează '''True''' dacă condiția este satisfăcută și '''False''' în caz contrar.
3.'''este_prim(numar)''': Această funcție verifică dacă un număr întreg dat numar este un număr prim. Ea returnează '''True''' dacă numărul este prim și '''False''' în caz contrar.
După definirea acestor funcții, se verifică dacă introducerea primită de la utilizator este validă, apoi calculează media aritmetică a numerelor prime din lista utilizând funcția '''lista_numere_prime'''. Dacă nu există numere prime în listă, se returnează un mesaj care indică acest lucru.

Versiunea curentă din 10 aprilie 2023 09:41

Cerinţa

Să se scrie un program care citeşte de la tastatură un număr natural numar şi apoi un şir de n numere naturale şi determină media aritmetică a celor prime.

Date de intrare

Programul citește de la tastatură numărul numar, iar apoi n numere naturale..

Date de ieşire

Programul afișează pe ecran numărul M, reprezentând media aritmetică a valorilor prime.

Restricții și precizări

  • numar ∈ Ν
  • 0 ⩽ n ⩽ 1.000
  • cele n numere citite vor fi mai mici decât 10000
  • rezultatul se va afişa cu cel puțin două zecimale exacte
  • printre cele n numere va exista cel puțin un număr prim

Exemplu

Intrare
5
8 7 5 9 11
Ieșire
Datele de intrare corespund restricțiilor impuse.
7.666666666666667

Rezolvare

def validare_date_numar(numar):
    if numar.isdigit():
        if 0 <= int(numar) <= 1000:
            return True
    return False

def validare_date_numere(n):
    if n.isdigit():
        if 0 <= int(n) <= 10000:
            return True
    return False

def este_prim(numar):
    if numar < 2:
        return False
    for i in range(2, int(numar ** 0.5) + 1):
        if numar % i == 0:
            return False
    return True

def lista_numere_prime(numere):
    numere_prime = [numar for numar in numere if este_prim(numar)]
    if len(numere_prime) > 0:
        return sum(numere_prime) / len(numere_prime)
    else:
        return None

if __name__ == "__main__":
    n = input("Introduceti numarul de elemente: ")
    if validare_date_numere(n):
        print("Datele de intrare corespund restricțiilor impuse.")
        numere = list(map(int, input("Introduceti numerele: ").split()))
        if validare_date_numere(str(len(numere))):
            print("Datele de intrare corespund restricțiilor impuse.")
            rezultat = lista_numere_prime(numere)
            if rezultat is not None:
                print("Media aritmetica a numerelor prime din lista este:", rezultat)
            else:
                print("Nu exista numere prime in lista!")
        else:
            print("Numarul de numere introdus nu corespunde cu numarul specificat anterior.")
    else:
        print("Numarul de elemente introdus nu corespunde cu restrictiile impuse.")

Explicație rezolvare

Programul începe prin definirea a trei funcții:

1.validare_date_numar(numar): Această funcție verifică dacă un șir de caractere numar dat poate fi convertit la un număr întreg între 0 și 1000. Ea returnează True dacă condiția este satisfăcută și False în caz contrar.

2.validare_date_numere(n): Această funcție verifică dacă un șir de caractere n dat poate fi convertit la un număr întreg între 0 și 10000. Ea returnează True dacă condiția este satisfăcută și False în caz contrar.

3.este_prim(numar): Această funcție verifică dacă un număr întreg dat numar este un număr prim. Ea returnează True dacă numărul este prim și False în caz contrar.

După definirea acestor funcții, se verifică dacă introducerea primită de la utilizator este validă, apoi calculează media aritmetică a numerelor prime din lista utilizând funcția lista_numere_prime. Dacă nu există numere prime în listă, se returnează un mesaj care indică acest lucru.