Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
QBasic_metodichka.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
349.7 Кб
Скачать

3.2. Операторы ввода/вывода данных

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

Оператор INРUТ позволяет выводить на экран текст некоторого сообщения. Этот текст должен указываться в виде строки символов, стоящей непосредственно за словом INРUТ, строка при этом заключается в кавычки и отделяется от списка ввода разделителем (запятой или точкой с запятой). Если после сообщения в операторе INРUТ стоит точка с запятой, то в конце выдачи сообщения на экран выводится еще и стандартный символ-приглашение "?". Если же сообщение отделяется от списка ввода запятой, то символ-приглашение на экран не выводится. В этом случае вводимые пользователем значения будут располагаться непосредственно за последним символом сообщения.

Сообщение — это, как правило, подсказка пользователю, значения каких переменных и в каком порядке нужно вводить по данному оператору.

Общий вид оператора INPUT:

INPUT [;] ["приглашение"{; | ,}] список переменных

LINE INPUT [;] ["приглашение";] переменная$

INPUT #номер файла%, список переменных

LINE INPUT #номер файла%, переменная$

где

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

список переменных одна или несколько переменных, разделенных запятыми, в которых хранятся данные, введенные от клавиатуры или считанные из файла. Имя переменной может состоять из 40 символов и должно начинаться с буквы. Допустимыми являются символы A,a-Z,z, 0-9 и точка (.).

переменная$ хранит строку символов, введенных от клавиатуры или считанных из файла.

номер файла% номер открытого файла.

INPUT использует запятую для разделения записей.

LINE INPUT считывает все символы до клавиши ENTER.

При вводе с клавиатуры точки с запятой, стоящей сразу после INPUT, курсор остается в той же строке до нажатия пользователем клавиши Enter.

Для вывода результатов работы на экран дисплея в языке Бейсик используется оператор PRINT. Общий вид оператора PRINT:

PRINT [#номер_файла%,][выражения][{; | ,}]

LPRINT [выражения] [{;| ,}]

где

номер_файла% номер открытого файла. Если номер не указан, PRINT выводит данные на экран.

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

{; | ,} Определяет, где начинается следующий вывод:

; - печать сразу после последнего значения.

, - печать в начале следующей зоны печати. Ширина зоны печати

– 14 символов.

С помощью оператора PRINT в процессе выполнения программы можно выдать на экран значения констант, переменных, элементов массивов и выражений. Если элементом списка вывода является выражение, то сначала вычисляется его значение, а затем печатается результат. Элементы списка вывода оператора PRINT отделяются друг от друга запятой или точкой с запятой. Любые два значения, разделенные в операторе PRINT точкой с запятой, выводятся непосредственно друг за другом. Числовые значения, однако, при печати отделяются от следующего элемента вывода одним пробелом, так как слитный вывод числовых значений плохо воспринимается. Пробел ставится в конце выводимого числа, но из-за того, что знак плюс, как правило, опускается и вместо него выводится пробел, положительные числа обрамляются пробелами с двух сторон. Ниже приводится пример, иллюстрирующий вывод на экран строк символов, положительных и отрицательных чисел. После выполнения трех операторов

XI =5.2

У1=-6.4

PRINT "Х1="; XI; " У1="; У1;Х1+У1

на экране появится следующая строка:

Х1= 5.2 У1=-6.4-1.2

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

PRINT "Х1=";Х1,"У1=";У1,Х1+У1

выведет на экран строку

X1= 5.2 У1=-6.4 -1.2

<———14———><———14———><———14———>

Если последняя зона текущей строки уже заполнена, то происходит автоматический переход на следующую строку экрана.

Две запятые подряд в списке вывода вызывают пропуск зоны в текущей строке. Если список вывода оператора PRINT заканчивается запятой или точкой с запятой, то следующий оператор PRINT продолжит вывод на той же строке. Например, операторы

Х=3.14159/2

PRINT "Х=";Х,

PRINT "SIN(Х)=";SIN(Х)

напечатают одну строку вида

Х= 1.570795 SIN(Х)= .99999999999912

Оператор PRINT без списка вывода вызывает переход курсора на новую строку.

Управлять выводом данных в операторе PRINT можно также при помощи встроенных в язык функций ТАВ и SРС. Функция ТАВ(N) перемещает текущую позицию печати следующего символа вперед в N-ю позицию строки. Если указана позиция, находящаяся левее текущей, то большинство систем перемещает текущую позицию в N-ю позицию следующей строки. Например, оператор печати

PRINT 2.5; ТАВ (8); 6.4; ТАВ(16); -9.9

напечатает значение 6.4, начиная с 8-й позиции строки (для положительных чисел вместо знака плюс выводится пробел), а 9.9 - начиная с 16-й позиции:

2.5 6.4 -9.9

<——8——>

<————16————>

Указание положения следующего выводимого символа при помощи функции ТАВ обычно применяется при выводе всевозможных таблиц. Для удобства пользователей во многих системах определена также функция SPC(N), она выводит N пробелов в данном месте строки. Например, оператор печати

PRINT 2.5; SРС (8); 6.4; SРС (16); -9.9

выведет строку вида

2.5 6.4 -9.9

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

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

Общий вид оператора:

PRINT [#номер_файла%,] USING символы_формата$; выражения [{; | ,}]

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

Сначала рассмотрим форматный вывод числовых значений. Числовой формат задается с помощью символов "#". Каждый такой символ соответствует одному выводимому разряду числа. Поле чисел всегда выравнивается по правому краю. Место десятичной точки определяется положением символа "." в числовом формате.

Например, операторы

PRINT USING "###.##";-l2.345,35.1

PRINT USING "###.##";34l.26,2435.9

PRINT USING "###";-98.7937

выведут на экран данные в следующем виде:

-12.35 35.10

341.26%2435.90

-99

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

Можно задать формат, в котором под знак числа отводится позиция, задаваемая в формате, для этого необходимо добавить в формат знак " + ". Знак числа " + " или " — " добавляется в начало выводимого числового значения, если " + " является первым символом числового формата, и в конец, если знак "+" является последним символом формата. Операторы

PRINT USING "+##.###";36.4,-2.74

PRINT USING "###.##+";96.97,-10.147

напечатают числовые значения в виде двух столбцов:

+36.400 -2.740

96.97+ 10.15-

В формат можно также добавлять знак "—", но только в качестве последнего символа формата. В этом случае после отрицательного числа должен выводиться знак "—", а после положительного — пробел.

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

Оператор

PRINT USING "########,.#";12349876.5

выведет число, разделив его на триады:

12,349,876.5

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

PRINT USING "###.##^^^^";-3478.268

выведет число в экспоненциальной форме:

-34.78Е+02

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

С помощью оператора PRINT USING можно выводить и строковые значения, причем либо полностью, либо заданное число символов строковой переменной, отсчитываемое слева. Знак & в строковом формате означает строковое поле переменной длины и обеспечивает вывод всей строки. Знак ! означает, что выводится только первый символ строкового значения. Пара знаков обратной косой черты задает строковое поле фиксированной длины. Длина этого поля определяется как общее число символов формата, включая обе косые черты и все заключенные между ними пробелы. Строковое значение при таком формате выводится в поле начиная с крайней левой позиции.

Если выводимая строка символов не помещается в заданное поле, то лишние правые символы отбрасываются, Если же длина строки меньше длины поля, то оставшиеся свободные места справа в поле заполняются пробелами. Например, операторы

PRINT USING "!"; "BASIC", "FORTRAN", "ALGOL"

PRINT USING "\ \"; "ОТЛИЧНО","*", "ХОРОШО"

PRINT USING "&"; "УДОВЛЕТВОРИТЕЛЬНО"

выведут на экран три строки:

BFA

ОТЛ* ХОP

УДОВЛЕТВОРИТЕЛЬНО

Для вывода результатов работы программы на устройство печати используются операторы LPRINT и LPRINT USING.

Форматы этих операторов аналогичны соответственно форматам операторов PRINT и PRINT USING.

Оператор LOCATE устанавливает курсор в нужное место на экране дисплея и позволяет управлять параметрами самого курсора.

Формат записи оператора LOCATE

LOCATE [номер-строки][,[номер-колонки][

[,[начало-курсора][,конец-курсора]]]]

Операнды номер-строки и номер-колонки задают место, куда помещается курсор. Значение числового выражения, задающего номер строки, находится в пределах от 1 до 25; значение числового выражения, задающего номер колонки, лежит в пределах от 1 до 40 или от 1 до 80 в зависимости от установленной ширины строки экрана дисплея. Если третий позиционный параметр равен 0, то курсор будет не видим на экране во время выполнения программы; 1- видим. По умолчанию этот параметр равен 1. Параметры начало-курсора (верхняя линия) и конец-курсора (нижняя линия) задают количество линий сканирующего луча, которые формируют толщину курсора. Значения этих параметров лежат в пределах от 0 до 31. Линии нумеруются сверху вниз от 0 до 13 для алфавитно-цифрового и от 0 до 7 для графического дисплеев.

В результате выполнения оператора LOCATE курсор будет установлен в указанную строку и колонку с заданной видимостью и толщиной. Толщиной курсора можно управлять только в текстовом режиме. Если какой-то операнд опущен, то система будет использовать значение, которое установлено по умолчанию в системе или предыдущим оператором LOCATE.

Пример.

СLS

LOCATE 2,5

PRINT "ПРОГРАММА ЗАВЕРШЕНА УСПЕШНО"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]