0516 - SumSec1: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
Pagină nouă: Sursa: https://www.pbinfo.ro/probleme/516/sumsec1 0516 - SumSec1] ---- == Cerinţa == Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar. == Date de intrare == Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului. == Date de ieșire == Programul va fișa pe ecran numărul S, reprezentând suma calculată. == Restricţii şi precizări == * 1 ≤ n...
 
 
(13 intermediate revisions by 2 users not shown)
Line 6: Line 6:
Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.
Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.
== Date de ieșire ==  
== Date de ieșire ==  
Programul va fișa pe ecran numărul S, reprezentând suma calculată.
Dacă datele sunt introduse corect, pe ecran se va afișa:
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''va fișa pe ecran numărul S, reprezentând suma calculată''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''.
 
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ≤ n ≤ 1000
* 1 ≤ n ≤ 1000
* elementele vectorului vor fi mai mici decât 1.000.000
* elementele vectorului vor fi mai mici decât 1.000.000
* vectorul va conţine cel puțin un element impar
* vectorul va conţine cel puțin un element impar
== Exemplu ==
== Exemplu 1 ==
; Intrare
; Intrare
:8
:  Introduceti valoarea lui n: 8
: 12 10 15 6 7 10 19 14
: 12 10 15 6 7 10 19 14
; Ieșire
; Ieșire
: Datele sunt introduse correct.
: 5 4
: 5 4
== Exemplu 2 ==
; Intrare
: Introduceti valoarea lui n: 4
: 2 4 6 8
; Ieșire
: Datele nu corespund restricțiilor impuse.


== Rezolvare ==  
== Rezolvare ==  
=== Rezolvare ver. 1 ===
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 0516 - SumSec1
# 0516 - SumSec1


n = int(input("Introduceți numărul de elemente din vector: "))
def validate_input(n, vector):
v = list(map(int, input("Introduceți elementele vectorului: ").split()))
    if n < 1 or n > 1000:
        print("Datele nu corespund restricțiilor impuse.")
        return False


# Căutăm primul și ultimul element impar din vector
    has_odd = False
first_odd = -1
    for i in range(n):
last_odd = -1
        if vecror[i] < 0 or vector[i] >= 1000000:
for i in range(n):
            print("Datele nu corespund restricțiilor impuse.")
    if v[i] % 2 == 1:
            return False
         if first_odd == -1:
         if vector[i] % 2 == 1:
             first_odd = i
             has_odd = True
         last_odd = i
   
    if not has_odd:
        print("Datele nu corespund restricțiilor impuse.")
         return False


# Calculăm suma elementelor din secvența dată
    print("Datele sunt introduse corect.")
sum = 0
    return True
if first_odd != -1 and last_odd != -1:
 
     for i in range(first_odd, last_odd + 1):
 
         sum += v[i]
def calculate_sum(n, v):
    start = None
    end = None
 
     for i in range(n):
         if vector[i] % 2 == 1:
            if start is None:
                start = i
            else:
                end = i
 
    return sum(vector[start:end+1])
 
 
if __name__ == "__main__":
    n = int(input("Introduceti valoarea lui n: "))
    vector = list(map(int, input("Introduceti valorile din vector: ").split()))
 
    if not validate_input(n, vector):
        exit()
 
    print(calculate_sum(n, vector))


# Afisăm suma
print(sum)
</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare==
 
Funcția validate_input primește patru argumente: n, vector, A și B. Această funcție are rolul de a valida datele de intrare. Verificările pe care le face includ verificarea dacă n se încadrează în intervalul [1, 1000], dacă fiecare element al vectorului vector se încadrează în intervalul [1, 1.000.000], dacă vectorul vector conține cel puțin un element impar și dacă A și B se încadrează în intervalul [1, 2.000.000.000] și dacă A este mai mic sau egal cu B. Dacă toate verificările trec, atunci funcția afișează pe ecran "Datele sunt introduse corect." și returnează True. În caz contrar, funcția afișează pe ecran "Datele nu corespund restricțiilor impuse." și returnează False.
Funcția sum_secventa primește trei argumente: n, vector și valid. Această funcție calculează suma elementelor din secvența determinată de primul și ultimul element impar din vectorul vector. Dacă parametrul valid este False, adică datele de intrare nu au trecut validarea, funcția afișează pe ecran "Datele nu corespund restricțiilor impuse." și returnează None. În caz contrar, funcția calculează prima și ultima poziție cu numere impare în vectorul vector, apoi calculează suma elementelor din secvența respectivă și afișează pe ecran această valoare.
În funcția main se citesc datele de intrare, se validează cu ajutorul funcției validate_input, și se calculează suma cu ajutorul funcției sum_secventa. Dacă valoarea returnată de sum_secventa este diferită de None, adică dacă datele de intrare au trecut validarea și s-a putut calcula suma, atunci se afișează pe ecran "Datele sunt introduse corect." și valoarea sumei. În caz contrar, se afișează doar "Datele nu corespund restricțiilor impuse."

Latest revision as of 19:41, 14 May 2023

Sursa: https://www.pbinfo.ro/probleme/516/sumsec1 0516 - SumSec1]


Cerinţa[edit | edit source]

Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar.

Date de intrare[edit | edit source]

Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va fișa pe ecran numărul S, reprezentând suma calculată, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

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

  • 1 ≤ n ≤ 1000
  • elementele vectorului vor fi mai mici decât 1.000.000
  • vectorul va conţine cel puțin un element impar

Exemplu 1[edit | edit source]

Intrare
Introduceti valoarea lui n: 8
12 10 15 6 7 10 19 14
Ieșire
Datele sunt introduse correct.
5 4

Exemplu 2[edit | edit source]

Intrare
Introduceti valoarea lui n: 4
2 4 6 8
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0516 - SumSec1

def validate_input(n, vector):

   if n < 1 or n > 1000:
       print("Datele nu corespund restricțiilor impuse.")
       return False
   has_odd = False
   for i in range(n):
       if vecror[i] < 0 or vector[i] >= 1000000:
           print("Datele nu corespund restricțiilor impuse.")
           return False
       if vector[i] % 2 == 1:
           has_odd = True
   
   if not has_odd:
       print("Datele nu corespund restricțiilor impuse.")
       return False
   print("Datele sunt introduse corect.")
   return True


def calculate_sum(n, v):

   start = None
   end = None
   for i in range(n):
       if vector[i] % 2 == 1:
           if start is None:
               start = i
           else:
               end = i
   return sum(vector[start:end+1])


if __name__ == "__main__":

   n = int(input("Introduceti valoarea lui n: "))
   vector = list(map(int, input("Introduceti valorile din vector: ").split()))
   if not validate_input(n, vector):
       exit()
   print(calculate_sum(n, vector))

</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Funcția validate_input primește patru argumente: n, vector, A și B. Această funcție are rolul de a valida datele de intrare. Verificările pe care le face includ verificarea dacă n se încadrează în intervalul [1, 1000], dacă fiecare element al vectorului vector se încadrează în intervalul [1, 1.000.000], dacă vectorul vector conține cel puțin un element impar și dacă A și B se încadrează în intervalul [1, 2.000.000.000] și dacă A este mai mic sau egal cu B. Dacă toate verificările trec, atunci funcția afișează pe ecran "Datele sunt introduse corect." și returnează True. În caz contrar, funcția afișează pe ecran "Datele nu corespund restricțiilor impuse." și returnează False.

Funcția sum_secventa primește trei argumente: n, vector și valid. Această funcție calculează suma elementelor din secvența determinată de primul și ultimul element impar din vectorul vector. Dacă parametrul valid este False, adică datele de intrare nu au trecut validarea, funcția afișează pe ecran "Datele nu corespund restricțiilor impuse." și returnează None. În caz contrar, funcția calculează prima și ultima poziție cu numere impare în vectorul vector, apoi calculează suma elementelor din secvența respectivă și afișează pe ecran această valoare.

În funcția main se citesc datele de intrare, se validează cu ajutorul funcției validate_input, și se calculează suma cu ajutorul funcției sum_secventa. Dacă valoarea returnată de sum_secventa este diferită de None, adică dacă datele de intrare au trecut validarea și s-a putut calcula suma, atunci se afișează pe ecran "Datele sunt introduse corect." și valoarea sumei. În caz contrar, se afișează doar "Datele nu corespund restricțiilor impuse."