4286 - Constr3: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4286/constr3 4296 - Constr3] ---- == Cerinţa == Se dă un vector '''x''' cu '''n''' elemente, '''numere naturale'''. Să se construiască un alt vector, '''y''', care să conțină '''elementele impare 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ă da...
 
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4286/constr3 4296 - Constr3]
Sursa: [https://www.pbinfo.ro/probleme/4286/constr3 4286 - Constr3]
----
----
== Cerinţa ==
== Cerinţa ==
Line 30: Line 30:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 4296
# 4286


def construirea_vect_y(vector, n):
def construirea_vect_y(vector, n):
Line 48: Line 48:




def citire_conform_restrictiilor():
def citire_conform_restrictiilor(vector, n):
    n = int(input())
     if n < 1 or n > 200:
     if n < 1 or n > 200:
         print("Datele nu corespund restricțiilor impuse.")
         print("Datele nu corespund restricțiilor impuse.")
         exit()
         exit()
    vector = list(map(int, input().split()))
     for x in vector:
     for x in vector:
         if x < 0 or x > 1000000000:
         if x < 0 or x > 1000000000:
Line 62: Line 60:
         exit()
         exit()
     print("Datele sunt introduse corect.")
     print("Datele sunt introduse corect.")
    return vector, n




if __name__ == '__main__':
if __name__ == '__main__':
     vector, n = citire_conform_restrictiilor()
    n = int(input())
     vector = list(map(int, input().split()))
    citire_conform_restrictiilor(vector, n)
     construirea_vect_y(vector, n)
     construirea_vect_y(vector, n)


Line 85: Line 84:
</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare==
== Explicație rezolvare==
   Să luăm '''main-ul programului''' (linia 36). Începem prin a lua datele de intrare, vector și n, din funcția '''citire_conform_restricțiilor()''', funcție ce citește n (linia 20), verifică această valoare să fie între 1 și 200, iar dacă aceasta nu respectă restricțiile, afișează mesajul corespunzător și iese din program cu comanda exit().<br> Apoi, tot această funcție preia vectorul (linia 24), iar apoi verifică și la aceste elemente dacă sunt între 1 și 1.000.000.000 și dacă numărul n dat anterior corespunde cu numărul de elemente al vectorului dat. În caz contrar, se afișează mesajul "Datele nu corespund restricțiilor impuse" și se iese din program cu comanda exit(). Dacă datele respectă restricțiile, afișăm mesajul "Datele sunt introduse corect." și '''returnăm vector și n''' pentru a le prelucra conform problemei.<br>
   Să luăm '''main-ul programului if __name__ == '__main__':''' (linia 33). Începem prin a citi datele de intrare, vector și n (liniile 34, 35, folosim int pentru a converti datele în numere întregi) și apelează funcțiile citire_conform_restrictiilor() și construire_vect_y() (liniile 36, 37).<br>  În funcția '''citire_conform_restricțiilor()''' verifică dacă n este între 1 și 200, dacă elemente dacă sunt între 1 și 1.000.000.000 și dacă numărul n dat anterior corespunde cu numărul de elemente al vectorului introdus. În caz contrar, se afișează mesajul "Datele nu corespund restricțiilor impuse" și se iese din program cu comanda exit(). Dacă datele respectă restricțiile, afișăm mesajul "Datele sunt introduse corect." și se continuă programul.<br>   În funcția '''construire_vect_y()''', construim un vector cu numele vector_impare care este inițial gol, și inițializăm o variabilă contor cu 0, care va fi lungimea vectorului vector_impare. Apoi, luăm pe rând elementele din vectorul dat în ordine inversă pentru a le introduce în ordinea cerută în problema noastră cu ajutorul unui for. Folosim variabila impar de tip boolean, inițializată cu True, care dacă elementul este impar este True, iar dacă nu, False. După această verificare (liniile 8-11), mai facem o altă verificare care adaugă in vector_impare elementele impare și adaugă + 1 în variabila contor (care reține lungimea vector_impare). Și, în finalul acestei funcții, după acest for, afișăm vector_impare cu ajutorul unui for loop și lăsăm un spațiu între fiecare element (liniile 15-16).
  În funcția '''construire_vect_y''', construim un vector cu numele vector_impare care este inițial gol, și inițializăm o variabilă contor cu 0, care va fi lungimea vectorului vector_impare. Apoi, luăm pe rând elementele din vectorul dat în ordine inversă pentru a le introduce în ordinea cerută în problema noastră cu ajutorul unui for. Folosim variabila impar de tip boolean, inițializată cu True, care dacă elementul este impar este True, iar dacă nu, False. După această verificare (liniile 8-11), mai facem o altă verificare care adaugă in vector_impare elementele impare și adaugă + 1 în variabila contor (care reține lungimea vector_impare). Și, în finalul acestei funcții, după acest for, afișăm vector_impare (liniile 15-16).

Latest revision as of 10:30, 26 April 2023

Sursa: 4286 - Constr3


Cerinţa[edit | edit source]

Se dă un vector x cu n elemente, numere naturale. Să se construiască un alt vector, y, care să conțină elementele impare din x, în ordine inversă.

Date de intrare[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ⩽ n ⩽ 200
  • elementele vectorului vor fi cuprinse între 0 și 1.000.000.000

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
6
50 5 15 29 13 40
Ieșire
Datele sunt introduse corect.
13 29 15 5

Exemplul 2[edit | edit source]

Intrare
5
10 2 -3 4 5
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 4286

def construirea_vect_y(vector, n):

   vector_impare = []
   contor = 0
   for i in range(n - 1, -1, -1):
       impar = True
       if vector[i] % 2 == 0:
           impar = False
       elif vector[i] % 2 != 0:
           impar = True
       if impar:
           vector_impare.append(vector[i])
           contor += 1
   for i in range(0, contor):
       print(vector_impare[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[edit | edit source]

  Să luăm main-ul programului if __name__ == '__main__': (linia 33). Începem prin a citi datele de intrare, vector și n (liniile 34, 35, folosim int pentru a converti datele în numere întregi) și apelează funcțiile citire_conform_restrictiilor() și construire_vect_y() (liniile 36, 37).
În funcția citire_conform_restricțiilor() verifică dacă n este între 1 și 200, dacă elemente dacă sunt între 1 și 1.000.000.000 și dacă numărul n dat anterior corespunde cu numărul de elemente al vectorului introdus. În caz contrar, se afișează mesajul "Datele nu corespund restricțiilor impuse" și se iese din program cu comanda exit(). Dacă datele respectă restricțiile, afișăm mesajul "Datele sunt introduse corect." și se continuă programul.
În funcția construire_vect_y(), construim un vector cu numele vector_impare care este inițial gol, și inițializăm o variabilă contor cu 0, care va fi lungimea vectorului vector_impare. Apoi, luăm pe rând elementele din vectorul dat în ordine inversă pentru a le introduce în ordinea cerută în problema noastră cu ajutorul unui for. Folosim variabila impar de tip boolean, inițializată cu True, care dacă elementul este impar este True, iar dacă nu, False. După această verificare (liniile 8-11), mai facem o altă verificare care adaugă in vector_impare elementele impare și adaugă + 1 în variabila contor (care reține lungimea vector_impare). Și, în finalul acestei funcții, după acest for, afișăm vector_impare cu ajutorul unui for loop și lăsăm un spațiu între fiecare element (liniile 15-16).