Задачка со временем

Обсуждение программ nnCron и nnCron LITE

Задачка со временем

Postby spronkin » Wed, 27 Jan 2016, 01:11

Помогите разобраться со следующей задачей. Нужно в окне ввода указать значение времени, вычесть его из текущего времени и разницу в минутах вывести на экран.
Code: Select all
Action:
    WIN-INPUT-TEXT: “введите” “текст в формате hh:mm” “” 0 0=
IF
    TimeMin@ SH:M>Min - N>S MsgBox
THEN

ЧЯДНТ? Подозрение на SH:M>Min, я не до конца понял, как она работает.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Задачка со временем

Postby AlikasS » Wed, 27 Jan 2016, 05:27

Code: Select all
Action:
    WIN-INPUT-TEXT: “введите” “текст в формате hh:mm” “” 0 0=
IF
     SH:M>Min TimeMin@ - N>S MsgBox
THEN

только в таком порядке из веденного времени отнимается текущее
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Задачка со временем

Postby spronkin » Wed, 27 Jan 2016, 12:32

Не, мне нужно наоборот, из текущего введенное, но вопрос, правильный ли текст задачи, вчера проверял, выдавалась ошибка -1000000 какая-то, не помню, сегодня еще раз проверю.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Задачка со временем

Postby VoidVolker » Wed, 27 Jan 2016, 14:12

Кавычки не те.
Code: Select all
Action:
WIN-INPUT-TEXT: "введите" "текст в формате hh:mm" "" 0 0=
IF
    \ a1 u1
    SH:M>Min  \ n1_minutes
    TimeMin@  \ n2_minutes
    SWAP -    \ n3
    N>S       \ a2 u2
    MsgBox
THEN
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Задачка со временем

Postby spronkin » Thu, 28 Jan 2016, 03:29

VoidVolker, объясните пожалуйста, почему SH:M>Min должен идти первым словом после выполнения условия? Т.е. я правильно понимаю, что SH:M>Min снимает со стека адрес и текст строки и помещает в стек просто число минут и если ввести TimeMin@ сразу после выполнения условия, то последующее слово SH:M>Min вместо a1 u1 снимет со стека u1 n1 и получится какая-то каша. Вот как я себе это представляю:
Code: Select all
Action:
WIN-INPUT-TEXT: "введите" "текст в формате hh:mm" "" 0 0=
    IF \ a1 u1
        TimeMin@ \ a1 u1 n1
        SH:M>Min \ a1 n2
        SWAP - \ n3
        N>S \ a2 u2
        MsgBox
    THEN

Но почему в конце получаю Внутреннюю ошибку Error # -1073741819? Ведь на стеке все равно адрес и текст строки a2 u2? Или nncron не умеет вычитать a1-n2 и поэтому выдает ошибку? Можно по-подробнее объяснить?

VoidVolker wrote:Кавычки не те.

Извините, писал с мобильника, не сообразил сразу, я понял и в тексте задачи использовал правильные.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Задачка со временем

Postby VoidVolker » Thu, 28 Jan 2016, 10:45

spronkin wrote:объясните пожалуйста, почему SH:M>Min должен идти первым словом после выполнения условия?

Потому что после ввода текста на стеке остается строка - это время. Необходимо строку со временем конвертировать в число. А слово SH:M>Min как раз именно это и делает - принимает на вход строку, а на стеке оставляет число.
spronkin wrote:Т.е. я правильно понимаю, что SH:M>Min снимает со стека адрес и текст строки и помещает в стек просто число минут и

Да.
spronkin wrote:если ввести TimeMin@ сразу после выполнения условия, то последующее слово SH:M>Min вместо a1 u1 снимет со стека u1 n1 и получится какая-то каша. Вот как я себе это представляю:

Не каша, а передача неправильных данных слову SH:M>Min.
spronkin wrote:Но почему в конце получаю Внутреннюю ошибку Error # -1073741819? Ведь на стеке все равно адрес и текст строки a2 u2?

Потому что слово SH:M>Min принимает на вход строку. А ему передается два числа - счетчик строки вместо адреса и время вместо счетчика строки. Строка представлена адресом и числом.
spronkin wrote:Ведь на стеке все равно адрес и текст строки a2 u2?

a2 u2 - это уже результат, а чтобы его получить - надо выполнить правильный код. А в данном случае код неправильный.
Code: Select all
TimeMin@ \ a1 u1 n1
SH:M>Min  \ Вот тут и произойдет ошибка, дальше код не будет выполнен, т.к., вместо адреса лежит счетчик(a1 -> u1), а вместо счетчика - число (время в минутах, u1 -> n1).

Я же ведь специально написал стековый комментарий к каждой строке:
Code: Select all
\ a1 u1
SH:M>Min   \ n1_minutes

Это значит, что перед выполнением данного слова на стеке лежит строка, а после его выполнения - число, время в минутах.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests