4259 - PalRec: Difference between revisions
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ă... |
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. | ||
== | == Explicație == | ||
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 verificatst
- 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>