Задача тижня 23.04.12 – 29.04.12
Дужки
Комп’ютерна обробка виразів (арифметичних, логічних) розпочинається з перевірки того, чи є запис виразу правильним – лексично, синтаксично, семантично.
Семантичний аналіз (від грецького semantikos – означаючий) полягає у перевірці змісту та сутності лексем і елементів виразу. Зокрема він відповідає за виявлення явних спроб ділення на нуль, обчислення квадратного кореня з від’ємного числа і тому подібних випадків.
Одна з вимог синтаксичної правильності полягає у формальній правильності розстановки дужок.
1. Створіть програму, що перевіряє правильність розстановки дужок у заданому виразі.
Вхідні дані
V – рядок, у якому подано вираз, вводиться з клавіатури або з файлу.
Вихідні дані
R – рядок, який має значення «так» або «ні» – результат перевірки, виводиться на екран.
2. Заповніть тестову таблицю за результатами роботи програми:
| № | V | R |
| 1 | (((А)*(В-C)-D)/2) | так |
| 2 | (А+В*(C-D) | ні |
| 3 | X-((А-В)*С)+(D/(E+F))/Y | |
| 4 | А-(X/(В*С)+D/(E+F) | |
| 5 | (D+(F-(А-В)*С)+D/(E+F)))( | |
| 6 | )((А-В)*С)+(D/(E+F))) | |
| 7 | D+(F-(А-В)/F+(K))*С+(D/(E+F) | |
| 8 | D+(F-(А-В/F)+K)*С)/D/(E+F) | |
| 9 | (А+(C+B))/K-D)*(B+F/(A+B*C) |
Аналіз розв’язку задачі «Дужки»
Рішення матиме вигляд:
Введемо змінні:
V – заданий рядок;
n – ціле число, довжина рядка V;
k – ціле число, «лічильник» дужок;
R – рядок, який має значення «так» або «ні» – результат перевірки рядка V;
i – ціле число, допоміжна змінна.
кінець.
Тестова таблиця за результатами роботи програми:
| № | V | R |
| 1 | (((А)*(В-C)-D)/2) | так |
| 2 | (А+В*(C-D) | ні |
| 3 | X-((А-В)*С)+(D/(E+F))/Y | так |
| 4 | А-(X/(В*С)+D/(E+F) | ні |
| 5 | (D+(F-(А-В)*С)+D/(E+F)))( | ні |
| 6 | )((А-В)*С)+(D/(E+F))) | ні |
| 7 | D+(F-(А-В)/F+(K))*С+(D/(E+F) | ні |
| 8 | D+(F-(А-В/F)+K)*С)/D/(E+F) | ні |
| 9 | (А+(C+B))/K-D)*(B+F/(A+B*C) | ні |
Журі оцінило надіслані розв’язки наступним чином:
| № | Учасник | Кількість балів |
| 1 | Kolgatin Andrey | 4 |
| 2 | forsh3 | 4 |
| 3 | SERGEY | 4 |




