0836 - AfisareVectorRec1: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
==Cerinţa==
==Cerinţa==
Să se scrie o funcție recursivă care citește de la tastatură un șir de valori naturale și le afișează în ordine inversă, cu câte un spațiu între ele.
Să se scrie o funcție python recursivă care afișează pe ecran, în ordine inversă, elementele unui vector transmis ca parametru.
 
==Date de intrare==
==Date de intrare==
Se va introduce de la tastatură un șir de valori naturale care vor fi transmise ca perimetrii
Se va introduce de la tastatură un șir de valori naturale care vor fi transmise ca perimetrii


==Date de ieșire==
==Date de ieșire==
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și pe un rând nou se afișează ceea ce se cere. Altfel, dacă datele de intrare nu corespund cerinței se va afișa mesajul: "Datele de intrare nu corespund cerinței".
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".


==Restricţii şi precizări==
==Restricţii şi precizări==
numele funcției va fi afis;
*numele funcției va fi afisvec;
funcția nu va avea parametri și nu va returna nimic;
*funcția va avea doi parametri, în această ordine: vectorul v și numărul de elemente din vector, n. Funcția nu va returna nimic;
șirul de valori citite se încheie la citirea valorii 0.
*indicii elementelor vectorului sunt 0, 1, ..., n-1;
*elementele vor fi afișate în ordinea inversă din vector, separate prin câte un spațiu.


==Exemplu==
==Exemplu==
Dacă se introduc valorile 4 9 2 0 se va afișa 0 2 9 4.
===Exemplu 1===
:Intrare:
;Introduceti valorile separate prin spatiu: 4 9 2 0
Datele de intrare corespund restrictiilor.
Lista inversata este: 0 2 9 4  
</syntaxhighlight>
===Exemplu 2===
<syntaxhighlight lang="python" line>
Introduceti valorile separate prin spatiu: a b c d
Datele de intrare nu corespund cerintei.
</syntaxhighlight>


==Important==
==Important==
Line 21: Line 30:


==Rezolvare==
==Rezolvare==
Pentru această problemă, vom folosi o funcție de validare care verifică dacă valorile citite sunt numere naturale și o funcție de rezolvare care citește valorile și le afișează în ordine inversă, folosind recursivitatea. Vom utiliza apoi o funcție main care va apela cele două funcții și va afișa mesajul corespunzător.
<syntaxhighlight lang="python" line>
def citire():
    """Functia citeste sirul de valori de la tastatura si il transforma in lista de intregi."""
    sir = input("Introduceti valorile separate prin spatiu: ")
    lista = sir.split()  # impartim sirul in cuvinte separate (presupunand ca sunt separate prin spatii)
    try:
        lista = [int(valoare) for valoare in lista]  # transformam fiecare cuvant in intreg si cream o lista din acestea
    except ValueError:
        print("Datele de intrare nu corespund cerintei.")
        lista = []  # daca apar erori la transformarea cuvintelor in intregi, lista va fi goala
    return lista


def validare():
 
     while True:
def afis(lista):
        try:
     """Functia afiseaza lista de valori in ordine inversa."""
            valoare = input("Introduceti o valoare naturala: ")
    if not lista:
            if int(valoare) < 0:
         print("Nu s-au introdus valori.")
                print("Datele de intrare nu corespund restricțiilor impuse.")
                continue
            return int(valoare)
         except ValueError:
            print("Datele de intrare nu corespund restricțiilor impuse.")          
def rezolvare():
    valoare = validare()
    if valoare == 0:
         return
         return
     else:
     print("Lista inversata este:", end=" ")
        rezolvare()
    for i in range(len(lista) - 1, -1, -1):  # parcurgem lista in ordine inversa
         print(valoare, end=" ")      
         print(lista[i], end=" ")
  def main():
    print() # afisam un rand nou la final
     print("Acest program va afisa valorile introduse in ordine inversa.")
 
     print("Introduceti valorile naturale separate prin spatiu, urmate de 0 pentru a incheia.")
 
    rezolvare()
def main():
    print("\nDatele de intrare corespund restricțiilor impuse.")
     lista = citire()
   
    if lista:
main()
        print("Datele de intrare corespund restrictiilor.")
        afis(lista)
 
 
if __name__ == '__main__':
     main()
</syntaxhighlight>
 
==Explicații==
Programul citeste un sir de valori naturale de la tastatura si apoi afiseaza aceste valori in ordine inversa, utilizand o functie recursiva.
 
