0805 – Valuri
Sursa: Valuri
Cerinţă
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
Programul va citi de la tastatură valoarean
Date de ieșire
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
- 2 < n < 50
Exemple
Exemplul 1
- 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
- Intrare
- Introduceti numarul de elemente a sirului: 57
- Ieșire
- Datele introduse sunt incorecte!
Exemplul 3
- 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
<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
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 șiFalse
î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 valoaren
și verifică dacă este un număr întreg valid și dacă se află între 2 și 50. Dacă inputul este corect, funcția returnează valoarean
, altfel afișează un mesaj de eroare și oprește programul cu ajutorul funcțieiexit()
.valuri(n)
: funcție care primește un număr întregn
și construiește un vector cu perechi de numere. Vectorul începe cu1
și este format dinn
perechi de numere de forma(0, i+2)
, cui
un număr par de la0
lan*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).