Как разрешаются вложенные циклы if-else в BASIC

У меня есть этот устаревший код, который я анализирую:

If (X) then
    if Cnt < 4 then Cnt = Cnt + 1 ; 4 samples
Else
    if Cnt > 0 then Cnt = Cnt-1   ; keep history
EndIf

У которого Cnt поднимается и опускается в зависимости от X

И мне интересно, действует ли это утверждение else так, как подразумевает их отступ, по их мнению, так оно и есть.

Код можно интерпретировать примерно так:

If (X) then
    if Cnt < 4 then 
        Cnt = Cnt + 1 ; 4 samples
    Else
        if Cnt > 0 then 
            Cnt = Cnt-1   ; keep history
EndIf

В котором Cnt становится равным 4, а затем включается/выключается, если X истинно.

Это базовый файл, скомпилированный с использованием BCI51. Это базовый компилятор для 8051, выпущенный еще в 1990 году компанией Systronix.

Как в основном разрешаются вложенные пары if-else?


person Philip    schedule 18.11.2013    source источник


Ответы (1)


Я помню, как это делал QBasic, и я предполагаю, что этот компилятор делает то же самое. Это действительно дергает мою память, так что я могу ошибаться.

Если за IF THEN следует код в той же строке, то он полностью содержится. Следовательно

if Cnt < 4 then Cnt = Cnt + 1
else
   ...

будет незаконным, и вы должны поместить Cnt = Cnt + 1 в отдельную строку, чтобы создать многострочный оператор IF. Таким образом, ELSE находится в паре с самой верхней IF

Поскольку в исходном коде Cnt = Cnt + 1 и Cnt = Cnt - 1 находятся в тех же строках, что и IF THEN, я бы интерпретировал код следующим образом:

If (X) then
    If Cnt < 4 Then
        Cnt = Cnt + 1 ; 4 samples
    EndIf
Else
    If Cnt > 0 Then
        Cnt = Cnt-1   ; keep history
    EndIf
EndIf

Итак, да, я считаю, что код работает так, как следует из отступа.

Можете ли вы изменить код и проверить, если вы видите какие-либо изменения?

person DrRobotNinja    schedule 18.11.2013
comment
Ах, я не знал об одном и том же аспекте основ. И да, изменить код легко, но для его тестирования требуется чип 8051. Власти не хотят, чтобы я прикасался к их производству. Хм, да, самым безопасным путем было бы получить 8051 и протестировать его. - person Philip; 19.11.2013
comment
Это правильно, аспект одной строки подразумевает конец, если это означает, что он работает так, как задумано. Это груз с моей груди. Спасибо Доктор Робот Ниндзя. - person Philip; 19.11.2013