OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 03 Июль, 2020 17:49

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: откуда берутся значения?
СообщениеДобавлено: Вторник, 21 Январь, 2020 19:00 
Аватара пользователя

Зарегистрирован: Понедельник, 13 Январь, 2020 15:49
Сообщения: 6
имеется программа.При нажатии на коммандер выдает "5 в квадрате это 25" при всех следующих нажатиях "16 в квадрате это 256" Вопрос: почему так?Ведь начальные числа 5 и 16 нигде явно не указаны?Тут только одни иксы стоят?

MODULE MModul;

IMPORT
In, Out;

PROCEDURE Quadrat ( x : INTEGER ) : INTEGER;
BEGIN
RETURN x*x;
END Quadrat;

PROCEDURE MW*;
VAR
x : INTEGER;
BEGIN
In.Open; In.Int(x);
Out.Int(x,1); Out.String(" в квадрате это ");
Out.Int(Quadrat(x),1);
Out.String("."); Out.Ln;
END MW;

BEGIN
Out.Open;
END MModul.

MModul.MW


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Вторник, 21 Январь, 2020 19:54 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1092
Откуда: Киев
Данные берутся с того самого стека, который обеспечивает хранилище для локальных переменных. Что там лежало до вызова процедуры, то и будет значением соответствующей переменной. Иван уже отвечал про схожую ситуацию


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Вторник, 21 Январь, 2020 20:45 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2757
Тут скорее всего идет считывание данных с помощью модуля In.
Код:
In.Open; In.Int(x);

Он берет данные из фокуса пользовательского ввода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Вторник, 21 Январь, 2020 21:19 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1092
Откуда: Киев
В случае невозможности прочитать - ~In.Done, x остаётся неинициализированной


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Среда, 22 Январь, 2020 06:21 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2757
Comdiv писал(а):
В случае невозможности прочитать - ~In.Done, x остаётся неинициализированной


Вот так было бы правильно?
Код:
PROCEDURE MW*;
VAR
x : INTEGER;
BEGIN
   In.Open; In.Int(x);
   IF In.Done THEN
      Out.Int(x,1); Out.String(" в квадрате это ");
      Out.Int(Quadrat(x),1);
      Out.String("."); Out.Ln;
   END
END MW;


Давно не заходил в этот модуль, и никогда не анализировал, так что удивился, что глобальная переменная не соответствует соглашению об именовании переменных.
Должно быть
Код:
IF In.done THEN
с маленькой буквы.

Видимо это объясняется тем, что для книги так надо
Цитата:
This module is provided for compatibility with the book "Programming in Oberon" by Reiser/Wirth. It is useful when learning the language. It is not recommended for use in production programs.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Среда, 22 Январь, 2020 11:47 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1092
Откуда: Киев
Иван Денисов писал(а):
Вот так было бы правильно?
Да


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: откуда берутся значения?
СообщениеДобавлено: Среда, 22 Январь, 2020 12:58 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 243
И еще: в книге, возможно, используется In.Int, а в ББ удобно для тестов использовать:

MODULE M;

IMPORT Log;

PROCEDURE DoSomething* (x, y: INTEGER);
BEGIN Log.Int(x + y); Log.Ln
END DoSomething;

PROCEDURE Length* (IN s: ARRAY OF CHAR);
BEGIN Log.String("Длина строки:"); Log.Int(LEN(s$)); Log.Ln
END Length;

END M.

:!: "M.DoSomething(2, 3)"
:!: "M.DoSomething('Hello BlackBox!')"

ПС Если в коммандере передаются параметры, обязательно заключать в кавычки весь вызов. Строковые константы - в апострофах, и допускаются только для IN-параметров процедур.


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

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


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

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


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

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