Главная » Basic » ПЕЧАТАНИЕ ПО ФОРМАТУ

0

Описание формата может содержаться в операторе PRINT USING, например:

100  PRINT USING "##.#"; А; В; С или в строковой переменной, например:

50   S$="##.#"

100   PRINT USING S$; А; В; С

что дает тот же самый эффект. Подобная гибкость позволяет при необходимости  вводить наряду с данными и  описания  формата с тем, чтобы различные наборы данных можно было правильным образом изображать одной и той же программой.

В одной из систем  для большой ЭВМ требуется, чтобы в  том случае, когда формат находится вне оператора PRINT USING, он задавался в отдельной строке наподобие константы, без кавычек, но с предшествующим  ему двоеточием. Номер строки с описанием формата должен указываться после USING следующим образом:

90   PRINT USING 200,А; В,С

200   :##.#

По-видимому, основной  причиной выбора  подобного  способа  послужило  желание  избежать совмещения  длинного описания  формата  и   списка переменных в   одной  строке  с  ограниченной длиной (операторы Бейсика переносить на другую строку нельзя) .

Оператор PRINT USING

Общая форма записи:

PRINT USING описание формата, список выводимых данных

где

описание  формата   либо  группа  символов  описания  формата,  заключенная  в  кавычки,   либо строковая переменная, содержащая символы описания формата;

список выводимых данных обычный список переменных и разделителей, используемых в операторе

PRINT.

Учтите, что разделитель между описанием формата и списком выводимых данных от системы к системе меняется. Наиболее употребительны следующие формы записи:

описание  формата,  список  выводимых  данных  описание  формата;  список  выводимых   данных описание формата: список выводимых данных

Детали  употребления символов описания  формата  приведены в  табл.  6.5.  Значения  элементов списка выводимых данных печатаются по порядку с использованием полей формата,  указанных в его описании.

Если полей в описании формата больше, чем выводимых значений, то лишние поля игнорируются. Если полей в описании формата меньше, чем выводимых значений, то описание формата начинает использоваться заново  от  его  начала  до  тех  пор,  пока  не  будут  напечатаны  все  выводимые значения.

Приведенная ниже  программа   иллюстрирует некоторые   из    возможностей,  предоставляемых оператором PRINT USING:

10 REM ДЕМОНСТРАЦИЯ ДЕЙСТВИЯ ОПЕРАТОРА PRINT USING

20 FOR I=1 TO 6

30   READ A$, A

40   PRINT USING "ЦЕНА \     \ =$ + ##.##" ; A$,A

50 NEXT I

60 DATA ПАЛЬТО,89.95.ПЛАТЬЯ.25.50

70 DATA РУЧКИ,1.99.ЧЕРНИЛ,.65

80 DATA ЧАСОВ,7.99,ОБУВИ,20

90 END RUN

ЦЕНА ПАЛЬТО =$+69.95 ЦЕНА ПЛАТЬЯ =$+25.50 ЦЕНА РУЧКИ =$+1.99 ЦЕНА ЧЕРНИЛ =$+0.65

ЦЕНА ЧАСОВ =$+7.99 ЦЕНА ОБУВИ =$+20.00 END AT LINE 90

6.4.  УПРАВЛЯЮЩИЕ СТРУКТУРЫ

В  этом  разделе  рассматриваются приемы, позволяющие осуществлять четкое,  эффективное и упорядоченное  управление в   программах  на  Бейсике. Обсуждаемые  здесь  формы  управления довольно  близки к тем, которые рекомендуются в структурном программировании.

Обсудив   в предыдущих разделах проблемы, связанные с ограниченностью  числа значащих цифр,

рассмотрим теперь разновидность оператора, образую190

щего условное выражение в таких управляющих структурах, как IF, WHILE, UNTIL: IF A = В THEN …

Если значения входящих в условное выражение (А = В) переменных А и В получаются в результате длительных  вычислений, то на равенство этих значений  во всех ожидаемых  случаях вряд  ли можно рассчитывать. Поэтому условие может быть, а может и  не быть выполненным в тех ситуациях, где программист рассчитывает  иметь равенство. Чтобы  поправить дело,  либо пользуйтесь  целыми величинами, например

IF А% = В% THEN

либо устанавливайте  предел для разности значений, соответствующий  числу значащих цифр для данного типа переменных. Если ожидается от шести до семи значащих цифр, то более надежной является проверка

IF ABS(A-B) <= 1.0E-6 THEN

6.4.1.  НЕСКОЛЬКО ОПЕРАТОРОВ В ОДНОЙ СТРОКЕ

Во  многих версиях  Бейсика допускается указание нескольких операторов в  одной (физической) строке при условии,  что они разделяются специальным символом.  Обычно разделителем служит двоеточие (:), но иногда  в качестве разделителя используется символ обратной косой черты (\). Таким образом, после исполнения операторов

10  PRINT "ЗДЕСЬ": PRINT "И": PRINT "ЗДЕСЬ."

20   PRINT "СЛЕДУЮЩИЙ"

будет получен следующий результат: RUN

ЗДЕСЬ И ЗДЕСЬ.

СЛЕДУЮЩИЙ

Указанные после двоеточий операторы не имеют номеров, так что к ним нельзя перейти с помощью оператора GOTO. Они выполняются  по порядку слева направо после выполнения первого оператора, помеченного номером строки.

Запись нескольких операторов в одной строке можно применять просто Для экономии  числа знаков  в набираемом тексте, но  при таком подходе получаются программы, которые выглядят сплошной массой символов, не имеющей выраженной структуры. С другой стороны, эту возможность можно использовать для облегчения чтения программы и иллюстрации ее струк-

туры. Например, в необходимых местах можно добавлять оператор комментария:

200

FOR I=1 ТО N1

:REM ОБРАБОТКА ПО СТОЛБЦАМ

210

GOSUB 750

:REM ВЫБОР ВЕДУЩЕГО ЭЛЕМЕНТА

220      I1=I+1

230   FOR J =I1 ТО N                        :REM ИСКЛЮЧЕНИЕ В СТОЛБЦЕ I

Важнее то, что можно конструировать серии  или блоки операторов,  внутрь которых не может быть передано управление извне:

200   А=0: В=6:I=I+1: PRINT Z(I);

Тем самым образуется процесс со структограммой в виде прямоугольника:

А = 0

В =6

I=I+1

ПЕЧАТЬ Z(I) ;

Конечно, было бы лучше, если бы такой блок мог размещаться в нескольких строках, но, по крайней мере, небольшие блоки можно конструировать в одной строке.

Вышесказанное особенно полезно в операторах IF-THEN: 100   IF A> = B THEN PRINT "БОЛЬШЕ": Z=A: GOSUB 500

Если условие   выполнено, то  по  порядку  выполняются все операторы,  следующие за  THEN.

Рассмотрим оператор

100   IF A>= В THEN PRINT "БОЛЬШЕ": GOSUB 500: Z=A

При его выполнении возникает  следующая проблема: оператор Z=A никогда не будет исполнен, поскольку возврат после GOSUB произойдет к оператору в следующей строке, имеющему номер, а не к следующему оператору текущей строки. То же имеет место, если GOSUB заменить на GOTO. Небольшими  циклами FOR-NEXT,  помещающимися  в   одной  строке,  можно  пользоваться для выполнения временных задержек:

100    REM ПАУЗА, ПРОДОЛЖИТЕЛЬНОСТЬ ЗАВИСИТ ОТ СИСТЕМЫ 110    FOR I=1 ТО 10000: NEXT I

или для присваивания массивам  начальных значений:

100   FOR I=1 TO 200:A(I)=0:NEXT I или для выполнения многих других простых процессов.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии