0277 - Vârfuri: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 10 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 9: Linia 9:


== Date de ieșire ==  
== Date de ieșire ==  
Acest program primește un număr întreg '''n''' și o listă a cu n elemente întregi. Scopul său este de a calcula suma elementelor din lista a care sunt considerate a fi vârfuri. Un vârf este definit ca fiind un element care este strict mai mare decât ambele elemente adiacente la el.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor", apoi pe un rand nou programul afișează pe ecran numărul S, reprezentând suma elementelor din şir care sunt vârfuri. În caz contrar, se va afișa mesajul: "Datele introduse nu corespund cerintelor."
 
În primul rând, funcția validate_input verifică dacă numărul de elemente este între '''1 și 1000''' și dacă fiecare element din listă are '''cel mult 4 cifre'''. Dacă aceste condiții nu sunt îndeplinite, funcția returnează False, ceea ce înseamnă că programul nu poate continua și se afișează un mesaj de eroare corespunzător.
 
În caz contrar, funcția '''calculate_sum_of_peaks''' este apelată cu numărul de elemente și lista verificate anterior ca argumente. Această funcție parcurge lista și verifică dacă fiecare element este un vârf, adică dacă elementul este mai mare decât elementele adiacente. Dacă da, atunci elementul este adăugat la suma.
 
La sfârșit, suma este afișată.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Linia 23: Linia 17:
== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: Introduceti numarul de elemente: 7
: Introduceti elementele separate prin spatiu: 3 8 4 4 1 9 1
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse corespund cerintelor.  
: 576
: 17
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 16
: Introduceti numarul de elemente: 0
; Ieșire
; Ieșire
: Datele introduse nu corespund cerințelor.
: Datele introduse nu corespund cerintelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
: Datele corespund cerințelor.
: 25401600
<br>
<br>


Linia 46: Linia 34:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#0277
#0277
def validate_input(n, a):
def validate_input(n, elemente):
     if not 1 <= n <= 1000:
     if not 1 <= n <= 1000:
         print("Numarul de elemente trebuie sa fie intre 1 si 1000.")
         print("Datele introduse nu corespund cerintelor.")
         return False
         return False
     for x in a:
     for x in elemente:
         if not 0 <= x <= 9999:
         if not 0 <= x <= 9999:
             print("Toate elementele trebuie sa aiba cel mult 4 cifre.")
             print("Datele introduse nu corespund cerintelor.")
             return False
             return False
     return True
     return True




def calculate_sum_of_peaks(n, a):
def calculate_sum_of_peaks(n, elemente):
     suma = 0
     suma = 0
     for i in range(1, n-1):
     for i in range(1, n-1):
         if a[i] > a[i-1] and a[i] > a[i+1]:
         if elemente[i] > elemente[i - 1] and elemente[i] > elemente[i + 1]:
             suma += a[i]
             suma += elemente[i]
     return suma
     return suma


Linia 67: Linia 55:
if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceti numarul de elemente: "))
     n = int(input("Introduceti numarul de elemente: "))
     a = list(map(int, input("Introduceti elementele separate prin spatiu: ").split()))
     elemente = list(map(int, input("Introduceti elementele separate prin spatiu: ").split()))


     if validate_input(n, a):
     if validate_input(n, elemente):
         suma = calculate_sum_of_peaks(n, a)
         suma = calculate_sum_of_peaks(n, elemente)
         print("Suma elementelor care sunt varfuri este:", suma)
         print("Datele introduse corespund cerintelor.\n",suma)


</syntaxhighlight>


</syntaxhighlight>
==Explicatie rezolvare==
Acest program calculează suma elementelor dintr-o listă care sunt considerate "vârfuri", adică elemente care sunt mai mari decât elementele din dreapta și stânga lor.
 
În funcția `validate_input()`, se verifică dacă numărul de elemente este între 1 și 1000 și dacă toate elementele din listă au cel mult 4 cifre. În caz contrar, se afișează un mesaj de eroare și se returnează False.
 
În funcția `calculate_sum_of_peaks()`, se iterează prin elementele listei și se verifică dacă un element este mai mare decât elementele din stânga și din dreapta. Dacă este, atunci se adaugă la suma totală.
 
În funcția principală, se citesc numărul de elemente și elementele în sine de la tastatură și se verifică dacă acestea sunt valide folosind funcția `validate_input()`. Dacă sunt valide, se calculează suma vârfurilor utilizând funcția `calculate_sum_of_peaks()` și se afișează rezultatul.

Versiunea curentă din 26 aprilie 2023 17:11

Sursa: [1]

Cerinţa

Într-un şir de numere naturale se numeşte vârf un element care are doi vecini şi este strict mai mare decât aceştia.

Se dă un şir cu n elemente, numere naturale. Calculaţi suma elementelor din şir care sunt vârfuri.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi cele n numere naturale, separate prin spaţii.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse corespund cerintelor", apoi pe un rand nou programul afișează pe ecran numărul S, reprezentând suma elementelor din şir care sunt vârfuri. În caz contrar, se va afișa mesajul: "Datele introduse nu corespund cerintelor."

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1000
  • cele n numere citite vor avea cel mult 4 cifre.

Exemplul 1

Intrare
Introduceti numarul de elemente: 7
Introduceti elementele separate prin spatiu: 3 8 4 4 1 9 1
Ieșire
Datele introduse corespund cerintelor.
17


Exemplul 2

Intrare
Introduceti numarul de elemente: 0
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare

#0277
def validate_input(n, elemente):
    if not 1 <= n <= 1000:
        print("Datele introduse nu corespund cerintelor.")
        return False
    for x in elemente:
        if not 0 <= x <= 9999:
            print("Datele introduse nu corespund cerintelor.")
            return False
    return True


def calculate_sum_of_peaks(n, elemente):
    suma = 0
    for i in range(1, n-1):
        if elemente[i] > elemente[i - 1] and elemente[i] > elemente[i + 1]:
            suma += elemente[i]
    return suma


if __name__ == '__main__':
    n = int(input("Introduceti numarul de elemente: "))
    elemente = list(map(int, input("Introduceti elementele separate prin spatiu: ").split()))

    if validate_input(n, elemente):
        suma = calculate_sum_of_peaks(n, elemente)
        print("Datele introduse corespund cerintelor.\n",suma)

Explicatie rezolvare

Acest program calculează suma elementelor dintr-o listă care sunt considerate "vârfuri", adică elemente care sunt mai mari decât elementele din dreapta și stânga lor.

În funcția `validate_input()`, se verifică dacă numărul de elemente este între 1 și 1000 și dacă toate elementele din listă au cel mult 4 cifre. În caz contrar, se afișează un mesaj de eroare și se returnează False.

În funcția `calculate_sum_of_peaks()`, se iterează prin elementele listei și se verifică dacă un element este mai mare decât elementele din stânga și din dreapta. Dacă este, atunci se adaugă la suma totală.

În funcția principală, se citesc numărul de elemente și elementele în sine de la tastatură și se verifică dacă acestea sunt valide folosind funcția `validate_input()`. Dacă sunt valide, se calculează suma vârfurilor utilizând funcția `calculate_sum_of_peaks()` și se afișează rezultatul.