OberonCore https://forum.oberoncore.ru/ |
|
Как правильно вводить данные через модуль In? https://forum.oberoncore.ru/viewtopic.php?f=23&t=2033 |
Страница 1 из 1 |
Автор: | Виталий [ Вторник, 10 Ноябрь, 2009 15:25 ] |
Заголовок сообщения: | Как правильно вводить данные через модуль In? |
Всем доброго. Хочу изучать Оберон. Пользую Блэк Бокс. Прочитал с этого портала пару книг - терь хочу попрактиковаться. Первая программа: Код: MODULE q; IMPORT In, StdLog; PROCEDURE aga*; VAR q,w:INTEGER; BEGIN w:=0; StdLog.Clear; In.Open; WHILE In.Done DO In.Int(q); w:=w+q; StdLog.Int(w); StdLog.Ln; END END aga; END q. Вопрос: Я ввожу значения (предположим я не знаю сколько их будет) так: ниже командера на следующей строке написал 23 4 67. Выделил их. И нажал на командер. В логе получил Цитата: 23 27 94 161 Что я делаю неверно и как правильно вводить числа. |
Автор: | Александр Ильин [ Вторник, 10 Ноябрь, 2009 15:30 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Виталий писал(а): В логе получил Вы забыли написать, что вы ожидали получить.
Что я делаю неверно и как правильно вводить числа. |
Автор: | Александр Ильин [ Вторник, 10 Ноябрь, 2009 15:34 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Проверять In.Done нужно после каждого вызова In.Int. Код: MODULE q;
IMPORT In, StdLog; PROCEDURE aga*; VAR q,w:INTEGER; BEGIN w:=0; StdLog.Clear; In.Open; In.Int(q); (* <- сюда *) WHILE In.Done DO (* In.Int(q); -> отсюда *) w:=w+q; StdLog.Int(w); StdLog.Ln; In.Int(q); (* <- и сюда *) END END aga; END q. |
Автор: | А.П. [ Вторник, 10 Ноябрь, 2009 15:40 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Виталий писал(а): Хочу изучать Оберон. ...Что я делаю неверно и как правильно вводить числа. Перед циклом надо сделать ввод первого числа. Ввод остальных надо делать В КОНЦЕ цикла. Тогда In.Done будет правильно регулировать выход из цикла при любом количестве подряд идущих чисел во входном потоке. |
Автор: | Виталий [ Вторник, 10 Ноябрь, 2009 15:56 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Цитата: Вы забыли написать, что вы ожидали получить. Млин точно. Желаю просуммировать числа. Пока тут читал книги и понял что капитально тупанул. Подкорректировал свой код на основании Цитата: Перед циклом надо сделать ввод первого числа. Ввод остальных надо делать В КОНЦЕ цикла. Код: PROCEDURE aga*; VAR q,w:INTEGER; BEGIN w:=0; StdLog.Clear; In.Open; REPEAT In.Int(q); w:=w+q; UNTIL ~In.Done; StdLog.Int(w); StdLog.Ln; END aga; Выделил 2 2 2 Ожидал получить 6 а получил 8 в Логе. Где я опять напортачил? Попутный вопрос - как мне пошагам прогу отлаживать? Есть в ББ такая возможность? |
Автор: | Trurl [ Вторник, 10 Ноябрь, 2009 16:23 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Код: REPEAT
In.Int(q); (* последний раз In.Done=FALSE *) w:=w+q; (* а мы все равно суммируем *) UNTIL ~In.Done; |
Автор: | Виталий [ Вторник, 10 Ноябрь, 2009 16:34 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
А так: Код: In.Open; WHILE In.Done DO In.Int(q); w:=w+q; END; StdLog.Int(w); Тоже на 2 2 2 восьмерку дает... Думал что мешает старая загрузка. выполнил Compile and Unload но все равно... Чего-то недопонимаю а чего... Вот если зарядить: Код: FOR i:=1 TO 3 DO In.Int(q); w:=w+q; END; Отрабатывает верно, значит я неверно понимаю работу Done? Все Наконец то дошло!!! Код: MODULE q; IMPORT In, StdLog; PROCEDURE aga*; VAR i,q,w:INTEGER; BEGIN w:=0; StdLog.Clear; In.Open; In.Int(q); WHILE In.Done DO w:=w+q; In.Int(q); END; StdLog.Int(w); StdLog.Ln; END aga; END q. q.aga Я действительно не в ту степь поехал Всем спасибо за терпение, думаю у меня еще будут подобные вопросы. ![]() |
Автор: | Илья Ермаков [ Вторник, 10 Ноябрь, 2009 19:16 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
По поводу пошаговой отладки: http://www.inr.ac.ru/~info21/blackbox/d ... lcome.html Зато просто просмотр состояния программы в какой-то точке - сколько угодно. Вставьте оператор HALT(0) - и на этом месте выполнение алгоритма будет остановлено, откроется навигатор памяти. |
Автор: | Виталий [ Среда, 11 Ноябрь, 2009 14:15 ] |
Заголовок сообщения: | Re: Как правильно вводить данные через модуль In? |
Илья Ермаков писал(а): По поводу пошаговой отладки: http://www.inr.ac.ru/~info21/blackbox/d ... lcome.html Зато просто просмотр состояния программы в какой-то точке - сколько угодно. Вставьте оператор HALT(0) - и на этом месте выполнение алгоритма будет остановлено, откроется навигатор памяти. О! Точно HALT... Долго вспоминал как это называется, спасибо ) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |