Студопедия — Строковые выражения и функции
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Строковые выражения и функции






Наряду с числовыми переменными в языке Бейсик определены и строковые переменные. Имена строковых переменных заканчиваются знаком $. Константы строкового типа при записи заключаются в кавычки. В языке Бейсик над строками определена единственная операция — операция конкатенации (слияние строк). Она обозначается знаком +, при этом длина результирующей строки не должна быть больше N.

Для присваивания строковым переменным значений строкового типа в языке служит обычный оператор присваивания, в левой части которого указывается имя строковой переменной, а в правой части — выражение строкового типа.

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

 

А$="СТР"

B$="ОКА СИМ"

С$=А$+В$+"ВОЛОВ"

PRINT С$

будет строка на экране монитора СТРОКА СИМВОЛОВ

В строковых выражениях могут использоваться следующие функции:

CHR$(N) Возвращает символ по коду ASCII. PRINT CHR$(68). Результат D
ASC(A$) Возвращает ASCII код первого символа. PRINT ASC(“ADF”). Результат 65.
STR$(N) Возвращает строковое выражение числа. PRINT STR$(68). Результат 68. PRINT STR$(А68). Результат 0.
VAL(A$) Переводит строковое выражение в число.
LEN(A$) Возвращает длину строкового выражения. PRINT LEN("Бейсик"). Результат 6.
INSTR(N,A1$,A2$) Возвращает позицию строкового выражения A2$ в A1$, начиная с N позиции. PRINT INSTR(1,"ABC","B"). Результат 2. PRINT INSTR(3,"ABC","B"). Результат 0.
STRING$(N1,A$) STRING$(N1,N2) Возвращает строку длиной N1 c повторяющегося символа A$ или с кодом N2. PRINT STRING$(26,"-") или PRINT STRING$(26,45). Результат - строка в 26 символов – (тире)
SPACE$(N) Возвращает строку с N пробелами PRINT SPACE$(5).
LEFT(A$,N) RIGHT$(A$,N) Возвращают N символов с левого или правого конца строкового выражения.
MID$(A$,N1,N2) Возвращает часть строкового выражения или замещает часть строковой переменной.
LTRIM$(A$) RTRIM$(A$) Удаляют начальные и концевые пробелы.
INKEY$ Считывает символ с клавиатуры.

Пример 1.

I$="МАТЕМАТИКА"

J$=LEFT$(I$,4)

K$=RIGHT$(I$,5)

L$=MID$(I$,3,3)

PRINT J$;"РИАЛ НОВОЙ ";L$;"Ы-ТРУДЕН"

PRINT "СТ"+К$,"-ЭТО РАЗДЕЛ МЕХАНИКИ"

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

МАТЕРИАЛ НОВОЙ ТЕМЫ-ТРУДЕН

СТАТИКА -ЭТО РАЗДЕЛ МЕХАНИКИ

Пример 2.

Х$="PROGRAM"

L=LEN(X$)

K=ASC(X$)

М=INSTR(X$,"GRAM")

D=VAL("777")

PRINT "ДЛИНА СТРОКИ ";Х$;"=";L

PRINT "КОД 1-ГО СИМВОЛА СТРОКИ=";К

PRINT "НАЧАЛЬНАЯ ПОЗИЦИЯ ВХОЖДЕНИЯ СТРОКИ GRAM=";M

PRINT "ЦЕЛОЕ ЧИСЛО=";D

на экран будет выведена следующая информация:

ДЛИНА СТРОКИ PROGRAM = 7

КОД 1-ГО СИМВОЛА СТРОКИ= 80

НОМЕР НАЧАЛЬНОЙ ПОЗИЦИИ ВХОЖДЕНИЯ СТРОКИ GRAM= 4

ЦЕЛОЕ ЧИСЛО = 777

Строки можно сравнивать в условных выражениях операторов IF. При проверке на равенство (операция =) вырабатывается истинное значение, только если строки идентичны. Применительно к строкам можно использовать и операции < (меньше), < = (меньше или равно), > (больше) и >= (больше или равно). Строки сравниваются посимвольно слева направо. Символ считается меньшим, если он имеет меньший числовой код (меньший номер в алфавите). Многие системы имеют различные внутренние числовые коды символов, поэтому операции над строками называют машинно-зависимыми.

Символы латинских букв. как правило, во всех алфавитах расположены подряд, поэтому, например,

"LY" < "LYC" < "NYC" < "NZ"

Строка 'LY" меньше строки "LYC", так как при совпадении первых двух символов вторая строка длиннее первой. "LYC" меньше "NYC", потому что символ "L" стоит раньше символа "N" в латинском алфавите, т. е. имеет меньший числовой код. Строка "NYC" меньше строки "NZ", так как при совпадении первых символов сравниваются вторые символы строк, "Y"<"Z".

При вводе строковых значений с помощью оператора INPUT вводимые строки символов можно и не заключать в кавычки, но если в состав строки входит символ ",",то кавычки обязательны, иначе запятая будет воспринята как разделитель вводимых значений. Например, если для оператора INPUT К, L$, М$ на клавиатуре набрать следующие значения:

? 25.4, "MAX=, MIN=", СУММА <ENTER>

то переменной К присвоится вещественное число 25.4, строковой переменной L$ присвоится строка символов "MAX=, MIN=", а строковой переменной М$ — строка "СУММА". Если бы при наборе исходной информации кавычки были опущены, то переменной L$ соответствовала бы строка "MAX=", переменной М$ - строка "MIN=". а последнее вводимое строковое значение оказалось бы лишним. В таких случаях некоторые системы выдают предупреждение о несоответствии числа параметров в списке ввода и числа вводимых данных.

В большинстве Бейсик-систем предусмотрен специальный оператор LINE INPUT, предназначенный для ввода в одну строковую переменную произвольной строки символов. Вводимая последовательность символов может содержать любые знаки, в том числе запятые, пробелы и кавычки. Строковой переменной присваиваются все вводимые данные до тех пор, пока не будет превышена допустимая длина строки, определяемая реализацией, или пока не будет нажата клавиша <ENTER>.

В Бейсик-программах для представления текстовой информации часто используют массивы строк. Как и числовые массивы, они должны описываться в программе с помощью оператора DIM. Например, оператор DIM А$(5) определяет массив, состоящий из шести компонентов строкового типа.

Ниже приводится пример программы, в которой по исходным данным — списку учащихся группы и их оценкам — осуществляется поиск учащихся, средний балл оценок у которых выше 4,5:

REM ПРИМЕР 3

INPUT "ВВОДИ ЧИСЛО УЧАЩИХСЯ В ГРУППЕ->";N

INPUT "ВВОДИ ЧИСЛО ЭКЗАМЕНОВ->";M

DIM A$(N),B(N,M)

FOR I=l TO N

INPUT "ВВОДИ ФАМИЛИЮ->";A$(I)

FOR J=l TO M

INPUT "ВВОДИ OЦEHKУ->";B(I,J)

NEXT J.I

FOR I=l TO N

S=0

FOR J=l TO M

S=S+B(I,J)

NEXT J

IF S/M>4.5 THEN

PRINT A$(I);"СРЕДНИЙ БАЛЛ=";S/М

END IF

NEXT I

END

В данной программе формируются два массива: А$ — одномерный массив строк, содержащий фамилии учащихся. и В - двумерный массив, содержащий их оценки. Массивы описываются динамически в соответствии с вводимым числом учащихся в группе и числом экзаменов. В первых двух вложенных циклах осуществляется ввод исходной информации, а в следующих двух вложенных циклах – вычисление среднего балла каждого учащегося и вывод на экран фамилий тех учащихся, чей средний балл выше 4,5.

Пример 4. В заданной переменной вычислить количество гласных букв и на их место поставить символ " " (пробел). Преобразованную переменную вывести на экран.

INPUT "Введите переменную->"; P$

G$ = "АИЕОУЯЮЭЫаиеоуяюэы"

K = 0

FOR I = 1 TO LEN(P$)

IF INSTR(G$, MID$(P$, I, 1)) <> 0 THEN

K = K + 1

MID$(P$, I, 1) = " "

END IF

NEXT I

PRINT "Преобразованная переменная->"; P$

PRINT "Количество гласных букв= "; K

END

Пример 5. В текстовой переменной, состоящей из букв и цифр, цифры переставить в порядке возрастания, оставив буквы на своих местах. Полученную переменную вывести на экран дисплея.

INPUT "Введите переменную->"; P$

FOR I = 1 TO LEN(P$) - 1

FOR J = I + 1 TO LEN(P$)

IF VAL(MID$(P$, I, 1)) <> 0 THEN

IF VAL(MID$(P$, J, 1)) <> 0 THEN

IF VAL(MID$(P$, I, 1)) >= VAL(MID$(P$, J, 1)) THEN

A$ = MID$(P$, I, 1)

MID$(P$, I, 1) = MID$(P$, J, 1)

MID$(P$, J, 1) = A$

END IF

END IF

END IF

NEXT J, I

PRINT "Преобразованная переменная->"; P$

END

Пример 6. В заданной переменной, состоящей из букв и цифр все цифры заменить на символ "*". Полученную переменную вывести на экран дисплея.

INPUT "Введите строку символов->"; S$

FOR I = 1 TO LEN(S$)

IF VAL(MID$(S$, I, 1)) <> 0 THEN

MID$(S$, I, 1) = "*"

END IF

NEXT I

PRINT "Преобразованная переменная->"; S$

END

Пример 7. Существует ведомость, состоящая из N фамилий. Вывести на экран дисплея самую короткую фамилию, количество букв в ней и ее порядковый номер.

INPUT "Количество фамилий->"; N

DIM FAM$(N)

FOR I = 1 TO N

PRINT "Введите фамилию->"; I

INPUT FAM$(I)

NEXT I

MIN = LEN(RTRIM$(FAM$(1)))

F$ = FAM$(1)

NOM = 1

FOR I = 1 TO N

IF LEN(RTRIM$(FAM$(I))) < MIN THEN

MIN = LEN(RTRIM$(FAM$(I)))

F$ = FAM$(I)

NOM = I

END IF

NEXT I

PRINT "Самая короткая фамилия->"; F$

PRINT "Количество букв в ней->"; MIN; "Порядковый номер->"; NOM

END

Пример 8. Задан список фамилий. Вывести на экран фамилии, которые заканчиваются на гласную букву.

INPUT "Введите количество фамилий-> "; N

DIM FAM$(N),F$(N)

FOR I = 1 TO N

PRINT "Введите фамилию->"; I

INPUT FAM$(I)

NEXT I

J = 0

FOR I = 1 TO N

IF INSTR("АИЕОУЯЮЭЫаиеоуяюэы", MID$(FAM$(I), LEN(FAM$(I)))) <> 0 THEN

J = J + 1

F$(J) = FAM$(I)

END IF

NEXT I

PRINT "Фамилии, заканчивающиеся на гласную букву->"

FOR I = 1 TO J

PRINT F$(I)

NEXT I

END

Пример 9. Определить букву, на которую начинается больше всего слов в заданном тексте.

DIM a(255)

LINE INPUT "Введите текст->"; s$

s$ = " " + s$

FOR i = 2 TO LEN(s$)

s1$ = MID$(s$, i, 1)

s0$ = MID$(s$, i - 1, 1)

IF s1$ <> " " AND s0$ = " " THEN

a(ASC(s1$)) = a(ASC(s1$)) + 1

END IF

NEXT i

FOR i = 31 TO 255

PRINT "i="; i

IF a(i) > max THEN

max = a(i)

st = i

END IF

NEXT i

PRINT "Символ->"; CHR$(st);"Встречается " max; " раз"

END

 

Функция INKEY$ (Input KEY – ввод по ключу) предназначена для считывания символа с клавиатуры:

Формат записи INKEY$:

INKEY$

Функция INKEY$ возвращает нулевую строку символов, если нет символа для возврата.

Для стандартных клавиш INKEY$ возвращает 1-байтовую строку символов, содержащую считанный символ.

Пример 10.

PRINT "Для выхода нажмите Esc…"

DO: LOOP UNTIL INKEY$=CHR$(27) '27 – это ASCII код для Esc

Пример 11. В зависимости от нажатой клавиши клавиатуры (Y/N) вывести на экран монитора сообщение "Корректировка данных" или "Расчет".

DO

PRINT "Будете корректировать данные? (Y/N)"

DO

p$ = INKEY$

LOOP WHILE p$ =""

K = INSTR("YyНнNnТт", p$)

LOOP WHILE K = 0

IF N <= 4 THEN PRINT "Корректировка данных"

IF N > 4 THEN PRINT "Расчет"

 







Дата добавления: 2015-09-06; просмотров: 957. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Тема: Изучение приспособленности организмов к среде обитания Цель:выяснить механизм образования приспособлений к среде обитания и их относительный характер, сделать вывод о том, что приспособленность – результат действия естественного отбора...

Тема: Изучение фенотипов местных сортов растений Цель: расширить знания о задачах современной селекции. Оборудование:пакетики семян различных сортов томатов...

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Сравнительно-исторический метод в языкознании сравнительно-исторический метод в языкознании является одним из основных и представляет собой совокупность приёмов...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия