0805 – Valuri

De la Universitas MediaWiki

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

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)

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 ș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).