4259 - PalRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == Cerința == Scrieți funcția recursivă cu antetul<br> <code>def PalRec(a, st, dr)</code><br> care primind ca parametri un vector a de numere întregi și doi întregi st și dr, returnează 1 dacă secvența a[st], a[st+1], ..., a[dr] din vector este un palindrom, sau returnează 0 în caz contrar. == Restricții și precizări == * st ≤ dr * Numele funcției este PalRec. * Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă...
 
Cata (talk | contribs)
No edit summary
Line 11: Line 11:
Dacă a = (3,5,6,5,3,3,5,-1,5), atunci PalRec(a,2,4) = 1 deoarece 5,6,5 este palindrom. PalRec(a,4,7) = 1 deoarece 5,3,3,5 este palindrom. PalRec(a,1,4) = 0 deoarece 3,5,6,5 nu este palindrom.
Dacă a = (3,5,6,5,3,3,5,-1,5), atunci PalRec(a,2,4) = 1 deoarece 5,6,5 este palindrom. PalRec(a,4,7) = 1 deoarece 5,3,3,5 este palindrom. PalRec(a,1,4) = 0 deoarece 3,5,6,5 nu este palindrom.


== Important ==
== Explicație ==
Soluția propusă va conține doar funcția cerută. Introducerea în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție, care vor duce la depunctarea soluției.
Funcția <code>PalRec</code> verifică dacă un șir de caractere <code>a</code> este palindrom folosind o abordare recursivă.
 
Argumentele funcției sunt:
 
* <code>a</code> - șirul de caractere de verificat
* <code>st</code> - poziția începutului intervalului verificat (începe de la 0)
* <code>dr</code> - poziția sfârșitului intervalului verificat (începe de la len(a) - 1)
 
Prima condiție <code>if</code> din funcție verifică cazul de bază al recursiei, când intervalul de verificat este redus la o singură literă. Funcția returnează <code>1</code>, deoarece orice literă este palindrom în sine.
 
A doua condiție <code>if</code> verifică dacă primele și ultimele caractere ale intervalului de verificat sunt egale. Dacă da, funcția continuă verificarea pentru următorul interval, eliminând prima și ultima literă ale intervalului prin apelarea recursivă a funcției <code>PalRec</code> cu pozițiile începutului și sfârșitului incrementate și, respectiv, decrementate.
 
Dacă cele două caractere nu sunt egale, funcția returnează <code>0</code>, semnificând că șirul nu este palindrom.


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_st_dr(st, dr):
    if isinstance(st, int) and isinstance(dr, int) and st <= dr:
        return True
    else:
        return False
def PalRec(a, st, dr):
def PalRec(a, st, dr):
     if st >= dr:
     if st >= dr:
Line 22: Line 40:
         return 0
         return 0
     return PalRec(a, st + 1, dr - 1)
     return PalRec(a, st + 1, dr - 1)
def main():
    a = input("Introduceti un sir de caractere: ")
    st = input("Introduceti st: ")
    dr = input("Introduceti dr: ")
    try:
        st = int(st)
        dr = int(dr)
        if validate_st_dr(st, dr):
            result = PalRec(a, st, dr)
            if result == 1:
                print("Sirul introdus este palindrom.")
            else:
                print("Sirul introdus nu este palindrom.")
        else:
            print("Valorile st si dr nu sunt valide.")
    except ValueError:
        print("Valorile st si dr trebuie sa fie numere intregi.")
</syntaxhighlight>
</syntaxhighlight>

Revision as of 09:50, 6 April 2023

Cerința

Scrieți funcția recursivă cu antetul
def PalRec(a, st, dr)
care primind ca parametri un vector a de numere întregi și doi întregi st și dr, returnează 1 dacă secvența a[st], a[st+1], ..., a[dr] din vector este un palindrom, sau returnează 0 în caz contrar.

Restricții și precizări

  • st ≤ dr
  • Numele funcției este PalRec.
  • Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă să nu se folosească alte funcții suplimentare.

Exemple

Dacă a = (3,5,6,5,3,3,5,-1,5), atunci PalRec(a,2,4) = 1 deoarece 5,6,5 este palindrom. PalRec(a,4,7) = 1 deoarece 5,3,3,5 este palindrom. PalRec(a,1,4) = 0 deoarece 3,5,6,5 nu este palindrom.

Explicație

Funcția PalRec verifică dacă un șir de caractere a este palindrom folosind o abordare recursivă.

Argumentele funcției sunt:

  • a - șirul de caractere de verificat
  • st - poziția începutului intervalului verificat (începe de la 0)
  • dr - poziția sfârșitului intervalului verificat (începe de la len(a) - 1)

Prima condiție if din funcție verifică cazul de bază al recursiei, când intervalul de verificat este redus la o singură literă. Funcția returnează 1, deoarece orice literă este palindrom în sine.

A doua condiție if verifică dacă primele și ultimele caractere ale intervalului de verificat sunt egale. Dacă da, funcția continuă verificarea pentru următorul interval, eliminând prima și ultima literă ale intervalului prin apelarea recursivă a funcției PalRec cu pozițiile începutului și sfârșitului incrementate și, respectiv, decrementate.

Dacă cele două caractere nu sunt egale, funcția returnează 0, semnificând că șirul nu este palindrom.

Rezolvare

<syntaxhighlight lang="python"> def validate_st_dr(st, dr):

   if isinstance(st, int) and isinstance(dr, int) and st <= dr:
       return True
   else:
       return False

def PalRec(a, st, dr):

   if st >= dr:
       return 1
   if a[st] != a[dr]:
       return 0
   return PalRec(a, st + 1, dr - 1)

def main():

   a = input("Introduceti un sir de caractere: ")
   st = input("Introduceti st: ")
   dr = input("Introduceti dr: ")
   try:
       st = int(st)
       dr = int(dr)
       if validate_st_dr(st, dr):
           result = PalRec(a, st, dr)
           if result == 1:
               print("Sirul introdus este palindrom.")
           else:
               print("Sirul introdus nu este palindrom.")
       else:
           print("Valorile st si dr nu sunt valide.")
   except ValueError:
       print("Valorile st si dr trebuie sa fie numere intregi.")

</syntaxhighlight>