9.1. Анализ текста на наличие различных символовСовременные текстовые редакторы позволяют получить статистику по символам и словам в документе (пример 9.1). Грамотный набор текста предполагает наличие только одного пробела между словами. В правильно набранном тексте количество слов будет на единицу больше, чем количество пробелов. Пример 9.2. Написать программу, которая определит количество слов в тексте, если между любыми двумя словами ровно один пробел. Предполагается, что в тексте есть хотя бы одно слово. Этапы выполнения задания I. Исходные данные: строка текста st. 1. Вводим исходные данные. IV. Описание переменных: st — string, n, k — integer. Пример 9.3. Написать программу, которая определит, каких знаков препинания в тексте больше — точек или запятых. Этапы выполнения задания I. Исходные данные: переменная st (текст). 1. Вводим исходные данные. 4.1. Если встретилась точка, то увеличиваем значение счетчика k1 на 1. 5. Сравниваем полученные значения счетчиков и выводим результат. IV. Описание переменных: st — string, n, k1, k2 — integer. Для лучшего запоминания маленькими детьми гласных и согласных букв их часто окрашивают в разные цвета: гласные — красным, а согласные — синим (пример 9.4). Пример 9.5. Написать программу, которая выведет в заданном слове согласные буквы синим цветом, а гласные — красным (в слове не встречаются «ь» и «ъ»). Посчитать количество гласных букв во введенном слове. Этапы выполнения задания I. Исходные данные: переменная s (слово). 1. Вводим исходные данные. 5.1. Находим позицию текущего символа из строки s в строке g (переменная p). Если значение p ≠ 0, то текущий символ встретился в строке с гласными буквами и, следовательно, сам является гласной. Если p = 0, то символ — согласная. 6. Выводим результат. IV. Описание переменных: s, g — string, n, k, p — integer. 9.2. Преобразование строкПри записи вещественных чисел на уроках математики в качестве разделителя целой и дробной части используется символ «запятая». В языке программирования Pascal разделителем является точка. Пример 9.6. Написать программу, которая заменит в строке с вещественными числами запятые на точки. Например, из числа 23,5 должно получиться число 23.5. Этапы выполнения задания I. Исходные данные: переменная st 1. Вводим исходные данные. IV. Описание переменных: st — string, n — integer.
Пример 9.7. Написать программу, которая заменит в тексте каждую цифру 2 словом «два». Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). 1. Вводим исходные данные. 3.1. Если текущий символ 4. Вывод результата. IV. Описание переменных: st — string, i — integer. При правильном наборе компьютерного текста между любыми двумя словами должен быть только один пробел. Однако иногда случайно вставляют несколько пробелов. В этом случае Word подчеркивает их голубой волнистой линией (пример 9.8). Пример 9.9. Написать программу, которая проверяет правильность расстановки пробелов в тексте и, если между словами более одного пробела, удаляет лишние. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). 1. Вводим исходные данные. 3.1. Если оба соседних символа являются пробелами, то удалим один из них. Соседние символы имеют индексы, отличающиеся на один: i и i + 1. Поскольку в цикле есть обращение к элементу с номером i + 1, то условием выполнения цикла будет строгое неравенство i < length(st). 4. Выводим результат. IV. Описание переменных: st — string, i — integer. Пример 9.10*. Написать программу, которая проверяет правильность расстановки пробелов вокруг тире. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). 1. Вводим исходные данные. 3.1. Если соседний справа символ (i + 1) не пробел, то вставляем пробел. 5. Вывод результата. IV. Описание переменных: st — string, i — integer. Пример 9.11*. Написать программу, которая выведет слова-палиндромы 1 (слова, которые одинаково читаются слева направо и справа налево), входящие в заданный текст. Слова в тексте могут быть разделены одним или несколькими пробелами. Пробелы могут быть в начале и в конце текста. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). 1. Вводим исходные данные. 5.1. Удалим пробелы в начале строки. 5.3. Проверим выделенное слово и, если оно является палиндромом, то выведем его. 6. Опишем три вспомогательных алгоритма: 6.1. Процедуру DelSpace для удаления пробелов в начале строки. Пробелы удаляются из строки только тогда, когда 7. Вывод сообщения «Нет палиндромов» в случае, если значение p осталось false. IV. Описание переменных: st, sl —
|
Пример 9.1. Статистика в документе Word (соответствующая команда на
вкладке Рецензирование). Пример 9.2. V. Программа: var st: string; n, k: integer; begin writeln(‘Введите текст’); readln(st); n := length(st); k := 1; for var i := 1 to n do begin if st[i] = ‘ ‘ then k := k + 1; end; writeln(‘В тексте ‘, k, ‘ слов(-о/-а)’); end. VI. Тестирование (для проверки можно скопировать текст абзаца из документа Word). VII. Анализ результата. Если посмотреть статистику Word для этого абзаца, получим: Пример 9.3. V. Программа: var St: string; n, k1, k2: integer; begin writeln(‘Введите текст’); readln(St); n := length(St); k1 := 0; k2 := 0; for var i := 1 to n do begin if St[i] = ‘.’ then k1 := k1 + 1; if St[i] = ‘,’ then k2 := k2 + 1; end; if k1 > k2 then writeln(‘Точек больше’) else if k2 > k1 then writeln(‘Запятых больше’) else writeln(‘Количество запятых равно количеству точек’); end. VI. Тестирование (для проверки можно скопировать текст абзаца из документа Word). Пример 9.4. Русский алфавит.Пример 9.5. V. Программа: uses GraphABC; var s, g: string; n, k, p: integer; begin writeln(‘Введите слово’); readln(s); writeln(s); n := length(s); g := ‘ЁУЕЭОАЫЯИЮёуеэоаыяию’; for var i := 1 to n do begin p := pos(s[i], g); if p <> 0 then begin SetFontColor(clRed); k := k + 1; end else SetFontColor(clBlue); write(s[i]); end; writeln; SetFontColor(clGreen); writeln(‘Количество гласных – ‘, k); end. VI. Тестирование. Ввести слово «Привет». Результат: Поскольку текст выводится в графическом окне, то можно задавать не только цвет символов, но также шрифт и размер символов. Использование команды TextOut позволит выводить символы текста в произвольном месте графического окна. Например, так: Пример 9.6. V. Программа: var st: string; n: integer; begin writeln(‘Введите строку’); readln(st); n := length(st); for var i := 1 to n do if (st[i] = ‘,’) then st[i] := ‘.’; writeln(‘Преобразованная строка:’); writeln(st); end. VI. Тестирование. Пример 9.7. V. Программа: var st: string; i: integer; begin writeln(‘Введите строку’); readln(st); i := 1; while i <= length(st) do begin if (st[i] = ‘2’) then begin //замена символов delete(st, i, 1); insert(‘два’, st, i); end; //переход к следующему символу i := i + 1; end; writeln(‘Преобразованная строка:’); writeln(st); end. VI. Тестирование. Пример 9.8. Выделение лишних пробелов в Word. При правильном наборе компьютерного текста между двумя словами должен быть только один пробел. Пример 9.9. V. Программа: var st: string; i: integer; begin writeln(‘Введите строку’); readln(st); i := 1; while i < length(st) do begin if (st[i] = ‘ ‘) and (st[i+1] = ‘ ‘) then delete(st, i, 1) else i := i + 1; end; writeln(‘Преобразованная строка: ‘); writeln(st); end. VI. Тестирование. Введите текст «При правильном наборе компьютерного текста между любыми двумя словами должен быть только один пробел». Результат: Пример 9.10*. V. Программа: var st: string; i: integer; begin writeln(‘Введите строку’); readln(st); i := 2; while i < length(st) do begin if st[i] = ‘-‘ then begin if st[i+1] <> ‘ ‘ then insert(‘ ‘,st, i+1); if st[i-1] <> ‘ ‘ then begin insert(‘ ‘,st, i); i := i + 1; end end; i := i + 1; end; writeln(‘Преобразованная строка: ‘); writeln(st); end. VI. Тестирование. Введите текст «Жизнь прожить–не поле перейти. Родимая сторона– мать, чужая –мачеха. Окончил дело – гуляй смело». Результат: VII. Анализ результата. В примере встречаются все четыре возможные ситуации: пробелов нет ни слева, ни справа от тире; пробел только слева; пробел только справа; пробелы с двух сторон. В результате выполнения все пробелы расставлены правильно. Пример 9.11*. VI. Тестирование. Введите текст:
VII. Анализ результатов. Из введенной строки не вывелось слово «ротатор», которое тоже является палиндромом. Но после этого слова стоит не пробел, а точка. Поэтому для проверки функция CheckPalindrom получает слово «ротатор.», которое не является палиндромом. Пример 9.12. Примеры использования команд преобразования типов.
Преобразование строкового представления числа к числовому значению:
При использовании процедур преобразования Str(v,s) и Val(s,v,er) тип числа определяется его записью. Преобразование Str(v,s) возможно для любых доступных числовых типов. При использовании процедуры Val(s,v,er) сначала проверяется, возможно ли преобразование строковой Пример 9.13. Результат:
Введите текст 123BC. Результат:
Пример 9.14*.
Введем выражение 12(234 + 802).
|
Упражнения
1. Напишите программу, которая определит количество предложений в тексте. Предложение заканчивается одним из трех символов: «.», «?», «!». Предполагается, что в тексте есть хотя бы одно предложение (см. пример 9.2).
2. Напишите программу, которая определит количество слов в тексте, если между любыми двумя словами может быть более одного пробела. Предполагается, что в тексте есть хотя бы одно слово (см. пример 9.2).
3. Напишите программу, которая определит, каких букв в строке с русским текстом больше: «о» или «O» (см. пример 9.3).
4. Напишите программу, которая определит, какой процент составляют буквы «a» во введенном тексте (см. пример 9.3).
5. Напишите программу, которая определит, сколько слов в тексте начинается на букву «а».
6. Напишите программу, которая определит, какой процент слов в тексте начинается на букву «к». (Слово может начинаться как с прописной, так и со строчной буквы.)
7. Дан текст. Напишите программу, которая проверит, правильно ли в нем расставлены круглые скобки. Если нет, то вывести соответствующее сообщение: «Открывающихся скобок больше (меньше), чем закрывающихся»; «Закрывающиеся скобки раньше открывающихся скобок».
8. В тексте могут встречаться гласные и согласные буквы, а также символы «ь» и «ъ». Измените программу из примера 9.5 так, чтобы символы «ь» и «ъ» выводились желтым цветом.
9. Дано арифметическое выражение, состоящее из цифр, скобок и знаков арифметических действий. Напишите программу, которая выведет цифры синим цветом, а остальные символы — голубым: например, в выражении 2 + (3 – 5) * 7 – 13 (см.пример 9.5).
10. Напишите программу для решения задачи. Задана строка цифр. Вывести четные цифры синим цветом, а нечетные — голубым (например, 128235). Сколько в строке нечетных цифр? (См. примеры 9.3 и 9.5.)
11. Вводится текст, слова в котором разделены пробелами, после слов могут стоять точки или запятые. Напишите программу, которая выведет синим цветом те буквы «а», которые являются последними буквами слова, остальные символы текста вывести голубым цветом (например, в скороговорке На дворе — трава, на траве — дрова). Какой процент от общего количества слов составляют слова, заканчивающиеся на букву «а»?
12. Напишите программу, которая заменит в заданном тексте каждую букву «a» символом «*» (см. пример 9.6).
13. Напишите программу, которая заменит в заданном тексте каждую цифру символом «?» (см. примеры 9.5 и 9.6).
14. Напишите программу, которая заменит в заданном тексте из латинских букв все вхождения «x» на «ks» (см. пример 9.7).
15. Напишите программу, которая заменит в заданном тексте из латинских букв все вхождения «ing» на «ed» (см. пример 9.7).
16. Напишите программу для решения задачи. В заданном тексте заменить все слова А1 на слова А2 (слова в тексте разделены пробелами, слова А1 и А2 вводятся).
17. Напишите программу, которая удалит из текста все гласные буквы (см. примеры 9.5 и 9.9).
18. Напишите программу, которая удалит из текста все знаки «+», непосредственно за которыми стоит не цифра.
19. Напишите программу, которая в заданном тексте после каждой латинской буквы «q» добавит букву «u» (см. пример 9.10).
20. Напишите программу, которая в заданном тексте после каждого знака препинания («.», «,», «:», «;») вставит пробел, если его там нет (см. пример 9.10).
21. Измените функцию CheckPalindrom из примера 9.11 так, чтобы слова, которые начинаются на заглавную букву, тоже считались палиндромами, например «Анна», «Алла».
22. Добавьте в программу из примера 9.11 подсчет количества выведенных палиндромов.
23. Фразы-палиндромы читаются одинаково слева направо и справа налево без учета пробелов и знаков препинания. Например: «Кулинар, храни лук» или «А роза упала на лапу Азора». Напишите программу, которая определит, является ли фраза палиндромом.
24. Напишите программу, которая проверяет, является ли данный текст записью числа. В непустой текст могут входить только цифры или буквы. Если да, то требуется проверить, делится ли данное число на 4, иначе вывести соответствующее сообщение. Для проверки делимости на 4 использовать признак делимости: число делится на 4, если двузначное число, состоящее из последних двух цифр исходного числа, делится на 4 (см. пример 9.13).
25. Измените программу из упражнения 20 так, чтобы проверялась делимость на 2, 3, 5, 6, 8, 12 (используйте соответствующие признаки делимости).
26. Дан текст. Напишите программу, которая проверит, может ли быть этот текст записью вещественного числа.
27. Напишите программу для решения задачи. Строка представляет собой запись следующего вида: «а ± b». Найти значение выражения. Вместо знака «±» может быть
знак «+» или знак «−». Числа a и b являются целыми и состоят не более чем из девяти цифр (см. пример 9.14).
28. Напишите программу для решения задачи. Строка представляет собой запись следующего вида: «(a + b) / c». Выделить из записи числа и найти целочисленное значение выражения и остаток от деления. Числа, входящие в выражение, являются целыми и состоят не более чем из цифр (см. пример 9.14).