3795 - Paranteze4

From Bitnami MediaWiki
Revision as of 12:23, 29 December 2023 by Mesarosdenisa (talk | contribs) (→‎Rezolvare)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinta

Să se scrie un program care citește un șir de paranteze rotunde care se închid corect (corect parantezat) în care parantezele deschise sunt numerotate de la stânga la dreapta, începând de la 1, și determină pentru fiecare paranteză închisă numărul de ordine al parantezei deschise corespunzătoare.

Un șir de paranteze rodunde S este corect parantezat dacă:

  • S este șirul vid, sau
  • S = (T) și T este corect parantezat, sau
  • S = AB, iar A și B sunt corect parantezate.

Date de intrare

Programul citește de la tastatură șir de paranteze rotunde, corect parantezat.

Date de iesire

Programul va afișa pe ecran, pentru fiecare paranteză închisă, poziția în șir a parantezei deschise corespunzătoare.

Restrictii si precizari

  • șirul citit va conține cel mult 254 de caractere, numai ( și );
  • în șirul dat caracterele sunt numerotate de la 1.

Exemplul 1

Intrare
()((()())())
Iesire

Datele introduse corespund restrictiilor impuse

1 4 5 3 6 2

Exemplul 2

Intrare
( ) b a / .
Iesire

Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def paranteze_corecte(sir):

   stiva = []
   rezultat = []
   for i, paranteza in enumerate(sir):
       if paranteza == '(':
           stiva.append(i + 1)
       elif paranteza == ')':
           if stiva:
               deschisa = stiva.pop()
               rezultat.append((deschisa, i + 1))
           else:
               print("Parantezele nu sunt corect parantezate.")
               return None
   if stiva:
       print("Parantezele nu sunt corect parantezate.")
       return None
   return rezultat

def verificare_date_intrare(sir):

   return all(caracter in '()' for caracter in sir) and len(sir) <= 254
  1. Citire șir de paranteze rotunde

sir_paranteze = input("Introduceți șirul de paranteze rotunde: ")

  1. Verificare date de intrare

if not verificare_date_intrare(sir_paranteze):

   print("Datele introduse nu corespund restrictiilor impuse")

else:

   # Calcul și afișare rezultate
   rezultate = paranteze_corecte(sir_paranteze)
   if rezultate:
       for deschisa, inchisa in rezultate:
           print(f"Paranteza deschisa la pozitia {deschisa} se inchide la pozitia {inchisa}.")


</syntaxhighlight>

Explicatie

1 2 3 4 5 6 ( ) ( ( ( ) ( ) ) ( ) )

 1       4   5 3   6 2