
- •Часть 1
- •5. Организация ветвлений 57
- •6. Программирование повторений 73
- •7. Одномерные массивы 114
- •Приложение 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. Обработка строк
Строка – это некоторый набор символов, в том числе и пустой. Для обозначения строки используются кавычки ("). Пустая строка обозначается парой кавычек, между которыми нет ни одного символа, в том числе и пробела (s ="").
Строки описываются с помощью типа String. Каждая строка может содержать до двух миллиардов символов в формате Unicode. Объем памяти, занимаемой строковой переменной, зависит от количества символов в этой строке. Чем больше символов, тем больше памяти требуется для хранения этой строки.
Число символов в строке называется длиной строки. Длина пустой строки равна нулю. Все символы в строке последовательно пронумерованы. Нумерация идет слева направо и начинается с единицы. Номер символа в строке также называют позицией символа.
Подстрока – это любой фрагмент строки, состоящий хотя бы из одного символа исходной строки. Например, в строке "электростанция" содержится подстрока "рост". Левой подстрокой называется такая подстрока, которая начинается с первого символа исходной строки. В нашем случае левой подстрокой будет "элек". Правая подстрока – это подстрока, которая заканчивается последним символом исходной строки. В нашем примере это будет подстрока "станция".
Конкатенацией двух строк s1 и s2 называется строка s, для которой s1 является левой подстрокой, s2 – правой подстрокой, а длина строки s равна сумме длин строк s1 и s2. Часто конкатенацию называют сложением или склейкой строк. В Visual Basic 2005 она обозначается знаком плюс.
s = s1 + s2 6
Строковое выражение – это либо отдельная строка, либо строка и строковое выражение, между которыми стоит знак конкатенации.
9.1. Основные функции обработки строк
Strings.Len(Строка) – возвращает количество символов в строке, то есть ее длину. Например, Strings.Len("Окно") вернет значение 4.
Strings.Left(Строка, Длина) – выделяет левую подстроку указанной Длины из заданной Строки. Например, Strings.Left("Пароход", 3) вернет строку "Пар".
Strings.Right(Строка, Длина) – выделяет правую подстроку указанной Длины из заданной Строки. Например, Strings.Right("Пароход", 3) вернет строку "ход".
Strings.Mid(Строка, Позиция, Длина) – выделяет подстроку заданной Длины из исходной Строки, начиная с указанной Позиции. Например, Strings.Mid("Пароход", 2, 4) вернет строку "арох". Параметр Длина может отсутствовать. В этом случае функция Strings.Mid возвращает правую подстроку, которая начинается с заданной Позиции. Например, Strings.Mid("Пароход", 4) вернет строку "оход". Функция Mid может стоять не только справа от знака присваивания, но и слева. В этом случае префикс Strings не ставится. Если функция Mid стоит слева от знака присваивания, то соответствующая подстрока исходной Строки будет заменена на значение строкового выражения, стоящего в правой части оператора присваивания. При этом длина исходной строки не меняется. Примеры:
s = "Иванов"
Mid(s, 1, 4) = "Петр"
После выполнения оператора присваивания в переменную s будет записано "Петров". То есть первые четыре символа исходной строки будут заменены на четыре символа из другой строки.
s = "Иванов"
Mid(s, 1, 4) = "Пят"
После выполнения оператора присваивания в переменную s будет записано "Пятнов". Так как во второй строке всего три символа, то в исходной строке будут изменены только первые три символа, а четвертый останется неизменным.
s = "Иванов"
Mid(s, 1, 3) = "Александр"
После выполнения оператора присваивания в переменную s будет записано "Аленов". Первые три символа исходной строки меняются на первые три символа второй строки. Остальная часть второй строки в преобразовании не участвует.
Другой пример использования функции Strings.Mid для посимвольной обработки строки рассмотрен в разделе 9.3.
Strings.InStr(Старт, Строка, Подстрока) – ищет Подстроку в Строке, начиная с указанной стартовой позиции. Стартовую позицию можно не указывать, тогда процесс поиска начинается с первого символа строки. При этом функция записывается в следующем виде: Strings.InStr(Строка, Подстрока). Не зависимо от формы записи результатом функции является число, которое показывает, с какой позиции начинается искомая подстрока. Символы строки нумеруются, начиная с единицы. Если искомая Подстрока не найдена, то функция возвращает ноль. Рассмотрим примеры.
Strings.InStr("абракадабра", "бра") даст результат 2, так как первый раз подстрока "бра" начинается со второго символа строки.
Strings.InStr(4, "абракадабра", "бра") даст результат 9, так как поиск начнется с четвертого символа строки и будет найден второй слог "бра", который начинается с девятого символа строки.
Strings.InStr("абракадабра", "кот") даст результат 0, так как подстрока "кот" в слове "абракадабра" не встречается.
Strings.InStrRev(Строка, Подстрока, Старт) тоже ищет Подстроку в Строке, начиная с указанной стартовой позиции, но поиск идет справа налево, от конца строки к началу. Стартовая позиция отсчитывается от левого края строки. Результатом работы функции будет номер позиции, с которой начинается искомая подстрока. Этот номер тоже отсчитывается от левого края строки. Рассмотрим примеры.
Strings.InStrRev("абракадабра", "бра") даст результат 9, так как последнее вхождение подстроки "бра" начинается с девятого символа строки.
Strings.InStrRev("абракадабра", "бра", 7) даст результат 2, так как поиск начнется с седьмого символа строки и пойдет к началу строки. Поэтому будет найден слог "бра", стоящий в начале строки.
Strings.StrReverse(Строка) – записывает все символы строки в обратном порядке. Например, Strings.StrReverse("книга") вернет "агинк".
Strings.Replace(Строка, Найти, Заменить, Старт, Количество, Метод сравнения) – в заданной Строке функция ищет подстроку Найти и заменяет ее на подстроку Заменить. Поиск начинается с указанной стартовой позиции и выполняется не более чем требуемое Количество замен. Если стартовая позиция не указана, то поиск начинается с первого символа исходной строки. Если же стартовая позиция указана и отличается от единицы, то предшествующая ей часть строки будет удалена. Если не указано требуемое Количество замен, то будут выполнены все возможные замены. Метод сравнения определяет режим сравнения исходной Строки и подстроки Найти. Этот параметр может иметь одно из двух значений: CompareMethod.Bynary и CompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. То есть если при вызове функции Метод сравнения не указан, то сравнение будет происходить с учетом регистра. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Примеры.
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр") даст результат "Петров Петр Петрович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 1, 2) даст результат "Петров Петр Иванович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 8, 1) даст результат "Петр Иванович".
Strings.UCase(Строка) – преобразует все строчные буквы исходной Строки в прописные.
Strings.LCase(Строка) – преобразует все прописные буквы исходной Строки в строчные. Примеры.
Strings.UCase("Visual Basic") даст результат "VISUAL BASIC".
Strings.LCase("Visual Basic") даст результат "visual basic".
Strings.StrConv(Строка, Режим преобразования) – преобразует строчные и прописные буквы в исходной Строке. При этом может использоваться один их трех основных Режимов преобразования.
vbStrConv.LowerCase – все буквы преобразуются в строчные (аналог функции Strings.LCase).
vbStrConv.UpperCase – все буквы преобразуются в прописные (аналог функции Strings.UCase).
vbStrConv.ProperCase – первая буква каждого слова будет прописной, а остальные – строчными.
Strings.LTrim(Строка) – удаляет все пробелы, стоящие в начале Строки, до первого символа, который не является пробелом.
Strings.RTrim(Строка) – удаляет все пробелы, стоящие в конце Строки, до ближайшего символа, который не является пробелом.
Strings.Trim(Строка) – удаляет все пробелы, стоящие в начале и в конце Строки. Пробелы, стоящие в середине Строки, остаются без изменений.
Strings.Space(Количество) – формирует строку, состоящую из заданного Количества пробелов.
Strings.StrDup(Количество, Символ) – формирует строку, состоящую из заданного Количества повторений указанного Символа.
Strings.LSet(Строка, Длина) – формирует строку указанной Длины. Если исходная Строка длиннее, чем требуется, то ее правая часть теряется. Если исходная Строка короче, чем требуется, то она будет дополнена справа необходимым количеством пробелов. Другими словами, происходит выравнивание строки по левой границе.
Strings.RSet(Строка, Длина) – формирует строку указанной Длины. Если исходная Строка длиннее, чем требуется, то ее правая часть теряется. Если исходная Строка короче, чем требуется, то она будет дополнена слева необходимым количеством пробелов. Другими словами, происходит выравнивание строки по правой границе.
Strings.StrComp(Строка1, Строка2, Режим сравнения) – сравнивает две строки и возвращает один из трех результатов: 1 (если Строка1 больше, чем Строка2), 0 (если строки равны) или -1 (если Строка1 меньше, чем Строка2). Режим сравнения определяет способ сравнения строк. Этот параметр может иметь одно из двух значений: CompareMethod.Bynary и CompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Правила сравнения двух строк будут подробно рассмотрены в разделе 9.7.
Val(Строка) – функция пытается преобразовать указанную строку в число. Преобразование прерывается при первой же ошибке. Если исходная Строка начинается не с цифры, а с символа, то функция возвращает значение 0. Примеры различных преобразований приведены в таблице 12.
Таблица 12
Исходная строка |
Результат функции Val |
"12" |
12 |
"12а" |
12 |
"1а2" |
1 |
"а12" |
0 |
"аб" |
0 |
"0" |
0 |
Str(Число) – преобразует число в строку. Перед положительными числами функция ставит один пробел.
Strings.Asc(Строка) – возвращает ASCII7 код первого символа Строки.
Strings.Chr(Код) – возвращает символ, соответствующий заданному ASCII коду.
Strings.Split(Строка, Разделитель, Количество) – формирует массив из слов, содержащихся в Строке. Каждое слово записывается в отдельный элемент массива. Признаком конца очередного слова является появление в строке подстроки Разделитель. Если Разделитель не указан, то признаком конца слова является пробел. Результирующий массив следует описывать как массив с неизвестной верхней границей. Нумерация слов в массиве идет с нуля. Если параметр Количество не указан, то каждое слово будет записано в отдельный элемент массива. Если же Количество задано, то результирующий массив будет состоять не более чем из требуемого Количества элементов. Если в строке содержится больше слов, чем указано в параметре Количество, то в последнем элементе массива в виде одного «слова» будет храниться вся необработанная часть строки. Если в строке идут два разделителя подряд, например, два пробела, то в массив слов вставляется пустое слово, и соответствующий элемент массива будет содержать пустую строку. Пример использования функции Strings.Split рассмотрен в разделе 9.3.
Strings.Join(Массив слов, Разделитель) – формирует строку из Массива слов, разделяя слова с помощью указанной строки – Разделителя. Если Разделитель не указан, то слова разделяются одним пробелом. За последним словом массива Разделитель не ставится. Пример использования функции Strings.Join рассмотрен в разделе 9.4.