OberonCore https://forum.oberoncore.ru/ |
|
откуда берутся значения? https://forum.oberoncore.ru/viewtopic.php?f=35&t=6542 |
Страница 1 из 1 |
Автор: | snark [ Вторник, 21 Январь, 2020 19:00 ] |
Заголовок сообщения: | откуда берутся значения? |
имеется программа.При нажатии на коммандер выдает "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 |
Автор: | Comdiv [ Вторник, 21 Январь, 2020 19:54 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
Данные берутся с того самого стека, который обеспечивает хранилище для локальных переменных. Что там лежало до вызова процедуры, то и будет значением соответствующей переменной. Иван уже отвечал про схожую ситуацию |
Автор: | Иван Денисов [ Вторник, 21 Январь, 2020 20:45 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
Тут скорее всего идет считывание данных с помощью модуля In. Код: In.Open; In.Int(x); Он берет данные из фокуса пользовательского ввода. |
Автор: | Comdiv [ Вторник, 21 Январь, 2020 21:19 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
В случае невозможности прочитать - ~In.Done, x остаётся неинициализированной |
Автор: | Иван Денисов [ Среда, 22 Январь, 2020 06:21 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
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.
|
Автор: | Comdiv [ Среда, 22 Январь, 2020 11:47 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
Иван Денисов писал(а): Вот так было бы правильно? Да
|
Автор: | adimetrius [ Среда, 22 Январь, 2020 12:58 ] |
Заголовок сообщения: | Re: откуда берутся значения? |
И еще: в книге, возможно, используется 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-параметров процедур. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |