- •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.7. Сравнение строк
Сравнение строк в Visual Basic 2005 выполняется посимвольно. Сначала сравниваются первые символы строк. Если первые символы равны, сравниваются вторые, замет третьи и так далее. Вывод о том, какая строка больше, делается, как только будет найдена первая пара несовпадающих символов. Символы сравниваются по ASCII кодам. Меньшим считается символ, у которого меньше ASCII код. На основании таблицы ASCII кодов можно сформулировать несколько правил сравнения строк.
Пустая строка является минимальной возможной строкой. Любая непустая строка больше пустой.
Пробел меньше всех остальных символов.
Цифры меньше любой буквы.
Цифры идут по порядку от 0 до 9.
Любая латинская буква меньше любой русской.
В пределах каждого алфавита (латинского или русского) прописная буква всегда меньше строчной.
В пределах каждого алфавита буквы располагаются по порядку: в латинском алфавите – от A до Z, в русском алфавите от А до Я.
В таблице 14 приведены основные группы символов по возрастанию их ASCII кодов.
Таблица 14
Номер группы |
Описание группы |
Символы |
1 |
Пробел |
" " |
2 |
Цифры |
"0" – "9" |
3 |
Латинские прописные буквы |
"A" – "Z" |
4 |
Латинские строчные буквы |
"a" – "z" |
5 |
Русские прописные буквы |
"А" – "Я" |
6 |
Русские строчные буквы |
"а" – "я" |
Пользуясь данными таблицы 14, сравним несколько строк. Результаты сравнения представлены в таблице 15.
Таблица 15
Результат сравнения |
Пояснение |
"Арбуз" < "Банан"
|
Так как буква "А" стоит в алфавите перед буквой "Б". |
"Белка" > "Бегемот"
|
Первые и вторые буквы слов совпадают, сравнение происходит по третьим буквам. Буква "г" стоит в алфавите перед буквой "л", следовательно, слово "Бегемот" меньше, чем слово "Белка". |
"Пар" < "Пароход"
|
Первое слово является левой подстрокой второго. Когда из второго слова для сравнения берется четвертая буква, из первого слова берется пустая строка, которая меньше любой другой строки. Следовательно, левая подстрока всегда будет меньше всей строки. |
"Лошадь" < "воробей"
|
Первое слово начинается с прописной буквы, а второе – со строчной. В пределах одного алфавита любая прописная буква меньше любой строчной. Следовательно, слово "Лошадь" меньше, чем слово "воробей". |
В качестве примера приведем фрагмент программы, сортирующей слова в произвольной строке. Эту задачу можно решать в двух вариантах. При сортировке с учетом регистра делается различие меду строчными и прописными буквами. При сортировке без учета регистра строчные и прописные буквы не различаются. Рассмотрим оба случая.
Сортировка с учетом регистра.
В начале программы вводится строка текста. Затем из нее удаляются лишние пробелы, и формируется массив слов. Массив называется slova(), номер последнего элемента в этом массиве хранится в переменнойn.
Сортировать массив слов будем методом пузырька. Поэтому нам потребуются две дополнительные переменные. В переменной sortмы будем хранить состояние массива: отсортирован он или нет. Эта переменная будет иметь логический тип данных.
Dim sort As Boolean
Любая сортировка предполагает перестановку элементов массива местами. Для этого необходима дополнительная переменная. Ее тип обязательно должен совпадать с типом элементов сортируемого массива. Так как мы сортируем массив слов, то дополнительная переменная должна иметь строковый тип данных.
Dim z As String
Организуем внешний цикл сортировки массива.
Do
Сначала предполагаем, что массив уже отсортирован.
sort = True
Анализируем все слова, хранящиеся в массиве. Обратите внимание, что слова в массиве нумеруются с нулю. Процесс анализа необходимо остановить после обработки предпоследнего слова, которое сравнивается с последним.
For i = 0 To n – 1
Сравниваем текущее слово и следующее за ним. Так как проверка выполняется с учетом регистра букв, то никаких дополнительных условий ставить не надо.
If slova(i) > slova(i + 1) Then
Если i-е слово больше, чем (i+1)-е, значит, массив неупорядочен. Меняем значение логической переменной.
sort = False
После чего переставляем местами элементы массива, используя дополнительную переменную.
z = slova(i)
slova(i) = slova(i + 1)
slova(i + 1) = z
End If
Next
Процесс перестановки слов в массиве продолжается до тех пор, пока все элементы массива не займут правильные места.
Loop Until sort
Теперь из отсортированного массива слов формируем строку. В качестве разделителя слов используем пробел.
s = Strings.Join(slova, " ")
Полученные результаты выводим в окно списка. Чтобы зрительно отделить исходные данные от полученных результатов сначала выводим горизонтальную черту.
lstText.Items.Add("--------------------------------")
Потом печатаем полученную строку, в которой все слова упорядочены с учетом регистра.
lstText.Items.Add(s)
Полный текст программы представлен в приложении 47. Пример работы программы приведен на рис. 64. Обратите внимание на то, что слово «Цапля», на первый взгляд, нарушает алфавитный порядок. Это вызвано тем, что оно начитается с прописной буквы, которая всегда меньше любой строчной.
Рис. 64.Пример работы программы сортировки слов с учетом регистра
Сортировка без учета регистра.
В начале программы вводится строка текста. Затем из нее удаляются лишние пробелы, и формируется массив слов. Массив называется slova(), номер последнего элемента в этом массиве хранится в переменнойn.
Сортировать массив слов будем методом пузырька. Поэтому нам потребуются две дополнительные переменные. В переменной sortмы будем хранить состояние массива: отсортирован он или нет. Эта переменная будет иметь логический тип данных.
Dim sort As Boolean
Любая сортировка предполагает перестановку элементов массива местами. Для этого необходима дополнительная переменная. Ее тип обязательно должен совпадать с типом элементов сортируемого массива. Так как мы сортируем массив слов, то дополнительная переменная должна иметь строковый тип данных.
Dim z As String
Организуем внешний цикл сортировки массива.
Do
Сначала предполагаем, что массив уже отсортирован.
sort = True
Анализируем все слова, хранящиеся в массиве. Обратите внимание, что слова в массиве нумеруются с нулю. Процесс анализа необходимо остановить после обработки предпоследнего слова, которое сравнивается с последним.
For i = 0 To n – 1
Сравниваем текущее слово и следующее за ним. Нам требуется сравнивать слова без учета регистра. Поэтому оба сравниваемых слова преобразуем таким образом, чтобы все их буквы были прописными. Для этого мы будем использовать функцию Strings.UCase.
If Strings.UCase(slova(i)) > _
Strings.UCase(slova(i + 1)) Then
Если i-е слово больше, чем (i+1)-е, значит, массив неупорядочен. Меняем значение логической переменной.
sort = False
После чего переставляем местами элементы массива, используя дополнительную переменную.
z = slova(i)
slova(i) = slova(i + 1)
slova(i + 1) = z
End If
Next
Процесс перестановки слов в массиве продолжается до тех пор, пока все элементы массива не займут правильные места.
Loop Until sort
Теперь из отсортированного массива слов формируем строку. В качестве разделителя слов используем пробел.
s = Strings.Join(slova, " ")
Полученные результаты выводим в окно списка. Чтобы зрительно отделить исходные данные от полученных результатов сначала выводим горизонтальную черту.
lstText.Items.Add("--------------------------------")
Потом печатаем полученную строку, в которой все слова упорядочены без учета регистра.
lstText.Items.Add(s)
Полный текст программы представлен в приложении 47. Пример работы программы приведен на рис. 65. Обратите внимание на положения слова «Цапля» в результирующей строке. Сравните результаты, представленные на рисунках 64 и 65.
Рис. 65.Пример работы программы сортировки слов без учета регистра