1519 - Dans: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieșire == Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar prog...
 
Sinn Erich (talk | contribs)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
De 1 Iunie – Ziua Copilului se organizează un spectacol de dans cu şi pentru copii. Acesta este programat să se desfăşoare în intervalul orar 10.30 -12.00.
 
În spectacol se înscriu n trupe de dans, iar pentru fiecare trupă se cunoaşte timpul necesar realizării dansului în minute şi numărul de copii din trupa.
 
Cunoscând '''n''', numărul de trupe înscrise, cele n perechi '''(t,c)''' unde '''t''' reprezintă timpul în minute şi '''c''' numărul de copii din trupa scrieţi un program care:
 
a) Verifică dacă toate cele '''n''' echipe înscrise în spectacol se încadrează în timpul alocat spectacolului şi afişează mesajul NU dacă timpul este mai mare decât cel programat, în caz contrar afişează mesajul DA.
b) Calculează cu câte minute este programul incomplet sau depăşit.
c) Calculează câţi copii au fost implicaţi în realizarea spectacolului.
d) Calculează care este cel mai mare şi cel mai mic timp alocat unui dans.
 
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
Pe prima linie a programul se afla '''n''', numărul de trupe înscrise, iar pe următoarele linii cele '''n''' perechi de forma de mai sus.
 
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus.
 
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
 
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
Datele conform cerintelor a) – d) se vor afişa în program, răspunsul fiecărei cerinţe fiind scris pe câte o linie. La punctul d) cele 2 valori se vor despărţi prin spaţiu.
 
Dacă datele sunt introduse corect, programul va rula.
 
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: ''' "Datele nu corespund restricțiilor impuse.".'''


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
 
1 ≤ '''n''' ≤ 100
 
5 ≤ '''t''' ≤ 15


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare:
: 4
: Introduceți numărul de trupe:
; Ieșire
: 8
: Datele corespund cerințelor.
: Introduceți timpul și numărul de copii pentru trupa 1 (în această ordine):
: 576
:10 6
: Introduceți timpul și numărul de copii pentru trupa 2 (în această ordine):
:8 5
: Introduceți timpul și numărul de copii pentru trupa 3 (în această ordine):
:9 6
: Introduceți timpul și numărul de copii pentru trupa 4 (în această ordine):
:12 10
: Introduceți timpul și numărul de copii pentru trupa 5 (în această ordine):
:10 12
: Introduceți timpul și numărul de copii pentru trupa 6 (în această ordine):
:5 6
: Introduceți timpul și numărul de copii pentru trupa 7 (în această ordine):
:7 8
: Introduceți timpul și numărul de copii pentru trupa 8 (în această ordine):
:9 8
; Datele de ieșire:
: Datele sunt introduse corect.
: DA
: Programul este incomplet sau depășit cu 20 minute
: Numărul total de copii implicați este: 61
: Cel mai mare timp alocat unui dans este: 12
: Cel mai mic timp alocat unui dans este: 5
<br>
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#1519
def patrate_perfecte(n):
def read_input(n):
     patrate = []
     """
     i = 1
    Citeste datele de intrare pentru cele n trupe si returneaza o lista de tuple (t, c)
    while len(patrate) < n:
    reprezentand timpul si numarul de copii pentru fiecare trupa.
         patrat = i * i
    """
         patrate.append(patrat)
    trupe = []
        i += 1
     for i in range(n):
     return patrate
         t, c = map(int, input(
            f"Introduceți timpul și numărul de copii pentru trupa {i + 1} (în această ordine): ").split())
         trupe.append((t, c))
     return trupe


def compute_statistics(trupe):
    """
    Calculeaza si returneaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si
    numarul total de copii implicati in spectacol.
    """
    total_time = sum(t for t, c in trupe)
    max_time = max(t for t, c in trupe)
    min_time = min(t for t, c in trupe)
    total_kids = sum(c for t, c in trupe)
    return total_time, max_time, min_time, total_kids
def print_statistics(total_time, max_time, min_time, total_kids):
    """
    Afiseaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si numarul total
    de copii implicati in spectacol.
    """
    if total_time > 90:
        print("Datele introduse sunt corecte.")
        print("NU")
    else:
        print("Datele introduse sunt corecte.")
        print("DA")
    minutes_incomplete_or_exceeded = abs(90 - total_time)


def calculeaza(numbers):
    print("Programul este incomplet sau depășit cu {} minute".format(minutes_incomplete_or_exceeded))
     product = 1
     print("Numărul total de copii implicați este:", total_kids)
     for number in numbers:
     print("Cel mai mare timp alocat unui dans este:", max_time)
        product *= number
     print("Cel mai mic timp alocat unui dans este:", min_time)
     return product


if __name__ == '__main__':
    n = int(input("Introduceți numărul de trupe: "))
    if not 1 <= n <= 100:
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    trupe = read_input(n)
    total_time, max_time, min_time, total_kids = compute_statistics(trupe)
    print_statistics(total_time, max_time, min_time, total_kids)


def validare_numar(n):
    if n < 1 or n > 10:
        return False
    return True




if __name__ == '__main__':
    n = int(input("Introduceți numărul n: "))
    if not validare_numar(n):
        print("Datele introduse nu corespund cerintelor.")
    else:
        squares = patrate_perfecte(n)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
        print(product)




</syntaxhighlight>
</syntaxhighlight>
'''Explicatie cod:'''
Acest cod este împărțit în trei funcții: read_input(n), compute_statistics(trupe) și print_statistics(total_time, max_time, min_time, total_kids).
Funcția read_input(n) primește numărul n de trupe și citește de la tastatură timpul și numărul de copii pentru fiecare trupă, creând o listă de tuple care conține aceste informații pentru fiecare trupă. Această listă este returnată.
Funcția compute_statistics(trupe) primește lista de tuple creată de funcția read_input(n) și calculează timpul total, cel mai mare și cel mai mic timp alocat unui dans și numărul total de copii implicați în spectacol. Aceste informații sunt returnate sub formă de tuple.
Funcția print_statistics(total_time, max_time, min_time, total_kids) primește informațiile calculate de funcția compute_statistics(trupe) și le afișează în formatul specificat, împreună cu un răspuns "DA" sau "NU" în funcție de faptul că timpul total este mai mic sau mai mare decât 90 de minute.
În programul principal, utilizatorul este întâi întrebat să introducă numărul de trupe. Apoi, se apelează funcția read_input(n) pentru a citi informațiile pentru fiecare trupă și a crea lista de tuple corespunzătoare. Această listă este apoi pasată funcției compute_statistics(trupe), care calculează informațiile necesare și le returnează sub formă de tuple. Această tuplă este apoi pasată funcției print_statistics(total_time, max_time, min_time, total_kids), care afișează informațiile în formatul specificat.

Latest revision as of 07:01, 27 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

De 1 Iunie – Ziua Copilului se organizează un spectacol de dans cu şi pentru copii. Acesta este programat să se desfăşoare în intervalul orar 10.30 -12.00.

În spectacol se înscriu n trupe de dans, iar pentru fiecare trupă se cunoaşte timpul necesar realizării dansului în minute şi numărul de copii din trupa.

Cunoscând n, numărul de trupe înscrise, cele n perechi (t,c) unde t reprezintă timpul în minute şi c numărul de copii din trupa scrieţi un program care:

a) Verifică dacă toate cele n echipe înscrise în spectacol se încadrează în timpul alocat spectacolului şi afişează mesajul NU dacă timpul este mai mare decât cel programat, în caz contrar afişează mesajul DA. b) Calculează cu câte minute este programul incomplet sau depăşit. c) Calculează câţi copii au fost implicaţi în realizarea spectacolului. d) Calculează care este cel mai mare şi cel mai mic timp alocat unui dans.

Date de intrare[edit | edit source]

Pe prima linie a programul se afla n, numărul de trupe înscrise, iar pe următoarele linii cele n perechi de forma de mai sus.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus.

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

Date de ieșire[edit | edit source]

Datele conform cerintelor a) – d) se vor afişa în program, răspunsul fiecărei cerinţe fiind scris pe câte o linie. La punctul d) cele 2 valori se vor despărţi prin spaţiu.

Dacă datele sunt introduse corect, programul va rula.

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

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

1 ≤ n ≤ 100

5 ≤ t ≤ 15

Exemplul 1[edit | edit source]

Datele de intrare
Introduceți numărul de trupe:
8
Introduceți timpul și numărul de copii pentru trupa 1 (în această ordine):
10 6
Introduceți timpul și numărul de copii pentru trupa 2 (în această ordine):
8 5
Introduceți timpul și numărul de copii pentru trupa 3 (în această ordine):
9 6
Introduceți timpul și numărul de copii pentru trupa 4 (în această ordine):
12 10
Introduceți timpul și numărul de copii pentru trupa 5 (în această ordine):
10 12
Introduceți timpul și numărul de copii pentru trupa 6 (în această ordine):
5 6
Introduceți timpul și numărul de copii pentru trupa 7 (în această ordine):
7 8
Introduceți timpul și numărul de copii pentru trupa 8 (în această ordine):
9 8
Datele de ieșire
Datele sunt introduse corect.
DA
Programul este incomplet sau depășit cu 20 minute
Numărul total de copii implicați este: 61
Cel mai mare timp alocat unui dans este: 12
Cel mai mic timp alocat unui dans este: 5


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1519

def read_input(n):

   """
   Citeste datele de intrare pentru cele n trupe si returneaza o lista de tuple (t, c)
   reprezentand timpul si numarul de copii pentru fiecare trupa.
   """
   trupe = []
   for i in range(n):
       t, c = map(int, input(
           f"Introduceți timpul și numărul de copii pentru trupa {i + 1} (în această ordine): ").split())
       trupe.append((t, c))
   return trupe

def compute_statistics(trupe):

   """
   Calculeaza si returneaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si
   numarul total de copii implicati in spectacol.
   """
   total_time = sum(t for t, c in trupe)
   max_time = max(t for t, c in trupe)
   min_time = min(t for t, c in trupe)
   total_kids = sum(c for t, c in trupe)
   return total_time, max_time, min_time, total_kids

def print_statistics(total_time, max_time, min_time, total_kids):

   """
   Afiseaza timpul total, cel mai mare si cel mai mic timp alocat unui dans si numarul total
   de copii implicati in spectacol.
   """
   if total_time > 90:
       print("Datele introduse sunt corecte.")
       print("NU")
   else:
       print("Datele introduse sunt corecte.")
       print("DA")
   minutes_incomplete_or_exceeded = abs(90 - total_time)
   print("Programul este incomplet sau depășit cu {} minute".format(minutes_incomplete_or_exceeded))
   print("Numărul total de copii implicați este:", total_kids)
   print("Cel mai mare timp alocat unui dans este:", max_time)
   print("Cel mai mic timp alocat unui dans este:", min_time)

if __name__ == '__main__':

   n = int(input("Introduceți numărul de trupe: "))
   if not 1 <= n <= 100:
       print("Datele nu corespund restricțiilor impuse.")
       exit()
   trupe = read_input(n)
   total_time, max_time, min_time, total_kids = compute_statistics(trupe)
   print_statistics(total_time, max_time, min_time, total_kids)



</syntaxhighlight>

Explicatie cod:

Acest cod este împărțit în trei funcții: read_input(n), compute_statistics(trupe) și print_statistics(total_time, max_time, min_time, total_kids).

Funcția read_input(n) primește numărul n de trupe și citește de la tastatură timpul și numărul de copii pentru fiecare trupă, creând o listă de tuple care conține aceste informații pentru fiecare trupă. Această listă este returnată.

Funcția compute_statistics(trupe) primește lista de tuple creată de funcția read_input(n) și calculează timpul total, cel mai mare și cel mai mic timp alocat unui dans și numărul total de copii implicați în spectacol. Aceste informații sunt returnate sub formă de tuple.

Funcția print_statistics(total_time, max_time, min_time, total_kids) primește informațiile calculate de funcția compute_statistics(trupe) și le afișează în formatul specificat, împreună cu un răspuns "DA" sau "NU" în funcție de faptul că timpul total este mai mic sau mai mare decât 90 de minute.

În programul principal, utilizatorul este întâi întrebat să introducă numărul de trupe. Apoi, se apelează funcția read_input(n) pentru a citi informațiile pentru fiecare trupă și a crea lista de tuple corespunzătoare. Această listă este apoi pasată funcției compute_statistics(trupe), care calculează informațiile necesare și le returnează sub formă de tuple. Această tuplă este apoi pasată funcției print_statistics(total_time, max_time, min_time, total_kids), care afișează informațiile în formatul specificat.