Задание 1. Ввести с клавиатуры предложение S и произвольную букву S2. Подсчитать какой процент от общества количества букв предложения S составляет буква S2.
Выполнение. Необходимо организовать цикл для перебора номеров букв от первой до последней. Внутри цикла следует выделять каждую букву предложения S и сравнивать ее с S2. Если они равны, то увеличивать значение переменной-счетчика на 1. В качестве результата следует вывести результат деления полученного значения переменной-счетчика на общее количество букв в предложении в процентом соотношении.
Программа
1 Sub string_1() 'Начало подпрограммы (макроса)
2 s = InputBox("Введите предложение?") 'Ввод исходного предложения с клавиатуры
3 s2 = InputBox("Введите искомую букву?") 'Ввод буквы для поиска
4 c = 0 'Задание начального значения для счетчика букв
5 For i = 1 To Len(s) 'Начало цикла для перебора номеров букв
6 If Mid(s, i, 1) = s2 Then c = c + 1 'Если выделенная очередная буква равна s2, то увеличиваем счетчик на 1
7 Next i 'Конец цикла перебора номеров букв
8 Debug.Print "Доля буквы '"; s2; "' в предложении '"; s; "' составляет="; c / Len(s) * 100 'Вывод результата
9 End Sub 'Окончание подпрограммы
Словесное описание программы
После ввода исходного предложения s (с. 2) и искомой буквы s2 (с. 3) обнуляем значения счетчика букв c (с. 4). Далее организуем цикл (с. 5–7) для перебора номеров букв i. Внутри цикла выделяем каждую букву и сравниваем ее с s2 (с. 6). Если выделенная буква равна s2, то увеличиваем счетчик c на 1 (с. 6). В конце программы делим счетчик c на общее количество букв len(s), умножаем на 100 для перевода в проценты и выводим результат на экран (с. 8).
Блок-схема
Задание 2. Во введенном с клавиатуры предложении заменить слово «Иван» на слово «Петр». Выполнить программу с помощью функции mid.
Выполнение. Вместо «замены» слов в исходной строке следует в цикле последовательно перебирать номера букв от 1 до последней и переписывать все буквы исходной переменной s в новую переменную s2, кроме тех букв, которые образуют слово «Иван». Вместо них следует добавлять в переменную s2 слово «Петр».
Программа
10 Sub string_2() 'Начало подпрограммы (макроса)
11 s = InputBox("Введите предложение?") 'Ввод исходного предложения
12 s2 = "" 'Начальное значение для результирующей строки = пустая строка
13 For i = 1 To Len(s) - 3 'Перебираем все буквы за исключением последних 3
14 s3 = Mid(s, i, 4) 'Выделяем очередные 4 буквы, начиная с текущей i
15 If s3 <> "Иван" Then 'Проверяем, является ли выделенной слово словом "Иван"
16 s2 = s2 + Mid(s, i, 1) 'Если не является, то добавляем 1 текущую букву в s2
17 Else 'Иначе, если является
18 s2 = s2 + "Петр" 'то добавляем в s2 слово Петр
19 i = i + 3 'и увеличиваем номер текущей буквы еще на 3, чтобы в последствии проверять уже после слова Иван
20 End If 'Конец ветвления
21 Next i 'Конец цикла для перебора номеров букв
22 s2 = s2 + Mid(s, i) 'Добавляем оставшиеся 3 (или менее) букв в s2
23 Debug.Print "Введенная строка = "; s 'Вывод исходной строки
24 Debug.Print "Новая строка = "; s2 'Вывод результата
25 End Sub 'Окончание подпрограммы
Словесное описание программы
После ввода исходного предложения s (с. 2) задаем начальное значение для результирующей переменной s2 равное пустой строке (с. 3). В цикле перебираем номера букв от 1 до длина строки – 3 (с. 4). Последние 3 буквы не следует брать, т.к. в них никак не может находиться слово «Иван», длина которого 4 буквы. В с. 5 выделяем 4 буквы, начиная с текущей i в переменную s3. В с. 6 проверяем, являются ли выделенные буквы s3 словом «Иван». Если не являются, то переписываем одну текущую букву в результирующую переменную s2 (с. 7). Иначе, добавляем в s2 слово «Петр» (с. 9). Также необходимо пропустить оставшиеся 3 буквы, чтобы при следующем проходе цикла выделились бы буквы после слова «Иван». Это делается путем увеличения номера букв i на 3 (с. 10). После завершения цикла мы имеем в переменной i номер буквы, на которой остановилась проверка. Оставшиеся буквы также надо дописать в переменную s2 (с. 13). В конце выводим исходное предложение (с. 14) и результирующее (с. 15).
Блок-схема
Задание 3. Выполнить задание 2 с помощью функции instr.
Выполнение. Как и в предыдущей программе, результат будет накапливаться в другой строковой переменной s2. В цикле следует с помощью функции instr искать очередное вхождение слова «Иван» в исходную строку s, переписывать в s2 все буквы до найденного вхождения, а вместо слова «Иван» добавлять слово «Петр».
Программа
26 Sub string_3() 'Начало подпрограммы (макроса)
27 s = InputBox("Введите предложение?") 'Ввод исходного предложения
28 s2 = "" 'Начальное значение для результирующей строки = пустая строка
29 i = 1 'Начинаем поиск с первой буквы
30 Do 'Начало цикла поиска
31 i2 = InStr(i, s, "Иван") 'Ищем слово "Иван" от текущей позиции i, и запоминаем номер его позиции в i2
32 If i2 <> 0 Then 'Если номер позиции не ноль, т.е. слово "Иван" найдено
33 s2 = s2 + Mid(s, i, i2 - i) + "Петр" 'то переписываем все буквы от текущей позиции i, до i2 и добавляем слово "Петр"
34 i = i2 + 4 'переставляем номер текущей позиции за слово "Иван"
35 End If 'Конец ветвления
36 Loop Until i2 = 0 'Если после последнего прохода слово "Иван" не было найдено, то завершаем поиск
37 s2 = s2 + Mid(s, i) 'Переписываем в s2 все оставшиеся буквы, начиная от текущей позиции i
38 Debug.Print "Введенная строка = "; s 'Вывод исходной строки
39 Debug.Print "Новая строка = "; s2 'Вывод результата
40 End Sub 'Окончание подпрограммы
Словесное описание программы
После ввода исходного предложения (с. 2) задаем начальное значение для результирующей строки – пустая строка (с. 3). Начальное значение для номера текущей позиции поиска i = 1 (с. 4). В цикле (с. 5–11), прежде всего, ищем очередное вхождение слова «Иван» в исходную строку s, и запоминаем номер позиции этого вхождения в i2 (с. 6). В с. 7 проверяем, найдено ли новое вхождение, т.е. i2<>0. Если найдено, то переписываем все буквы, начиная от текущей позиции поиска i до найденной позиции вхождения i2, и дописываем слово «Петр» (с. 8). Также перемещаем номер позиции поиска за найденное вхождение слова «Иван» (с. 9). В с. 11 решаем, следует ли продолжать поиск в зависимости от того, было ли найдено на последнем проходе очередное вхождение слова «Иван». После завершения цикла дописываем в s2 оставшиеся буквы (с. 12). В конце выводим на экран исходную (с. 13) и результирующую строку (с. 14).
Блок-схема
Задание 4. Из заданного предложения удалить все повторяющиеся слова.
Выполнение. Здесь для простоты будем считать, что слова разделены пробелами. Необходимо организовать цикл, который будет искать все пробелы, и выделять слова между пробелами. Найденное очередное слово следует записывать в некоторый массив, но только в том случае, если такого слова в массиве еще нет. В конце следует переписать все слова из массива в результирующую строку.
Программа
41 Sub string_4() 'Начало подпрограммы (макроса)
42 s = InputBox("Введите предложение?") 'Ввод исходного предложения
43 Dim a(100) 'Описываем массив для хранения найденных слов
44 n = 0 'Начальное количество слов в массиве = 0
45 i = 1 'Начинаем поиск с первой буквы
46 Do 'Начало цикла поиска
47 i2 = InStr(i, s, " ") 'Запоминаем номер позиции с найденным пробелом в i2
48 If i2 <> 0 Then 'Если пробел был найден
49 s3 = Mid(s, i, i2 - i) 'то в s3 помещаем слово от текущей позиции i до найденного пробела
50 i = i2 + 1 'и перемащаем номер позиции за найденный пробел,
51 Else 'иначе
52 s3 = Mid(s, i) 'помещаем в s3 последнее слово
53 End If 'конец ветвления
54 j = 1 'начинаем поиск в массиве с элемента номер 1
55 While j <= n And a(j) <> s3 'если еще не все элементы просмотрели и текущий элемент j не совпадает с выделенным словом
56 j = j + 1 'смотрим слудующий элемент
57 Wend 'конец цикла просмотра массива слов
58 If j > n Then 'если выделенное слово s3 так и не было найдено в массиве,
59 n = n + 1 'увеличиваем счетчик слов в массиве на 1
60 a(n) = s3 'запоминаем это новое выделенное слово s3 в массиве a
61 End If 'конец ветвления
62 Loop Until i2 = 0 'Если пробелов больше не найдено, завершаем поиск
63 s2 = "" 'Начальное значение для результирующей строки = пустая строка
64 For j = 1 To n 'Цикл перебора всех выделенных слов в массиве
65 s2 = s2 + a(j) + " " 'Добавляем очередное слово из массива в s2 и пробел после него
66 Next j 'Конец цикла перебора выделенных слов
67 Debug.Print "Введенная строка = "; s 'Вывод исходной строки
68 Debug.Print "Новая строка = "; s2 'Вывод результата
69 End Sub 'Окончание подпрограммы
Словесное описание программы
После ввода исходной строки (с. 2) описываем массив с достаточным количеством элементов (с. 3), в котором будут храниться все найденные слова без повторов. Не смотря на то, что этот массив может вместить 100 элементов, фактически в нем пока нет ни одного слова, поэтому заводим переменную-счетчик n, хранящую количество фактически найденных слов, и задаем ей начальное значение 0 (с. 4). Заводим также переменную i, служащую номером текущей позиции поиска в строке, и начинаем поиск с позиции 1 (с. 5). Начинаем цикл поиска пробелов (с. 6–22). В теле цикла, прежде всего, запоминаем номер позиции, где найден очередной пробел, в переменной i2 (с. 7). Поиск начинаем с текущей позиции поиска i. Если пробел найден (с. 8), то выделяем в s3 слово от текущей позиции i до позиции найденного пробела i2 (с. 9). Также перемещаем текущую позицию поиска на следующую за найденным пробелом букву (с. 10). Если пробел не найден, то выделяем в s3 все оставшиеся буквы от текущей позиции i (с. 12). Во второй части тела цикла ищем выделенное слово в массиве. Для этого начинаем поиск с первого элемента (с. 14). Искать следует до тех пор, как: либо номер элемента j станет больше общего количества записанных слов n, либо в текущем элементе найдется слово, совпадающее с данным выделенным словом (с. 15). Ввиду того, что использован цикл WHILE-WEND, необходимо вручную увеличивать номер текущего элемента j (с. 16). В третьей части тела цикла, если выделенное слово в массиве не найдено (с. 18), то его следует поместить в массив a (с. 20), предварительно увеличив счетчик слов n (с. 19). Поиск пробелов следует продолжать до тех пор, как последний поиск с помощью функции instr не найдет пробела и вернет 0 (с. 22). После цикла мы имеем массив всех слов без повторов. Следует объединить эти слова в результирующую строку s2, для чего задаем ей начальное значение – пустая строка (с. 23). Далее организуем цикл по всем словам в массиве (с. 24–26). Внутри цикла выполняем добавление текущего слова к результирующей строке и пробела после нее (с. 25). В конце программы выводим исходную (с. 27) и результирующую строку (с. 28) на экран.
Блок-схема
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.