0633 - paritate1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/633/paritate1 - Paritate1] ---- == Cerinţa == Se dă un șir cu '''n''' elemente, numere naturale. Determinați diferența în valoare absolută dintre numărul de valori pare din șir și numărul de valori impare din șir. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, reprezentând elementele șirului. == Date de ieșire == Programul va afișa pe ecran numărul '''c''',...
 
No edit summary
 
(3 intermediate revisions by one other user not shown)
Line 6: Line 6:
Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, reprezentând elementele șirului.
Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, reprezentând elementele șirului.
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul '''c''', reprezentând valoarea cerută.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte. rezultat:", apoi se va afișa numărul c, reprezentând valoarea cerută. În caz contrar, pe se va afișa ecran: "Datele nu corespund restricțiilor impuse.".
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''n''' ⩽ 1.000
* 1 ⩽ '''n''' ⩽ 1.000
* cele '''n''' numere citite vor fi mai mici decât 1.000.000.000
* cele '''n''' numere citite vor fi mai mici decât 1.000.000.000
== Exemplu ==
== Exemplu ==
===Exemplul 1===
; Intrare
; Intrare
: 5
: 5
: 15 245 28 33 11
: 15 245 28 33 11
; Ieșire
; Ieșire
: 3
: Datele introduse sunt corecte. rezultat: 3
== Explicație ==
===Exemplul 2===
; Intrare
: 1234
: 1 2 3
; Ieșire
: Datele nu corespund restricțiilor impuse.
== Explicație exemplu 1==
: Sunt '''4''' numere impare și un număr par în șir, deci diferența este '''3'''.
: Sunt '''4''' numere impare și un număr par în șir, deci diferența este '''3'''.
<br>
<br>
Line 23: Line 30:
# 0633 - Paritate1
# 0633 - Paritate1


def diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(v, n):
def diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n):
     pare = 0
     pare = 0
     impare = 0
     impare = 0
     for i in range(n):
     for i in range(n):
         if v[i] % 2 == 0:
         if vector[i] % 2 == 0:
             pare += 1
             pare += 1
         else:
         else:
Line 39: Line 46:




def citire_conform_restrictiilor():
def citire_conform_restrictiilor(vector, n):
    n = int(input())
     if n < 1 or n > 1000:
     if n < 1 or n > 1000:
         print("Eroare, restrictie. Numarul n trebuie sa fie intre 1 si 1000!")
         print("Datele nu corespund restricțiilor impuse.")
         exit()
         exit()
    v = list(map(int, input().split()))
     for x in vector:
     for x in v:
         if x >= 1000000000:
         if x >= 1000000000:
             print("Eroare, restrictie. Elementele din lista trebuie sa fie mai mici decat 1.000.000.000!")
             print("Datele nu corespund restricțiilor impuse.")
             exit()
             exit()
     return v, n
     if len(vector) != n:
 
        print("Datele nu corespund restricțiilor impuse.")
        exit()


if __name__ == '__main__':
if __name__ == '__main__':
     v, n = citire_conform_restrictiilor()
     n = int(input())
     c = diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(v, n)
    vector = list(map(int, input().split()))
     print(c)
    citire_conform_restrictiilor(vector, n)
     c = diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n)
     print("Datele introduse sunt corecte. rezultat:",c)






</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
  Programul de mai sus începe prin execuția mainului ('''if __name__ == '__main__' ''', linia 31) unde se citește valoarea n și cele n numere pe care le vom pune într-un vector numit „vector” (liniile 32, 33), apoi verifică dacă ele au fost citite conform restricțiilor cu ajutorul funcției '''citire_conform_restrictiilor(vector, n)''', care verifică dacă:<br>-> n este între 1 și 1000;<br>-> elementele vectorului sunt mai mici decât 1.000.000.000;<br>-> n este lungimea șirului de elemente dat.<br>  Dacă nu respectă restricțiile, se va afișa mesajul „Datele nu corespund restricțiilor impuse.” și se va ieși din program cu comanda exit(), iar dacă ele sunt în regulă se va continua programul.<br>  În continuarea programului, se dă unei variabile c valoarea returnată de funcția '''diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n)'''. Funcția '''diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n)''' are două variabile pare și impare, care, prin parcurgerea vectorului și verificarea parității elementului vector[i] (dacă restul împărțirii la 2 al elementului vector[i] este 0, atunci elementul este par, iar dacă e 1 este impar), crește apoi valorile pare și impare în funcție de paritatea elementelor din vector. După ce s-a parcurs tot vectorul, se verifică dacă impare este mai mare decât pare, pentru a se face corect diferența absolută a numărului acestora (valoarea absolută nu poate fi negativă), iar apoi se returnează valoarea c, care reprezintă diferența în valoare absolută dintre numărul de valori pare din vector și numărul de valori impare din vector.<br>  În final, afișăm mesajul '''„Datele introduse sunt corecte. rezultat:”''' și valoarea c, care reprezintă valoarea cerută în problemă.

Latest revision as of 15:25, 30 April 2023

Sursa: - Paritate1


Cerinţa[edit | edit source]

Se dă un șir cu n elemente, numere naturale. Determinați diferența în valoare absolută dintre numărul de valori pare din șir și numărul de valori impare din șir.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele șirului.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte. rezultat:", apoi se va afișa numărul c, reprezentând valoarea cerută. În caz contrar, pe se va afișa ecran: "Datele nu corespund restricțiilor impuse.".

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

  • 1 ⩽ n ⩽ 1.000
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
5
15 245 28 33 11
Ieșire
Datele introduse sunt corecte. rezultat: 3

Exemplul 2[edit | edit source]

Intrare
1234
1 2 3
Ieșire
Datele nu corespund restricțiilor impuse.

Explicație exemplu 1[edit | edit source]

Sunt 4 numere impare și un număr par în șir, deci diferența este 3.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0633 - Paritate1

def diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n):

   pare = 0
   impare = 0
   for i in range(n):
       if vector[i] % 2 == 0:
           pare += 1
       else:
           impare += 1
   if impare > pare:
       c = impare - pare
       return c
   else:
       c = pare - impare
       return c


def citire_conform_restrictiilor(vector, n):

   if n < 1 or n > 1000:
       print("Datele nu corespund restricțiilor impuse.")
       exit()
   for x in vector:
       if x >= 1000000000:
           print("Datele nu corespund restricțiilor impuse.")
           exit()
   if len(vector) != n:
       print("Datele nu corespund restricțiilor impuse.")
       exit()

if __name__ == '__main__':

   n = int(input())
   vector = list(map(int, input().split()))
   citire_conform_restrictiilor(vector, n)
   c = diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n)
   print("Datele introduse sunt corecte. rezultat:",c)


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

  Programul de mai sus începe prin execuția mainului (if __name__ == '__main__' , linia 31) unde se citește valoarea n și cele n numere pe care le vom pune într-un vector numit „vector” (liniile 32, 33), apoi verifică dacă ele au fost citite conform restricțiilor cu ajutorul funcției citire_conform_restrictiilor(vector, n), care verifică dacă:
-> n este între 1 și 1000;
-> elementele vectorului sunt mai mici decât 1.000.000.000;
-> n este lungimea șirului de elemente dat.
Dacă nu respectă restricțiile, se va afișa mesajul „Datele nu corespund restricțiilor impuse.” și se va ieși din program cu comanda exit(), iar dacă ele sunt în regulă se va continua programul.
În continuarea programului, se dă unei variabile c valoarea returnată de funcția diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n). Funcția diferenta_absoluta_dintre_nr_de_valori_impare_si_nr_de_valori_pare(vector, n) are două variabile pare și impare, care, prin parcurgerea vectorului și verificarea parității elementului vector[i] (dacă restul împărțirii la 2 al elementului vector[i] este 0, atunci elementul este par, iar dacă e 1 este impar), crește apoi valorile pare și impare în funcție de paritatea elementelor din vector. După ce s-a parcurs tot vectorul, se verifică dacă impare este mai mare decât pare, pentru a se face corect diferența absolută a numărului acestora (valoarea absolută nu poate fi negativă), iar apoi se returnează valoarea c, care reprezintă diferența în valoare absolută dintre numărul de valori pare din vector și numărul de valori impare din vector.
În final, afișăm mesajul „Datele introduse sunt corecte. rezultat:” și valoarea c, care reprezintă valoarea cerută în problemă.