Informator maturalny 2023: Zadanie 2
Arkusz i pliki wymieniane w tym zadaniu można pobrać ze strony CKE.
Bezpośredni link do plików znajduje się tutaj.
Zadanie
Wyrażeniem nawiasowym nazywamy dowolny skończony ciąg nawiasów: „[”
i „]”
.
Przykładowo: [[][]]
Wyrażenie nawiasowe jest poprawne, jeśli:
- jest wyrażeniem pustym (nie zawiera żadnych nawiasów),
- jest postaci
AB
, gdzieA
iB
są poprawnymi wyrażeniami nawiasowymi, - jest postaci
[A]
, gdzieA
jest poprawnym wyrażeniem nawiasowym.
Przykład: wyrażenia [[]]
oraz [[][]]
są poprawne. Niepoprawne jest za to wyrażenie []][]]
.
Niech w1, w2, …, wn będą kolejnymi nawiasami w pewnym wyrażeniu nawiasowym W. Przyjmijmy teraz, że z każdym nawiasem otwierającym „[”
wiążemy liczbę +1
, a z każdym nawiasem zamykającym „]”
– liczbę -1
. Niech si będzie liczbą związaną z nawiasem wi. Wówczas głębokością nawiasu wk w wyrażeniu W nazywamy sumę:
Sk = s1 + s2 + … + sk
Głębokością wyrażenia W nazwiemy największą głębokość jego nawiasów, czyli maksimum z liczb Sk.
Zadanie 2.3 (0-3)
Dane w pliku dane2_3.txt zapisano w oddzielnych wierszach. W każdym wierszu znajduje się poprawne wyrażenie nawiasowe złożone z nawiasów kwadratowych (nieoddzielonych żadnym znakiem). Zapisz program, który dla zadanych wyrażeń nawiasowych w pliku dane2_3.txt obliczy ich głębokości.
Do oceny oddajesz:
- plik zadanie2_3.txt zawierający odpowiedź do zadania (głębokości kolejnych wyrażeń, każda w osobnym wierszu)
- pliki(i) z komputerową realizacją zadania (kodem programu).
Rozwiązanie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | def glebokosc(s): #Funkcja badająca głębokość jednego wyrażenia tmp = 0 res = 0 for i in s: if i == '[': tmp += 1 if tmp >= res: res = tmp else: tmp -= 1 return str(res) f = open('dane2_3.txt', 'r') x = f.readlines() x_new = [i.rstrip('\n') for i in x] f.close() f = open('zadanie2_3.txt', 'w') for i in x_new: f.write(glebokosc(i)) f.write('\n') |
Zadanie 2.4 (0-3)
Napisz program, który dla wyrażeń nawiasowych zapisanych w pliku dane2_4.txt sprawdzi, czy są one poprawne. Dane w pliku zapisano po jednym wyrażeniu w wierszu, podobnie jak w pliku o nazwie dane2_3.txt.
Do oceny oddajesz:
- plik zadanie2_4.txt zawierający odpowiedź do zadania (w kolejnych wierszach odpowiedzi ‘tak’, jeśli wyrażenie jest poprawne lub ‘nie’ – jeśli jest niepoprawne)
- pliki(i) z komputerową realizacją zadania (kodem programu).
Rozwiązanie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def czy_poprawne(s): #Funkcja bilansująca nawiasy w wyrażeniu bilans = 0 for i in s: if i == '[': bilans += 1 else: bilans -= 1 if bilans < 0: return 'nie\n' return 'tak\n' f = open('dane2_4.txt', 'r') x = f.readlines() x_new = [i.rstrip('\n') for i in x] f.close() f = open('zadanie2_4.txt', 'w') for i in x_new: f.write(czy_poprawne(i)) |