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
0495 - Constr2
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/495/constr2 0495 - Constr2] ---- == Cerinţa == Se dă un vector '''x''' cu '''n''' elemente, numere naturale. Să se construiască un alt vector, '''y''', care să conțină elementele prime din '''x''', în ordine inversă. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spaţii, reprezentând elementele vectorului. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''', apoi pe un rând nou afișează '''elementele vectorului y''', separate prin exact un spațiu. Î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''' ⩽ 200 * elementele vectorului vor fi cuprinse între '''0''' și '''1.000.000.000''' == Exemple == ===Exemplul 1=== ; Intrare : 6 : 50 5 15 29 13 40 ; Ieșire : Datele sunt introduse corect. : 13 29 5 ===Exemplul 2=== ; Intrare : 5 : 10 2 -3 4 5 ; Ieșire : Datele nu corespund restricțiilor impuse. <br> == Rezolvare == <syntaxhighlight lang="python" line> # 0495 def construirea_vect_y(vector, n): vector_prime = [] contor = 0 for i in range(n - 1, -1, -1): prim = True if vector[i] < 2: prim = False elif vector[i] % 2 == 0 and vector[i] > 2: prim = False else: for d in range(3, int(vector[i] ** 0.5) + 1, 2): if vector[i] % d == 0: prim = False break if prim: vector_prime.append(vector[i]) contor += 1 for i in range(0, contor): print(vector_prime[i], end=' ') def citire_conform_restrictiilor(vector, n): if n < 1 or n > 200: print("Datele nu corespund restricțiilor impuse.") exit() for x in vector: if x < 0 or x > 1000000000: 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) construirea_vect_y(vector, n) </syntaxhighlight> == Explicație rezolvare == Secțiunea '''if name == 'main':''' reprezintă punctul de intrare în program, adică funcția principală "main()". În interiorul acestei secțiuni, se citește de la tastatură valoarea lui "n" utilizând funcția "input()" și se stochează în variabila "n" ca un întreg utilizând funcția "int()". Apoi, se citește de la tastatură elementele vectorului "vector" utilizând funcția "input()", care sunt separate prin spații și convertite într-un vector de întregi utilizând funcția "split()" și funcția "map()" împreună. Apoi, se apelează funcția "citire_conform_restrictiilor(vector, n)" pentru a verifica dacă valorile citite respectă restricțiile impuse. Dacă această verificare este trecută cu succes, se apelează funcția "construirea_vect_y(vector, n)" pentru a construi vectorul "vector_prime" și a afișa valorile primelor din acest vector.<br> Funcția '''citire_conform_restrictiilor(vector, n)''' primește doi parametri: "vector" și "n". Aceasta verifică dacă valorile lui "n" și elementele din "vector" respectă restricțiile impuse. Restricțiile impuse sunt următoarele: "n" trebuie să fie între 1 și 200, elementele din "vector" trebuie să fie între 0 și 1000000000, și numărul de elemente din "vector" trebuie să fie egal cu "n". Verificarea se face utilizând statement-uri "if". Dacă una dintre aceste restricții nu este îndeplinită, se afișează "Datele nu corespund restricțiilor impuse." utilizând funcția "print()" și se folosește funcția "exit()" pentru a încheia execuția programului. Dacă restricțiile sunt respectate, se afișează "Datele sunt introduse corect." și se continuă programul.<br> Funcția '''construirea_vect_y(vector, n)''' primește doi parametri: "vector" și "n", reprezentând un vector de numere întregi și dimensiunea acestuia. Scopul acestei funcții este să construiască un alt vector, vector_prime, care să conțină doar valorile prime din vectorul inițial, în ordine inversă. Acest lucru se realizează astfel:<br>-> se declară o listă "vector_prime" care va fi utilizată pentru a stoca valorile prime din "vector";<br>-> se declară o variabilă "contor" inițializată cu valoarea 0, care va fi utilizată pentru a număra câte valori prime sunt adăugate în "vector_prime";<br>-> se parcurge vectorul "vector" cu ajutorul unui for loop de la indexul "n-1" până la indexul 0, utilizând un ciclu "for" cu o iterație inversă, adică de la "n-1" până la 0, cu un pas de -1 (începem vectorul de pe poziția 0);<br>-> pentru fiecare element din "vector", la fiecare iterație;<br> se inițializează o variabilă prim cu valoarea booleană True (care va fi la început True pentru fiecare element din vector deoarece se inițializează la începutul for loop-ului);<br>-> dacă elementul din "vector" este mai mare sau egal cu 2 și este un număr par, atunci acesta nu poate fi prim, și se setează variabila "prim" la False;<br>-> în caz contrar, se parcurge un alt ciclu "for" de la 3 până la radicalul pătrat al valorii din "vector" + 1, cu un pas de 2 (deoarece numerele pare mai mari decât 2 nu pot fi prime, iar numerele prime sunt întotdeauna impare, cu excepția valorii 2). În interiorul acestul for loop, se verifică dacă valoarea din "vector" este divizibilă cu un număr din intervalul [3, radical pătrat al valorii din "vector"] (exclusiv). Dacă este divizibilă, atunci nu este primă, iar variabila "prim" este setată la False și se iese din ciclul "for" utilizând instrucțiunea "break";<br>-> dacă nu a fost găsită nicio valoare cu care să fie divizibilă valoarea din "vector", atunci aceasta este primă, iar variabila "prim" rămâne de la început True;<br> dacă variabila "prim" este True, adică valoarea din "vector" este primă, atunci aceasta este adăugată în "vector_prime" utilizând funcția "append()", și "contor" este incrementat (contor este lungimea vectorului vector_prime);<br> după ce am terminat cu acest for loop, adăugăm încă unul care parcurge vector_prime și afișează toate elementele din acesta, ele fiind ceea ce problema noastră ne cere.
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