0272 - Pare Sort: Difference between revisions
No edit summary |
explicatii |
||
Line 25: | Line 25: | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
# 0272 PareSort | # 0272 PareSort | ||
def validare(nr_elemente, sir_numere): | def validare(nr_elemente, sir_numere): # functia in care se verifica daca datele de intrare sunt valide | ||
# in cazul in care nu este respectata vreo restrictie, vom marca acest lucru prin eroarea ValueError | |||
if nr_elemente > 255: | if nr_elemente > 255: | ||
raise ValueError | raise ValueError | ||
Line 43: | Line 44: | ||
def paresort(sir_numere): | def paresort(sir_numere): | ||
sir_pare = [] | sir_pare = [] # creem o lista doar cu numerele pare | ||
for numar in sir_numere: | for numar in sir_numere: | ||
if numar % 2 == 0: | if numar % 2 == 0: | ||
sir_pare.append(numar) | sir_pare.append(numar) | ||
if len(sir_pare) == 0: | if len(sir_pare) == 0: # daca nu exista, afisam mesajul corespunzator si incheiem programul | ||
file_out.write("nu exista") | file_out.write("nu exista") | ||
return | return | ||
file_out.write(str(len(sir_pare)) + "\n") | file_out.write(str(len(sir_pare)) + "\n") # daca am ajuns aici, inseamna ca avem numere pare, afisam cate sunt | ||
sir_pare.sort() | sir_pare.sort() # sortam sirul deoarece trebuie in ordine crescatoare | ||
for numar in sir_pare: | for numar in sir_pare: | ||
file_out.write(str(numar) + " ") | file_out.write(str(numar) + " ") # scriem sirul rezultat in fisier | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
file_in = open("paresortin.txt", "r") | file_in = open("paresortin.txt", "r") # declararea fisierelor conform cerintei | ||
file_out = open("paresortout.txt", "w") | file_out = open("paresortout.txt", "w") | ||
try: | try: # in cazul in care datele de intrare nu sunt corecte, va fi eroare | ||
n = file_in.readline() | n = file_in.readline() | ||
sir = file_in.readline() | sir = file_in.readline() | ||
n = int(n) | n = int(n) | ||
sir = sir.split() | sir = sir.split() # creem o lista cu fiecare element din sir separat prin spatiu | ||
sir = list(map(int, sir)) | sir = list(map(int, sir)) # sirul citit este un sir de caractere, il transformam in sir de int | ||
validare(n, sir) | validare(n, sir) # validam datele | ||
paresort(sir) | paresort(sir) # apelam functia de rezolvare a problemei | ||
# ne asteptam la 2 tipuri de erori cauzate de datele de intrare, daca apar, le tratam corespunzator | |||
except ValueError: | except ValueError: | ||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | file_out.write("Datele de intrare nu corespund restrictiilor impuse") | ||
except IndexError: | except IndexError: | ||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | file_out.write("Datele de intrare nu corespund restrictiilor impuse") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 16:46, 25 April 2023
Cerința[edit | edit source]
Se dă un şir cu n elemente, numere naturale nenule cu cel mult 4 cifre fiecare. Afişaţi, în ordine crescătoare, valorile pare din şir. Dacă şirul nu conţine nici o valoare pară, se va afişa mesajul nu exista.
Date de intrare[edit | edit source]
Fişierul de intrare paresortin.txt conţine pe prima linie numărul n; urmează cele n elemente ale şirului, dispuse pe mai multe linii, separate prin spaţii.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, în fișierul paresortout.txt se va afișa: " Datele de intrare corespund restrictiilor impuse", fişierul de ieşire paresort.out va conţine pe prima linie numărul m, numărul de valori pare din şir, iar pe a două linie aceste valori, în ordine crescătoare, separate printr-un spaţiu. Dacă şirul nu conţine nici un număr par, fişierul va conţine doar mesajul nu exista, situat pe prima linie. Iar dacă condițiile nu sunt îndeplinite, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 1000
Exemplu 1[edit | edit source]
- paresortin.txt
- 9
- 2 3 1 4 7 2 5 8 6
- paresortout.txt
- Datele introduse corespund restricțiilor impuse.
- 5
- 2 2 4 6 8
Exemplu 2[edit | edit source]
- paresortin.txt
- 0
- paresortout.txt
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 0272 PareSort
def validare(nr_elemente, sir_numere): # functia in care se verifica daca datele de intrare sunt valide
# in cazul in care nu este respectata vreo restrictie, vom marca acest lucru prin eroarea ValueError if nr_elemente > 255: raise ValueError
for numar in sir_numere: if numar <= 0 or numar >= 10000: raise ValueError
if nr_elemente != len(sir_numere): raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def paresort(sir_numere):
sir_pare = [] # creem o lista doar cu numerele pare for numar in sir_numere: if numar % 2 == 0: sir_pare.append(numar)
if len(sir_pare) == 0: # daca nu exista, afisam mesajul corespunzator si incheiem programul file_out.write("nu exista") return
file_out.write(str(len(sir_pare)) + "\n") # daca am ajuns aici, inseamna ca avem numere pare, afisam cate sunt
sir_pare.sort() # sortam sirul deoarece trebuie in ordine crescatoare
for numar in sir_pare: file_out.write(str(numar) + " ") # scriem sirul rezultat in fisier
if __name__ == '__main__':
file_in = open("paresortin.txt", "r") # declararea fisierelor conform cerintei file_out = open("paresortout.txt", "w")
try: # in cazul in care datele de intrare nu sunt corecte, va fi eroare n = file_in.readline() sir = file_in.readline() n = int(n)
sir = sir.split() # creem o lista cu fiecare element din sir separat prin spatiu sir = list(map(int, sir)) # sirul citit este un sir de caractere, il transformam in sir de int
validare(n, sir) # validam datele
paresort(sir) # apelam functia de rezolvare a problemei
# ne asteptam la 2 tipuri de erori cauzate de datele de intrare, daca apar, le tratam corespunzator except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>