Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Обработка символьной информацииСодержание книги
Поиск на нашем сайте
Кроме числовых значений переменные в Бейсике могут принимать значения в виде строки символов. Символьные значения (константы) заключаются в кавычки " ". Имя символьной (строковой) переменной отличается от обычной числовой переменной добавлением справа специального символа, чаще знака доллара $, например, AS, Fl$, MaxS. Над символьными переменными допустима операция сложения (склейка строк символов); могут быть использованы функции и процедуры обработки символьных величин. Начнем с примеров программ, аналогичных приведенным ранее на языке Паскаль. Программа 68 (см. программу 11) 10 ' ******* Количество гласных в тексте ************ 20 с$ = "аеиоуыэюяАЕИОУЫЭЮЯ" 30 INPUT "Введите текст"; а$ 40 n» О 50 FOR k = 1 ТО LEN(c$) 6t> b$ = MID$(c$, k, 1) 70 FOR i = 1 TO LEN(a$) 80 IF b$ = MID$(a$, i, 1) THEN n = n + 1 90 NEXT i 100 NEXT k 110 PRINT "Количество гласных равно", n 120 END Здесь использована строковая функция MID(a$,ij) - вырезка подстроки из строки а$, где первый аргумент - исходная строка, второй - начальная позиция подстроки, третий - длина подстроки. Функция LEN(aS) - длина текста. В следующей программе дополнительно использованы строковые функции LEFT$(a$,i) - выделение подстроки длиной i от левого края заданной строки и RIGHT$(a$,i) - то же, но с правого края. Программа 69 (см. программу 12) 10 ' ******* Замена в тексте sqr на ехр ************ 20 INPUT "Введите текст"; а$ 30 FOR i = 1 ТО LEN(a$) - 2 40 IF MID$(a$, i, 3) О "THEN GOTO 60 50 a$ = LEFT$(a$, i -1) + "+ RIGHT$(a$, LEN(a$) - i - 2) 60 NEXT i 70 PRINT a$ 80 END Приведем еще несколько примеров. Программа 70 10 ' ******* игра клавиатурный тренажер ************ 12 DATA "азбука", "год",".23*45/56", letter, pc-ibm 15 DATA "дом-home", "Красноярск", "Омск", "Пермь", "Воронеж" 20 FOR i = 1 ТО 10 30 READ a$(i) 40 NEXT i 60 FOR i = 1 TO 10 70 CLS: PRINT: PRINT TAB(IO); a$(i); 100 PRINT: PRINT: PRINT 110 PRINT "введите слово и нажмите <ВК>"; 120 LOCATE 8, 5: х» TIMER: INPUT b$: CLS 130 у = TIMER: PRINT: n =LEN(a$(i)) 140 IF a$(i) <> b$ THEN 190 150 PRINT USING "###.#<"; (y - x) / П; 160 PRINT "сек. на один символ": GOTO 200 170 PRINT: PRINT "слово набрано неверно" 180 FOR m = 1 ТО 5000: NEXT m 190 NEXT i Функция TIMER возвращает текущее время системной среды в секундах. В строке 180 предусмотрен пустой цикл для осуществления временной задержки в исполнении программы. Использование функций LEFTS(aS,n) и MID$(a$,n,k) еще раз продемонстрировано в следующем примере. Здесь же использованы математические функции INT(x) -целая часть числа х, RND(x) - случайное число в интервале от 0 до 1. В программе задается массив (оператор DIM aS(k)) из пяти слов, представленных в списке DATA (30 и 40 строки). Случайным образом выбирается одно из них и предлагается его угадать вводом подходящих символов.
Программа 71 5 ' *************** угадай слово ********************* 10 k = 5 15 DIM a$(k) 30 DATA "вечер","информатика","университет" 40 DATA "эхо","тра-ля-ля" 50 FOR i = 1 ТО k 60 READ a$ (i) 70 NEXT i 80 CLS 90 r = INT(k * RND(-TIMER)) + 1 100 n = LEN(a$(r)) 110 PRINT "Я задумал слово из "; n; "букв" 120 LOCATE 5, 20: PRINT LEFT$(s$, n) Ш 130 t = о т 140 DO • 150 LOCATE 8, 12: PRINT "введи букву" Щ 160 INPUT h$ 170 у = О 180 FOR i = 1 ТО n ] 190 IF h$ = MID$(a$(r), i, 1) THEN | 200 LOCATE 5, 19 + i: PRINT h$: | 210 t=t+l:y=l | 220 END IF | 230 NEXT i 240 LOCATE 8, 12: PRINT " " 250 IF у О 1 THEN LOCATE,10, 15: PRINT "нет такой буквы" 260 FOR m = 1 ТО 5000: NEXT m 270 LOCATE 10, 15: PRINT " " | 280 LOOP WHILE t 0 n I 290 LOCATE 13, 13: PRINT "угадал, поздравляю!" f Обратим внимание на использованный в данной программе цикл DO-LOOP-WHILE, который допустим в некоторых версиях Бейсика (QBASIC, Turbo-BASIC).
Контрольные вопросы и задания 1. Охарактеризуйте использованные выше строковые функции.
ПОДПРОГРАММЫ В Бейсике предусмотрена работа с подпрограммами, если необходимо использовать многократно сходные действия, или для блочно-структ\рпрованного построения программы. Для организации подпрограмм используют две команды: GOSUB <номер строки> - перейти на подпрограмм: RETURN - возврат. Во многих версиях Бейсика предусмотрен переключатель подпрограмм ON k GOSUB 100,200,300. Здесь k может принимать значения 1.2.3, что соответствует обращению к одной из трех подпрограмм, начинающихся с номеров 100. 200, 300. Начнем с примера, аналогичного одному из тех, которые сопровождали рассказ о процедурах Паскаля выше. Программа 72 (см. программу 17). 10 ' ****** квадратные корни и логарифмы********************* 15 CLS / 20 " а» 35: с$ = "-" 30 GOSUB 1000 40 PRINT: PRINT "Таблица квадратных корней" 50 GOSUB 1000 55 PRINT 60 FOR x = 1 TO 10 70 PRINT USING "x = ##» sqr(x) = t».#»#<"; x; SQR(x): 80 NEXT x 90 GOSUB 1000 100 PRINT: PRINT "Таблица логарифмов"; 110 GOSUB 1000 120 PRINT 130 FOR x = 1 TO 5 140 PRINT USING "x = ««» log(x) =»».»»»»"; X; LOG(x) 150 NEXT x :60 с$ = "*" 170 GOSUB 1000 180 END 1000 FOR i = 1 TO a: PRINT c$: NEXT i 1010 RETURN Обратим внимание на существенно иной механизм передачи параметров в подпрограмму на Бейсике, нежели в паскалевскую процедуру. Формирование входных параметров производится с помощью присваиваний до обращения к процедуре. Это гораздо менее удобно, чем использование формальных и фактических параметров в Паскале. Приведем еще несколько примеров работы с подпрограммами. Программа 73 '*********** меню графиков функций *********** 10 CLS: PRINT: PRINT 20 PRINT " ГРАФИКИ ФУНКЦИЙ" 30 PRINT 40 PRINT ". Синус" 50 PRINT ". Косинус" 60 PRINT ". Тангенс" 70 PRINT: PRINT 80 INPUT "введи номер"; j 90 SCREEN 2 100 LINE (200, 0) - -(200, 200): LINE (0, 100) - (400, 100) 110 PSET (0, 0), 4 120 FOR x = - 4 TO 4 STEP 1/32 130 ON j GOSUB 500, 600, 700 140 PSET (200 + 32 * x, 100 - 32 * у) 150 NEXT x 160 r$ = INPUT$(1) 170 IF r$ = "К" OR r$ = "к" THEN END ELSE SCREEN 0: GOTO 10 500 у = SIN(x): RETURN 600 у = COS(x): RETURN 700 у = TAN(x): RETURN Подпрограммы, к которым обращаются по GOSUB, сильно уступают истинным процедурам Паскаля, поскольку у них отсутствуют возможности локализации переменных, нет формальных параметров, которые можно замещать при обращении фактическими. Однако, в более поздних версиях (например в Qbasic) предусмотрены подпрограммные единицы SUB - подпрограммы-процедуры и FUNCTION - подпрограммы-функции. В следующем примере использована подпрограмма решения квадратного уравнения SUB kvur(a,b,c) со списком входных данных. В основной программе можно объявить подпрограмму оператором DECLARE, а вызвать ее с помощью команды CALL. Программа 74 5 ' ********** пример работу с подпрограммой ******** 10 DECLARE SUB kvur (а!, Ь!, с!) 20 INPUT "введи а, Ь, с"; а, Ь, с 30 CALL kvur (a, Ь, с) 40 END SUB kvur (a, b, c) 1000 d.=b*b-4*a*c 1010 IF d < 0 THEN PRINT "корней нет": GOTO 1050 1020 xl = (- b + SQR(d)) / 2 / a 1030 x2 = (- b - SQR(d)) / 2 / a 1040 PRINT ="; xl, ="; x2 1050 END SUB
Контрольные вопросы 1. В чем подпрограммы Бейсика принципиально отличаются от процедур Паскаля? РАБОТА С ФАЙЛАМИ
Для осуществления связи с внешними периферийными устройствами и с файловой системой операционной среды в Бейсике предусмотрена работа с файлами. В следующем фрагменте программы показаны команды для открытия внешнего файла с именем "aaa3.dat" на активном устройстве внешней памяти для записи (OPEN-FOR OUTPLT-AS ff). Запись в файл осуществляется командой PRINT или WRITE с указанием номера файла (строка 30). По завершении работы с файлом его закрытие осуществляется оператором CLOSE. 5 ' ********* работа с файлами для записи ********* 10 OPEN "аааЗ.ааГ FOR OUTPUT AS ^3 20FORi=1TO10 30 PRINT #3, i:' либо эквивалентная команда WRITE #3, i 40 NEXT i 50 CLOSE #3 Аналогичные команды используют при извлечении данных из существующего файла. При этом в команде OPEN указывают служебное слово INPUT, а считывание информации происходит по команде INPUT с указанием номера файла. ' *(******** работа с файлами доя чтения ********** 60 OPEN "aa3.dat" FOR INPUT AS #2 'для чтения 70 FOR i = 1 TO 10 80 INPUT #2, a(i) 90 PRINT a(i) 100 NEXTi 110 CLOSE #2 Добавить данные в существующий файл можно, используя служебное слово APPEND. ' работа с файлами для продолжения записи в существующий файл 120 OPEN "aa3.dat" FOR APPEND AS #1 130 WRITE #1, 13 140 CLOSE #1 Ниже приведен пример двух программ, осуществляющих передачу и прием зашифрованного послания. Текст шифруется заменой символа его порядковым номером в русском алфавите со смещением на 10. Например, код буквы "а"равен 11, буквы "б" - 12 и т.д. Программы вполне аналогичны программам 26 на Паскале, разобранным в параграфе 3, хотя для разнообразия способ шифровки принят несколько иным. Программа 75 (см. программу 27 sekret) 5 ' ******«-** шифровка текста ************** 10 INPUT "введи текст"; а$ 23 с5 = "абвгдежзийклмнопрстуфхцчшшъыэюя " 30 х$ = " " 40 FOR i = 1 ТО LEN(a$) 50 FOR j = 1 TO LEN(c$) 60 IF MID$(a$, i, 1) - MID$(c$, j, 1) THEN k = j: GOTO 90 70 NEXT j 80 PRINT "таких символов в таблице кодов нет": GOTO 160 90 kk = k + 10 100 x$ = x$ + STR$(kk) 110 NEXT i 120 OPEN "letter.txt" FOR OUTPUT AS #1 130 PRINT #1, x$ 140 CLOSE»1 150 PRINT "шифровка - "; x$ 160 END Результатом работы программы является зашифрованный текст, записанный в файл с именем letter.txt. Следующая программа считывает информацию из этого файла и проводит его раскодирование, используя указанный выше ключ. Программа 76 (см. программу 27 retsek) 5 '*********•* расшифровка текста *******•***«*» 10 OPEN "letter.txt" FOR INPUT AS #1 20 INPUT tl, a$ 30 CLS 40 PRINT a$ 50 c$ = "абвгдежзийклшюпрстуфхцчшщъыэюя " 60 x$ = " " 70 FOR i = 1 TO LEM(a$) STEP 3 SO k = VAL(MID$(a$, i, 2)) 90 k = k - 10 100 x$ = x$ + MID$(c$, k, 1) 110 NEXT i 120 CLOSE #1 130 PRINT "шифровка - "; x$ 140 END
|
||||
Последнее изменение этой страницы: 2016-08-10; просмотров: 308; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.233.69 (0.006 с.) |