
- •Примеры и решения
- •1. Рассмотрим следующую известную задачу: имеются два кувшина емкостью 3 и 8 л. Необходимо составить алгоритм, с помощью которого, пользуясь только этими двумя кувшинами, можно набрать 7 л воды.
- •Глава 4. Язык программирования basic
- •Стандартные функции для работы со строками
- •Visual Basic позволяет также создавать многомерные массивы. При объявлении многомерного массива верхние границы каждой размерности разделяются запятыми:
- •Приоритет выполнения операций
- •Арифметические операции
- •Операции сравнения
- •Операторы цикла
- •3. Найти максимальный делитель d нахурального числа к (за исключением самого к):
- •I Закрытие файла с закрытием файла связано освобождение канала ввода-вывода и, возможно, дальнейшее использование этого канала для связи с другим внешним файлом.
Приоритет выполнения операций
Если в выражении заданы операции более чем одной категории, то существует следующий порядок их выполнения: сначала выполняются арифметические операции, затем операции сравнения и последними выполняются логические операции.
Операции сравнения имеют один уровень приоритета и выполняются в порядке следования слева направо. Арифметические и логические операции выполняются в соответствии с порядком, приведенным в таблице:
Операция конкатенации строк (&) не относится к арифметическим операЦиям> н0 по приоритету выполнения находится как раз между арифметическими операциями и операциями сравнения (т.е. выполняется после арифметических операций, но перед операциями сравнения).
Арифметические операции
Арифметические операции могут применяться только к операндам целых и вещественных типов:
В качестве операндов арифметических операций могут выступать стандартные арифметические (или тригонометрические) функции, т.е. функции с результатом целого или вещественного типа, аргументами которых являются выражения целого или вещественного типа. В таблице приведены характеристики некоторых арифметических и тригонометрических функций.
Перед вызовом функции Rnd необходимо инициировать генератор случайных чисел посредством использования оператора Randomize. Для того чтобы получить последовательность случайных чисел в заданном интервале [нижняя_граница, верхняя_граница], используют следующую формулу:
\гА({<верхняя_граница> - <нижняя_граница> + 1) * Rnd + <иижняя_граница>)
Например, чтобы сгенерировать случайные числа в интервале от 1 до 7, необходимо записать следующую последовательность действий:
Результат тригонометрической функции Atn(X) представляет собой угол, измеряемый в радианах. Чтобы преобразовать радианы в градусы, необходимо умножить значение в радианах на константу 180/Pi. (180/я) Для обратного преобразования (градусов в радианы) необходимо умножить величину в градусах на константу Pi/180.
Значение функции Fix(X) эквивалентно выражению:
Операции сравнения
В результате выполнения операций сравнения получается значение логического типа: true или false. Приведенная ниже таблица показывает для каждой операции, выполняемой над операндом 1 (01) и операндом 2 (02), значение результата в зависимости от значений операндов. Если хотя бы один из операндов при выполнении любой операции принимает стандартное значение Null, то результатом выполнения операции тоже будет величина, равная Null.
При сравнении операндов следует учитывать, что правила сравнения чисел или символьных строк всегда корректно действуют только в том случае, если сравниваемые операнды однотипны, например, оба операнда — числовые значения или оба операнда — символьные стро-
[си.
Если
же операнды разного типа, или один из
операндов имеет тип Variant,
то справедливы следующие правила
выполнения операций сравнения:
если один из операндов числового типа, а второй — типа Variant и является числом, то сравнение проводится по правилам сравнения чисел;
если один из операндов числового типа, а второй — типа Variant и является строкой, не конвертируемой в число, то будет получена ошибка несоответствия типов;
если один из операндов типа String, а второй — типа Variant и от личен от Null, то сравнение проводится по правилам сравнения строк;
если один из операндов числового типа, а второй — Empty, то сравнение проводится по правилам сравнения чисел и значение Empty принимается равным 0;
если один из операндов типа String, а второй — Empty, то сравне ние проводится по правилам сравнения строк и значение Empty принимается равным пустой строке ("").
К операциям сравнения относят также и операции Is и Like, которые имеют специфические области применения.
Операция Is применяется для сравнения двух переменных А и В ■типа object. Если обе переменные ссылаются на один физический объ-| ект в памяти, то в результате операции A Is В получается значение True. В противном случае результат равен False.
Операция Like служит для выявления соответствия между значением переменной строкового типа и так называемым образцом. Под образцом здесь понимается строка, содержащая специальные символы, трактующиеся в соответствии со следующими правилами:
Логические операции
Логические операции применяются к операндам логического типа, т.е в качестве операндов выступают выражения, при вычислении дающие результат логического типа. Результат выполнения логических операций тоже логического типа. Вычисление логических выражений происходит в соответствии с таблицами истинности логических операций. Таблицы истинности задают соответствие между значениями операндов и результатом выполнения операции (см. табл 1.10, 1.11).
Помимо значений True и False в таблицы истинности операций добавлено стандартное значение Null. Результат выполнения логической операции со значением Null в одном или в обоих операндах также может быть равным значению Null.
Примеры записи логических выражений:
При использовании логических выражений в качестве условий (например, в условных операторах и операторах цикла) значение логического выражения Null приравнивается к значению False.
Операции с битами информации (побитовые)
Операции побитового сравнения выполняются для операндов числового типа и в результате дают число, получающееся путем побитового выполнения операции над операндами в соответствии с правилами, приведенными в табл. 1.12.
Рассмотрим примеры выполнения операций побитового сравнения. Пусть объявлены две переменных А и В типа Integer. В переменной А находится число 12, а в переменной В — число 9. Запишем значения переменных в двоичном побитовом представлении и применим операции побитового сравнения:
■ 4.5. Операторы языка
Оператор присваивания
Предназначен для присваивания переменной значения. Синтаксис:
[Let] <идентификатор> = <выражение>
Тип данных переменной, имя которой стоит в левой части оператора присваивания, должен быть совместим с типом данных выражения. Если для переменной не задан тип данных, то оператор присваивания одновременно с занесением значения в переменную определяет и ее тип данных для дальнейшего использования. Тип данных в этом случае соответствует типу данных выражения в правой части оператора.
Например:
Оператор безусловного перехода
Оператор GoTo позволяет изменить стандартный последовательный порядок выполнения операторов и передать управление заданному оператору, которому в этом случае должна предшествовать метка. Эта же метка должна быть указана при операторе goto.
Метка представляет собой либо целое число в пределах от 0 до 9999, либо идентификатор.
Синтаксис оператора безусловного перехода:
GoTo <Метка>
<Метка> представляет собой идентификатор или целое число — номер строки программного кода. Метка всегда должна стоять в начале строки и отделяется от первого оператора строки двоеточием. Значение метки должно быть уникально внутри модуля.
Пример:
Условный оператор
В языке visual basic условный оператор реализован в двух формах: условный оператор If...Then...Else и условный оператор Select Case. Условный оператор If...Then...Else имеет следующий синтаксис:
If <логическое выражение> Then [<onepaTop_true>] [Else <onepaTop_false>]
Такая синтаксическая конструкция должна быть обязательно записана в одной строке. Если в качестве оператора выступает последовательность операторов, то операторы при записи должны отделяться друг от друга двоеточием («:»).
Рассмотрим пример.
Пусть необходимо написать последовательность действий для решения следующей задачи: присвоить переменной^ значение sinx, если х > 0, и значение cos х, если х < 0.
If х > 0 Then у = sin(x) Else у = cos (x)
Допустим, что в условии задачи необходимо еще определить значение переменной z:z= 1, если х > 0, и z = 0, если х < 0:
If х > 0 Then у = sin(х) : z =1 Else у = cos(x) : z = 0
Оператор If...Then...Else имеет и другую (так называемую блочную) форму записи:
Обязательными частями записи условного оператора в блочной форме являются первая и последняя строки. Количество условных ветвей, начинающихся со служебного слова Elself, теоретически не ограничено.
Такую форму удобно использовать в том случае, если реализация алгоритма требует программирования вложенных условных операторов. Изменим, например, условие представленной выше задачи следующим образом: присвоить переменной у значение sin х, если х < 1, и значение cos х, если х > 2, т.е. значение переменной х рассматривается на трех интервалах: (-со, 1), [1,2) и [1,+оо).
Алгоритм решения задачи может быть описан с помощью блочной формы условного оператора:
Условный оператор Select Case аналогичен по действию оператору Case в языке Pascal. Синтаксис оператора Select Case следующий:
<Выражение> в заголовочной части оператора представляет собой
арифметическое, логическое или строковое выражение, результат вы-
| числения которого последовательно сравнивается с константными зна-
чениями (числовыми или строковыми), заданными в Case-ветвях оператора. Если значение выражения совпало с одним из константных значений, то выполняется оператор (или группа операторов), записанный после заголовка соответствующей Case-ветви. Если же константного значения, равного значению выражения, не найдено, то выполняется оператор (или группа операторов), записанный после Case Else.
В случае использования в заголовочной части логического выражения, Case-ветвей может быть три — с константными значениями True False и Null.
Между заголовками Case-ветвей может стоять любое количество строк операторов. Операторы, записанные в одной строке, должны отделяться друг от друга двоеточием.
При использовании оператора Select Case необходимо помнить о том, что значение выражения и константы должны быть одного типа.
Рассмотрим запись оператора Select Case для решения задачи, предложенной в описании оператора Case языка Pascal:
Присвоить строке S значение дня недели для заданного числа D при условии, что в месяце 31 день и 1 -ое число — понедельник.
С введением ограничений на область возможных значений переменной D и использованием оператора Select Case в полной форме, получим следующую запись алгоритма решения задачи: