4035 – Nr SecvS

From Bitnami MediaWiki
Revision as of 19:26, 15 April 2023 by Miriam (talk | contribs) (tot)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: Nr SecvS


Cerinţă[edit | edit source]

Se dă un șir cu n elemente întregi și s, un nr natural nenul. Subprogramul returnează numărul de secvențe din vector care au suma strict mai mare decât S.

Date de intrare[edit | edit source]

Programul va citi de la tastatură valoarean, apoi n numere întregi reprezentând elementele șirului, apoi valoarea s.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa numărul de secvențe din vector care au suma strict mai mare decât s. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

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

  • 2 <= n <= 1.000.000
  • valorile elementelor șirului vor fi cuprinse între 1 și 1000
  • 1 <= s <= 10.000

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 4
Introduceti 4 numere separate prin spatiu:3 6 3 1
Introduceti valoarea s:10
Ieșire
Datele introduse sunt corecte!
Numarul de secvente accepate este: 2

Exemplul 2[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 4
Introduceti 4 numere separate prin spatiu:123 12 3 5 4
Ieșire
Datele introduse sunt incorecte!

Exemplul 3[edit | edit source]

Intrare
IntroducIntroduceti numarul de elemente a sirului: 5
Introduceti 5 numere separate prin spatiu:123 1 3 1 4
Introduceti valoarea s:15
Ieșire
Datele ntroduse sunt corecte!
Numarul de secvente accepate este: 5

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def is_integer(value):

   return value.isdigit()


def verificare_nr_elemente(n):

   if is_integer(n):
       if 2 < int(n) < 1000000:
           return n
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def verificare_vector(n, vector):

   if len(vector) != int(n):
       print("Datele introduse sunt incorecte!")
       exit()
   else:
       for i in vector:
           if is_integer(i):
               if 0 < int(i) < 1000:
                   continue
               else:
                   print("Datele introduse sunt incorecte!")
                   exit()
           else:
               print("Datele introduse sunt incorecte!")
               exit()


def verificare_s(s):

   if is_integer(s):
       if 0 < int(s) < 10000:
           return s
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def nr_secv_s(sir, n, S):

   count = 0
   for i in range(int(n)):
       for j in range(i, int(n)):
           if sum(sir[i:j+1]) > int(S):
               count += 1
   print("Numarul de secvente accepate este:",count)


if __name__ == '__main__':

   n = input("Introduceti numarul de elemente a sirului: ")
   verificare_nr_elemente(n)
   elem = input(f"Introduceti {n} numere separate prin spatiu:").split()
   verificare_vector(n, elem)
   lst_int = list(map(int, elem))
   s = input("Introduceti valoarea s:")
   verificare_s(s)
   print("Datele ntroduse sunt corecte!")
   nr_secv_s(lst_int, n, s)



</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Programul implementează o funcție numită "nr_secv_s" care primește ca parametrii un tablou de numere nenule, numărul efectiv de elemente al tabloului și un număr natural nenul "S". Scopul funcției este de a calcula numărul de secvențe din tabloul dat care au suma strict mai mare decât "S" și de a afișa acest număr.

Funcția începe prin a inițializa un contor la zero și apoi parcurge toate perechile de poziții din tablou (folosind două bucle for îmbricate). Pentru fiecare astfel de pereche, funcția calculează suma elementelor din secvența corespunzătoare și dacă această sumă este strict mai mare decât "S", atunci contorul este incrementat.

La final, funcția afișează valoarea contorului, care reprezintă numărul de secvențe care îndeplinesc condiția cerută.

Înainte de apelarea funcției, sunt efectuate verificări asupra datelor introduse de utilizator: se verifică dacă numărul de elemente este un număr întreg între 2 și 1.000.000, dacă fiecare element din tablou este un număr întreg între 0 și 1000, și dacă numărul "S" este un număr întreg între 0 și 10.000. În cazul în care aceste verificări eșuează, programul va afișa un mesaj de eroare și va ieși din program.