3795 - Paranteze4

From Bitnami MediaWiki
Revision as of 14:55, 15 December 2023 by Mesarosdenisa (talk | contribs) (Pagină nouă: == 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 s...)
(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 gaseste_paranteza_deschisa(paranteze):

   stack = []  # Folosim un stack pentru a urmări parantezele deschise
   rezultat = {}  # Dicționar pentru a stoca rezultatele finale
   for i, paranteza in enumerate(paranteze):
       if paranteza == '(':  # Dacă întâlnim o paranteză deschisă, o adăugăm în stack
           stack.append(i + 1)  # Adăugăm 1 pentru că indexarea începe de la 0, dar parantezele sunt numerotate de la 1
       elif paranteza == ')':  # Dacă întâlnim o paranteză închisă
           if stack:  # Verificăm dacă stack-ul nu este gol
               deschisa = stack.pop()  # Scoatem ultima paranteză deschisă din stack
               rezultat[i + 1] = deschisa  # Adăugăm rezultatul în dicționar
           else:
               print("Parantezele nu sunt corect parantezate.")
   return rezultat
  1. Citire șir de paranteze de la tastatură

paranteze_input = input("Introduceți șirul de paranteze rotunde corect parantezat: ")

  1. Rezolvare și afișare rezultat

rezultat = gaseste_paranteza_deschisa(paranteze_input) print("Parantezele deschise corespunzătoare:") for inchisa, deschisa in rezultat.items():

   print(f"{inchisa}: {deschisa}")

</syntaxhighlight>

Explicatie

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

 1       4   5 3   6 2