КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строковые функции и операторы
Приведем наиболее часто употребляемые строковые функции: Функции, возвращающие числовые значения: ASC(Str$) – выдает числовое значение ASCII-кода первого символа в Str$. LEN(Str$) – выдает целое число, равное длине строкового выражения Str$. VAL(Str$) – преобразует строку в числовое выражение, если первый символ аргумента не числовой, то функция возвращает ноль. INSTR(n, Str$, Str1$) – определяет позицию вхождения выражения Str1$ в Str$, начиная с позиции n. Функции, аргумент которых числовое выражение): CHR$(код) – выдает символ ASCII, код которого является аргументом. STR$(числовое выражение) – преобразует числовое выражение в символьное. Если значение выражения положительно, то к полученной строке слева добавляется пробел. Пары функций ASC(Str$) и CHR$(код); VAL(Str$) и STR$(числовое выражение) являются обратными по своему назначению. Функции, и аргумент и значение которых символьные выражения: MID$(St$, n, m) в качестве результата дает фрагмент строки St$, длиной m, начиная с позиции n. Оператор MID$(St$, n, m)= Zt$ заменяет фрагмент строки St$ длиной m, начиная с позиции n на строку Zt$. LEFT$(St$, n) - выделяет из выражения n левых символов. RIGHT$(St$, n) - выделяет из выражения n правых символов. LTRIM$(St$) - удаляет левые пробелы. RTRIM$(St$) - удаляет правые пробелы. INKEY$ - функция анализирует информацию о нажатых клавишах. Эта функция, помещенная в цикл DO … LOOP, может быть использована для создания паузы произвольной продолжительности, управления графическим объектом, выхода из цикла и т.д. HEX$(числовое выражение&) – возвращает шестнадцатеричное представление аргумента. OCT$(числовое выражение&) – возвращает восьмеричное представление аргумента. LCASE$(Str$) – переводит все буквы строки Str$ в строчные. UCASE$(Str$) – переводит все буквы строки Str$ в прописные. SPASE$(n%) – возвращает строку из n% пробелов. STRING$(n%, {код | строковое выражение}) – возвращает строку из n% повторяющихся символов. Следует обратить внимание на то, что тексты могут содержать числовую информацию, но в этом случае цифры в тексте воспринимаются как символы. ПРИМЕР 14.1. Из исходной строки a$ удалить подряд идущие повторяющиеся пробелы (из группы подряд идущих пробелов остается один). CLS LINE INPUT a$ ' вводим исходную строку DIM I, dl AS INTEGER dl = LEN(a$) 'определяем длину строки FOR I = 1 TO dl-1 REM Формируем новую строку b$ без лишних пробелов REM Из строки a$ выделяем очередной символ и следующий за ним s$ = MID$(a$, i, 1) ss$ = MID$(a$, i + 1, 1) IF s$ <> " " AND ss$ <> " " OR s$ <> " " AND ss$ = " " THEN b$ = b$ + s$ REM В строку b$ записывается последний пробел из подряд идущих пробелов ELSEIF s$ = " " AND ss$ <> " " THEN b$ = b$ + s$ END IF NEXT I PRINT b$ 'выводим полученную строку END Пояснения к программе: Новую строку b$ формируем следующим образом: - в исходной строке a$ выделяются два соседних символа; - если первый из них не пробел, то он присоединяется к новой строке; - если оба символа пробелы, то в новую строку ничего не добавляется; - пробел добавляется с случае, когда первый из символов пробел, а второй нет. Таким образом, в новую строку добавляется последний пробел из группы подряд идущих пробелов; - все условия в блочном операторе можно объединить в одно сложное условие. ПРИМЕР 14.2. Для строки a$ определить, является ли она симметричной (читается одинаково слева направо и справа налево). LINE INPUT a$ 'вводим исходную строку DIM I AS INTEGER FOR I=LEN(a$) TO 1 STEP -1 'используем отрицательный шаг b$=b$ + MID$(a$, I, 1) 'заполнение зеркально отраженной строки NEXT I IF a$=b$ THEN 'сравнение исходной строки и зеркально отраженной PRINT "Строка симметричная" ELSE PRINT "Строка несимметричная" END IF END Пояснения к программе: - по исходной строке a$ формируем новую строку b$, которая является зеркальным отображением исходной (исходная строка переписанная от конца к началу); - если строки a$ и b$ совпадают, то исходная строка a$ является симметричной. Рассмотрим другой способ решения задачи. LINE INPUT a$ 'вводим исходную строку DIM I, n AS INTEGER n=LEN(a$) FOR I=1 TO n\2 b1$=MID$(a$, I, 1) 'считывание очередного символа строки b2$=MID$(a$, n-I+1, 1) 'считывание симметричного символа IF b1$<>b2$ THEN PRINT "Строка несимметричная": END NEXT I PRINT "Строка симметричная" END Пояснения к программе: - в этом способе в цикле считываются очередной символ исходной строки и симметричный ему символ из второй половины строки; - если эти символы не совпадают, исходная строка не является симметричной. ПРИМЕР 14.3. Сложить два целых положительных числа большой длины. CLS INPUT "введите первое число", a$ INPUT "введите второе число", b$ DIM la, lb, I, per, sd, s1, s2 AS INTEGER la = LEN(a$): lb = LEN(b$) IF la < lb THEN DO WHILE la <> lb 'цикл выравнивания строк по длине a$="0"+a$: la = LEN(a$) LOOP END IF IF la > lb THEN DO WHILE la <> lb ' цикл выравнивания строк по длине b$="0" + b$: lb = LEN(b$) LOOP END IF per = 0 FOR I = la TO 1 STEP -1 REM Выделяем по одному символу из строк и преобразуем их в числа s1 = VAL(MID$(a$, I, 1)) s2 = VAL(MID$(b$, I, 1)) s = s1 + s2 + per 'складываем поразрядно числа и перенос IF s > 9 THEN ed = s MOD 10: per = 1 'разделяем сумму на единицы и десятки-перенос ELSE ed = s: per = 0 END IF REM Преобразуем число в строку, убираем пробелы REM и присоединяем к результату c$ = LTRIM$(STR$(ed)) + c$ NEXT I IF per = 1 THEN c$ = STR$(per) + c$ 'присоединяем последний перенос PRINT a$: PRINT b$: PRINT c$ END Пояснения к программе: - т.к. диапазон представления чисел ограничен, для операций над ними могут быть использованы символьные данные, с их помощью имитируют арифметические действия над числами большой величины; - в данной программе имитируется сложение двух чисел столбиком; - вводятся два числа в символьной форме; - строки выравниваются по длине, для этого к началу более короткой строки приписываются нули; - начиная с конца строк, выделяется по одной цифре из каждой строки, которые преобразуются в числовую форму, и складываются (s1 и s2); - если их сумма больше 9, то отдельно записываются единицы в ячейку «ed» и перенос - в ячейку «per»; перенос участвует в сложении цифр следующего разряда заданных чисел. ПРИМЕР 14.4. Дана строка символов, заканчивающаяся точкой. Посчитать, сколько слов содержит данная строка. CLS LINE INPUT a$ ' вводим исходную строку REM Описываем целочисленные переменные, K – счетчик слов DIM L, I, K AS INTEGER L = LEN(a$) K = 0 'устанавливаем начальное значение счетчика слов FOR I = 1 TO L-1 REM Считываем из исходной строки два соседних символа s$ = MID$(a$, I, 1) ss$ = MID$(a$, I + 1, 1) REM Счетчик увеличивается, если за пробелом следует не пробел IF s$ <> " " AND ss$ <> " " THEN K = K + 1 NEXT I PRINT K + 1 END Пояснения к программе: - учитываем, что слова отделяются друг от друга пробелами. Подсчитав количество пробелов (групп пробелов), можно определить количество слов в строке. Т.к. в конце строки стоит точка, то количество пробелов будет на единицу меньше, чем число слов; - в исходной строке a$ выделяются два соседних символа; - если первый из них пробел, а второй нет, то счетчик слов увеличивается на единицу; - после обработки строки выводится увеличенное на единицу значение счетчика слов; - данная программа правильно работает и в случае, когда слова отделяются друг от друга более чем одним пробелом; - считаем, что перед первым словом исходной строки пробелов нет и между последним словом и завершающей точкой также нет пробелов, иначе программа будет выдавать неверный результат. Группу строк (символов) можно хранить в строковом массиве, например A$(i), и обращаться к отдельным строкам по именам A$(1),A$(2),A(3) и т.д. Например, список фамилий в телефонном справочнике можно представить, как одномерный строковый массив. Для массивов строк допустимы те же имена, что и для числовых массивов, только к имени добавляется знак $ или в описании указывается тип. Каждый элемент массива равноценен строковой переменной. Действие всех вышеперечисленных строковых функций распространяется и на элементы массивов. ПРИМЕР 14.5. С клавиатуры вводится список фамилий. Количество фамилий заранее известно. Распечатать список фамилий в алфавитном порядке. REM Задача представляет собой задачу сортировки одномерного массива CLS DIM n, i, j AS INTEGER INPUT n 'вводим количество фамилий DIM fio(n) AS STRING 'описываем символьный массив REM Вводим с клавиатуры список фамилий FOR i = 1 TO n INPUT fio(i) NEXT REM Сортировка массива методом «пузырька» FOR i = 1 TO n - 1 FOR j = 1 TO n - i REM Если фамилии не по алфавиту, меняем их местами оператором "swap" IF fio(j) > fio(j + 1) THEN SWAP fio(j), fio(j + 1) NEXT j NEXT i REM Выводим на экран отсортированный список фамилий FOR i = 1 TO n PRINT fio(i) NEXT END ПРИМЕР 14.6. Дана строка, состоящая из нескольких слов. Записать слова строки в символьный массив (элемент массива – слово строки). Вывести полученный массив в столбик. CLS LINE INPUT a$ ' вводим исходную строку REM Описываем целочисленные переменные, K – счетчик слов в строке DIM L, I, K, J, m AS INTEGER L = LEN(a$) K = 0 'устанавливаем начальное значение счетчика слов FOR I = 1 TO L-1 REM Считываем из исходной строки два соседних символа s$ = MID$(a$, I, 1) ss$ = MID$(a$, I + 1, 1) REM Счетчик увеличивается, если за пробелом следует не пробел IF s$ <> " " AND ss$ <> " " THEN K = K + 1 NEXT I K = K + 1 'окончательное значение счетчика слов a$ = a$ + " " 'пробел в конце строки: каждое слово заканчивается пробелом DIM SL$(1 TO K) 'описываем строковый массив по числу слов в строке REM Формируем строковый массив I = 1 'устанавливаем позицию начала поиска первого пробела в строке FOR J = 1 TO K m = INSTR(I, a$, " ") 'ищем позицию вхождения в строку очередного пробела SL$(J) = MID$(a$, I, m-I) 'записываем очередное слово в массив I = m +1 'устанавливаем позицию начала поиска очередного пробела PRINT SL$(J) 'выводим сформированный элемент массива на экран NEXT J END Пояснения к программе: - подсчитываем число слов в исходной строке a$: переменная K; - добавляем пробел в конце строки, теперь каждое слово в строке заканчивается пробелом; - описываем строковый массив SL$, количество элементов которого равно числу слов в исходной строке a$; - переменная I – позиция начала поиска очередного пробела в строке одновременно является позицией начала очередного слова в строке, начальное значение переменной I равно 1; - ищем позицию вхождения очередного пробела в строке – функция INSTR и формируем элемент массива SL$; - выводим очередной элемент массива SL$ на экран. Лабораторное задание 1. При домашней подготовке составить программы обработки строк согласно варианту Вашего индивидуального задания. 2. В системе QBASIC создать файлы программ. 3. Отладить и выполнить программы. Результат вывести на экран. 4. Проанализировать работу операторов и символьных функций. 5. Составить отчет. Защитить работу. Лабораторная работа состоит из двух задач. Студент выбирает из списка заданий свой индивидуальный вариант и выполняет его. Вариант №1 Задание № 1. Даны строки a$ и b$. Вывести все символы строки a$, не входящие в строку b$. Задание № 2. В исходной строке b$ определить количество слов, начинающихся заданным символом x$. Вариант №2 Задание № 1. Дана строка a$. Расположить все символы строки a$ в алфавитном порядке. Задание № 2. В исходной строке b$ заменить все вхождения заданного символа x$ на другой заданный символ y$. Вариант №3 Задание № 1. В исходной строке b$ определить сумму цифр самой длинной последовательности подряд идущих цифр. Задание № 2. В исходной строке b$ определить количество слов, содержащих хотя бы один заданный символ x$. Вариант №4 Задание № 1. В исходной строке b$ определить количество цифр, входящих в эту строку, если цифр нет, выдать соответствующее сообщение. Задание № 2. В исходной строке b$ отсортировать все слова по алфавиту. Вариант №5 Задание № 1. В исходной строке b$ определить все слова, отличные от первого слова. Вывести эти слова в столбик. Задание № 2. Определить для строки b$, является ли она правильной записью целого числа без знака в двоичной системе счисления. Если да, определить является ли это число четным. Вариант №6 Задание № 1. В исходной строке b$ после каждого вхождения заданного сочетания символов x$ ввести сочетание символов y$. Задание № 2. Определить для строки b$, является ли она правильной записью целого числа без знака в десятичной системе счисления. Вариант №7 Задание № 1. Определить для строки b$, является ли она правильной записью целого числа без знака в восьмеричной системе счисления. Задание № 2. В исходной строке а$ произвести циклическую перестановку слов влево на n слов. Вывести исходную и полученную строки. Вариант №8 Задание № 1. Определить для строки b$, является ли она правильной записью целого числа без знака в шестнадцатеричной системе счисления. Задание № 2. Вывести все символы исходной строки а$, начиная от первого заданного символа x$ до последнего заданного символа y$. Если заданных символов в строке нет, вывести сообщение об этом. Вариант №9 Задание № 1. Определить сумму ASCII-кодов символов, составляющих строку а$. Сформировать строку b$, состоящую из символов, ASCII-коды которых на заданное число n больше кодов соответствующих символов строки а$. Задание № 2. Вывести все слова исходной строки а$, которые встречаются в ней один раз. Вариант №10 Задание № 1. В исходной строке а$ заменить все вхождения знака «.» на знак «!». Задание № 2. Определить, сколько предложений содержится в исходной строке а$ и сколько слов находится в каждом предложении. Результат анализа вывести на экран. Вариант №11 Задание № 1. Определить, сколько слов содержится в исходной строке а$. Найти самое длинное слово в строке. Задание № 2. Дано натуральное число n. Приписать по единице перед старшим и после младшего разрядов числа. Задачу решить с использованием символьных функций. Вариант №12 Задание № 1. В исходной строке а$ найти и вывести самое длинное и самое короткое слова. Задание № 2. В исходной строке b$ заменить все вхождения заданной подстроки x$ на другую заданную подстроку y$. Вариант №13 Задание № 1. В исходной строке b$ определить количество слов, заканчивающихся заданным символом x$. Задание № 2. Определить для строки b$, является ли она правильной записью целого нечетного числа без знака в двоичной системе счисления. Если да, инвертировать это число. Вариант №14 Задание № 1. В исходной строке b$ определить среднее арифметическое всех цифр, входящих в эту строку, если цифр нет, выдать соответствующее сообщение. Задание № 2. В исходной строке а$ произвести циклическую перестановку слов вправо на n слов. Вывести исходную и полученную строки. Лабораторная работа № 15 Цель работы: 1. Изучение приемов программирования с использованием графического режима. 2. Приобретение практических навыков работы в графическом режиме. Для воспроизведения графики компьютер снабжен специальными аппаратными средствами. К ним относятся монитор и специальное устройство – видеоадаптер (видеокарта), выполняющее роль переводчика между памятью и экраном. Видеоадаптер вместе с монитором образуют видеоподсистему. Видеоподсистемы работают в двух видеорежимах: текстовом или графическом. В текстовом режиме экран монитора разбивается на отдельные символьные позиции, в каждой из которых может выводиться только один символ. В графическом режиме для каждой точки изображения, называемой пикселем, отводится от одного (монохромный режим) до 24-бит (цветной). В этом режиме имеется доступ к каждой точке изображения. Любое изображение можно представить в виде множества мельчайших точек, каждой из которых сопоставлены две координаты и номер цвета. Полученный числовой набор, называемый растром, более или менее точно опишет изображение. Графические режимы используются для формирования рисунков. В программировании используется такая характеристика как разрешение. Для графических режимов - это количество доступных точек на экране, для текстовых - количество символов в строке. Разрешение экрана является одним из важнейших параметров видеоподсистемы. Чем оно выше, тем больше информации можно отобразить на экране. Количество различных цветов (цветовое разрешение), доступных для раскрашивания изображений - другое важное свойство графического режима. Базовая палитра IBM - совместимых ЭВМ включает 16 стандартных цветов. В программах цвета задаются своими номерами, приведенными ниже: Таблица 9. Номера экранных цветов
Современные персональные компьютеры комплектуются дисплеями способными отображать палитры от 256 до 16 млн. цветов. В графическом режиме каждый пиксель определяется цветом и своими координатами - положением относительно левого верхнего угла экрана, который, в свою очередь, имеет координаты (0,0). Программист может управлять цветом любого пикселя, что позволяет формировать на экране любые изображения, в том числе рисунки, графики, чертежи, символы. В текстовых режимах можно задавать координаты символа, определяя положение курсора, относительно левого верхнего угла экрана (1,1), цвет символа (цвет переднего плана) и цвет фона (цвет заднего плана).
Дата добавления: 2014-12-08; Просмотров: 796; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |