0359 - Gard: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
 
(11 intermediate revisions by 2 users not shown)
Line 13: Line 13:
Programul afișează pe ecran numărul '''T''', reprezentând numărul de blocuri de piatră noi necesare pentru renovarea gardului.
Programul afișează pe ecran numărul '''T''', reprezentând numărul de blocuri de piatră noi necesare pentru renovarea gardului.


Dacă datele sunt introduse corect, programul va rula.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează numărul de blocuri de piatră necesare pentru renovarea gardului.  


În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: ''' "Datele nu corespund restricțiilor impuse.".'''
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Line 23: Line 23:


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Date de intrare:
: Introdu numarul de stalpi:
: 5
: 5
: 7 5 6 8 2
: 7 5 6 8 2
; Ieșire
; Date de ieșire:
: 12
:Datele sunt introduse corect.
: Numărul de blocuri necesare este: 12
<br>
<br>


Line 33: Line 35:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#0359
#0359
def validate(n, heights):
    if n < 1 or n > 1000:
        raise ValueError("Datele nu corespund restricțiilor impuse.")
    if len(heights) != n:
        raise ValueError("Datele nu corespund restricțiilor impuse.")
    for h in heights:
        if h < 0 or h > 100:
            raise ValueError("Datele nu corespund restricțiilor impuse.")
    print("Datele sunt introduse corect.")
def calculate_needed_blocks(heights):
def calculate_needed_blocks(heights):
     max_height = max(heights)
     max_height = max(heights)
     return sum(max_height - h for h in heights)
     return sum(max_height - h for h in heights)
def read_heights(n):
    heights = list(map(int, input().split()))
    if len(heights) != n:
        raise ValueError("Input must contain exactly {} heights".format(n))
    for h in heights:
        if h < 0 or h > 100:
            raise ValueError("Height must be between 0 and 100")
    return heights


if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introdu numarul de stalpi: "))
     n = int(input("Introdu numărul de stâlpi: "))
     if n < 1 or n > 1000:
     heights = list(map(int, input("Introdu înălțimile stâlpilor, separate prin spații: ").split()))
         raise ValueError("Number of posts must be between 1 and 1000")
    try:
    heights = read_heights(n)
        validate(n, heights)
    except ValueError as e:
         print(e)
        exit()
     needed_blocks = calculate_needed_blocks(heights)
     needed_blocks = calculate_needed_blocks(heights)
     print(needed_blocks)
     print("Numărul de blocuri necesare este:", needed_blocks)
 


</syntaxhighlight>
</syntaxhighlight>
Line 58: Line 65:
'''Explicatie cod:'''
'''Explicatie cod:'''


Această implementare citește înălțimile n stalpilor de gard, verifică dacă acestea sunt între 0 și 100 și apoi calculează numărul de blocuri necesare pentru a crește înălțimea fiecărui stalp până la înălțimea maximă a gardului. Funcția calculate_needed_blocks găsește înălțimea maximă și calculează diferența dintre aceasta și înălțimea fiecărui stalp. Funcția read_heights citeste înălțimile stalpilor, verifică numărul de intrări și dacă înălțimea fiecărui stalp se încadrează în intervalul specificat. In structura if __name__ == '__main__': se citeste n, se valideaza si se apeleaza functiile pentru a afisa numarul de blocuri necesare.
Acest cod implementează o funcție de validare a datelor de intrare, care primește un număr întreg n și o listă de întregi heights. Dacă n nu se află în intervalul [1, 1000] sau lungimea listei heights nu este egală cu n, sau oricare dintre valorile din heights se află în afara intervalului [0, 100], funcția aruncă o excepție ValueError cu un mesaj corespunzător. Dacă datele de intrare sunt validate cu succes, funcția afișează un mesaj de confirmare.
 
Funcția calculate_needed_blocks primește lista heights și calculează numărul total de blocuri necesare pentru a egala înălțimea stâlpilor. Se determină înălțimea maximă a stâlpilor și se scade înălțimea fiecărui stâlp din această valoare maximă. Rezultatul reprezintă numărul de blocuri necesare.
 
În blocul if __name__ == '__main__':, se citesc datele de intrare utilizând funcția input(), apoi se încearcă validarea lor folosind funcția validate. Dacă datele sunt validate cu succes, se calculează numărul de blocuri necesare utilizând funcția calculate_needed_blocks, apoi se afișează rezultatul. Dacă se aruncă o excepție ValueError în timpul validării, se afișează mesajul de eroare corespunzător și se oprește programul.

Latest revision as of 17:33, 29 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

Parcul orașului este înconjurat cu un gard format din n stâlpi formați din blocuri de piatră suprapuse. La început, toți stâlpii aveau aceeași înălțime, dar în timp s-au deteriorat, pierzându-se de la unii stâlpi unele blocuri de piatră.

Primarul orașului dorește să renoveze gardul. Pentru aceasta, s-a determinat înălțimea curentă a fiecărui stâlp și se vor completa cu blocuri de piatră noi stâlpii deteriorați, astfel încât toți stâlpii să aibă aceeași înălțime.

Determinați numărul de blocuri de piatră necesare pentru renovarea gardului.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul de stâlpi n, iar apoi n numere naturale, separate prin spaţii, reprezentând înălțimea curentă a fiecărui stâlp.

Date de ieșire[edit | edit source]

Programul afișează pe ecran numărul T, reprezentând numărul de blocuri de piatră noi necesare pentru renovarea gardului.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează numărul de blocuri de piatră necesare pentru renovarea gardului.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări[edit | edit source]

1 ≤ n ≤ 1000

fiecare stâlp va avea înălțimea între 0 și 100

Exemplul 1[edit | edit source]

Date de intrare
Introdu numarul de stalpi:
5
7 5 6 8 2
Date de ieșire
Datele sunt introduse corect.
Numărul de blocuri necesare este: 12


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0359

def validate(n, heights):

   if n < 1 or n > 1000:
       raise ValueError("Datele nu corespund restricțiilor impuse.")
   if len(heights) != n:
       raise ValueError("Datele nu corespund restricțiilor impuse.")
   for h in heights:
       if h < 0 or h > 100:
           raise ValueError("Datele nu corespund restricțiilor impuse.")
   print("Datele sunt introduse corect.")

def calculate_needed_blocks(heights):

   max_height = max(heights)
   return sum(max_height - h for h in heights)

if __name__ == '__main__':

   n = int(input("Introdu numărul de stâlpi: "))
   heights = list(map(int, input("Introdu înălțimile stâlpilor, separate prin spații: ").split()))
   try:
       validate(n, heights)
   except ValueError as e:
       print(e)
       exit()
   needed_blocks = calculate_needed_blocks(heights)
   print("Numărul de blocuri necesare este:", needed_blocks)


</syntaxhighlight>

Explicatie cod:

Acest cod implementează o funcție de validare a datelor de intrare, care primește un număr întreg n și o listă de întregi heights. Dacă n nu se află în intervalul [1, 1000] sau lungimea listei heights nu este egală cu n, sau oricare dintre valorile din heights se află în afara intervalului [0, 100], funcția aruncă o excepție ValueError cu un mesaj corespunzător. Dacă datele de intrare sunt validate cu succes, funcția afișează un mesaj de confirmare.

Funcția calculate_needed_blocks primește lista heights și calculează numărul total de blocuri necesare pentru a egala înălțimea stâlpilor. Se determină înălțimea maximă a stâlpilor și se scade înălțimea fiecărui stâlp din această valoare maximă. Rezultatul reprezintă numărul de blocuri necesare.

În blocul if __name__ == '__main__':, se citesc datele de intrare utilizând funcția input(), apoi se încearcă validarea lor folosind funcția validate. Dacă datele sunt validate cu succes, se calculează numărul de blocuri necesare utilizând funcția calculate_needed_blocks, apoi se afișează rezultatul. Dacă se aruncă o excepție ValueError în timpul validării, se afișează mesajul de eroare corespunzător și se oprește programul.