| 
| 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, удаляем последний элемент из стека, а после этого пишем с тем же отступом.
 
 |  |  |  |  |