1847 - VectorSumPrim REC: Difference between revisions

From Bitnami MediaWiki
mNo edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Cerinţa==
==Cerinţa==
Scrieți definiția completă a subprogramului recursiv P care primeşte prin intermediul parametrului <code>n</code> un număr natural nenul (n≤100), iar prin intermediul parametrului <code>x</code> un tablou unidimensional cu <code>n</code> componente întregi, de maximum șase cifre fiecare.
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 <code>x</code> care au valori numere prime.
Subprogramul furnizează prin intermediul parametrului s suma elementelor din tabloul x care au valori numere prime.


==Date de intrare==
==Date de intrare==
Line 7: Line 7:


==Date de ieșire==
==Date de ieșire==
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
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".
Î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==
==Restricţii şi precizări==
0 < n ≤ 100
*0 < n ≤ 100
numele subprogramului cerut este P
*numele subprogramului cerut este P
parametrii sunt, în această ordine: x, n, s
*parametrii sunt, în această ordine: x, n, s
elementele vectorului x sunt indexate de la zero
*elementele vectorului x sunt indexate de la zero
se recomandă realizarea unei soluții recursive
*se recomandă realizarea unei soluții recursive


==Exemplu==
==Exemplu==
Dacă n=6 și x=(12, 7, 6, 3, 8, 5), după apel s=15.
===Exemplu 1===
def P(x, n, s=0):
:Intrare:
    if n == 0: # cazul de bază: s-a parcurs întregul vector
;Introduceți numărul de elemente din tablou: 6
        return s
;Introduceți elementul 1: 12
    if este_prim(x[n-1]): # dacă ultimul element este prim, îl adunăm la suma s
;Introduceți elementul 2: 7
        s += x[n-1]
;Introduceți elementul 3: 6
    return P(x, n-1, s)  # apelăm recursiv subprogramul pentru restul vectorului
;Introduceți elementul 4: 3
def este_prim(nr):
;Introduceți elementul 5: 8
    if nr < 2: # 0 și 1 nu sunt prime
;Introduceți elementul 6: 5
        return False
:Iesire:
    if nr == 2 or nr == 3: # 2 și 3 sunt prime
;Datele de intrare corespund restricțiilor impuse.
        return True
;Suma elementelor din tablou care sunt divizibile cu 3 este: 21
    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.


===Exemplu 2===
:Intrare:
;Introduceți numărul de elemente din tablou: 1234
:Iesire:
;Datele de intrare nu corespund restricțiilor impuse.
==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):
<syntaxhighlight lang="python" line="1">
     Verifică dacă un număr este prim.
 
     if n < 2:
def validare_natural(n):
        return False
     return n > 0
    for i in range(2, int(n ** 0.5) + 1):
 
        if n % i == 0:
def validare_dimensiune_tablou(n):
            return False
     return n <= 100
    return True
 
def P(x, n, s=0):
def suma_divizibile_cu_3(v, n):
     Calculează suma elementelor dintr-un tablou care au valori prime.
    return sum(x for x in v if x % 3 == 0)
    if n == 0:
 
         return s
def main():
    if is_prime(x[n-1]):
     try:
        s += x[n-1]
        n = int(input("Introduceți numărul de elemente din tablou: "))
    return P(x, n-1, s)
         if not validare_natural(n) or not validare_dimensiune_tablou(n):
# Citire date de intrare
            raise ValueError
n = int(input())
        v = [int(input(f"Introduceți elementul {i+1}: ")) for i in range(n)]
# Verificare restricții date de intrare
        print("Datele de intrare corespund restricțiilor impuse.")
if n <= 0 or n > 100:
        print(f"Suma elementelor din tablou care sunt divizibile cu 3 este: {suma_divizibile_cu_3(v, n)}")
    print("Datele de intrare nu corespund restricțiilor impuse.")
     except ValueError:
else:
        print("Datele de intrare nu corespund restricțiilor impuse.")
     print("Datele de intrare corespund restricțiilor impuse.")
 
    x = []
if __name__ == "__main__":
     for i in range(n):
     main()
        x.append(int(input()))
</syntaxhighlight>
    # Apelare funcție și afișare rezultat
 
    s = P(x, n)
==Explicații==
    print(s)
Codul scris este o implementare a cerințelor enunțate în problema de mai sus.
 
Funcția validare_natural verifică dacă un număr este natural nenul (n > 0) și returnează True dacă este, False în caz contrar.
 
Funcția validare_dimensiune_tablou verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului) și returnează True dacă este, False în caz contrar.
 
Funcția suma_divizibile_cu_3 calculează suma elementelor dintr-un tablou unidimensional care sunt divizibile cu 3 și primește ca parametri v - tabloul unidimensional și n - numărul efectiv de elemente din tablou.
 
Funcția main este funcția principală care citește datele de intrare și afișează rezultatul sau un mesaj de eroare. Ea folosește funcțiile de validare și de rezolvare pentru a verifica și procesa datele de intrare.
 
În cadrul funcției main, datele de intrare sunt citite de la tastatură și apoi sunt verificate utilizând funcțiile validare_natural și validare_dimensiune_tablou. Dacă datele de intrare sunt valide, se creează un tablou v care este umplut cu numerele citite de la tastatură și apoi se afișează mesajul "Datele de intrare corespund restricțiilor impuse" și suma elementelor din tablou care sunt divizibile cu 3, calculată utilizând funcția suma_divizibile_cu_3.
 
În caz contrar, dacă datele de intrare nu sunt valide, se afișează mesajul "Datele de intrare nu corespund restricțiilor impuse".

Latest revision as of 21:36, 14 May 2023

Cerinţa[edit | edit source]

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[edit | edit source]

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

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]

  • 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[edit | edit source]

Exemplu 1[edit | edit source]

Intrare:
Introduceți numărul de elemente din tablou
6
Introduceți elementul 1
12
Introduceți elementul 2
7
Introduceți elementul 3
6
Introduceți elementul 4
3
Introduceți elementul 5
8
Introduceți elementul 6
5
Iesire:
Datele de intrare corespund restricțiilor impuse.
Suma elementelor din tablou care sunt divizibile cu 3 este
21

Exemplu 2[edit | edit source]

Intrare:
Introduceți numărul de elemente din tablou
1234
Iesire:
Datele de intrare nu corespund restricțiilor impuse.

Important[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line="1">

def validare_natural(n):

   return n > 0

def validare_dimensiune_tablou(n):

   return n <= 100

def suma_divizibile_cu_3(v, n):

   return sum(x for x in v if x % 3 == 0)

def main():

   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 = [int(input(f"Introduceți elementul {i+1}: ")) for i in range(n)]
       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.")

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicații[edit | edit source]

Codul scris este o implementare a cerințelor enunțate în problema de mai sus.

Funcția validare_natural verifică dacă un număr este natural nenul (n > 0) și returnează True dacă este, False în caz contrar.

Funcția validare_dimensiune_tablou verifică dacă un număr este mai mic sau egal cu 100 (dimensiunea maximă a tabloului) și returnează True dacă este, False în caz contrar.

Funcția suma_divizibile_cu_3 calculează suma elementelor dintr-un tablou unidimensional care sunt divizibile cu 3 și primește ca parametri v - tabloul unidimensional și n - numărul efectiv de elemente din tablou.

Funcția main este funcția principală care citește datele de intrare și afișează rezultatul sau un mesaj de eroare. Ea folosește funcțiile de validare și de rezolvare pentru a verifica și procesa datele de intrare.

În cadrul funcției main, datele de intrare sunt citite de la tastatură și apoi sunt verificate utilizând funcțiile validare_natural și validare_dimensiune_tablou. Dacă datele de intrare sunt valide, se creează un tablou v care este umplut cu numerele citite de la tastatură și apoi se afișează mesajul "Datele de intrare corespund restricțiilor impuse" și suma elementelor din tablou care sunt divizibile cu 3, calculată utilizând funcția suma_divizibile_cu_3.

În caz contrar, dacă datele de intrare nu sunt valide, se afișează mesajul "Datele de intrare nu corespund restricțiilor impuse".