1030 - Sume Produse: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
No edit summary
Dragos1234 (talk | contribs)
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/1030/sumeproduse]
Sursa: [https://www.pbinfo.ro/probleme/1030/sumeproduse]
== Cerinţa ==
== Cerinţa ==
Se dau n numere naturale, unde '''n''' este număr natural par. Să se calculeze suma produselor dintre fiecare număr din prima jumătate și fiecare număr din a doua jumătate a șirului de numere date.
Se dau '''n''' numere naturale, unde '''n''' este număr natural par. Să se calculeze suma produselor dintre fiecare număr din prima jumătate și fiecare număr din a doua jumătate a șirului de numere date.


== Date de intrare ==
== Date de intrare ==
Line 9: Line 9:
Programul dat mai sus citeste de la utilizator o lista de numere și calculează suma produselor dintre toate perechile de numere din lista, unde primul număr din pereche se află în prima jumătate a listei, iar al doilea număr se află în a doua jumătate a listei.
Programul dat mai sus citeste de la utilizator o lista de numere și calculează suma produselor dintre toate perechile de numere din lista, unde primul număr din pereche se află în prima jumătate a listei, iar al doilea număr se află în a doua jumătate a listei.


Datele de ieșire ale programului sunt o valoare numerică reprezentând suma produselor dintre toate perechile de numere din lista, așa cum a fost descris mai sus. Această valoare este afișată la ieșirea programului.
Datele de ieșire ale programului sunt o valoare numerică reprezentând suma produselor dintre toate perechile de numere din lista, așa cum a fost descris mai sus și mesajul "Datele introduse corespund cerintelor". Această valoare este afișată la ieșirea programului.
 
În cazul în care datele de intrare nu corespund restricțiilor, se va afișa un mesajul "Datele introduse nu corespund cerintelor."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Line 18: Line 20:
; Intrare
; Intrare
: 4
: 4
: 2 3 4 5
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse corespund cerintelor.
: 576
: 45
<br>
<br>


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


Line 40: Line 45:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#1030
#1030
def citeste_numere():
    while True:
        n = int(input("Numar de numere: "))
        if n >= 1 and n <= 100000:
            break
        else:
            print("Eroare: numarul de numere trebuie sa fie intre 1 si 100000.")
    while True:
        numere = input("Numere: ").split()
        if len(numere) == n:
            numere_ok = True
            for numar in numere:
                if int(numar) > 10000:
                    print("Eroare: toate numerele trebuie sa fie mai mici sau egale cu 10000.")
                    numere_ok = False
                    break
            if numere_ok:
                return numere
        else:
            print("Eroare: trebuie introduse exact", n, "numere.")
def calculeaza_suma_produse(numere):
def calculeaza_suma_produse(numere):
     suma = 0
     suma = 0
Line 74: Line 56:
             suma += produs
             suma += produs
     return suma
     return suma
def valideaza_datele(n, numere):
    if not (1 <= n <= 100000):
        print("Datele introduse nu corespund cerintelor.")
        return False
    elif len(numere) != n:
        print("Datele introduse nu corespund cerintelor.")
        return False
    else:
        for numar in numere:
            if int(numar) > 10000:
                print("Datele introduse nu corespund cerintelor.")
                return False
    return True




if __name__ == '__main__':
if __name__ == '__main__':
     numere = citeste_numere()
     while True:
        n = int(input("Numar de numere: "))
        numere = input("Șirul de numere: ").split()
        if valideaza_datele(n, numere):
            break
 
    print("Datele introduse corespund cerintelor.")
     suma = calculeaza_suma_produse(numere)
     suma = calculeaza_suma_produse(numere)
     print(suma)
     print(suma)


</syntaxhighlight>
</syntaxhighlight>
==Explicatie rezolvare==
Acest program calculează suma produselor a două numere dintr-un șir dat de numere. Programul are două funcții principale:
1. Funcția "calculeaza_suma_produse" primește ca argument un șir de numere și calculează suma produselor a două numere din șirul respectiv. În primul for loop, parcurgem toate numerele din prima jumătate a șirului și în al doilea for loop, parcurgem toate numerele din a doua jumătate a șirului. Pentru fiecare pereche de numere, calculăm produsul lor și îl adăugăm la suma totală. La final, funcția returnează suma.
2. Funcția "valideaza_datele" primește ca argument un număr "n" și un șir de numere și verifică dacă datele introduse sunt valide. Se verifică dacă numărul "n" se află în intervalul [1, 100000], dacă lungimea șirului este egală cu "n" și dacă toate numerele din șir sunt mai mici sau egale cu 10000. Dacă toate aceste verificări trec, funcția returnează True, altfel returnează False și afișează un mesaj de eroare.
În cadrul funcției principale "if __name__ == '__main__':", programul primește datele de intrare de la utilizator prin intermediul funcției "input". Se citește întâi numărul "n", apoi șirul de numere. Înainte de a apela funcția "calculeaza_suma_produse", se validează datele introduse folosind funcția "valideaza_datele". Dacă datele sunt valide, se calculează suma produselor și se afișează rezultatul.

Latest revision as of 16:42, 12 May 2023

Sursa: [1]

Cerinţa[edit | edit source]

Se dau n numere naturale, unde n este număr natural par. Să se calculeze suma produselor dintre fiecare număr din prima jumătate și fiecare număr din a doua jumătate a șirului de numere date.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Programul dat mai sus citeste de la utilizator o lista de numere și calculează suma produselor dintre toate perechile de numere din lista, unde primul număr din pereche se află în prima jumătate a listei, iar al doilea număr se află în a doua jumătate a listei.

Datele de ieșire ale programului sunt o valoare numerică reprezentând suma produselor dintre toate perechile de numere din lista, așa cum a fost descris mai sus și mesajul "Datele introduse corespund cerintelor". Această valoare este afișată la ieșirea programului.

În cazul în care datele de intrare nu corespund restricțiilor, se va afișa un mesajul "Datele introduse nu corespund cerintelor."

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

  • 1 ⩽ n ⩽ 100.000
  • cele n numere citite vor fi mai mici sau egale cu 10.000

Exemplul 1[edit | edit source]

Intrare
4
2 3 4 5
Ieșire
Datele introduse corespund cerintelor.
45


Exemplul 2[edit | edit source]

Intrare
0
0
Ieșire
Datele introduse nu corespund cerintelor.


Exemplul 3[edit | edit source]

Intrare
2
1000000000 45
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1030

def calculeaza_suma_produse(numere):

   suma = 0
   # parcurgem toate numerele din prima jumatate a sirului
   for i in range(len(numere)//2):
       # parcurgem toate numerele din a doua jumatate a sirului
       for j in range(len(numere)//2, len(numere)):
           # calculam produsul dintre cele doua numere curente
           produs = int(numere[i]) * int(numere[j])
           # adaugam produsul la suma totala
           suma += produs
   return suma


def valideaza_datele(n, numere):

   if not (1 <= n <= 100000):
       print("Datele introduse nu corespund cerintelor.")
       return False
   elif len(numere) != n:
       print("Datele introduse nu corespund cerintelor.")
       return False
   else:
       for numar in numere:
           if int(numar) > 10000:
               print("Datele introduse nu corespund cerintelor.")
               return False
   return True


if __name__ == '__main__':

   while True:
       n = int(input("Numar de numere: "))
       numere = input("Șirul de numere: ").split()
       if valideaza_datele(n, numere):
           break
   print("Datele introduse corespund cerintelor.")
   suma = calculeaza_suma_produse(numere)
   print(suma)


</syntaxhighlight>

Explicatie rezolvare[edit | edit source]

Acest program calculează suma produselor a două numere dintr-un șir dat de numere. Programul are două funcții principale:

1. Funcția "calculeaza_suma_produse" primește ca argument un șir de numere și calculează suma produselor a două numere din șirul respectiv. În primul for loop, parcurgem toate numerele din prima jumătate a șirului și în al doilea for loop, parcurgem toate numerele din a doua jumătate a șirului. Pentru fiecare pereche de numere, calculăm produsul lor și îl adăugăm la suma totală. La final, funcția returnează suma.

2. Funcția "valideaza_datele" primește ca argument un număr "n" și un șir de numere și verifică dacă datele introduse sunt valide. Se verifică dacă numărul "n" se află în intervalul [1, 100000], dacă lungimea șirului este egală cu "n" și dacă toate numerele din șir sunt mai mici sau egale cu 10000. Dacă toate aceste verificări trec, funcția returnează True, altfel returnează False și afișează un mesaj de eroare.

În cadrul funcției principale "if __name__ == '__main__':", programul primește datele de intrare de la utilizator prin intermediul funcției "input". Se citește întâi numărul "n", apoi șirul de numere. Înainte de a apela funcția "calculeaza_suma_produse", se validează datele introduse folosind funcția "valideaza_datele". Dacă datele sunt valide, se calculează suma produselor și se afișează rezultatul.