- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
- •Приложение 5
- •Приложение 6
- •Приложение 7
- •Приложение 8
- •Приложение 9
- •Приложение 10
- •Приложение 11
- •Приложение 12
- •Приложение 13
- •Приложение 14
- •Приложение 15
- •Приложение 16
- •Приложение 17
- •Приложение 18
- •Приложение 19
- •Приложение 20
- •Приложение 21
- •Приложение 22
- •Приложение 23
- •Приложение 24
- •Приложение 25
- •Приложение 26
- •Приложение 27
- •Приложение 28
- •Приложение 29
- •Приложение 30
- •Приложение 31
- •Приложение 32
- •Приложение 33
- •Приложение 34
- •Приложение 35
- •Приложение 36
- •Приложение 37
- •Приложение 38
- •Приложение 39
- •Приложение 40
- •Приложение 41
- •Приложение 42
- •Приложение 43
- •Приложение 44
- •Приложение 45
- •Приложение 46
- •Приложение 47
- •Приложение 48
- •Приложение 49
- •Приложение 50
- •Приложение 51
- •Приложение 52
- •Список литературы
9.4. Формирование строки из массива слов
Из массива слов всегда можно сформировать строку, которая будет отличаться от исходной строки только количеством пробелов между словами. Эта задача имеет два различных решения.
Способ 1.
Строка формируется по алгоритму вычисления суммы всех элементов одномерного массива. Перед началом цикла результирующая строковая переменная очищается, в нее записывается пустая строка. На каждом шаге цикла к строке добавляется очередной элемент массива слов и один пробел. При этом пробел обязательно берется в кавычки. После завершения цикла в строковой переменной хранится уже сформированная строка, за последним словом которой стоит один пробел. Его можно удалит с помощью функции Strings.RTrim. Рассмотрим особенности программной реализации этого алгоритма.
Объявляем переменную, в которой будет формироваться строка.
Dim s as String
Для работы с массивом слов необходимо использовать цикл. Для его организации нам потребуется целочисленный счетчик i.
Dim i As Integer
Очищаем результирующую строку. До начала обработки массива слов в ней ничего нет.
s = ""
Организуем цикл для обработки всех элементов массива слов. Обратите внимание, что элементы массива слов нумеруются с нуля.
For i = 0 To n
На каждом шаге цикла к результирующей строке добавляем очередное слово и пробел. Пробел обязательно берется в кавычки.
s += slova(i) + " "
Next
После завершения цикла строка уже полностью сформирована. Нам остается только удалить пробел, стоящий за последним словом.
s = Strings.RTrim(s)
Полученную строку выводим в окно списка.
lstText.Items.Add(s)
Способ 2.
Второй способ формирования строки из массива слов основан на использовании стандартной функции Visual Basic 2005 Strings.Join, которая описана в разделе 9.1. Эта функция формирует строку из массива слов, разделяя слова указанной подстрокой – разделителем. Разделитель можно и не указывать, тогда слова будут разделены ровно одним пробелом. За последним словом разделитель не ставится. Рассмотрим пример использования функцииStrings.Join.
Объявляем переменную, в которой будет храниться результирующая строка.
Dim s as String
Вызываем функцию Strings.Joinдля формирования строки из массива слов. Так как разделитель не указан, то слова будет разделены одним пробелом.
s = Strings.Join(slova)
Полученную строку выводим в окно списка.
lstText.Items.Add(s)
Пример использования функции рассмотрен в разделе 9.7 и проиллюстрирован на рис. 64.
9.5. Слова-палиндромы
Палиндромом называется слово, которое одинаково читается как слева направо, так и наоборот. Рассмотрим фрагмент программы, которая в произвольной строке ищет самое длинное слово-палиндром.
В начале программы вводится строка текста. Затем из нее удаляются лишние пробелы, и формируется массив слов. Массив называется slova(), номер последнего элемента в этом массиве хранится в переменнойn.
Для решения задачи нам потребуется дополнительная переменная max, в которой будет храниться самое длинное слово-палиндром. Очевидно, что эта переменная будет иметь строковый тип.
Dim max As String
В качестве начального значения максимума возьмем пустую строку, так как это самое короткое из всех слов.
max = ""
Организуем цикл по всем словам строки. Слова в массиве нумеруются с нуля.
For i = 0 To n
Анализируем очередное слово.
If slova(i) = Strings.StrReverse(slova(i)) _
And Len(slova(i)) > Len(max) Then
С помощью функции Strings.StrReverseзаписываем буквы слов в обратном порядке. Если получившееся слово совпадает с исходным, значит, текущее слово является палиндромом. Если при этом длина слова больше длины ранее найденного максимума, значит, значение максимума надо обновить, записав в него анализируемое слово.
max = slova(i)
End If
Next
После завершения цикла в переменной maxбудет храниться самое длинное слово–палиндром. Нам остается только распечатать результаты. Сначала выведем горизонтальную черту, чтобы зрительно отделить результаты работы программы от исходных данных.
lstText.Items.Add("-------------------------------")
Теперь анализируем полученный результат.
If max <> "" Then
Если значение переменной maxотличается от пустой строки, значит, в исходной строке были слова-палиндромы. Выводим поясняющий текст и найденное слово.
lstText.Items.Add("Самое длинное слово-палиндром")
lstText.Items.Add(max)
Else
Иначе, если в переменной max записана пустая строка, мы делаем вывод, что в строке не было ни одного слова-палиндрома. Следовательно, нет и самого длинного палиндрома. В этом случае мы выводим поясняющее сообщение.
lstText.Items.Add("В строке нет слов-палиндромов")
End If
Полный текст программы представлен в приложении 45. Пример работы программы приведен на рис. 62.
Рис. 62.Пример работы программы обработки слов-палиндромов