0805 – Valuri

From Bitnami MediaWiki
Revision as of 18:28, 15 April 2023 by Miriam (talk | contribs) (tot)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: Valuri


Cerinţă[edit | edit source]

Se dă un nr natural n. Programul furnizează un tablou unidimensional cu 2*n elemente, valori naturale distincte din intervalul [1,2*n].

Subprogramul construieşte tabloul v astfel încât, în acesta, şirul elementelor impare să fie strict crescător, iar şirul elementelor pare să fie strict descrescător. Primul element al tabloului este impar, iar două elemente cu aceeaşi paritate nu pot ocupa poziţii consecutive în tablou.

Date de intrare[edit | edit source]

Programul va citi de la tastatură valoarean

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa vectorul conform specificațiilor mai sus menționate. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".

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

  • 2 < n < 50

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 4
Ieșire
Datele introduse sunt corecte!
Noul vector este: [1, 8, 3, 6, 5, 4, 7, 2]

Exemplul 2[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 57
Ieșire
Datele introduse sunt incorecte!

Exemplul 3[edit | edit source]

Intrare
Introduceti numarul de elemente a sirului: 15
Ieșire
Datele introduse sunt corecte!
Noul vector este: [1, 30, 3, 28, 5, 26, 7, 24, 9, 22, 11, 20, 13, 18, 15, 16, 17, 14, 19, 12, 21, 10, 23, 8, 25, 6, 27, 4, 29, 2]

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def is_integer(value):

   return value.isdigit()


def verificare_nr_elemente(n):

   if is_integer(n):
       if 2 < int(n) < 50:
           return n
       else:
           print("Datele introduse sunt incorecte!")
           exit()
   else:
       print("Datele introduse sunt incorecte!")
       exit()


def valuri(n):

   vector = [0] * (int(n) * 2)
   for i in range(0, (int(n)*2)-1):
       if i % 2 == 0:
           vector[i] = i+1
       else:
           vector[i] = 0
   vector.reverse()
   for i in range((int(n)*2-1), -1, -1):
       if i % 2 == 0:
           vector[i] = i+2
   vector.reverse()
   print("Noul vector este:",vector)


if __name__ == '__main__':

   n = input("Introduceti numarul de elemente a sirului: ")
   verificare_nr_elemente(n)
   print("Datele introduse sunt corecte!")
   valuri(n)



</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Codul conține următoarele funcții:

  • is_integer(value): funcție care primește o valoare și returnează True dacă valoarea este un număr întreg și False în caz contrar. Această funcție este folosită pentru a verifica dacă inputul dat este un număr întreg valid.
  • verificare_nr_elemente(n): funcție care primește o valoare n și verifică dacă este un număr întreg valid și dacă se află între 2 și 50. Dacă inputul este corect, funcția returnează valoarea n, altfel afișează un mesaj de eroare și oprește programul cu ajutorul funcției exit().
  • valuri(n): funcție care primește un număr întreg n și construiește un vector cu perechi de numere. Vectorul începe cu 1 și este format din n perechi de numere de forma (0, i+2), cu i un număr par de la 0 la n*2-2. Aceste perechi sunt stocate în vector în ordinea descrescătoare a valorii primului element al perechii. Funcția afișează vectorul final.

În funcția valuri(n), procesul de construcție a vectorului este împărțit în două părți:

  • Mai întâi, se construiește jumătatea din dreapta a vectorului, parcurgând lista vector și setând elementele la valori specifice (conform descrierii de mai sus). Aceste valori sunt setate în ordine crescătoare de la dreapta la stânga în lista, prin aceeași rază de pas. După această construcție, lista este inversată pentru a se obține valori ordonate descrescător de la stânga la dreapta.
  • În a doua parte, se completează jumătatea stângă a vectorului, parcurgând lista vector de la dreapta la stânga și setând elementele în funcție de indicele lor (conform descrierii de mai sus).