Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Операторы цикла DO WHILE/UNTIL LOOP и WHILE WEND.


Эти циклы называются циклами с предусловием, т. к. проверка проводится до начала очередной операции:

О [{WHILE UNTIL}condition]

<тело цикла>

LOOP

или

WHILE <условие>

<тело цикла>

WEND

Цикл WHILE выполняется, пока условие истинно. Как только условие нарушается, выполнение цикла завершается. Если используется UNTIL, то выполнение происходит до тех пор, пока условие не станет истинным.

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

INPUT N%

WHILE N% <=0

PRINT "ВВЕДИТЕ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ N = "

INPUT N%

WEND

Обратите внимание, что до первого входа цикл переменной N% уже должно быть присвоено какое-либо значение!

Процедурные блоки SUB и FUNCTION. В QBASIC можно объявлять и использовать подпрограммы.

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

Основное, не формальное, различие между процедурой и функцией состоит в том, что процедура только выполняет какую-либо законченную по­следовательность действий, не возвращая результата работы в основную программу, а функция и выполняет действия, и возвращает результат. На­пример, вызов функции М = MIN (X, Y) вернет в основную программу значение наименьшего из двух чисел, и это значение будет присвоено переменной М.

Функция может быть объявлена следующим образом:

FUNCTION имя функции [(список параметров)] [STATIC]

<операторы>

имя функции = выражение

<операторы>

END FUNCTION

