II.4.6. О п е р а т о р в ы в о д а PRINT в о б щ е м с л у ч а е Формат этого оператора: [L]PRINT[# n,][USING ф о р м а т;] с п и с о к в ы в о д а ("Line PRINT USING" - "форматная печать строки"), где: префикс L задает вывод информации на печатающее устройство (прин- тер); отсутствие даного префикса задает вывод данных на экран дисплея; ф о р м а т - строковое выражение, содержащее информацию о форме представления выводимых данных; с п и с о к в ы в о д а - список выражений любого типа, разделен- ных символами-разделителями: запятой или точкой с запятой; с п и с о к мо- жет быть пуст; n - номер любого открытого файла в диапазоне от 0 до 15 (см. раз- дел V.8); если в операторе присутствует префикс L, то задание параметра [# n,] приводит к синтаксической ошибке; (применение оператора PRINT с па- раметром [# n,] см. в разделе V.8). Кроме того, служебное слово PRINT для сокращения записи может быть за- менено знаком "?" (для оператора LPRINT это недопустимо!). МSX-BASIC допускает автоматическое форматирование (см.раздел II.4.4); кроме того, используя служебное слово USING ("using"- "применяемый, ис- пользуемый"), можно осуществлять форматирование по у с м о т р е н и ю п о л ь з о в а т е л я. Далее, символы-разделители "," и ";" в с п и с к е в ы в о д а ни- коим образом не меняют положения курсора. Несколько значений,выводимых по одному ф о р м а т у ,располагаются друг за другом без дополнительных про- белов. Некоторые символы ф о р м а т а являются управляющими и специаль- ным образом влияют на формат вывода. Другие символы ф о р м а т а "нейт- ральны" и просто переносятся в выводимые значения. Ниже перечислены основные у п р а в л я ю щ и е с и м в о л ы, и да- ны поясняющие примеры. 1. ! - вставка первого символа значения строкового выражения из с п и- с к а в ы в о д а вместо символа "!" в значении ф о р м а т а . 1) NEW Ok 10 X$="банан":Y$="ананас" 20 PRINTUSING "банан+ананас=!!нанас";x$,y$ run банан+ананас=бананас Ok 2) NEW 3) NEW Ok Ok 10 X$="шорох" 10 X$="шах":y$="кол":z$="!" 20 PRINTUSING "!аба!";X$,X$ 20 ?USING"!аба!...? !аба!.. run .!";Y$,Y$;X$;X$,Z$ шабаш run Ok кабак...? шабаш...! Ok 2. \ ········ \- вставка первых (n+2)-х символов значения строкового ▲ выражения из с п и с к а в ы в о д а вместо символа │ "\ \" в значении ф о р м а т а. n пробелов 1) NEW 2) NEW Ok Ok 10 X$="Рокер":Y$="кокон" 10 X$="баран":Y$="коран":Z$= 20 ?USING"\\\ \";X$;Y$ "метан" run 20 ?USING"\\н\\\ \";X$;Y$,Z$ Рококо run Ok банкомет Ok 3) NEW 4) A$="комар":B$="терка" Ok :C$="\ \пью\ \":PRIN 10 X$="Банан":Y$="зайка":Z$="!" TUSING$;A$,B$ 20 ?USING"\ \\ \!";X$,Y$,Z$ компьютер run Ok Банзай! Ok 3. & - вставка значения строкового выражения из с п и с к а в ы в о - д а вместо символа "&" в значении ф о р м а т а. 1) NEW 2) NEW Ok Ok 10 Y$="BASIC":A$="MSX-&" 10 Y$="BASIC":Z$="КОМПЬЮТЕР": 20 PRINTUSING A$;Y$ T$="MSX-&" run 20 PRINTUSING T$;Y$,Z$ MSX-BASIC run Ok MSX-BASIC MSX-КОМПЬЮТЕР Ok 3) NEW 4) NEW Ok Ok 10 X$="MSU":Y$="BASIC" 10 X$="MSX":y$="BASIC":Z$="не 20 ?USING "\\X-&";X$,Y$ структурен" run 20 ?USING"&-& &";X$,Y$,Z$ MSX-BASIC run Ok MSX-BASIC не структурен Ok 4. ### - примеры значений ф о р м а т а для вывода десятичных чисел ###.# с фиксированной точкой. Символ "#" указывает на тот факт, что в данном месте поля вывода должна находиться ц и ф р а, а символ "." указывает на то,что в данном месте поля вывода должна находиться десятич- ная точка. Соответствующий элемент данных из с п и с к а в ы в о д а по- мещается в поле (в случае отсутствия десятичная точка предполагается нахо- дящейся справа); отсутствующие цифры слева от десятичной точки дополняют- ся пробелами; неиспользованные позиции справа от десятичной точки заполня- ются нулями. Напомним, что максимальное количество значащих цифр в числе - 14 и что числа при необходимости округляются. 1) Ok ?USING"##.# ";25.1, 7, 69.88, -34.7, -65, 3.7, 456.89, 4.5E-12, 1E-3, 3.64E4, 5E26 25.1····7.0···69.9···%-34.7···%-65.0····3.7···%456.9··· ·0.0····0.0···%36400.0···% 5E+26 Ok 2) NEW Ok 10 PRINTUSING"###.##,";1.234;-4578;1234567.89;3.45E-23 run 1.23,%-4578.00,%1234567.89··0.00 Ok Отметим,что если выводимое на экран дисплея или принтер число содержит десятичных позиций больше, чем "размеры" поля вывода, то число выводится, однако перед ним ставится символ процента "%", чтобы предупредить пользо- вателя. 3) NEW Ok 10 ?USING"#.################";123.4;12345678910111213 run %123.4000000000000000 % 1.2345678910111E+16 Ok 5.+###.# - примеры значений ф о р м а т а для вывода десятичных чисел ##.##+ с фиксированной точкой с указанием знака числа("+" или "-") в начале или конце записи. Посмотрите, пожалуйста, следующий иллюстратив- ный пример: 10 A$="+##.# ":B$="#.###+ " 'LEN(A$)=8;LEN(B$)=9 20 ?USING A$; 12.6, 1.26, -35.7, -0.678 'пробелы - для 30 ?USING B$; 12.6, 1.26, -35.7, -0.678 'наглядности! run +12.6····+1.3···-35.7····-0.7 %12.600+···1.260+···%35.700-···0.678- Ok 6. #.##- - пример значения ф о р м а т а для вывода десятичных чисел с указанием знака "-" в конце выводимых отрицательных значений (для поло- жительных чисел в этом случае печатается пробел в конце числа). NEW Ok 10 A$="##.##- " 'LEN(A$)=9 20 ?USING A$;-11.78, 11.78;-3.6, 3.6;-234.567, 234.567 run 11.78-···11.78·····3.60-····3.60····%234.57-···%234.57 Ok Отметим,что знак "-" используется только в качестве последнего символа ф о р м а т а. Использование знака "-" в качестве первого символа ф о р- м а т а приводит к выводу знака "-" впереди числа, например: Ok ? USING"-##.# ";-3.1,-33.1;3.1, 33.1 --3.1···-%-33.1···-.3.1···-33.1 Ok 7. **##.## - пример значения ф о р м а т а для вывода десятичных чи- сел с фиксированной точкой с заполнением пустого пространства перед ними символами "*" (разумеется, если количество цифр числа меньше размера поля вывода!) NEW Ok 10 ?USING"**###.# ";125.3,-125.3;5.,-5.;345.45,-345.45; 34.67Е3,-34.67Е3 run **125.3···*-125.3···****5.0···***-5.0···**345.5···*-345.5···34670.0 ···%-34670.0 Ok 8. #.###^^^^ - пример значения ф о р м а т а для вывода десятичных чисел с плавающей точкой. NEW Ok 10 ?USING"+##.#^^^^ ";22.5,-22.5;234567,-234567;2.2E-62 run +22.5E+00···-22.5E+00···+23.5E+04···-23.5E+04···+22.0E-63 Ok 9. #,####.# - пример значения ф о р м а т а для вывода десятичных чисел в фиксированной форме с разбивкой записи их целой части запятыми на группы по 3 цифры в каждой, причем запятую можно ставить не только по- сле первого, но и после любого другого символа "#", но обязательно до де- сятичной точки. 1) NEW 2) NEW Ok Ok 10 A$="#,#######.##" 10 A$="#,,#,#,#,#######.###" 20 ?USING A$;5554322.43 20 ?USING A$;12345678910.891 run run 5,554,322.43 ··12,345,678,910.891 Ok Ok 10. $$ - эти два символа, расположенные слева от первого символа "#" в ф о р м а т е , вызывают печать одного символа "$" слева от старшей значащей цифры выводимого числового значения. 11. **$ -эти символы вызывают печать одного символа "$" слева от стар- шей значащей цифры выводимого числового значения, но в оставшихся позици- ях ф о р м а т а слева от символа "$" печатаются символы "*". П р и м е р. NEW ─────────── Ok 10 ?USING "$$##.# ";15.3,-15.3;15390 20 ?USING"**$##.# ";15.3,-15.3;15390 run $15.3··-$15.3··%$15390.0 **$15.3··*-$15.3··%$15390.0 Ok Если оператор PRINT USING содержит выражений в с п и с к е в ы в о- д а больше, чем управляющих символов в ф о р м а т е , то после вывода значения, соответствующего последнему управляющему символу в значении ф о р м а т а, ф о р м а т начинает использоваться повторно с самого на- чала для следующих выражений из с п и с к а в ы в о д а. П р и м е р. NEW ─────────── Ok 10 X$="версия":Y$="MSX - мощная":Z$="!" 20 ?USING "& & ";X$,Y$,X$,Z$ '4 выражения и 2 управляющих run символа версия MSX - мощная версия ! Ok Если в значении ф о р м а т а определено больше управляющих символов, чем выражений в с п и с к е в ы в о д а , то лишние управляющие символы игнорируются. П р и м е р. NEW ─────────── Ok 10 X$="MSU":Y$="BASIC"' B PRINTUSING:1 выражение 20 ?USING "\\X-&";X$ ' и 2 управляющих символа run MSX- Ok Разумеется, что числовым выражениям в с п и с к е в ы в о д а должны соответствовать числовые ф о р м а т ы, а строковым - строковые. В против- ном случае произойдет ошибка. П р и м е р. NEW NEW ─────────── Ok Ok 10 Y$="BASIC" 10 A$="&&&" 20 ?USING "##.#";Y$ 20 ?USING A$;23.1 run run Type mismatch in 20 Type mismatch in 20 Ok Ok З а м е ч а н и е. Напомним, что при необходимости числа перед выводом округляются и что если число "шире" поля вывода,то оно все равно выводит- ся,но перед ним ставится знак предостережения "%" . Обычно ф о р м а т служит для вывода сразу нескольких значений. П р и м е р. NEW ─────────── Ok 10 A$="Факультет:\ \-\ \.Группа:!#!" 20 ?USING A$;"физ","мат","М",5,"А" run Факультет:физ-мат.Группа:М5А Ok Отметим, что оператор вида: LPRINT [USING ф о р м а т;] с п и с о к в ы в о д а позволяет вывести информацию, получаемую при работе программы,не на экран, а на п е ч а т а ю щ е е у с т р о й с т в о (п р и н т е р).Управление выводом здесь такое же, как и в случае оператора PRINT. При выполнении оператора LPRINT на рулоне бумажной ленты(или одиночных листах) печатаются значения выражений элементов списка. При этом предпола- гается, что по ширине лента условно разбита на зоны по 14 позиций - в каж- дой (максимальное число зон в строке печати - 9). II.4.7. О п е р а т о р в в о д а д а н н ы х INPUT Разговор - это здание, которое строят совместными усилиями. А.Моруа Вначале договоримся о терминологии. П о л ь з о в а т е л ь ("user") - человек, использующий техническое и программное обеспечение, а также различные виды услуг, представляемые ему вычислительным центром, для решения своих задач и самостоятельно осущест- вляющий подготовку этих задач к решению на ЭВМ. Режим п а к е т н о й обработки - один из видов организации вычисли- тельного процесса на ЭВМ, при котором несколько задач пользователей объ- единяют вместе, образуя входной п а к е т, который затем последовательно обрабатывается компьютером. При пакетной обработке пользователь не имеет прямого доступа к машине,а сдает пакет своей задачи оператору,который вво- дит его в ЭВМ и выдает пользователю результат работы. Режим д и а л о г а (и н т е р а к т и в н ы й режим) -режим общения пользователя с компьютером,при котором пользователю обеспечивается возмож- ность выдавать ЭВМ задание, следить за процессом обработки, получать отве- ты, фиксировать те или иные результаты, исправлять ошибки, выдавать указа- ния и т.д.Режим диалога пользователь осуществляет с помощью индивидуально- го т е р м и н а л а (пишущей машинки, дисплея) и применяет обычно для таких задач, алгоритмы решения которых еще не совсем определены. MSX-BASIC имеет в своем арсенале простые и эффективные средства органи- зации диалога пользователя с выполняемой программой,в частности,с помощью оператора INPUT. Вспомним,что слово "диалог" (от греч."dialogos") означает разговор меж- ду двумя или несколькими лицами. В настоящее время участником такого "раз- говора" становится компьютер. Однако отметим,что инициатива в диалоге и ответственность за успех его выполнения лежат только на пользователе! Ясно, что разрабатываемые программы должны быть универсальными для сво- его класса задач, т.е. программа должна решать задачу при любых (в задан- ном диапазоне, конечно) значениях исходных данных. Однако,именно необходи- мость изменять исходные данные и не позволяет создать полностью универ- сальную программу при ориентации на пакетный режим работы с ЭВМ. Действи- тельно, если обрабатывающая часть программ, работающая лишь с именами пе- ременных, может оставаться в памяти ЭВМ неизменной, то ее фрагмент,обеспе- чивающий ввод данных, должен переписываться при каждом их изменении. Диалоговые средства MSX-BASIC (диалоговый режим) позволяют пользовате- лю вводить данные с клавиатуры в нужный момент по запросу самой программы, в определенном месте которой записан оператор вида: INPUT ["β";] α,σ,δ,... где: INPUT ("input"-"ввод") - служебное слово; β - последовательность произвольных символов алфавита MSX-BASIC ("подсказка"); α,σ,δ,... - список имен переменных или имен элементов массивов,раз- деленных запятыми. Напомним, что квадратные скобки означают, что информация внутри них не является обязательной, то есть в данном случае допустима запись оператора INPUT в виде: INPUT α,σ,δ,... При выполнении оператора INPUT вычисления приостанавливаются и на экра- не дисплея выводится "подсказка" β (если она имеется), знак "?", пробел и текстовый курсор, то есть β ? █ "Подсказка", то есть текст,появляющийся на экране дисплея перед вводом необходимой для дальнейшей работы информации,- один из элементов культуры программирования. Благодаря такой особенности программа не нуждается в до- полнительной инструкции. Она сама подсказывает, как с ней работать. Далее компьютер о ж и д а е т, пока с клавиатуры не будут введены зна- чения для всех переменных списка α,σ,δ,... . Вводимые данные представляют собой числовые или строковые константы. При наборе они отделяются друг от друга запятыми. Тип (числовой, строковый) и количество их должны соответ- ствовать типам и количеству переменных α,σ,δ,.... После нажатия на клави- шу "RETURN" значения вводимых констант последовательно присваиваются этим переменным. Впрочем, вводить данные можно и частями. П р и м е р 1. NEW ───────────── Ok 10 INPUT "ГРУППА";A$,B,C$ 20 PRINT A$;B;C$:END run ГРУППА? М Нажмите клавишу "RETURN"! ?? 5,А Нажмите клавишу "RETURN"! М 5 А Ok После ввода компьютер продолжает вычисления. Если на строке после знака "?" были только пробелы, то считается, что Вы не хотите изменять значения переменных α,β,γ,... . П р и м е р 2. NEW ───────────── Ok 10 A=5:INPUT A:PRINT A 20 END run ? Нажмите клавишу "RETURN"! 5 Прежнее значение переменной A сохранилось! Ok При несоответствии типов вводимых констант типам переменных α,σ,δ,... на следующей экранной строке появляется сообщение об ошибке: ? Redo from start ("П о в т о р и т е с н а ч а л а"), и в следующей строке вновь выводится "подсказка", символ "?", пробел и текстовый курсор. Разумеется,у Вас должно быть достаточно информации для обеспечения вво- да значения каждой переменной из списка ввода. Если значений переменных недостаточно, то MSX-BASIC выдает символы "??" в следующей строке и пере- ходит в режим ожидания, пока Вы не введете дополнительных данных.Если зна- чений слишком много, то в следующей строке выдается сообщение ? Extra ignored ("Л и ш н е е и г н о р и р у е т с я"). П р и м е р 3. NEW ───────────── Ok 10 INPUT "ГРУППА";A$,B,C$ 20 PRINT A$;B;C$ 30 END run ГРУППА? М- ?? L ? Redo from start ГРУППА? М-,5,-А,-D ? Extra ignored M- 5 -A Ok Вводимые значения строковых переменных можно заключать в кавычки; если кавычка является первым символом вводимого значения, то значением перемен- ной становится все содержимое кавычек; если кавычка - не первый встречаю- щийся символ, то она является одним из символов вводимого значения. П р и м е р 4. NEW ───────────── Ok 10 INPUT "Гм...";A,B$:PRINT A,B$ run run Гм...? 123.4 Гм...? e5,"ab"g" ?? ab"g ? Redo from start ·123.4········ab"g Гм...? e5,"ab'g" Ok ·0············ab'g Ok Оператор INPUT переводит программу в режим SCREEN0 или SCREEN1,поэтому использование его невозможно, если Вы работаете в графических экранах SCREEN 2 и SCREEN 3 (см.раздел V.1). II.4.8. О п е р а т о р LINEINPUT Общий вид данного оператора: LINEINPUT ["β";] с т р о к о в а я п е р е м е н н а я, где: LINEINPUT ("ввод строк") - служебное слово; β - последовательность произвольных символов алфавита MSX-BASIC ("подсказка"); с т р о к о в а я п е р е м е н н а я - имя строковой переменной или имя элемента строкового массива. Этот оператор обеспечивает чтение символов с клавиатуры. Вначале на эк- ран выводится "подсказка" β, и текстовый курсор, расположенный на следую- щей за ней позиции дисплейной строки. Теперь Вы можете вводить любую информацию, даже можете нажимать команд- ные клавиши, комбинацию символов (используя способы редактирования с кла- виатуры). После нажатия клавиши "RETURN" первые 255 символов,начиная с начальной позиции курсора и до конца строки(строка может занимать несколько физичес- ких строк), становятся новым значением с т р о к о в о й п е р е м е н- н о й. Указанный оператор, как правило,используется для ввода в компьютер зна- чений строковых переменных, содержащих кавычки или запятые. Дело в том, что строку символов, содержащую кавычки, например, строку 'Курс "Программированиe"' нельзя ввести как значение строковой переменной в память компьютера оператором INPUT. П р и м е р ы: 1) NEW ───────────── Ok 10 LINEINPUT"!";A$:PRINT A$ run !синус синус Ok Вы можете при помощи оператора LINEINPUT вводить числа,но после чтения результат нужно преобразовать при помощи функции VAL()(см. раздел IV.1.3). П р и м е р ы: ───────────── 2) NEW Ok 10 LINEINPUT "Введите число:";A$ 20 Z=VAL(A$):PRINT Z^2 run run run Введите число:12 Введите число:4Е-4 Введите число:&В100 144 1.6Е-07 16 Ok Оk Ok 3) NEW Ok 10 LINEINPUT"Введите текст";T1$ 15 INPUT"Введите этот же текст";T2$ 20 PRINT"Первый раз текст воспринят как:"; :PRINT Т1$ 30 PRINT"Во второй раз текст воспринят как:";:PRINT T2$ α) run Введите текст:кука Введите этот же текст? кука Первый раз текст воспринят как:кука Во второй раз текст воспринят как:кука Ok β) run Введите текст:ку,ка Введите этот же текст? ку,ка ?Extra ignored Первый раз текст воспринят как:ку,ка Во второй раз текст воспринят как:ку Ok γ) run Введите текст:"ку"ка" Введите этот же текст? "ку"ка" ?Redo from start Введите этот же текст? (нажмите клавишу "RETURN") Первый раз текст воспринят как:"ку"ка" Во второй раз текст воспринят как:ку Ok Из примера 3(β) хорошо видно, что знак "," в операторе INPUT является разделителем информации, в то время как в операторе LINEINPUT запятая вос- принята как символ строки. Пример 3(γ) наглядно показывает, что в операторе INPUT символ "кавычка" не воспринимается как символ - он является указателем границ строковой константы. Заметим, что нажатие "CTRL"+"C" или "CTRL"+"STOP" вызовет прекращение действия оператора LINEINPUT, перевод интерпретатора в режим прямого вы- полнения команд и выдачу на экране дисплея сообщения "Break in ..." ("П р е р ы в а н и е в с т р о к е ..."). Оператор LINEINPUT, также как и оператор INPUT,переводит программу в ре- жим SCREEN 0 или режим SCREEN 1. Отметим, что в школьном алгоритмическом языке ввод информации исполните- лю осуществляется с помощью команды ввод , действие которой идентично дей- ──── ствию оператора INPUT без строки-"подсказки" β. "Подсказкой" в алгоритми- ческом языке может служить команда вывод , где выводимой информацией явля- ───── ется текст-"подсказка". Ясно, что оператор INPUT вскоре отойдет в прошлое, а пользователь, воз- можно, будет обращаться к компьютеру с помощью жеста или мимики. Однако по- ка компьютер не способен воспринимать такие обращения,но MSX-BASIC уже сей- час представляет пользователю достаточно развитые устройства ввода, напри- мер, световое перо или джойстик. II.4.9. О п е р а т о р ы END и STOP . К о м а н д а CONT Операторов END в одной программе может быть несколько, причем рас- полагаться они могут в любых ее местах. При выполнении END вычисления по программе прекращаются. Оператор END не является обязательным для программы. При его отсутствии вычисления прекращаются после выполнения последнего оператора программной строки с наибольшим номером (конечно,если этот оператор не предусматривает передачу управления!). Однако, END удобен для документации, так как он обо- значает физический конец программы. Отметим, что имеется второй оператор останова программы STOP ("to stop"-"остановиться"). Разница между END и STOP только в том, что STOP приостанавливает работу по программе, после действия этого оператора можно при желании продолжить работу командой CONT ("to CONTinue"-"продолжать") в непосредственном режиме; END же прекращает работу окончательно.