Пример 14. Определить к какому языку и регистру клавиатуры относится данная буква.
INPUT a$ SELECT CASE ASC(a$) CASE 65 TO 90: PRINT " Лат.ЗАГЛАВНАЯ " CASE 97 TO 122: PRINT "Лат. Строчная" CASE 12 TO 159: PRINT "Русс. ЗАГЛАВНАЯ" CASE 160 TO 175: PRINT "Русс. Строчная" CASE 224 TO 239: PRINT "Русс. Строчная" CASE ELSE: PRINT "НЕ является БУКВОЙ" END SELECT Работа программы. Алгоритм основан на использовании конструкции логической передачи управления SELECT CASE. Она анализирует ASCII-код введенного знака, который выдает функция ASC. В каждом CASE указан диапазон возможных значений, соответствующей группе букв. Большой спектр задач выделения и анализа фрагментов строк решается с помощью функции INSTR. Пример 15. Определить, входит ли строка В$="dow" в слово, A$ = "Windows". INPUT A$ INPUT B$ k = INSTR(A$, B$) IF k > 0 AND LEN(B$) > 0 THEN PRINT "Yes" ELSE PRINT "No" END Результат: Yes Работа программы. Алгоритм основан на работе функции INSTR. Результатом ее работы является целое число k равное номеру знака в А$, с которого начинается вхождение B$. Естественно, что если k больше нуля, то В$ входит в А$. Условие в операторе IF состоит из двух компонентов. В одном проверяется значение k, во втором (LEN(B$) > 0) — длина переменной В$. Второе условие введено для того, чтобы выдать отрицательный ответ в случае ввода нулевой переменной. Иначе при В$="" значение k будет равно 1, и программа определит вхождение. Пример 16. Определить, сколько раз B$ входит в A$. A$ = "промышленное производство проводов" B$="про" i = 1 k = 0 DO x = INSTR(i, A$, B$) IF x > 0 THEN i = x + LEN(B$) ' Номер начала поиска k = k + 1 ' Счетчик вхождений ELSE EXIT DO ' Выход из цикла END IF LOOP PRINT "всего вхождений="; k Результат: Всего вхождений= 3 Работа программы. Цикл DO …LOOP использован потому, что заранее неизвестно, сколько будет вхождений.
В строке i = x + LEN(B$) номер начала поиска передвигается направо. Если программа найдет первое вхождение, то нужно будет продолжить поиск с позиции, номер которого равен номеру начала вхождения плюс длина искомого слова. В примере первое вхождение «про» в «промышленное производство проводов» начинается с первой позиции, следователь но, продолжать поиск нужно с 4-й позиции (1 + LEN(B$)=1+3=4). Если обнаруженное вхождение нужно заменить другой строкой, то используют оператор MID$. Пример 17. Заменить все пробелы на тире в тексте А$. A$= "Погиб поэт! невольник чести!" FOR i = 1 TO LEN(A$) IF ASC(MID$(A$, i, 1)) = 32 THEN MID$(A$, i, 1) = "-" NEXT i PRINT A$ Результат: Погиб-поэт!-невольник-чести! Работа программы. В цикле поочередно выделяются знаки переменной А$. Функция ASC определяет АSCII-код знака, но в том случае, если номер равен 32 (ASCII-код пробела), оператор MID$ заменяет текущий символ знаком «минус» (тире). Сортировка текстовых массивов Пример 18. Дан массив текстовых переменных. Отсортировать по всем знакам каждого слова в соответствии с алфавитом. CLS DATA "512","101","324","712","310","520","001","721" REM Формируем исходный массив A$ n = 8 DIM a$(n) PRINT "Исходный массив" FOR i = 1 TO n READ a$(i) PRINT " "; a$(i); NEXT i REM Сортировка FOR i = 1 TO n FOR j = 1 TO n k = 1 IF ASC(MID$(a$(i), k, 1)) < ASC(MID$(a$(j), k, 1)) THEN SWAP a$(i), a$(j) ELSE IF ASC(MID$(a$(i), k, 1)) = ASC(MID$(a$(j), k, 1)) THEN k = k + 1 END IF IF MID$(a$(j), k, 1) = "" THEN SWAP a$(i), a$(j) NEXT j NEXT i REM вводим отсортированный массив на экран PRINT "Отсортированный" FOR i = 1 TO n PRINT " "; a$(i); NEXT i Результат: Исходный массив 512 101 324 712 310 520 001 721 Отсортированный 001 101 310 324 520 512 712 721 Для других исходных данных: Исходный Яковлев А. Андреев Д., Сланов Р., Ананко Р., Ваниёва Р., Антонов И.. Шейхов М, Гринберг Л., Галич Г., Сапин В. Отсортированный Ананко Р., Андреев Д., Антонов И.., Ваниева Р., Галич Г., Гринберг Л., Санин В., Сланов Р., Шейхов М., Яковлев А.
Работа программы. Алгоритм, как и многие программы сортировки, основан па сравнении слов во вложенных циклах. Внешний цикл со счетчиком i задает номер слова для анализа. Внутренний цикл со счетчиком j сравнивает это слово со всеми остальными и при необходимости меняет его на другое. Логической группой может быть не только язык или тип символов, но и отдельная переменная. Пример 19. Состоит ли В$ только из символов, входящих в А$. По количеству знаков переменные не равны. a$ = "123456" b$ = "654" DO k = k + 1 tmp$ = MID$(b$, k, 1) IF INSTR(a$, tmp$) = 0 THEN rez = 1: EXIT DO LOOP WHILE k < LEN(b$) IF rez = 1 THEN PRINT "НЕ состоит" ELSE PRINT " Состоит " Результат: Состоит Работа программы. Идея алгоритма состоит в том, что каждый элемент BS проверяется на вхождение в AS. Если обнаружено хотя бы одно несовпадение, проверка закапчивается и машина выводит ответ о том, что В$ не состоит только из символов А$. На основе подобного алгоритма можно решать любые задачи, связанные со сравнением одной строки символов с группой других. Например, поиск слова или числа с неповторяющимися знаками, поиск символа, который реже или чаще; других встречается в тексте, определение слова с наибольшим содержанием заданного знака. Изменение текста путем вставки или удаления знаков В Qbasic нет операторов, которые позволяют вставить новые элементы, раздвинув слово. Поэтому вставка символов осуществляется путем составления новой переменной, которая формируется из следующих частей исходного слова: первая_частъ + вставка + вторая часть. Например, для того чтобы в переменную 0$="АС" вставить букву В. нужно создать новую переменную А$="А" I "B"+"C". Такая же логика применяется в задачах поиска и замены. В них нужно не только выделить определенную последовательность символов, по и заменить ее другой, не изменив структуры исходной переменной. Причем таких замен для одной строки может быть несколько, и реализуются они в цикле. Удаление части исходной строки проходит аналогично. Программа формирует новую переменную, в которую записываются все символы исходной строки, кроме удаляемых. Структуру новой переменной можно представить формулой: символы_до_удаляемых + символы после_удаляемых.
Например, чтобы из переменной А$= "ABC" удалить В. Нужно создать новую переменную G$="А"+"С". Рассмотрим ряд примеров вставки и удаления фрагментов текста. Пример 20. Разделить цепочку литер «QuickBasic 4.5», вставив, робел между буквами «k» и «В». (Примем во внимание, что k - это 5-й по счету символ слева, а В - 9-й символ справа в А$). a$ = "QuickBASIC 4.5" b$ = LEFT$(a$, 5) + "_" + RIGHT$(a$, 9) PRINT b$ Результат: Quick_BASIC 4.5 Работа программы. В переменную В$ записывается сумма первой части A$, которая должна быть расположена слева от пробела, знак «пробел» и вторая часть исходной цепочку, которая должна стоять справа от пробела.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|