Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2858 - pv
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/2858/pv - 2858 - pv] ---- == Cerinţe == Se dă un șir cu '''n''' elemente, '''numere naturale'''. * Să se afișeze '''elementele șirului de la dreapta la stânga'''. * Să se calculeze '''suma valorilor pare din șir'''. * Să se determine '''suma valorilor aflate pe poziții pare în șir'''. * Să se determine '''numărul numerelor din șir care sunt divizibile cu 10'''. * Să se determine '''suma numerelor divizibile cu 3 și aflate pe poziții impare'''. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi șirul de '''n''' numere naturale, separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi: <br>* pe un rând nou va afișa '''elementele șirului de la dreapta la stânga'''; <br>* pe un rând nou se va afișa '''un singur număr reprezentând suma valorilor pare'''; <br>* pe un rând nou se va afișa '''un singur număr reprezentând suma valorilor aflate pe poziții pare''' în șir; <br>* pe un rând nou se va afișa '''un singur număr reprezentând numărul numerelor din șir care sunt divizibile cu 10'''; <br>* pe ultimul rând se va afișa '''un singur număr reprezentând suma numerelor divizibile cu 3 și aflate pe poziții impare'''. <br> Î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 == * 1 ⩽ '''n''' ⩽ 100 * elementele vectorului vor fi cuprinse '''între 0 și 100''' == Exemple == ===Exemplul 1=== ; Intrare : 10 : 1 2 3 4 5 6 7 8 9 10 ; Ieșire : Datele sunt introduse corect. : 10 9 8 7 6 5 4 3 2 1 : 30 : 30 : 1 : 12 ===Exemplul 2=== ; Intrare : 5 : 10 2 -3 4 5 ; Ieșire : Datele nu corespund restricțiilor impuse. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 2858 def afisare_vector_invers(vector, n): for i in range(n-1, -1, -1): print(vector[i], end=" ") print() def afisare_suma_val_pare(vector, n): suma_val_pare = 0 for i in range(n): if vector[i] % 2 == 0: suma_val_pare += vector[i] print(suma_val_pare) def afisare_suma_poz_pare(vector, n): suma_poz_pare = 0 # vectorul începe de la 0, așadar pozițiile pare vor fi cele impare în cazul acesta for i in range(n): if i % 2 != 0: suma_poz_pare += vector[i] print(suma_poz_pare) def afisare_nr_el_div_10(vector, n): nr_el_div_10 = 0 for i in range(n): if vector[i] % 10 == 0: nr_el_div_10 += 1 print(nr_el_div_10) def afisare_suma_poz_imp_div_3(vector, n): suma_poz_imp_div_3 = 0 for i in range(n): if vector[i] % 3 == 0 and i % 2 != 1: suma_poz_imp_div_3 += vector[i] print(suma_poz_imp_div_3) def citire_conform_restrictiilor(vector, n): if n < 1 or n > 100: print("Datele nu corespund restricțiilor impuse.") exit() for x in vector: if x < 0 or x > 100: print("Datele nu corespund restricțiilor impuse.") exit() if n != len(vector): print("Datele nu corespund restricțiilor impuse.") exit() print("Datele sunt introduse corect.") if __name__ == '__main__': n = int(input()) vector = list(map(int, input().split())) citire_conform_restrictiilor(vector, n) afisare_vector_invers(vector, n) afisare_suma_val_pare(vector, n) afisare_suma_poz_pare(vector, n) afisare_nr_el_div_10(vector, n) afisare_suma_poz_imp_div_3(vector, n) </syntaxhighlight> == Explicație rezolvare == Programul de mai sus este împărțit în mai multe funcții care efectuează operațiile date în problemă asupra vectorului de numere.<br>-> '''Funcția afisare_vector_invers(vector, n)''' primește ca parametri vectorul „vector” și numărul de elemente din vector (n) și afișează elementele vectorului în ordine inversă, de la ultimul element la primul, cu ajutorul unui for loop (linia 4);<br>-> '''Funcția afisare_suma_val_pare(vector, n)''' primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma tuturor valorilor pare din vector (parcurgem vectorul cu ajutorul unui for loop, linia 11, și verificăm dacă elementele sunt pare, iar dacă da, le adăugăm în variabila suma_val_pare, care a fost inițializată cu 0 înainte de for loop, linia 10) și la final afișăm suma_val_pare;<br>-> '''Funcția afisare_suma_poz_pare(vector, n)''' primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma valorilor din pozițiile pare (indexuri impare vor fi pare deoarece la noi vectorul începe de la 0, nu de la 1) din vector. Acest lucru se realizează prin parcurgerea vectorului și adunarea valorilor aflate pe poziții impare (care sunt pare dacă se începe de pe poziția 1), pe care le adunăm în variabila suma_poz_pare și o afișăm la final;<br>-> '''Funcția afisare_nr_el_div_10(vector, n)''' primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează numărul de elemente din vector care sunt divizibile cu 10 în variabila nr_el_div_10, inițializată cu 0 la început. Calcularea acestei valori se face prin a parcurge vectorul cu un for loop și se verifică dacă numărul este divizibil cu 10 cu ajutorul operatorului % (de exemplu, dacă element % 10 este diferit de 0, înseamnă cu numărul nu este divizibil cu 10) și adunăm 1 în variabila nr_el_div_10 de fiecare dată când descoperim un element divizibil cu 10, apoi după finalizarea parcurgerii, afișăm aceasta valoare;<br>-> '''Funcția afisare_suma_poz_imp_div_3(vector, n)''' primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma valorilor din pozițiile impare (la noi cele pare deoarece începem vectorul de la 0, nu 1) din vector care sunt divizibile cu 3. Acest număr va fi calculat în variabila suma_poz_imp_div_3 pe care o inițializăm cu 0 la început, apoi parcurgem vectorul și verificăm pentru fiecare element dacă este divizibil cu 3 cu ajutorul operatorului % și dacă poziția sa este pară (pentru a obține pozițiile impare, noi începem vectorul de la 0, așadar cele două vor fi inversate), iar dacă ambele condiții sunt îndeplinite se adaugă elementul respectiv în variabila suma_poz_imp_div_3, care după parcurgerea întregului vector va avea valoarea cerută;<br>-> '''Funcția citire_conform_restrictiilor(vector, n)''' primește ca parametri un vector „vector” și numărul de elemente din vector (n) și verifică dacă vectorul și numărul de elemente din vector respectă restricțiile impuse. Aceste restricții includ ca numărul de elemente din vector să fie între 1 și 100, valorile din vector să fie între 0 și 100 și numărul de elemente din vector să fie egal cu n. Dacă restricțiile nu sunt respectate, programul afișează „Datele nu corespund restricțiilor impuse.” și se încheie prin apelul funcției exit(). Dacă restricțiile sunt respectate, se afișează un mesajul „Datele sunt introduse corect.” (linia 55);<br>-> '''În secțiunea if __name__ == '__main__':''', programul începe prin citirea numărului de elemente din vector (n) de la tastatură folosind funcția input() și convertirea acestuia la un număr întreg utilizând funcția int() (linia 57). Apoi, vectorul este citit de la tastatură ca o listă de numere întregi utilizând funcția input() și funcția split() care separă valorile citite în funcție de spații și le transformă într-o listă de șiruri de caractere. Apoi, utilizând funcția map() împreună cu funcția int(), lista de șiruri de caractere este convertită într-o listă de numere întregi. Apoi, tot în main, se apelează toate funcțiile de mai sus și se va obține rezultatul conform problemei.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width