Слайд 1Лекция 4
Кафедра Прикладной математики
М-703, тел. 362-79-62
К.т.н., профессор Глаголев Виктор Борисович,
комн. Ж-405б,
тел. 362-73-28
http://glagvik.narod2.ru/index.htm
Арифметические операции
Приоритет арифметических операций
Математические функции
Массивы
Логические операции
Приоритет операций
Слайд 2Операции и функции
VB располагает большим набором встроенных функций. Их можно разделить
на несколько категорий:
Финансово-математические функции
Математические функции
Функции обработки строк
Функции преобразования типов
Прочие функции
Слайд 3Ознакомиться с подробным описанием функций можно в справочной системе VB.
Далее
мы рассмотрим лишь математические функции VB.
В расположенной на следующем слайде таблице дан полный перечень операций, которые могут быть применены к числовым данным.
Слайд 7Приоритет операций
Если в выражении использовано несколько операций, то в первую очередь
выполняются операции, имеющие наивысший приоритет.
Если приоритет операций одинаковый, то они выполняются слева направо.
a + b/c + d
(a + b)/(c + d)
Примеры
Выражение Код
Слайд 11Углы выражаются в радианах.
В проекте необходимо выполнить импорт пространства имен System.Math,
добавив в начало исходного кода (до объявления первого модуля или класса) строку Imports System.Math.
Иначе перед именем каждой функции будет необходимо добавлять название класса, например:
Math.Sin(x)
Слайд 12Импорт в проект пространства имен System.Math
Слайд 13Функции Int и Fix возвращают значение, равное целой части числа, тип
которого совпадает с типом аргумента. Синтаксис: Int(число) и Fix(число)
Обязательный аргумент число – это любое допустимое числовое выражение.
Слайд 14Различие между функциями Int и Fix состоит в том, что для
отрицательного значения аргумента функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix ближайшее отрицательное целое число, большее либо равное указанному.
Например, функция Int преобразует -8.4 в -9, а функция Fix преобразует -8,4 в -8.
Слайд 15Функция Rnd возвращает значение типа Single, содержащее случайное число, меньшее 1
и большее или равное 0.
Перед первым вызовом функции Rnd надо использовать инструкцию Randomize () без аргумента для инициализации генератора случайных чисел.
Слайд 16Пример. Игра «Угадай число»
Условие игры
Компьютер загадывает некоторое случайное целое число k
из диапазона 0 – 100.
Следует угадать загаданное число, сделав как можно меньше попыток.
После каждой попытки компьютер сообщает, загаданное число больше или меньше предложенного числа.
Слайд 18Блок-схема алгоритма
Генерация случайного
числа k от 0 до 100
Ввод k1
a
Слайд 25Массивы
Массив - это группа переменных, содержащих элементы данных одного типа и
с одним именем. Под каждый элемент массива отводится отдельная ячейка памяти.
Все элементы массива имеют один и тот же тип. Возможны ссылки на отдельные элементы массива. Каждый отдельный элемент массива определяется именем массива и значениями индексов.
Слайд 26Например, ссылки a(7) или a1(2, 9) означают, что:
а – это имя
одномерного массива (вектора) с одним индексом, элемент массива имеет значение индекса равное 7.
а1- это имя двумерного массива (матрицы). Об этом говорит применение двух индексов для определения элемента массива.
Слайд 27Первый индекс двумерного массива трактуется как номер строки, в которой находится
элемент массива, а второй индекс, как номер столбца.
Индексом может быть выражение целого типа с неотрицательным значением. Нижняя граница индекса всегда равна 0. Верхняя граница каждого индекса массива задается при его объявлении.
Слайд 28Имя массива
Индекс (номер позиции) элемента массива km
Пример массива c именем km
типа Integer показаний счетчика километров на спидометре автомобиля в начале каждого месяца в течении года:
Слайд 29Как и простые переменные, массивы объявляются с помощью инструкций Dim, Static,
Private или Public.
Примеры объявления массивов:
Dim x() As Single
Dim y(,) As Single
Слайд 30Объявлен одномерный массив с именем x и двумерный массив y. Об
этом говорят скобки в объявлении после имени каждого массива. При объявлении двумерного массива между скобок должна стоять запятая. Объявление верхних границ индексов в этих примерах отложено на потом (такие массивы называют динамическими).
Одномерный массив называют вектором.
Двумерный массив называют матрицей.
Слайд 31Для объявления верхней границы индекса и размещения в памяти массивов следует
поместить инструкцию:
Redim x(10), y(4,5)
Здесь заданы значения верхних границ каждого индекса массивов.
Слайд 32Индекс массива x может принимать значение в диапазоне от 0 до
10. Массив x имеет 11 элементов.
Первый индекс массива y может принимать значение в диапазоне от 0 до 4. Второй индекс массива y может принимать значение в диапазоне от 0 до 5. Массив y имеет 30 элементов (произведение числа строк на число столбцов).
Слайд 33При объявлении массива можно выполнить его инициализацию:
Dim z() As Single =
{1.3, -2.7, _ 14.6, -5}
В этом примере объявлен одномерный массив z, имеющий 4 элемента, значения которых заданы списком инициализации.
Массив, при объявлении которого верхние границы индексов не были указаны (динамический массив), можно неоднократно переобъявлять с помощью инструкции ReDim.
Слайд 34Среди инструкций внутри процедуры можно записать:
ReDim y(5, 10)
Далее этот массив может
быть переобъявлен:
ReDim y(5, 20)
Слайд 35С помощью инструкции ReDim можно изменять только верхние границы индексов.
Размерность массива
(количество индексов) можно задать один раз. Изменять ее нельзя.
Инструкцию ReDim можно применять для изменения динамического массива столько раз, сколько потребуется. Однако при каждом ее применении данные, содержащиеся в массиве, теряются.
Слайд 36Инструкция ReDim Preserve может увеличить размер массива, сохраняя при этом его
содержимое. В следующем примере показывается, как можно увеличить размер массива a4 на 10 элементов без уничтожения текущих значений элементов массива.
Пусть был объявлен массив:
Dim a4 () As Integer
Затем в программе установлен размер этого массива:
ReDim a4 (n)
Слайд 37Далее в программе может быть, например, записано:
ReDim Preserve a4(n+10)
Использование инструкции ReDim
Preserve позволяет изменить верхнюю границу только последней размерности массива.
Слайд 38Если при объявлении массива задаются верхние границы индексов, то такой массив
называется фиксированным.
Пример
Dim s(10) As Single
Dim b(4, 5) As Integer
К фиксированным массивам инструкция ReDim неприменима.
Слайд 39Имеется возможность присвоить содержимое одного массива другому так же, как это
делается для простых переменных. Но эти массивы должны иметь одинаковую размерность и одинаковое количество элементов.
Слайд 40Если же в левой части оператора присвоения стоит динамический массив, то
совпадение числа элементов не обязательно. Число элементов массива в левой части оператора присвоения при необходимости изменится.
Слайд 41Пример.
Dim a() As Integer = {1, 2, 3, 4}, _
b(), i
As Integer
b = a
For i = 0 To 3
MsgBox(b(i))
Next
Последовательно на экране в окне функции MsgBox будет выведено: 1, 2, 3, 4.
Слайд 42Пример 1
Вычислить среднее арифметическое k заданных чисел.
Слайд 43Применяемые данные
Исходные данные:
k – переменная целого типа, число заданных величин;
a() –
массив типа Single, значения заданных величин.
Результаты:
s – переменная типа Single, значение среднего арифметического.
Слайд 44Промежуточные:
Сумма – переменная типа Single, значение суммы первых k элементов массива
a;
i – переменная целого типа, значение индекса элемента массива a.
Слайд 48Посмотрим на эту блок-схему с точки зрения базовых структур, которые в
нее входят.
Блоки 1 – 2 составляют последовательную структуру (следование), которую мы назовем Структура 1.
Блоки 3 – 8 относятся к циклу. Эту структуру мы назовем Структура 2.
Блоки 9 и 10 – это опять последовательная структура, которую мы назовем Структура 3.
Слайд 49Структура 1, Структура 2 и Структура 3, рассматриваемые в совокупности также
являются структурой следования.
В блок-схеме любого структурированного алгоритма всегда можно ясно увидеть базовые структуры, из которых строится алгоритм.
Слайд 50Интерфейс проекта
Текстовое поле предназначено для вывода результатов вычислений.
Нажатие на кнопку приведет
к запуску вычислений.
Слайд 52
Код проекта
При создании проекта система автоматически создает показанную ниже заготовку
кода, связанного с формой Form1, которая является объявлением класса Form1.
Весь код, связанный с формой, должен находиться внутри этой заготовки.
Слайд 53Выполнение проекта должно начаться с щелчка на кнопке BtnПуск.
Следовательно в код
проекта должна входить подпрограмма BtnПуск_Click, выполнение которой запускается событием Click, происшедшим с кнопкой BtnПуск (щелчком на этой кнопке).
Слайд 54Следующим шагом по созданию кода проекта должно быть включение в код
проекта заготовки подпрограммы BtnПуск_Click, которая создается системой, если сделать, например, двойной щелчок на кнопке BtnПуск.
Слайд 55Ниже показан код, который получится после создания заготовки подпрограммы BtnПуск_Click.
Слайд 58После запуска проекта на выполнение программный код начнет выполняться только после
нажатия на кнопки BtnПуск. В этом случае для этой кнопки происходит событие Click, что и приводит к выполнению событийной процедуры BtnПуск_Click.
Результаты решения
Слайд 60В строках с 1 по 5 тела этой процедуры объявляются данные.
В
строке 6 выполняется очистка текстового поля. Для этого применяется метод Clear. Если этого не сделать, то при многократных запусках проекта информация, выводимая в текстовом поле при очередном запуске, будет добавляться к информации, выведенной в нем при предыдущих запусках.
Слайд 61В строке 7 обеспечивается ввод значения переменной k. Правильность выполнения ввода
данных рекомендуется всегда контролировать. Именно с этой целью в строке 8 значение переменной k выводится в текстовом поле.
В строке 9 выполняется размещение массива a в памяти.
Слайд 62В строках с 10 по 12 выполняется ввод значений элементов массива
a. Значение элемента a(0) при этом не вводится. Наличие этого элемента мы будем игнорировать. Он ни где не будет применяться.
В строках с 13 по 16 значения введенных элементов массива a выводятся для контроля в текстовом поле.
Слайд 63В строках с 17 по 20 выполняется вычисление значения переменной s.
И,
наконец, в строке 21 обеспечивается вывод значения переменной s в текстовом поле.
Слайд 64Обратите внимание на то, что в программе нет инструкции i =
1, а также инструкции i = i + 1, несмотря на то, что эти инструкции есть в блок-схеме.
Нет также проверки условия i <= k.
Выполнение всех этих действий обеспечивает инструкция цикла For … Next.
Слайд 65Обратите внимание на то, что в программе также нет инструкции
sum
= 0. Значение 0 переменная sum получила в результате ее объявления.
Можно удалить инструкцию Dim i As Integer. Инструкция цикла For … Next является блоком. Переменная i внутри блока получит тип Integer автоматически (по типу начального и конечного значений параметра), но действовать будет только внутри блока.
Слайд 66Логические операции
В VB.NET определены логические операции: And (логическое умножение), Or (логическое
сложение), Not (логическое отрицание), а также Xor (логическое исключительное сложение).
Операция Not имеет следующий синтаксис:
Not Операнд
Слайд 67Операнд, имеющий логический тип, – это отношение, переменная или функция логического
типа или результат логической операции.
Результат логического отрицания имеет значение противоположное значению ее операнда, что показывает приведенная далее таблица.
Слайд 69Операция And имеет два операнда:
Операнд 1 And Операнд 2
Результат операции And
определяет таблица:
Слайд 70Операция And имеет значение True только тогда, когда оба операнда имеют
значение True.
Пример
Неравенство a ≤ x ≤ b следует записать:
a <= x And x <= b
Неправильно написать: a <= x <= b
Слайд 71Операция Or также имеет два операнда:
Операнд 1 Or Операнд 2
Результат операции
Or дан в таблице:
Слайд 72Операция Or имеет значение True, если хотя бы один операнд (и
даже оба вместе) имеют значение True.
Пример:
Условие «х не принадлежит отрезку [a, b]» следует записать:
x < a Or x > b
или
Not(a <= x And x <= b)
Слайд 73Xor (логическое исключительное сложение)
Результат операции Xor дан в таблице:
Операция Xor имеет
значение True, если один из операндов (но не оба вместе) имеют значение True.
Слайд 74
В VB.NET определены также логические операции: AndAlso и OrElse.
Операция AndAlso очень
похожа на операцию And. Она также выполняет логическое умножение для двух логических операндов (Boolean).
Слайд 75Основным различием между AndAlso и And является то, что AndAlso допускает
сокращенное, неполное вычисление операндов. Если для первого операнда в AndAlso вычисляется значение False, второй операнд не вычисляется и возвращается значение False операции AndAlso.
Слайд 76Аналогично операция OrElse очень похожа на операцию Or. Она выполняет сокращенное
логическое сложение двух логических операндов. Если первый операнд в выражении OrElse равен True, второй операнд не вычисляется и возвращается True для операции OrElse.
Слайд 77Логические операции имеют более низкий приоритет, чем арифметические операции.
Таблица приоритетов: