Урок 12

Меню

Урок 14

Урок 13.
Сравнение символьных величин.
Решение задач на поиск, подсчет и удаление символов.

Задание.

     Даны три слова: “вычислитель”, “исполнитель”, “алгоритм”. Упорядочите эти слова.

     Решая данную задачу, вы столкнулись с необходимостью сравнить эти три слова, какое-то из них сделать “большим”, какое-то “меньшим”. А можно ли вообще сравнивать символьные величины, имеющие далеко не близкие значения, например “лошадь” и “Бейсик”? Да, можно. Сравнение символьных величин основано на том, что каждый символ имеет свой ASCII-код и при сравнении символьных величин сравниваются коды составляющих их символов.

     Имеются следующие операторы сравнения: <, <=, =, <>, >=, >.

     Кодировка у каждого типа машин своя. Поэтому "a"<"z". Буквы русского алфавита закодированы таким образом, что сначала следуют в алфавитном порядке строчные, а затем в алфавитном же порядке прописные.

     Символьные величины сравниваются посимвольно, начиная с первого символа. Если первые символы обеих величин совпадают, то сравниваются вторые и т. д. Сравнение ведется до первой пары символов, не удовлетворяющих условию.

"банан" > "ананас"
"банан" < "Ананас"
"булка" > "бублик".

     Большинство версий Бейсика учитывают пробелы, имеющиеся справа и слева от букв:

"мгпи" <>" мгпи"
"мгпи" <> "мгпи "

     Если длины сравниваемых величин не совпадают, то меньшее дополняется пробелом (пробел является самым младшим символом).

Задание.

     Используя таблицу ASCII-кодов, сравните следующие величины:

А$ =".;d", B$ = ".*Zh" C$ = ")Wiqt".

Решение.

     Запишем коды данных величин:

     А$ соответствует последовательности кодов—46, 59, 100, 32, 32 (добавили два пробела, чтобы сравниваемые величины имели одинаковую длину);

В$ — 46, 42, 90, 104, 32 (добавили один пробел);

С$—41,87, 105, 113, 116.

Получаем, что С$<В$<А$.

Примечание.

     Более подробно работа с кодами символов будет продолжена на следующем уроке.

     Используя операции сравнения и известные функции обработки строк, можно решать задачи различного типа, например задачи на подсчет и поиск, задачи на удаление (вставку).

     В условиях задач типа “подсчет, поиск” присутствуют слова “найти...”, “подсчитать...”, при этом указывается условие, которому должны удовлетворять подсчитываемые символы (или группы символов).

     Во многих задачах этого типа речь идет о выделении слова. Слово — это последовательность букв, заключенная между символами, левый из которых пробел, а правыйлюбой знак препинания или пробел. Одно слово от другого отделяется определенным символом (пробел, запятая и т. д.).

Алгоритм решения задач типа “подсчет и поиск”:

  • ввести текст, определить его длину;

  • “вырезать” из текста группу символов и проверить, удовлетворяет ли она условию задачи;

  • если требуется только найти группу символов, удовлетворяющих заданному условию, то выдать сообщение, что символы найдены, или что групп символов, удовлетворяющих такому условию, нет;

  • если требуется подсчитать количество групп символов, удовлетворяющих заданному условию, то изменить значение счетчика;

  • если конец текста достигнут, то завершить работу программы.

Задача 1.

     Введите текст и определите номер позиции первой точки, заканчивающей предложение (предполагается, что хотя бы одно из предложений заканчивается точкой).

Решение.

Используемые величины:

А$ — вводимый текст;

В$ — символ, вырезаемый из текста (текущий и стоящий справа);

Е$ — символ, вырезаемый из текста (текущий и стоящий слева);

N — длина текста;

I — номер пары символов в тексте;

В — номер первой точки.

     Текст просматривается начиная со второго символа.

     Поскольку возможны два случая употребления точки — точкой оканчивается предложение и точка употребляется в многоточии, то проверяются, во-первых, текущий и стоящий справа символы, если они равны ". ", то это точка в конце предложения; во-вторых, текущий и находящийся слева от точки, их комбинация не должна быть "..". Если оба условия выполняются, то, значит, первая точка найдена (В=1) и просмотр текста заканчивается.

INPUT A$
N = LEN(A$)
FOR I = 2 ТО N - 1
     В$ = MID$ (A$ , I , 2)
     Е$ = MID$ (A$ , I-1 , 2)
     IF B$ = ". " AND E$ < > ".." THEN В = I: I = N
NEXT I
PRINT В
END

Вопрос.

     Как преобразовать строку I = N, чтобы закончить выполнение программы?

     В задачах на удаление и вставку происходит “сжатие” или “расширение” группы символов. В условиях задач этого типа присутствуют слова “вставить”, “заменить”, “удалить”, а также указывается, какие символы вставить или удалить, в соответствии с каким условием заменить одни символы на другие.

Алгоритм решения задач на удаление и вставку:

  • ввести текст, определить его длину;

  • найти нужный символ или номер его позиции;

  • выполнить указанное в задаче действие;

  • если конец текста не достигнут, то перейти к нахождению следующей нужной позиции, иначе — вывести результат и завершить работу.

     Чтобы “сжать” исходный текст Т$, удалив из него цепочку символов от ( I+1 )-го до ( I+N )-гo, нужно “переслать” посимвольно текст Т$ в новую символьную переменную G$ от начала до I-го символа и от ( I+N+1)-гo символа до конца, используя операцию конкатенации

G$ = MID$ (T$ , 1 , I ) + MID$ (T$, I + N + 1, M),

где М —длина исходного текста.

     Чтобы “раздвинуть” текст Т$, вставив последовательность символов V$ между 1-м и ( I+1 )-м символами исходного текста, нужно текст Т$ переслать посимвольно от начала до I-го символа и от ( I+1 )-го символа до конца в новую символьную переменную G$, вставив между ними требуемую цепочку символов V$, используя операцию конкатенации

G$ = MID$(T$ , 1 , I ) + V$ + MID$( T$ , I+1, M)

Задача 2.

     Из заданного текста удалите его часть, заключенную в скобки (вместе со скобками). Учтите, что таких частей в тексте может быть несколько. Предполагается, что в удаляемом тексте внутренних скобок нет.

Решение.

Используемые величины:

А$ — вводимый текст;

В$ — вырезаемый символ;

С$ — выводимый текст;

N — длина текста;

S — количество символов в скобках, включая скобки;

I — номер вырезаемого символа в тексте;

J — номер символа в скобках;

D$ — вырезаемый из скобок символ.

     Для решения задачи необходимо найти позицию символа “(”. Часть исходного текста до “(” переслать в переменную С$. Далее исходный текст просмотреть с позиции, следующей за позицией первого символа “)”. Если в оставшейся части будет обнаружен символ “(”, переслать в С$ часть исходного текста между символами “)” и “(” и т. д.

     NPUT A$
     N = LEN(A$)
     С$ = ""
     FOR I = 1 ТО N
         В$ = MID$(A$, I, 1)
          IF B$ = "(" THEN GOTO 7 ELSE GOTO 14
7        S = 0
          FOR J = I + 1 ТО N
              S = S + 1
              D$ = MID$(A$, J, 1)
              IF D$ = ")" THEN I = I + S ELSE GOTO 13
              GOTO 15
13     NEXT J
14     С$ =С$ + В$
15 NEXT I
     PRINT C$
     END

Вопрос.

     Как поступить в случае, если скобка открывается, но не закрывается?

Задания для самостоятельного выполнения

Задача 1.

     Подсчитайте количество слов в тексте, заканчивающихся на букву “я”.

Подсказка.

     Задача сводится к подсчету количества комбинаций символов “я ”, “я, ”, “я:”, “я.”, “я?”, “я!”.

Задача 2.

     Каждые пять символов во введенном тексте отделите знаком “*”.

Урок 12

Меню

Урок 14

Яндекс цитирования Rambler's Top100
Сайт создан в системе uCoz