1847 - VectorSumPrim REC: Difference between revisions

From Bitnami MediaWiki
mNo edit summary
No edit summary
Line 19: Line 19:
==Exemplu==
==Exemplu==
Dacă n=6 și x=(12, 7, 6, 3, 8, 5), după apel s=15.
Dacă n=6 și x=(12, 7, 6, 3, 8, 5), după apel s=15.
def P(x, n, s=0):
    if n == 0:  # cazul de bază: s-a parcurs întregul vector
        return s
    if este_prim(x[n-1]):  # dacă ultimul element este prim, îl adunăm la suma s
        s += x[n-1]
    return P(x, n-1, s)  # apelăm recursiv subprogramul pentru restul vectorului
def este_prim(nr):
    if nr < 2:  # 0 și 1 nu sunt prime
        return False
    if nr == 2 or nr == 3:  # 2 și 3 sunt prime
        return True
    if nr % 2 == 0 or nr % 3 == 0:  # eliminăm multiplii de 2 și 3
        return False
    i = 5
    while i * i <= nr:  # căutăm divizorii până la radicalul numărului
        if nr % i == 0 or nr % (i+2) == 0:
            return False
        i += 6  # trecem la următorii potențiali divizori (6k-1 și 6k+1)
    return True
# Exemplu de utilizare
n = 6
x = [12, 7, 6, 3, 8, 5]
if n > 0 and n <= 100:
    print("Datele de intrare corespund restrictiilor impuse.")
    s = P(x, n)
    print(f"Suma elementelor prime din vector este {s}.")
else:
    print("Datele de intrare nu corespund restrictiilor impuse.") #Rezultatul afișat pe ecran va fi: Suma elementelor prime din vector este 15.


==Important==
Soluţia propusă va conţine definiţia subprogramului cerut și eventual al altor subprograme, apelate de acesta. 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==
  def is_prime(n):
#Funcția de validare:
     Verifică dacă un număr este prim.
  def validare_natural(n):
     if n < 2:
     Verifică dacă un număr este natural nenul (n > 0).
        return False
     Returnează True dacă este, False în caz contrar.
    for i in range(2, int(n ** 0.5) + 1):
    return n > 0
        if n % i == 0:
def validare_dimensiune_tablou(n):
            return False
    Verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului).
     return True
    Returnează True dacă este, False în caz contrar.
  def P(x, n, s=0):
     return n <= 100
     Calculează suma elementelor dintr-un tablou care au valori prime.
#Funcția de rezolvare:
  def suma_divizibile_cu_3(v, n):
     #Calculează suma elementelor dintr-un tablou unidimensional care sunt divizibile cu 3.
    #Parametri:
    v: tabloul unidimensional (list)
    n: numărul efectiv de elemente din tablou (int)
    #Returnează suma elementelor din tabloul v care sunt divizibile cu 3 (int).
     if n == 0:
     if n == 0:
         return s
         return 0
     if is_prime(x[n-1]):
     else:
        s += x[n-1]
        if v[n-1] % 3 == 0:
    return P(x, n-1, s)
            return v[n-1] + suma_divizibile_cu_3(v, n-1)
  # Citire date de intrare
        else:
n = int(input())
            return suma_divizibile_cu_3(v, n-1)
# Verificare restricții date de intrare
#Funcția principală:
if n <= 0 or n > 100:
  def main():
    print("Datele de intrare nu corespund restricțiilor impuse.")
    #Funcția principală care citește datele de intrare și afișează rezultatul sau un mesaj de eroare.
else:
    try:
     print("Datele de intrare corespund restricțiilor impuse.")
        n = int(input("Introduceți numărul de elemente din tablou: "))
     x = []
        if not validare_natural(n) or not validare_dimensiune_tablou(n):
     for i in range(n):
            raise ValueError
        x.append(int(input()))
        v = []
     # Apelare funcție și afișare rezultat
        for i in range(n):
     s = P(x, n)
            x = int(input(f"Introduceți elementul {i+1}: "))
     print(s)
            v.append(x)
        print("Datele de intrare corespund restricțiilor impuse.")
        print(f"Suma elementelor din tablou care sunt divizibile cu 3 este: {suma_divizibile_cu_3(v, n)}")
     except ValueError:
        print("Datele de intrare nu corespund restricțiilor impuse.")
#Funcția de validare:
def validare_natural(n):
    #Verifică dacă un număr este natural nenul (n > 0).
     #Returnează True dacă este, False în caz contrar.
     return n > 0
def validare_dimensiune_tablou(n):
    #Verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului).
     #Returnează True dacă este, False în caz contrar.
     return n <= 100
#Funcția de rezolvare:
def suma_prime(x, n, s=0, i=0):
    #Calculează suma elementelor prime dintr-un tablou unidimensional.
    #Parametri:
     x: tabloul unidimensional (list)
    n: numărul de elemente din tablou (int)
    s: suma elementelor prime din tabl

Revision as of 10:49, 25 March 2023

Cerinţa

Scrieți definiția completă a subprogramului recursiv P care primeşte prin intermediul parametrului n un număr natural nenul (n≤100), iar prin intermediul parametrului x un tablou unidimensional cu n componente întregi, de maximum șase cifre fiecare. Subprogramul furnizează prin intermediul parametrului s suma elementelor din tabloul x care au valori numere prime.

Date de intrare

Se va introduce de la tastatură un număr natural care va fi transmis ca perimetru

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

0 < n ≤ 100 numele subprogramului cerut este P parametrii sunt, în această ordine: x, n, s elementele vectorului x sunt indexate de la zero se recomandă realizarea unei soluții recursive

Exemplu

Dacă n=6 și x=(12, 7, 6, 3, 8, 5), după apel s=15.

Important

Soluţia propusă va conţine definiţia subprogramului cerut și eventual al altor subprograme, apelate de acesta. 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

  1. Funcția de validare:
def validare_natural(n):
   Verifică dacă un număr este natural nenul (n > 0).
   Returnează True dacă este, False în caz contrar.
   return n > 0
def validare_dimensiune_tablou(n):
   Verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului).
   Returnează True dacă este, False în caz contrar.
   return n <= 100
  1. Funcția de rezolvare:
def suma_divizibile_cu_3(v, n):
   #Calculează suma elementelor dintr-un tablou unidimensional care sunt divizibile cu 3.
   #Parametri:
   v: tabloul unidimensional (list)
   n: numărul efectiv de elemente din tablou (int)
   #Returnează suma elementelor din tabloul v care sunt divizibile cu 3 (int).
   if n == 0:
       return 0
   else:
       if v[n-1] % 3 == 0:
           return v[n-1] + suma_divizibile_cu_3(v, n-1)
       else:
           return suma_divizibile_cu_3(v, n-1)
  1. Funcția principală:
def main():
   #Funcția principală care citește datele de intrare și afișează rezultatul sau un mesaj de eroare.
   try:
       n = int(input("Introduceți numărul de elemente din tablou: "))
       if not validare_natural(n) or not validare_dimensiune_tablou(n):
           raise ValueError
       v = []
       for i in range(n):
           x = int(input(f"Introduceți elementul {i+1}: "))
           v.append(x)
       print("Datele de intrare corespund restricțiilor impuse.")
       print(f"Suma elementelor din tablou care sunt divizibile cu 3 este: {suma_divizibile_cu_3(v, n)}")
   except ValueError:
       print("Datele de intrare nu corespund restricțiilor impuse.")
  1. Funcția de validare:
def validare_natural(n):
   #Verifică dacă un număr este natural nenul (n > 0).
   #Returnează True dacă este, False în caz contrar.
   return n > 0
def validare_dimensiune_tablou(n):
   #Verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului).
   #Returnează True dacă este, False în caz contrar.
   return n <= 100
  1. Funcția de rezolvare:
def suma_prime(x, n, s=0, i=0):
   #Calculează suma elementelor prime dintr-un tablou unidimensional.
   #Parametri:
   x: tabloul unidimensional (list)
   n: numărul de elemente din tablou (int)
   s: suma elementelor prime din tabl