0272 - Pare Sort: Difference between revisions

From Bitnami MediaWiki
explicatii
 
(One intermediate revision by the same user not shown)
Line 2: Line 2:
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.
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 ==
== Date de intrare ==
Fişierul de intrare paresort.in conţine pe prima linie numărul n; urmează cele n elemente ale şirului, dispuse pe mai multe linii, separate prin spaţii.
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 ==
== Date de ieșire ==
Dacă datele sunt introduse corect, pe ecran 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".
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 ==
== Restricții și precizări ==
Line 10: Line 10:


== Exemplu 1 ==
== Exemplu 1 ==
; paresort.in
; paresortin.txt
: 9
: 9
: 2 3 1 4 7 2 5 8 6
: 2 3 1 4 7 2 5 8 6
; paresort.out
; paresortout.txt
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 5
: 5
Line 19: Line 19:
<br>
<br>
== Exemplu 2 ==
== Exemplu 2 ==
; paresort.in
; paresortin.txt
: 0
: 0
; paresort.out
; paresortout.txt
: Datele de intrare nu corespund restricțiilor impuse.
: Datele de intrare nu corespund restricțiilor impuse.
<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">

  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>