OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 15 Июнь, 2025 06:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 15:25 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Всем доброго.
Хочу изучать Оберон. Пользую Блэк Бокс.
Прочитал с этого портала пару книг - терь хочу попрактиковаться.
Первая программа:
Код:
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 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Виталий писал(а):
В логе получил
Что я делаю неверно и как правильно вводить числа.
Вы забыли написать, что вы ожидали получить.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 15:34 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Проверять 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 17:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 15:40 

Зарегистрирован: Пятница, 02 Декабрь, 2005 14:35
Сообщения: 210
Откуда: Россия, Томск
Виталий писал(а):
Хочу изучать Оберон. ...Что я делаю неверно и как правильно вводить числа.

Перед циклом надо сделать ввод первого числа.
Ввод остальных надо делать В КОНЦЕ цикла. Тогда In.Done будет правильно регулировать выход из цикла при любом количестве подряд идущих чисел во входном потоке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 15:56 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Цитата:
Вы забыли написать, что вы ожидали получить.

Млин точно.
Желаю просуммировать числа.
Пока тут читал книги и понял что капитально тупанул. Подкорректировал свой код на основании
Цитата:
Перед циклом надо сделать ввод первого числа.
Ввод остальных надо делать В КОНЦЕ цикла.


Код:
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 в Логе.
Где я опять напортачил?

Попутный вопрос - как мне пошагам прогу отлаживать?
Есть в ББ такая возможность?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 16:23 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1437
Код:
REPEAT
   In.Int(q); (* последний раз In.Done=FALSE  *)
   w:=w+q; (* а мы все равно суммируем *)
UNTIL ~In.Done;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 16:34 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
А так:
Код:
 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


Я действительно не в ту степь поехал

Всем спасибо за терпение, думаю у меня еще будут подобные вопросы.
:wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 19:16 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
По поводу пошаговой отладки:
http://www.inr.ac.ru/~info21/blackbox/d ... lcome.html

Зато просто просмотр состояния программы в какой-то точке - сколько угодно. Вставьте оператор HALT(0) - и на этом месте выполнение алгоритма будет остановлено, откроется навигатор памяти.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 14:15 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Илья Ермаков писал(а):
По поводу пошаговой отладки:
http://www.inr.ac.ru/~info21/blackbox/d ... lcome.html

Зато просто просмотр состояния программы в какой-то точке - сколько угодно. Вставьте оператор HALT(0) - и на этом месте выполнение алгоритма будет остановлено, откроется навигатор памяти.

О! Точно HALT... Долго вспоминал как это называется, спасибо )


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB