Инструменты пользователя

Инструменты сайта


msx:basic_programming_guide:03

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

msx:basic_programming_guide:03 [2019-11-02 11:40]
msx:basic_programming_guide:03 [2020-03-21 22:52]
Строка 48: Строка 48:
   * n — любой существующий номер строки в программе,​ 0≤n≤65529.   * n — любой существующий номер строки в программе,​ 0≤n≤65529.
  
-Оператор ''​GOTO''​ передаёт управление программной строке с указанным номером n. Если в программе нет строки с этим номером,​ то выдаётся сообщение: ​\\ <WRAP centeralign>"​Undefined line number"​ \\ (//"​Номер строки не определён"//​).</​WRAP>​+Оператор ''​GOTO''​ передаёт управление программной строке с указанным номером n. Если в программе нет строки с этим номером,​ то выдаётся сообщение:​ <WRAP centeralign>"​Undefined line number"​ \\ (//"​Номер строки не определён"//​).</​WRAP>​
  
 Управление передаётся заданной строке,​ даже если в ней нет выполняемого оператора;​ например,​ в строке может находиться оператор ''​REM''​. Поскольку,​ однако,​ оператор ''​REM''​ не исполняется,​ лучше передавать управление следующему за ним исполняемому оператору. В этом случае программа будет выполняться правильно и после удаления программной строки,​ содержащей комментарии. Управление передаётся заданной строке,​ даже если в ней нет выполняемого оператора;​ например,​ в строке может находиться оператор ''​REM''​. Поскольку,​ однако,​ оператор ''​REM''​ не исполняется,​ лучше передавать управление следующему за ним исполняемому оператору. В этом случае программа будет выполняться правильно и после удаления программной строки,​ содержащей комментарии.
Строка 259: Строка 259:
 Напомним,​ что //​семантика//​ (от греч."​semantikos"​ — "​обозначающий"​) — значения единиц языка, а //​синтаксис//​ (от греч."​syntaxis"​ — "​построение,​порядок"​) — способы соединения слов (и их форм) в словосочетания,​ предложения и текст. Напомним,​ что //​семантика//​ (от греч."​semantikos"​ — "​обозначающий"​) — значения единиц языка, а //​синтаксис//​ (от греч."​syntaxis"​ — "​построение,​порядок"​) — способы соединения слов (и их форм) в словосочетания,​ предложения и текст.
  
-Опишем семантику конструкции ''​IF…THEN…ELSE… ''​. Вначале вычисляется значение условия. Если в качестве условия записано строковое выражение,​ то выдаётся сообщение об ошибке: ​\\ <WRAP centeralign>"​Type mismatch"​ \\ (//"​Несоответствие типов"//​).</​WRAP>​+Опишем семантику конструкции ''​IF…THEN…ELSE… ''​. Вначале вычисляется значение условия. Если в качестве условия записано строковое выражение,​ то выдаётся сообщение об ошибке:​ <WRAP centeralign>"​Type mismatch"​ \\ (//"​Несоответствие типов"//​).</​WRAP>​
  
 Если условие истинно (TRUE), то управление передаётся фразе ''​THEN'';​ если условие ложно (''​FALSE''​) и есть фраза ''​ELSE'',​ то управление передаётся фразе ''​ELSE'';​ если условие ложно (''​FALSE''​) и нет фразы ''​ELSE'',​ то управление передаётся первому оператору //​следующей//​ программной строки (то есть условно можно считать,​ что фраза ''​ELSE''​ есть, но за ней стоит "​пустой"​ оператор,​ не производящий никаких действий). Если условие истинно (TRUE), то управление передаётся фразе ''​THEN'';​ если условие ложно (''​FALSE''​) и есть фраза ''​ELSE'',​ то управление передаётся фразе ''​ELSE'';​ если условие ложно (''​FALSE''​) и нет фразы ''​ELSE'',​ то управление передаётся первому оператору //​следующей//​ программной строки (то есть условно можно считать,​ что фраза ''​ELSE''​ есть, но за ней стоит "​пустой"​ оператор,​ не производящий никаких действий).
Строка 662: Строка 662:
 Если p=0 или p>k, то выполняется оператор,​ следующий за ''​ON''​. Если p=0 или p>k, то выполняется оператор,​ следующий за ''​ON''​.
  
-Если же p<0, то последует сообщение об ошибке: ​\\ <WRAP centeralign>"​Illegal function call" \\ (//"​Неправильный вызов функции"//​).</​WRAP>​+Если же p<0, то последует сообщение об ошибке:​ <WRAP centeralign>"​Illegal function call" \\ (//"​Неправильный вызов функции"//​).</​WRAP>​
  
 __//​Примеры//​__:​ __//​Примеры//​__:​
Строка 1304: Строка 1304:
 </​WRAP>​ </​WRAP>​
  
-Как уже говорилось,​ тело цикла может содержать второй цикл — //​внутренний//​ по отношению к первому,​ //​внешнему//​ циклу ("​бумажные стаканчики"​). Внутренний цикл должен целиком содержаться в теле внешнего цикла. Таким образом,​ оператор ''​NEXT''​ для внутреннего цикла должен стоять перед оператором ''​NEXT''​ внешнего цикла. Нарушение этого правила приводит к появлению на экране сообщения об ошибке: ​\\ <WRAP centeralign>"​NEXT without FOR in ..." \\ (//"​Оператор NEXT без оператора FOR в строке …"//​).</​WRAP>​+Как уже говорилось,​ тело цикла может содержать второй цикл — //​внутренний//​ по отношению к первому,​ //​внешнему//​ циклу ("​бумажные стаканчики"​). Внутренний цикл должен целиком содержаться в теле внешнего цикла. Таким образом,​ оператор ''​NEXT''​ для внутреннего цикла должен стоять перед оператором ''​NEXT''​ внешнего цикла. Нарушение этого правила приводит к появлению на экране сообщения об ошибке:​ <WRAP centeralign>"​NEXT without FOR in ..." \\ (//"​Оператор NEXT без оператора FOR в строке …"//​).</​WRAP>​
  
 {{anchor:​e034-20}} __//​Пример//​__. \\ {{.examples:​034-20.bas|}} \\ [[+tab|wmsxbpge>​034-20.bas]] {{anchor:​e034-20}} __//​Пример//​__. \\ {{.examples:​034-20.bas|}} \\ [[+tab|wmsxbpge>​034-20.bas]]
Строка 1321: Строка 1321:
 Учтите,​ что каждый оператор ''​FOR…NEXT''​ занимает при работе 25 байтов //​стека//,​ причём стек освобождается только при завершении цикла, после последнего выполнения оператора ''​NEXT''​! Учтите,​ что каждый оператор ''​FOR…NEXT''​ занимает при работе 25 байтов //​стека//,​ причём стек освобождается только при завершении цикла, после последнего выполнения оператора ''​NEXT''​!
  
-Тем не менее, если программа использует слишком много циклов одновременно,​ может возникнуть сообщение об ошибке: ​\\ <WRAP centeralign>"​Out of memory"​ \\ (//"​Выход за пределы памяти"//​).</​WRAP>​+Тем не менее, если программа использует слишком много циклов одновременно,​ может возникнуть сообщение об ошибке:​ <WRAP centeralign>"​Out of memory"​ \\ (//"​Выход за пределы памяти"//​).</​WRAP>​
  
 Если требуется,​ чтобы несколько вложенных операторов ''​FOR''​ заканчивались в одном месте, можно использовать один оператор ''​NEXT'',​ содержащий список параметров циклов,​ разделённых запятыми:​ первое имя в списке соответствует самому внутреннему,​ последнее — самому внешнему циклу. Если требуется,​ чтобы несколько вложенных операторов ''​FOR''​ заканчивались в одном месте, можно использовать один оператор ''​NEXT'',​ содержащий список параметров циклов,​ разделённых запятыми:​ первое имя в списке соответствует самому внутреннему,​ последнее — самому внешнему циклу.
Строка 1382: Строка 1382:
 </​WRAP>​ </​WRAP>​
  
-Операторы ''​FOR''​ и ''​NEXT'',​ как правило,​ должны идти в паре и быть согласованы друг с другом. Если оператор ''​NEXT''​ выполняется раньше оператора ''​FOR''​ с тем же параметром цикла, то при выполнении такого ''​NEXT''​ выдаётся сообщение об ошибке: ​\\ <WRAP centeralign>"​NEXT without FOR" ​ \\ //​("​Нет оператора FOR для данного NEXT"//​).</​WRAP>​+Операторы ''​FOR''​ и ''​NEXT'',​ как правило,​ должны идти в паре и быть согласованы друг с другом. Если оператор ''​NEXT''​ выполняется раньше оператора ''​FOR''​ с тем же параметром цикла, то при выполнении такого ''​NEXT''​ выдаётся сообщение об ошибке:​ <WRAP centeralign>"​NEXT without FOR" ​ \\ //​("​Нет оператора FOR для данного NEXT"//​).</​WRAP>​
  
 Оператор ''​FOR…NEXT''​ — единственный способ в [[msx:​basic:​]] для изменения естественного порядка выполнения операторов без задания номеров программных строк, на которые нужно перейти. Оператор ''​FOR…NEXT''​ — единственный способ в [[msx:​basic:​]] для изменения естественного порядка выполнения операторов без задания номеров программных строк, на которые нужно перейти.
Строка 2488: Строка 2488:
  
  
-{{tag>​MSX BASIC Book}}+{{tag>​MSX BASIC Book_msxbpg}}
msx/basic_programming_guide/03.txt · Последние изменения: 2022-09-09 23:26 (внешнее изменение)