где имя функции - имя функции и тип данных, которые она возвращает (%, &, !, # or $); список параметров - список переменных, с помощью которых функция вызывается с указанием типов в этих переменных:

переменная [()] [AS тип ] [, переменная[0] [AS тип]]...

тип (INTEGER, LONG, SINGLE, DOUBLE, STRING и т. д.).

STATIC - объявляет, что локальные переменные данной функции сохраня­ются между вызовами самой функции.

Можно объявлять функции и по-другому. Главное, чтобы вызовы функции в программе следовали после ее объявления.

DEF FN имя функции [(список параметров)]

<операторы>

FNимя функции = выражение

<операторы>

[EXIT DEF]

<операторы>

END DEF

Считается, что второй способ объявления функций более традиционен. Процедура объявляется следующим образом:

SUB имя подпрограммы [(список параметров)] [STATIC]

<операторы>

END SUB.

Операторы ввода-вывода

Для ввода в QBASIC используются операторы INPUT, READ, DATA.

Оператор INPUTпроизводит ввод данных, присваивая значения соответствующим переменным во время ввода. Например, при отработке опера­тора по вводу трех целых чисел

INPUT А, В, С

с клавиатуры вводятся числа через запятую, а затем нажимается клавиша

<Enter>:

123, 2345, -56 <Enter>

Для вывода данных на экран дисплея применяется оператор PRINT.

При использовании этого оператора можно употреблять в качестве разделителей запятую или точку с запятой:

PRINT А, В; С;

Точка с запятой в конце списка выражений отменяет символы "возврат каретки" и "перевод строки". Использование запятой приводит к так назы­ваемому "зонному" выводу данных, где под "зоной" понимается расстояние в

14 символов (колонок). При использовании точки с запятой в качестве

разделителя данные выводятся последовательно, друг за другом.

Например, для того чтобы вывести на экран 3 символа, нужно написать так: PRINT "A","B","С"

тогда на экране появится надпись в виде

А В С.

Если вы вводите, PRINT "A";"B";"C"

то на экране появится надпись в виде

ABC

Примеры работы с символьными переменными.

Пример 1

Дана строка символов до точки. Определить, является ли она записью десятичного числа, кратного трем.

 

REM PRG44_14

F= 1: К = 0

DO

INPUT "ВВЕДИТЕ ТЕКСТ ДО ТОЧКИ : ";S$

L = INSTR(1, S$, ".") -1

IF L = О THEN L = LEN(S$)

FOR I = 1 TO L

R = ASC(MID$(S$, I, 1)) - ASC("0")

IF R < 0 OR R >= 10 THEN F = 0: I = L ELSE К = К + R

NEXT I

LOOP UNTIL F = 1

IF F = 1 AND К = 3 * (К \ 3) THEN PRINT "YES" ELSE PRINT "NO"

 

Для решения задачи:

• вводим строку S$ и определяем ее длину;

• организуем в строке поиск цифр до тех пор, пока не закончится про­смотр или не обнаружим ошибки в числовом выражении;

• в зависимости от значения флага и суммы цифр выводим результат на экран.

Переменные:

I - переменная цикла;

К - сумма цифр;

F - вспомогательный флаг, обозначающий ошибку в выражении;

R - цифра соответствующего разряда;

L - длина строки;

S$ - строка текста.

Пример 2

Дана строка символов до точки. Вывести ее на экран задом наперед.

 

REM PRG44_15

INPUT "ВВЕДИТЕ ТЕКСТ ДО ТОЧКИ : ";S$

L = INSTR(1,S$, ".")-1

IF L = O THEN L = LEN(S$)

S2$ = ""

FOR I = L TO 1 STEP -1

S2$ = S2$ + MID$(S$, I, 1)

NEXT I

PRINT S2$

 

Для решения задачи:

• вводим строку S$ и определяем ее длину;

• организуем цикл по формированию строки S2$;

• выводим результат на экран.

Переменные:

I - переменная цикла;

L - длина строки;

S$ - исходная строка текста;

S2$ - строка-результат.

 

 

 
 


ВВЕДИТЕ ТЕКСТ ДО ТОЧКИ :? 1234567890

ААААААА.

ААААААА 0987654321.

ВВЕДИТЕ ТЕКСТ ДО ТОЧКИ:? +++++++++++

+++++++++++.

Результат работы PRG44_15
+++++++++++ +++++++++++.

Работа с файлами

Информация, вводимая с клавиатуры или обрабатываемая с помощью программных средств Бейсика размещается в оператив­ной памяти компьютера.

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

Требования к имени файла

· имя не должно быть больше чем 8 символов;

· имя может состоять из букв латинского алфавита, цифр и символов, например, _, -, (,), $ и некоторых других. Впрочем, злоупотреблять специальными символами не стоит — букв и цифр вполне хватает;

· в имени файла запрещены символы <Пробел>, *, точка, за­пятая, кавычки, двоеточие.

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

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

Для работы в Бейсике необходимы файлы, хранящие одно­родные по типу или структуре сведения ,о каких-либо объектах. Набор данных о каком-либо одном объекте называется записью.

Файл может

быть пустым, т. е. содержать 0 байт информации, но имя файла и символ конца файла будут присутствовать.

Записи могут содержать данные разных типов, но должны быть

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

 

"Запорожец", "4067 ЛДЕ", "1972", "100$"

"ГАЗ-34", "6666 ЛАА", 1989, "3500$"

 

В соответствии со способом доступа к файлам они делятся на два вида.

· Файл с последовательным доступом;

· Файл с прямым доступом.

Файлы последовательного доступа наиболее просты как в орга­низации, так и в работе с ними. Записи обрабатываются после­довательно одна за другой. Информация в таких файлах хранит­ся в виде текста в кодах ASCII. Такие файлы легко про-

смотреть на экране, используя любой простейший редактор, или в самом Бейсике.

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

 

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

Операции над файлами

Независимо от того, какие действия происходят с инфор­мацией, хранящейся в файле, производятся следующие обязательные операции:

· открытие файла;

· чтение и запись обрабатываемых данных;

· закрытие файла.

Открытие файла

Для открытия файла предназначен оператор open, имеющий следующий формат:

OPEN имя_ файла FOR режим AS # номер файла

Режим определяет доступ к данным файла. Возможны следующие режимы:

input. Это режим чтения информации из файла. В случае, если указывается несуществующее имя файла, возникнет со­общение об ошибке "Файл не найден".

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

append. Режим добавления информации в файл. Новая инфор­мация будет размещена в конце файла, за последней записью.

Номер файла предваряется знаком #, после ко­торого следует целое число от 1 до 255.

Запись в файл

Рассмотрим пример записи в файл.

OPEN "capitals.dat" FOR OUTPUT AS #1

FOR X=l TO 5

INPUT "ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ"; F$

PRINT #1, F$

NEXT X

CLOSE #1

END

В результате работы программы мы получим (полужирным шрифтом выделены введенные с клавиатуры данные):

ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? МОСКВА

ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? САНКТ-ПЕТЕРБУРГ

ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ТАЛЛИН

ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? РИГА

ВВЕДИТЕ НАЗВАНИЕ СТОЛИЦЫ? ВИЛЬНЮС

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

В качестве параметра имя_файла можно использовать перемен­ную текстового типа. Это позволяет вводить имя файла с кла­виатуры и является универсальным способом работы с файлами. Например:

 

INPUT " Введите имя файла "; FileName$

OPEN FileName$ FOR OUTPUT AS #1

 

После ключевого слова as указывается номер файла. Больше открыть файл с таким номером в данной программе нельзя. Для каждого последующего файла должен быть указан свой собст­венный неповторимый номер в пределах от 1 до 255. Сколько всего может быть открыто файлов, зависит от файла конфигура­ции вашего компьютера config.sys, в котором число одновремен­но открытых файлов определяется командой files.

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

Программа создания файла данных об автомобилях

CLS

INPUT " Введите имя файла"; F$

Открытие файла

OPEN F$ FOR OUTPUT AS #1

DO

INPUT "Марка автомобиля? (Для окончания работы введите QWE.); М$

IF UCASE$(M$)="QWE" OR OCASE$(М$)="ЙЦУ" THEN 1

INPUT "Номер автомобиля?"; N$

INPUT "Цвет автомобиля?"; С$

INPUT "Год производства автомобиля?"; G$

INPUT "Продажная цена автомобиля?"; S$

WRITE #1, М$, N$, C$, G$, S$ LOOP

' Закрытие файла

1 : CLOSE #1 PRINT "Файл сформирован"

 

Программа действует следующим образом. Запрашивает имя файла, открывает его для записи, запрашивает информацию, записывает ее в файл до введения пользователем сочетания букв "QWE" или "ЙЦУ" (эти символы расположены на одних клави­шах, вследствие чего пользователь может случайно набрать как одну комбинацию, так и другую). Запись в файл может произво­диться операторами

 

PRINT # номер_файла, выражение

ИЛИ

WRITE # номер_файла, вьражение

 

Результат работы этих операторов одинаков.

Для закрытия файлов применяется оператор

 

CLOSE # номер_файла

Если номер файла в операторе close указан, то будет закрыт именно этот, вполне определенный файл. Если же номер не ука­зан, будут закрыты все открытые файлы.

Чтение из файла

Чтение из файла производится аналогично записи, но — вместо режима output используется режим input. Прочитаем занесенные нами данные из файла avto.dat.

 

' Программа чтения файла данных об автомобилях

CLS

INPUT " Введите имя файла"; F$

' Открытие файла

OPEN F$ FOR INPUT AS #1

PRINT "База данных автомобилей на 17 декабря 2000 года"

I=1

DO

PRINT "Вывести данные об"; I; "автомобиле?"

INPUT "Для окончания введите QWE, для продолжения -<Enter>"; M$

IF UCASE$(M$)="QWE" OR UCASE$(М$)="ЙЦУ" THEN 1

INPUT #1, M$, N$, C$, G$, S$

PRINT M$, N$, C$, G$, S$

I=I+1

LOOP UNTIL EOF(l)

' Закрытие файла

1 :close #1

PRINT "Файл закрыт"

 

Оператор loop until eof(1) . Означает, что считывание ведется до тех пор, пока не будет обнаружен символ конца файла (end of file), а в скобках указан номер от­крытого файла.

Изменения данных в файле

Для изменения какой-либо записи, удаления старых или добав­ления новых данных в последовательном файле необходимо от­крыть два файла: подлежащий изменению и новый, в котором создается обновленная версия исходного файла. Старый файл в дальнейшем можно удалить. Приведенная ниже программа в файле avto.dat изменяет "МОСКВИЧ" на "МЕРСЕДЕС". В пер­вых строках открываются исходный файл avto.dat и новый файл avto2.dat, сначала пустой. Очередная запись считывается из фай­ла avto.dat и, при условии, что это не "МОСКВИЧ", переписы­вается без изменения в новый файл. Если же встречается значе­ние "МОСКВИЧ", то оно заменяется на "МЕРСЕДЕС" путем присваивания нового значения переменной м$. В следующей .строке данное значение попадает в выходной файл. После того как весь входной файл просмотрен, оба файла закрываются.

 

OPEN "avto.dat"

FOR INPUT AS #1

OPEN "avto2.dat"

FOR OUTPUT AS #2

FOR 1-1 TO 5

INPUT #1, M$, N$, C$, G$, S$

IF UCASE$(M$)-"МОСКВИЧ" THEN М$-"МЕРСЕДЕС"

PRINT 12, M$, N$, C$, G$, S$

NEXT I

CLOSE 1, 2

KILL "avto.dat"

NAME "avto2.dat" AS "avto.dat"

END

 

Заключительный этап — удаление исходного и переименование нового файла, которому придается прежнее имя, что обеспечи­вает и в дальнейшем наличие на дискете файла avto.dat.

Добавление данных в файл

Указание for append в операторе open подготавливает файл для вывода данных и смещает указатель на конец файла. Последую­щие операторы приписывают новую информацию к уже имею­щейся. В предложенной далее программе в файл данных об ав­томобилях добавляются сведения о двух новых поступлениях.

 

' Программа создания файла данных об автомобилях

CLS

INPUT " Введите имя файла"; F$

' Открытие файла

OPEN F$ FOR APPEND AS II

INPUT "Марка автомобиля? (Для окончания работы введите QWE.); М$

IF UCASE$(M$)="QWE" OR UCASE$(М$)="ЙЦУ" THEN 1

INPUT "Номер автомобиля?"; N$

INPUT "Цвет автомобиля?"; С$

INPUT "Год производства автомобиля?"; G$

INPUT "Продажная цена автомобиля?"; S$

WRITE #1, М$, N$, C$, G$, S$ LOOP

' Закрытие файла 1 : CLOSE #1 PRINT "Файл дополнен"'

Оператор графики



Последнее изменение этой страницы: 2016-07-22

headinsider.info. Все права принадлежат авторам данных материалов.