In functia citire() se citeste de la tastatura cate o valoare la fiecare iteratie, verificandu-se daca aceasta este diferita de 0 si daca este un numar natural. Valoarea citita se adauga la lista lista_valori pana cand se citeste 0, caz in care se returneaza lista cu valorile citite.
 
In functia afisare_inversa() se apeleaza functia citire() pentru a citi lista de valori si apoi se apeleaza functia recursiva afisare_inversa_recursiv() cu parametrii lista de valori si indexul ultimului element din lista. Aceasta functie recursiva se apeleaza pe ea insasi, afisandu-se valoarea corespunzatoare indexului curent si apoi apelandu-se recursiv functia cu indexul anterior, pana cand indexul devine 0 si se afiseaza ultima valoare din lista.
 
In functia main() se apeleaza functia afisare_inversa() pentru a citi si afisa valorile in ordine inversa, tratandu-se cazurile in care valorile citite nu corespund cerintelor prin afisarea unui mesaj corespunzator.

Latest revision as of 21:46, 14 May 2023

Cerinţa[edit | edit source]

Să se scrie o funcție python recursivă care afișează pe ecran, în ordine inversă, elementele unui vector transmis ca parametru.

Date de intrare[edit | edit source]

Se va introduce de la tastatură un șir de valori naturale care vor fi transmise ca perimetrii

Date de ieșire[edit | edit source]

Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și pe un rând nou se afișează ceea ce se cere. Altfel, dacă datele de intrare nu corespund cerinței se va afișa mesajul: "Datele de intrare nu corespund cerinței".

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

  • numele funcției va fi afisvec;
  • funcția va avea doi parametri, în această ordine: vectorul v și numărul de elemente din vector, n. Funcția nu va returna nimic;
  • indicii elementelor vectorului sunt 0, 1, ..., n-1;
  • elementele vor fi afișate în ordinea inversă din vector, separate prin câte un spațiu.

Exemplu[edit | edit source]

Exemplu 1[edit | edit source]

Intrare:
Introduceti valorile separate prin spatiu
4 9 2 0

Datele de intrare corespund restrictiilor. Lista inversata este: 0 2 9 4 </syntaxhighlight>

Exemplu 2[edit | edit source]

<syntaxhighlight lang="python" line> Introduceti valorile separate prin spatiu: a b c d Datele de intrare nu corespund cerintei. </syntaxhighlight>

Important[edit | edit source]

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def citire():

   """Functia citeste sirul de valori de la tastatura si il transforma in lista de intregi."""
   sir = input("Introduceti valorile separate prin spatiu: ")
   lista = sir.split()  # impartim sirul in cuvinte separate (presupunand ca sunt separate prin spatii)
   try:
       lista = [int(valoare) for valoare in lista]  # transformam fiecare cuvant in intreg si cream o lista din acestea
   except ValueError:
       print("Datele de intrare nu corespund cerintei.")
       lista = []  # daca apar erori la transformarea cuvintelor in intregi, lista va fi goala
   return lista


def afis(lista):

   """Functia afiseaza lista de valori in ordine inversa."""
   if not lista:
       print("Nu s-au introdus valori.")
       return
   print("Lista inversata este:", end=" ")
   for i in range(len(lista) - 1, -1, -1):  # parcurgem lista in ordine inversa
       print(lista[i], end=" ")
   print()  # afisam un rand nou la final


def main():

   lista = citire()
   if lista:
       print("Datele de intrare corespund restrictiilor.")
       afis(lista)


if __name__ == '__main__':

   main()

</syntaxhighlight>

Explicații[edit | edit source]

Programul citeste un sir de valori naturale de la tastatura si apoi afiseaza aceste valori in ordine inversa, utilizand o functie recursiva.

In functia citire() se citeste de la tastatura cate o valoare la fiecare iteratie, verificandu-se daca aceasta este diferita de 0 si daca este un numar natural. Valoarea citita se adauga la lista lista_valori pana cand se citeste 0, caz in care se returneaza lista cu valorile citite.

In functia afisare_inversa() se apeleaza functia citire() pentru a citi lista de valori si apoi se apeleaza functia recursiva afisare_inversa_recursiv() cu parametrii lista de valori si indexul ultimului element din lista. Aceasta functie recursiva se apeleaza pe ea insasi, afisandu-se valoarea corespunzatoare indexului curent si apoi apelandu-se recursiv functia cu indexul anterior, pana cand indexul devine 0 si se afiseaza ultima valoare din lista.

In functia main() se apeleaza functia afisare_inversa() pentru a citi si afisa valorile in ordine inversa, tratandu-se cazurile in care valorile citite nu corespund cerintelor prin afisarea unui mesaj corespunzator.