leito747 | Дата: Четверг, 01 Ноября 2012, 18:59 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Имеется файл на бейсик с циклами. # FOR ID= ............... ............... # NEXT ID , где #-числовой номер(метка); ID-идентификатор параметра цикла. Требуется:
с помощью стека проверить правильность вложенности циклов; переписать файл с исходным текстом так, чтобы операторы цикла каждого последующего уровня вложения были сдвинуты на две позиции вправо по сравнению с предыдущим уровнем. Кто нибудь может помочь с написанием
Game developer
|
|
| |
RUNGOGET2THECHOPAH | Дата: Четверг, 01 Ноября 2012, 21:58 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Суть такова: Правильность вложенности. Бежим по файлу: 1. Если встречаем # FOR ID=, кладем в стек (который изначально пуст) что-то, что однозначно идентифицирует данный цикл (идентификатор, насколько я понял). 2. Если встречаем # NEXT ID, пытаемся достать из стека последний добавленный в него элемент. 2.1. Если при этом стек уже пуст, то найдена ошибка - попытка закрыть несуществующий цикл. 2.2. Если то, что мы достали, не совпадает с идентификатором из # NEXT ID, то найдена ошибка - несоответствие FOR и NEXT. 2.3. Если совпадает, то бежим по файлу дальше. 3. Если файл кончился: 3.1. Стек пуст - ошибок не найдено. 3.2. Стек не пуст - ошибка - незакрытый(е) цикл(ы).
Сдвиг позиций (с учетом того, что проверка на правильность уже произведена) 1. Копируем содержимое файла в память, стек пуст. 2. Бежим по строчкам: 2.1. Если текущая строчка не содержит ни FOR, ни NEXT, то пишем ее в файл с отступом равным 2*(текущий размер стека). 2.2. Если содержит FOR, пишем с тем же отступом, а потом добавляем что-нибудь в стек (идентификатор, например). 2.3. Если содержит NEXT, удаляем последний элемент из стека, а после этого пишем с тем же отступом.
|
|
| |