Hi! My name is Damir. I’m co-founder at IFAB.ru and i’m pretty good at these scary things

  • Startups
  • E-Commerce
  • Process development
  • Process implementation
  • Project management
  • Financial modeling
  • Business strategy

You can reach me out via these networks

Are you hiring? Check out my CV

My CV page

Лекции информатика 2

1. Вычислительная математика

В этом разделе Информатики мы рассмотрим вычислительную математику, алгоритмику и основы программирования на примере Visual Basic.

Вычислительная математика – это часть информатики, которая относится к методологии применения ЭВМ для решения практических задач посредством математических методов. Так же под вычислительной математикой понимают раздел науки математики – прикладную математику.

Прикладная математика включает в себя теорию численных методов и алгоритмов решения типовых математических задач. Прикладная математика возникла задолго до появления ЭВМ. Она включает в себя численные методы и алгоритмы.

Теория численных методов и алгоритмов решения задач – это абстрактная область математики, которая не использует конкретный язык программирования, изучая только способы численного решения задач.
Вернуться
1.1 Численные методы

Особенностью численных методов является то, что результатом решения задачи является конкретное число или набор чисел, причем это решение производится для конкретного набора исходных данных. Если нужно получить решение для других исходных данных, то надо заново повторить все этапы получения численного решения, но уже для новых исходных данных.

Для решения задачи численными методами требуется большое количество вычислений. Поэтому при вычислениях с помощью численных методов удобно использовать электронные вычислительные машины.

Численные методы имеют как достоинства, так и недостатки.

Достоинства: универсальность (т.е. с их помощью можно решать не одну конкретную задачу, а находить решение для целого класса задач.)

Недостатки:

1. решения получаются лишь для конкретных исходных данных;

2. решения, как правило, приближенные, то есть имеют некоторую погрешность.

Например: для решения любого квадратного уравнения пришлось бы перебрать все значения Х в определенном интервале, прежде, чем мы сможем найти правильное решение.

Основные задачи, решаемые численными методами:

1. поиск корней уравнений;

2. вычисление определенного интеграла;

3. сортировка и поиск информации;

4. вычисление значений сложных функций;

5. решение систем нелинейных уравнений;

6. решение систем линейных уравнений;

7. поиск производной в заданной точке;

8. решение дифференциальных уравнений;

9. шифрование и дешифрование сообщений.
Вернуться
1.2 Типы данных и погрешности вычислений

Вычислительная математика оперирует данными. Результатом любых вычислений всегда являются некоторые данные, но не обязательно числовые. В Visual Basic для хранения данных и использования их в вычислениях применяются переменные.

Прежде чем использовать в Visual Basic переменные, их необходимо объявить. Для этого служит команда DIM. После указывается имя переменной (в качестве имени указывается любая комбинация английских букв и цифр без пробелов), далее тип переменной. Например:

DIM Ajj15 as Boolean

(Boolean – логический тип данных; Ajj15 – имя переменной).

Типы переменных полностью соответствуют типам данных которые в них хранятся. Данные делятся на простые (simple), составные (complex) и объектные (object).

Простые данные в свою очередь делятся на:

1. логические (Boolean);

2. целые;

3. вещественные;

4. символьные (String);

5. даты и времени (Date).

Сложные или структурированные данные:

1. массивы;

2. записи и файлы.

Самым простым типом данных являются логические данные (Boolean). Они занимают в памяти компьютера всего один байт и могут принимать лишь два возможных значения:

1. 1 или 0;

2. “Да” или “Нет”;

3. “Истина” (“True”) или “Ложь” (“False”).

Такие данные называют булевыми, потому что на них основана алгебра логики – Булева алгебра.

Данные целого типа могут иметь различную длину в байтах:

1. Короткое целое число занимает 1 байт и принимает значения от 0 до 255 b (Byte).

2. Нормальное целое число занимает в памяти 2 байта и имеет диапазон значений от –32768 до 32767 (Integer).

3. Длинное целое число занимает в памяти 4 байта и принимает значения от
–2147483648 до 2147484647 (Long) .

Вещественный тип, также относится к числовым типам данных. Он предназначен для хранения данных, имеющих дробную часть.

1. Число с плавающей запятой (Double) занимает в памяти 8 байт и может хранить числа в интервале от – 1.7976931348623е308 до -4.94065645841247е-324 для отрицательных чисел; от 4.94065645841247е-324 до 1.79769313486232е308 для положительных числе.

2. Небольшие числа с плавающей запятой (Single), занимают в памяти 4 байта и используются для хранения чисел в интервале от -3.402823е38 до -1.401298е-45 для отрицательных значений и от 1.401298е-45 до 3.402823е38 для положительных значений.

Символьный тип данных (String) – средство хранения текстовой информации, представленной в памяти ЭВМ в виде числовых кодов символов. Это означает, что каждый символ текста для хранения в памяти ЭВМ должен быть преобразован в целое число от 0 до 255, а при выводе на экран это число снова преобразуется в алфавитный символ в соответствии с некоторой кодовой таблицей.

Тип данных дата и время (Date) – используется для хранения в памяти ЭВМ даты и времени, занимает 8 байт и имеет ограничения в Visual Basic. Так минимальное значение 1 января 100, а максимальное 31 декабря 9999.

Внешнее представление даты и времени зависит от стандартов, принятых в конкретной конфигурации операционной системы.

Как уже было сказано ранее, помимо простых типов данных существуют еще и составные данные. К ним относятся массивы, записи и файлы, которые состоят из наборов данных простых типов.

Массив – это набор однородных, логически связанных между собой данных, каждый элемент которого определяется порядковым номером. Элементы данных, хранящихся в массиве, не обязательно физически связаны друг с другом; они группируются на логическом уровне.

Массивы делятся на одномерные и многомерные.

Одномерный массив – это массив, любой элемент которого идентифицируется одним номером (индексом).

Многомерный массив – набор однородных элементов, каждый из которых однозначно идентифицируется двумя или более номерами.

Примером двухмерного массива может служить матрица, в которой каждый элемент идентифицируется двумя цифрами.

Для объявления массива в Visual Basic также используют команду DIM, далее имя массива, в круглых скобках размерность массива, после скобок тип данных которые будут хранится в массиве.

DIM sVar (12, 32, 45) as String

Запись – структурированный тип данных, состоящий из данных разнородных типов.

Файл – это поименованная область памяти на внешнем носителе, предназначенная для хранения информации. Файл можно открыть, прочитать, сохранить, закрыть, переименовать, удалить. Доступ к файлу может быть последовательным и прямым. Наглядный аналог папки с файлами в компьютере – полка с книгами в комнате. Тогда любая книга с полки – это файл. Название книги – имя файла. Фамилия автора, название издательства, год издания, количество страниц в книге и тому подобное – атрибуты файла.

Файл (книгу) можно открыть и прочитать… внести изменения… и закрыть, сохранив изменения.

Типичный пример файлов последовательного доступа – файлы, организованные на магнитной ленте. Файлы занимают на ней следующие друг за другом участки. При движении магнитной ленты головка магнитофона считывает или записывает на нее информацию. Чтобы получить доступ к требуемому файлу, нужно перемотать ленту в его начало. Файлы прямого доступа могут быть организованы на дисковых накопителях. Они отличаются тем, что к каждому элементу или блоку элементов можно обратиться непосредственно.

Прямой доступ к файлу осуществляется следующим образом: магнитные головки перемещаются к нужной дорожке, и, по мере вращения диска, соответствующая головка считывает требуемую область файла (сектор диска).

В процессе любых расчетов возможны ошибки, вызванные погрешностями вычислений. При этом с большой уверенностью можно сказать, что абсолютно точно выполняются:

1. сложение целых чисел;

2. вычитание целых чисел;

3. умножение целых чисел.

При этом результат выполнения операций с целым числом не зависит от последовательности действий. Однако уже при операции деления целых чисел возникает ошибка, связанная с округлением (Rounding errors). Это происходит, когда у Visual Basic (или другого транслятора) не хватает разрядной сетки для адекватного представления чисел.

При работе с вещественными числами абсолютная точность, в общем случае, не может быть достигнута, потому что вещественные числа округляются при любой операции. Если вычисления ведутся по сложной формуле, их результат может быть неправильным. Иногда даже последовательность вычислений способна изменить результат. Очень ярко это свойство округления проявляется при вычислении обыкновенных дробей.

Например:

A = 355/788

B = 135/788

C = A + B

D = C * 788

E = (D – 355)/135

В результате вычислений получится 0,99999…, а должно было получится 1.

Еще один тип ошибок, возникающих при выполнении программ с целыми числами, – это ошибки переполнения (overflow). Такая ошибка возникает в том случае, когда результат операции не умещается в отведенной ячейке памяти.

В процессе выполнения циклических расчетов приходится учитывать и то, что ошибки начинают накапливаться, приводя к искажению результата.

2. Алгоритмы решения задач

Каждый из нас ежедневно использует различные алгоритмы: инструкции, правила, рецепты и т.п. Обычно мы это делаем не задумываясь. Например, открывая дверь ключом, никто не размышляет над тем, в какой последовательности выполнять действия. Однако чтобы научить кого-нибудь открывать дверь, придется четко указать и сами действия, и порядок их выполнения. То же потребуется и при указании маршрута поездки.

Давайте сравним эти алгоритмы. На первый взгляд, между ними нет ничего общего. Одно дело – открывать дверь, другое – ехать в гости. Но если приглядеться внимательно, можно заметить существенное сходство между ними. Прежде всего, это строгий порядок выполнения действий.

Алгоритм – последовательность более или менее крупных действий (вытекающих из условия задачи), необходимых для достижения какой-либо цели или решения задачи, поставленной перед исполнителем.

Исполнитель алгоритма — это некоторая абстрактная или реальная (техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом.

Исполнителя характеризуют:

1. среда;

2. элементарные действия;

3. система команд;

4. отказы.

Среда (или обстановка) — это “место обитания” исполнителя.

Система команд. Каждый исполнитель может выполнять команды только из некоторого строго заданного списка — системы команд исполнителя. Для каждой команды должны быть заданы условия применимости (в каких состояниях среды может быть выполнена команда) и описаны результаты выполнения команды.

После вызова команды исполнитель совершает соответствующее элементарное действие.

Отказы исполнителя возникают, если команда вызывается при недопустимом для нее состоянии среды.

В информатике универсальным исполнителем алгоритмов является компьютер.

Алгоритм обладает или должен обладать следующими свойствами:

Понятность для исполнителя — т.е. исполнитель алгоритма должен знать, как его выполнять.

Дискретность (прерывность, раздельность) — т.е. алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов (этапов).

Определенность — т.е. каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.

Результативность (или конечность). Это свойство состоит в том, что алгоритм должен приводить к решению задачи за конечное число шагов.

Массовость. Это возможность применения алгоритма для решения целого класса задач, различающихся только исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.

Существует несколько способов записи алгоритмов. Во-первых, это словесный способ, т.е. на конкретном человеческом языке.

Второй способ записи алгоритмов – составление блок-схем. Он очень распространен, в силу его удобства и понятности.

Блок-схема – это графическое изображение алгоритма в виде определенным образом связанных между собой нескольких типов блоков.

Основные графические элементы блок-схем. Это:

1. Блок входа в программу и выхода из нее;

2. Вычислительный блок;

3. Логический блок для организации разветвления вычислительного процесса;

4. Блок ввода информации;

5. Блок вывода информации на бумажный носитель (печатающее устройство);

6. Блок обращения к подпрограмме;

7. Работа с магнитными дисками;

8. Работа с магнитной лентой;

9. Работа с перфолентой;

10. Работа с перфокартами;

11. Работа с консольным устройством (пишущая машинка, дисплей, телетайп и т.д.);

12. Соединитель, используемый для устранения слишком большого числа пересекающихся линий в блок-схеме или для указания на то, по какой линии следовать, если эта линия должна быть продолжена на другой странице.

Язык блок-схем настолько четок, что исполнитель, получивший блок-схему алгоритма, ни в каких дополнительных разъяснениях не нуждается.

При составлении блок-схем следует руководствоваться правилами:

1. Блок-схема должна развиваться сверху вниз; при необходимости – слева направо.

2. Каждый участок блок-схемы линейного алгоритма должен иметь один вход и один выход; в случае ветвления алгоритма может быть два выхода.

3. В линейном алгоритме выход рисуется точно под входом.

Третьим способом записи алгоритмов является запись на конкретном языке программирования, например на VisualBasic или C++.

В свою очередь алгоритмы любой задачи можно описать, используя три типа управляющих структур:

1. следование;

2. ветвление;

3. цикл.
Вернуться
2.1 Следование

Этот тип управляющей структуры является простым вариантом алгоритма, команды которого выполняются в строгой последовательности одна за другой.
Вернуться
2.2 Ветвление

В жизни часто приходится принимать решения в зависимости от сложившейся ситуации. Если идет дождь, мы надеваем плащ; если жарко и солнечно, идем в легкой одежде. Встречаются и более сложные положения, когда нужно сделать тот или иной выбор в зависимости от того, выполняется или не выполняется некоторое условие.

Поэтому при составлении алгоритмов, в которых требуется выбрать одно из направлений, используются управляющие структуры типа ветвление.

На языке блок-схем ветвление выглядит следующим образом:

В случае с Visual Basic используется один из четырех вариантов ветвления:

1. если-то;

2. если-то-иначе ;

3. выбор;

4. выбор-иначе .
Вернуться
2.2.1 Если-то

Конструкция если-то является самым просты вариантом ветвления и описывает часть программного кода, который будет выполнен, только если проверяемое этим оператором условие истинно.

Существует два варианта записи ветвления типа если-то, первый вариант используется, если надо выполнить только один короткий оператор (команду), а второй вариант, в случае если при выполнении условия необходимо выполнить группу операторов.

1.) IF {логическое выражение} THEN оператор выполняемый если логическое выражение имеет значение «истина»

ПРИМЕР:

IF C<>0 THEN A=B/C

2.) IF {логическое выражение} THEN

ENDIF

ПРИМЕР:

IF C<>0 THEN

A=B/C

PRINT A

ENDIF
Вернуться
2.2.2 Если-то-иначе

Часто возникает необходимость в выполнении определенных действий как в случае, если значение логического выражения является «истиной», так и в случае, когда его значение является «ложью». Для этого служит ветвление типа если-то-иначе .

IF {логическое выражение} THEN

ELSE

ENDIF

Существует еще один вариант записи ветвления если-то-иначе . Он используется, если требуется проверить несколько условий.

IF {логическое выражение – 1} THEN

ELSEIF {логическое выражение – 2} THEN

ELSE

ENDIF

ПРИМЕР:

IF A>100 THEN

PRINT “A больше 100”

ELSEIF А<10 THEN

PRINT “A меньше 10”

ELSE

PRINT “A больше 10 и меньше 100”

ENDIF
Вернуться
2.2.3 Выбор, выбор-иначе

В случае , если необходимо выполнить целую цепочку условных проверок одного параметра, то удобнее и более наглядно использовать условие выбора.

Записывается условие выбора следующим образом:

SELECT CASE {анализируемое выражение}

CASE {список значения – 1 }

блок операторов – 1

CASE {список значения – 2 }

блок операторов – 2

CASE ELSE

блок операторов – n

END SELECT

Анализируемое выражение – это выражение, значение которого определяет выбор одной из CASE – строк. Если одно из условии обозначенных словом CASE принимает значение «истина», то выполняется соответствующий блок операторов следующий после этого условия, а управление после этого передается на первый оператор, сразу следующий за ключевыми словами END SELECT (конец выбора).

Если все тестовые условия оказались ложными, то выполняется блок операторов, расположенный после ключевых слов CASE ELSE . Если этот оператор не указать, то ни один из операторов выполнен не будет.

Анализируемое выражение можно записать любым допустимым в Visual Basic выражением, например stVar .

Список значений можно задать несколькими способами, например с помощью символов <, >, <>, >= и т .д ; в виде интервала {Начальное значение} TO {Конечное значение} или простым перечислением: Значение1 , Значение2, Значение3.

Пример:

Dim MyAge as Integer

MyAge = 16

Select Case MyAge

Case Is <18

MsgBox “Надежды юношей питают”

Case 18

MsgBox “В начале славных лет”

Case 19 To 25

MsgBox “ Буря и натиск”

Case 30, 40, 50, 60, 70

MsgBox “ С юбилеем”

Case Else

MsgBox “Заслуженный отдых”

End Select
Вернуться
2.3 Цикл

Часто в жизни встречаются инструкции, в которых требуется один и тот же набор действий выполнять много раз подряд: “Иди, пока не придешь”, “Закручивай гайку, пока не завернешь до отказа” и так далее. Используя только ветвление, такие алгоритмы записать можно, но запись получится очень сложной. Поэтому для описания повторяющихся процессоы нужна новая форма организации действий – цикл.

Существуют три основных типа циклов – Пока, До и Д ля. Отличие первых двух циклов состоит в том, что в них количество повторений заранее неизвестно, а в цикле Д ля число повторений заранее определено. В первом случае, если препятствие никогда не встретится, движение будет продолжаться бесконечно долго. Такие явления при выполнении алгоритмов называются “зацикливанием”.
Вернуться
2.3.1 Цикл Для

Цикл Для позволяет многократно (заданное число раз) выполнять определенную группу операторов.

Форма оператора цикла записывается следующим образом:

FOR {переменная-счетчик} = {выражение-1} TO {выражение-2} STEP {выражение-3}

блок операторов

NEXT {переменная-счетчик}

На языке блок-схем конструкция цикла Д ля будет иметь следующий вид:

Телом цикла называются команды, многократно повторяемые в процессе выполнения цикла.

Принцип работы этого оператора заключается в следующем: сначала переменная счетчик получает значение, равное значению выражения-1. Если ее значение не равно значению выражения-2, то выполняется блок операторов до ключевого слова NEXT , а затем значение переменной счетчика меняется на величину приращения, равного значению выражения-3 (шаг цикла), вновь производится проверка счетчика и т.д.

Шаг приращения может принимать как положительные, так и отрицательные значения. Если значение шага отрицательное, то значение выражения-2 должно быть меньше значения выражения-1. Если ключевое слово STEP опущено, то величина приращения считается равной 1.

Пример:

DIM A as INTEGER

FOR I=2 TO 100 STEP 2

A = A + I

NEXT I

В ходе выполнения этого цикла в переменной А будет сохранена сумма всех четных чисел от 2 до 100.
Вернуться
2.3.2 Цикл Пока

Цикл Д ля позволяет выполнять блок операторов заданное количество раз, но чаще всего заранее не известно число повторений – оно как раз и определяется внутри блока многократно повторяемых операторов. Поэтому для таких случаев лучше использовать цикл Пока или цикл До.

Форма оператора цикла записывается следующим образом:

DO WHILE {логическое – выражение}

{блок операторов}

LOOP

Или

DO UNTIL {логическое – выражение}

{блок операторов}

LOOP

На языке блок-схем конструкция цикла П ока будет иметь следующий вид:

Перед выполнением цикла происходит присваивание начальных значений переменным, меняющимся в ходе его выполнения. Собственно выполнение цикла П ока начинается с проверки условия его окончания. Поэтому такую разновидность цикла называют еще циклом с предусловием. Переход к выполнению тела цикла, включающего в себя Блок операторов и Изменение значений аргументов, осуществляется только в том случае, если условие выполняется. В противном случае происходит выход из цикла. В частности, может оказаться, что тело цикла не будет выполнено ни разу (если с самого начала условие не выполняется). С другой стороны, для того чтобы цикл не повторялся бесконечно, необходимо в теле цикла осуществлять действия, приводящие к ситуации, когда условие перестанет быть истинным. Этой цели и служит блок изменения значений аргументов.

Блок операторов будет выполнятся до тех пор, пока значение логического выражения истинно (если используется ключевое слово WHILE ) или пока оно ложно (если используется ключевое слово UNTIL ).

Например:

DIM A as INTEGER

A = 0

DO WHILE A < 50

A = A + 1

PRINT A

LOOP

при выполнении этого цикла будут выведены цифры от 1 до 49, точно такого эффекта можно достичь с помощью другого цикла.

DIM A as INTEGER

A = 0

DO UNTIL A > 50

A = A + 1

PRINT A

LOOP
Вернуться
2.3.3 Цикл До

Иногда возникает необходимость выполнить блок операторов хотя бы один раз перед первой проверкой условия, определяющего повторения цикла. Для этих случаев используется Цикл Д о.

Форма оператора цикла записывается следующим образом:

DO

блок операторов

LOOP WHILE {логическое – выражение}

Или

DO

блок операторов

LOOP UNTIL {логическое – выражение}

На языке блок-схем конструкция цикла Д о будет иметь следующий вид:

Принцип действия цикла Д о приблизительно тот – же, что и у цикла Пока, единственное различие заключается в том, что первая проверка условия выполняется после того, как цикл был выполнен один раз.

Пример:

DIM A as INTEGER

A = 0

DO

A = A + 1

PRINT A

LOOP UNTIL A < 50

при выполнении этого цикла будет выведена цифра 1, далее повторения цикла не произойдет, т.к. значение А < 50.
Вернуться
2.4 Прерывание цикла

Иногда при выполнении цикла возникает необходимость преждевременно закончить цикл. Для этих целей используются операторы прерывания цикла.

Они записываются следующим образом:

EXIT DO

или

EXIT FOR

в зависимости от того, выполнение какого оператора прерывается.

Пример:

DIM A as INTEGER

DIM C as INTEGER

A = 0

C = 25

DO WHILE A < 50

IF A = C THEN EXIT DO

A = A + 1

LOOP

или

DIM A as INTEGER

A = 2

FOR I=2 TO 100 STEP 2

A = A + I

IF A = I THEN EXIT FOR

NEXT I
3. Применение вычислительной математики для решения практических задач.
3.1 Поиск минимального (максимального) элемента массива.

Прежде чем перейти к рассмотрению метода определения минимального (максимального) элемента массива, вспомним определение массива.

Массив – это набор однородных данных, каждый элемент которого определяется порядковым номером.

Сформулируем задачу: Требуется из N числа элементов массива найти наименьший (наибольший) элемент массива.

Рассмотрим, как выполняется соответствующий алгоритм.

Первый этап:

Выделим в памяти компьютера ячейку MIN ( MAX ), записав в нее значение первого элемента массива. Этим мы как бы предполагаем, что первый элемент будет максимальным в случае поиска максимума и минимальным в случае поиска минимума. В процессе выполнения цикла эти значения могут меняться.

Второй этап:

Возьмем один элемент массива A (число Ai ) и сравним число А i с условным минимумом MIN (максимумом MAX).

Третий этап:

Если значение элемента массива А i окажется меньше, в случае поиска наименьшего элемента массива, то ячейке MIN будет присвоено значение Ai .

Четвертый этап:

Теперь осталось сравнить таким же образом со значениями MIN (MAX) все элементы массива. Это достигается последовательным перебором элементов.

На языке блок схем алгоритм поиска наименьшего элемента массива будет выглядеть следующим образом.
Вернуться
3.2 Сортировка одномерного массива.

Необходимость сортировки информации возникают на каждом шагу. Например, задачу сортировки решают стандартные программы-проводники, упорядочивая списки файлов по имени, размеру, типу или времени изменения.

Сортировка – это процесс упорядочивания информации по определенному признаку.

На практике представляют интерес методы сортировки, которые позволяют экономно использовать оперативную память компьютера при упорядочивании больших массивов и в то же время быстро достигать конечного результата.

В настоящее время существует несколько оптимальных методов сортировки информации:

1. метод выбора;

2. метод вставки;

3. метод обмена (иначе называемый методом пузырька);

4. метод Шелла;

5. метод Хора.
Вернуться
3.2.1 Метод выбора

Метод выбора основан на изученном нами ранее методе нахождения минимального элемента массива. В самом деле, после того, как мы нашли минимальный элементы, мы точно знаем, что именно он будет последним элементом отсортированного массива.

Остается только поменять полученное значение минимума со значением в первой ячейке. Происходит последовательное сравнение ячейки минимума со всеми элементами массива, а затем ячейки меняются местами. В результате первым становится наименьший элемент.

Поскольку наименьший элемент мы уже нашли, то следующим после него должен встать наименьший элемент из оставшихся . Процесс повторяется, но уже с массивом из ( n – 1) элементов.

Повторяя процесс, необходимое число раз, мы полностью отсортируем массив по возрастанию.

Данный алгоритм можно использовать для сортировки как числовой, так и текстовой информации. В этом случае сортировка кодов символов, из которых состоят текстовые строки, по возрастанию соответствует сортировке самих текстовых строк по алфавиту.

На языке блок-схем алгоритм сортировки методом выбора (по возрастанию) будет выглядеть следующим образом:
Вернуться
3.2.2 Метод обмена (метод пузырька)

Как было сказано ранее, кроме рассмотренного метода выбора, существуют и многие другие способы сортировки массива. Они различаются алгоритмической сложностью, затратами вычислительных мощностей и скоростью работы. Поэтому стоит заметить, что использование различных алгоритмов зависит, в первую очередь от такого параметра, как “разреженность” массива.

“Разреженный” массив – это массив, большинство элементов которого равны между собой, и лишь немногие имеют различные значения.

Метод выбора лучше всего работает с разреженными массивами, это вызвано тем, что при сортировке сильно разреженных массивов в основном выполняется операция сравнения требующая меньше вычислительных затрат, чем операция перестановки.

В случае, когда элементы массива сильно перемешаны, оптимальным является использование метода обмена (метод пузырька).

Сортировка методом пузырька начинается со сравнения 1-го и 2-го элементов массива. Если элементы расположены не по порядку, то они меняются местами. Этот процесс повторяется со 2-м и 3-м, 3-м и 4-м и т.д. элементами, пока все пары элементов не будут обработаны. За один такой “проход” самый большой элемент массива встанет на старшее место. Далее алгоритм повторяется. Если на очередном “проходе” перестановок не было, то алгоритм свою работу закончил.

На языке блок схем алгоритм сортировки методом обмена будет выглядеть следующим образом:

4. Объектно-ориентированная разработка приложений

В этом разделе мы рассмотрим процесс разработки программ управляемых событиями ( event – driven ) и концепцию объектно-ориентированной разработки ( object – oriented development ). Знание этих концепций очень важно для правильного использования принципов объектно-ориентированного программирования.

Графический интерфейс пользователя ( GUI , Graphical User Interface ) – набор элементов управления, с которым взаимодействует пользователь, управляя ходом работы программы.

Например, рассмотрим ситуацию, при которой приложение производит какую-нибудь долго выполняющуюся операцию (например, сортировку). Если разработчик забудет при составлении программы указать необходимость смены курсора мыши на песочные часы, пользователь может подумать, что машина «зависла», и, возможно даже попытается перезагрузить машину. Еще один пример: если программист не сделает кнопку «Сортировка» недоступной во время сортировки, то пользователь сможет нечаянно запустить второй процесс сортировки, что приведет к нежелательным последствиям.

Основную задачу, которую приходится решать разработчику в случае объектно-ориентированного программирования, это к какому событию привязать тот или иной программный код. В большинстве случаев принятие правильного решения является больше искусством, нежели наукой.

Другим аспектом, обеспечивающим успешную работу программы, является знание событий, актуальных для различных объектов. Важно точно знать, какое событие следует за каким . Поэтому концепция объектно-ориентированного программирования принципиально отличается от стиля программирования событийно-управляемого. Цель объектно-ориентированного программирования – максимально использовать ранее написанный код, а также обеспечить наиболее высокую надежность программы.
Вернуться
4.1 Принципы объектно-ориентированной разработки приложений

Объекты ( Object ) – понятие, заключающее в себе одновременно данные и модель их поведения.

В данном случае данные не обязательно означают запись в базе данных. Это могут быть переменные, в которых хранятся, например, размеры окна и другие параметры соответствующего объекта. Под «моделью их поведения» понимается то, как объект себя проявляет. Как он выглядит (если у объекта есть графическое представление), а также его свойства ( properties ) и методы ( methods ).

У каждого объекта есть свойства, методы и события.

Свойства – параметры объекта, его характеристики. Например, Caption (Заголовок), Visible (Видимый).

Метод – действия, которые может выполнить объект, службы, предоставляемые объектом. Например, Show (Показать), Retrieve (Отыскать)

События – то, что может случиться с объектом. Например, Click (Щелчок мыши), Scroll (Прокрутка).

Свойства, методы, события образуют интерфейс объекта.

Интерфейс ( Interface ) – механизм, с помощью которого происходит взаимодействие с объектом.

Условно интерфейс делится на две категории:

Открытый ( Public ). Свойства, методы, события, доступные пользователям объекта. Например, событие Click элемента управления CommandButton .

Закрытый ( Private ). Свойства, методы, события, недоступные пользователям объекта. Например, переменная, объявленная с описателем Private в модуле класса.

Свойства объекта соответствуют данным, хранящимся в объекте, а методы и события определяют модель поведения объекта.

Классом ( class ) называется определение ( definition ) объекта. Возьмем, например, кота. Он является объектом класса «кот». Открыв словарь и найдя определение слову кот, мы узнаем, что у него есть четыре лапы, он покрыт шерстью и ловит мышей. Но в словаре мы не найдем настоящего, живого кота. Там есть всего лишь описание, того, что такое кот. Процесс моделирования объектов реального мира называется абстрагированием ( abstraction ). Создавая в объектно-ориентированном языке класс, мы создаем лишь абстракцию объекта реального мира.

В качестве примера класса рассмотрим объект формы Form . У этого объекта есть ряд свойств, например Visible и Caption . Создавая форму в среде разработки и настраивая ее, т.е. изменяя значение свойств и добавляя элементы управления , мы создаем подкласс ( subclass ) – новый класс, производный от базового класса. Когда приложение вызывает метод Show нашей формы, происходит создание экземпляра класса, то есть создается объект данного класса.

Объектно-ориентированное программирование базируется на трех принципах:

· повторном или многократном использовании ( reuse );

· инкапсуляции ( encapsulation );

· полиморфизме ( polymorphism ).

Многократным использованием называется повторное использование уже созданной части кода в других проектах.

Посредством многократного использования формируются связи между объектами, а для выражения процесса используют понятия о родителях и потомках. В программировании моделируется связь “это – является” или ” это – имеет”. Многократное использование служит для сокращения избыточности кода, и суть его заключается в том, что уже существующий интерфейс вместе с его программной частично можно использовать для других объектов. При наследовании могут также проводиться изменения интерфейсов.

Инкапсуляция – процесс сокрытия атрибутов от пользователей.

Объекты позволяют значительно упростить разработку приложения. В очень редких случаях разработчика интересует внутренняя реализация объектов. Главное, чтобы объект обеспечивал функции, которые он должен предоставить. Поэтому объекты защищены от внешнего вмешательства, то есть инкапсулированы. Например, если вы хотите снять деньги со счета через банкомат, то без карточки это невозможно, так как его содержимое защищено от доступа случайного клиента. Денежные автоматы защищены – инкапсулированы. На процессы, протекающие внутри банкомата, и на его содержимое клиент не имеет прямого влияния.

Взаимодействие клиента с объектом происходит через интерфейс. Обычно интерфейс определяет единственный способ входа в объект и выхода из него, детали реализации остаются инкапсулированными.

При создании собственных объектов необходимо организовать такие же интерфейсы. В объектах Visual Basic интерфейсами являются свойства, методы и события. Только они предоставляются данным объектом в распоряжение других объектов. Благодаря этому система программирования предотвращает доступ других объектов (клиентов) к внутренним переменным состояния объекта, которые могут обрабатываться только предусмотренными для этого процедурами.

Это имеет большое значение при сопровождении программы. Если в связи с изменившимися обстоятельствами потребуется изменить реализацию интерфейса объекта, то изменение ограничится только процедурой, относящейся к свойству или методу. Если синтаксис интерфейса не изменился, то можно с уверенностью сказать, что изменение не отразится на других проектах, использующих этот объект. В противном случае при попытке использовать переменную, которая не существует в новом варианте объекта, в других проектах может возникнуть ошибка.

Инкапсуляция поддерживает абстрагирование тем, что объект можно использовать, не зная, как он реализован внутри. Если программист поддерживает определенный интерфейс, то инкапсуляцию можно обеспечить и при процедурном построении программы. В объектно-ориентированных языках реализация инкапсуляции обеспечивается системой программирования.

Полиморфизм означает, что различные объекты используют одинаковую абстракцию, т.е. могут обладать свойствами и методами с одинаковыми именами. Однако обращение к ним будет вызывать различную реакцию для различных объектов. Большое достоинство полиморфизма состоит в том, что при использовании объекта можно вызывать определенное свойство или метод, не заботясь о том, как объект выполняет задачу. Это очень важно при модификации программного обеспечения. Изменения или новшества просто адаптируются к имеющимся компонентам приложения.
Вернуться
4.2 Практическое рассмотрение Visual Basic

Создание Windows приложений в Visual Basic невозможно без использования элементов управления, так как они позволяют пользователю взаимодействовать с этими приложениями. Набор таких элементов управления не ограничен и может расширяться за счет так называемых пользовательских элементов управления ( custom controls ).

Главное, что нужно помнить при работе с элементами управления, это то, что к ним можно обращаться как к переменной, присваивая значения определенным свойствам или считывая их.

Свойства определяют внешний вид и функционирование элемента управления. Например, если требуется установить новый заголовок окна, то следует изменить свойство Caption . Для этого необходимо свойству Caption , элемента Form 1 присвоить новое значение.

Внимание: имя элемента и свойство разделяются точкой.

Form 1. Caption = “Новый заголовок”

Проект обычно состоит из нескольких форм, каждая из которых может содержать элементы управления с одинаковым именем. Поэтому синтаксис обращения к свойствам следует несколько расширить:

[Форма]. Control.Свойство = Значение

Имя формы указывать не обязательно, если обращаются к элементу управления, принадлежащему этой форме.

Значения свойств элементов управления считываются аналогичным образом. Каждое свойство является как бы внутренней переменной элемента управления, значение которой можно не только установить, но и считать. Поэтому, чтобы узнать, например, текст на кнопке, достаточно записать:

NAME = Co mma nand1.Caption

В этом примере переменная NAME после присваивания содержит текст надписи на кнопке. В общем случае значение свойства считывается следующим образом:

Переменная = [Форма]. Объект .С войство

Разобравшись с заданием и считыванием свойств, давайте рассмотрим основные свойства элементов управления.
Вернуться
4.2.1 Позиция элемента

Позицию элемента управления определяют четыре свойства: Left , Top , Height и Width . Эти значения по умолчанию используют в качестве единицы измерения твип ( twip ). Твип — это экранно-независимая единица измерения, равная 1/20 точки принтера и гарантирующая независимость отображения элементов приложения от разрешения дисплея.

Свойства Тор и Left задают координаты верхнего левого угла элемента управления, свойства Height и Width — его высоту и ширину. Отсчет в системе координат ведется сверху вниз (Y) и слева направо (X).
Вернуться
4.2.2 Цвет

Управление цветовым оформлением элементов осуществляется с помощью свойств BackColor , FillColor и ForeColor , которым по умолчанию назначаются стандартные цвета Windows .

Свойство BackColor

Цвет фона устанавливается с помощью свойства BackColor . При проектировании цвет выбирают в диалоговом окне настройки цвета, а во время работы приложения цвета задаются либо с использованием цветовой схемы RGB, либо константами библиотеки VBRUN.

Например: выполнение команды:

Form1.BackColor = &H80&

приведет к окрашиванию окна Form 1 в красный цвет.

Свойства ForeColor , FillColor

С помощью свойства ForeColor можно определить или установить цвет, используемый для отображения текста и графики в элементе управления, а с помощью свойства FillColor — установить цвет заполнения так называемых shapes (рисованных объектов).
Вернуться
4.2.3 Формат шрифта

Вид шрифта в элементах управления выбирается путем установки значений свойства Font .

Также для работы со шрифтом служат следующие свойства:

FontBold – делает надпись полужирной

FontItalic – надпись курсивом,

FontSize – размер шрифта,

FontStrikethru – перечеркивание,

FontUnderline – подчеркивание,

FontName – наименование шрифта.

Эти свойства используются следующим образом:

Имя_элемента .Н азвание_свойства = Значение

Caption 1. FontItalic = True

Caption 1. FontSize = 12
Вернуться
4.3 Свойства доступности и видимости

Иногда, при функционировании приложения требуется сделать невидимыми или недоступными некоторые элементы, для этого служат свойства Enabled и Visible .

Enabled

Свойство Enabled определяет, будет ли элемент управления реагировать на событие или нет. Если значение свойства равно False , то элемент управления будет недоступен и пользователь не сможет его использовать. Обычно при этом элемент подсвечивается серым цветом, так же, как элементы меню, которые нельзя выбрать.

Например:

Command 1. Enabled = False

Visible

Свойство Visible , позволяет сделать элемент управления невидимым, если его значение равно False .

Например:

Command 1. Visible = False

Свойства внешнего оформления

Appearance – это свойство отвечает за визуальное отображение элемента, будет ли он объемным или плоским.

Например :

Command1.Appearance = 0 ( плоский )

Command1.Appearance = 1 ( объемный )

ToolTipText

ToolTipText – позволяет задать всплывающую подсказку. Например:

Command1.ToolTipText = “Это кнопка”
Вернуться
4.4 Основные события

Как уже было сказано ранее Visual Basic событийно управляемый язык разработки, т.е. любой программный код привязывается к какому-либо событию.

Все события делятся на следующие группы:

· события, управляемые мышью;

· события клавиатуры;

· события окна.
Вернуться
4.4.1 События, управляемые мышью

Событие Click

Событие Click вызывается, как только пользователь выполнит щелчок на элементе управления.

Событие DblClick

Событие DblClick вызывается двойным щелчком по элементу управления.

Событие MouseDown

Событие MouseDown вызывается при нажатии кнопки мыши. При этом процедуре обработки передается несколько параметров.

Private Sub Form_ MouseDown ( Button As Integer, Shift As Integer, X As Single, Y As Single)

End Sub

Передаваемые параметры определяют состояние кнопок мыши.

Button – определяет нажатую кнопку мыши (1 – левая, 2 – правая, 4 – средняя);

Shift – определяет нажатую командную клавишу (0 – ничего, 1 – Shift , 2 – Ctrl , 4 – Alt );

Параметры Х и Y определяют позицию курсора мыши на экране относительно верхней левой точки элемента управления.

Событие Mouse Up

Событие Mouse Up вызывается при отпускании кнопки мыши, при этом также как и в случае с событием MouseDown передаются те же самые параметры.

Событие Mouse Move

Это событие вызывается когда, пользователь передвигает курсор мыши.
Вернуться
4.4.2 События, управляемые клавиатурой

Подобно событиям, связанным с мышью, есть также события, связанные с клавиатурой: KeyPress , KeyUp и KeyDown . Обычно событие вызывается для активного элемента управления. Если свойству формы KeyPreview присвоить значение True , то событие, связанное с клавиатурой, передается сначала форме, а затем текущему элементу управления.

Событие KeyPress

Событие KeyPress возвращает код ASCII нажатой клавиши. При этом не перехватываются специальные клавиши, такие как [ PrintScreen ] или [ Alt ], а только [ Enter ], [ Esc ] и [ Backspace ]. Процедура передает параметр KeyASC II , содержащий код ASCII нажатой клавиши. Этот параметр передается как значение, т.е. его можно изменять. Это можно использовать, например, для фильтрации вводимых пользователем символов – если символ недопустимый, то установив значение Ке yASC II равным нулю, вы предотвратите его передачу для дальнейшей обработки (отображение и т.п.).

Private Sub Form_ KeyPress ( KeyAscii As Integer)

End Sub

События KeyDown , Key Up

Эти события вызываются при нажатии KeyDown или отпускании KeyUp клавиши. Они происходят даже при нажатии специальных клавиш управления, например функциональных клавиш. При этом передаются два параметра: KeyCode и Shift . Параметр KeyCode содержит клавиатурный код (а не ASCII) нажатой клавиши.

После нажатия клавиши события наступают в такой последовательности: KeyDown , KeyPress и KeyUp .
Вернуться
4.4.3 Событие, получение фокуса

Фокус – это одно из важных понятий при обращении к элементам управления в Windows . Как уже упоминалось, система Windows решает, какому приложению передавать нажатие клавиши, управление получает активный элемент, т.е. элемент, имеющий фокус. Если элемент получает фокус, то это соответствующим образом отображается на экране, текстовое поле отображается с мерцающим маркером ввода, командная кнопка выделяется пунктирной рамкой вокруг надписи.

События LostFocus , GotFocus

Visual Basic позволяет обрабатывать два события, связанных с передачей фокуса: LostFocus и GotFocus .

Если перейти от одного элемента управления к другому, то для предыдущего элемента вызывается событие LostFocus , а для нового – GotFocus .
Вернуться
4.5 Основные элементы Visual Basic
4.5.1 Форма

Основным элементом VB является форма. Форма дает возможность сообщаться с “внешним миром”, т.е. с пользователем, и поэтому стоит познакомиться с ней поближе. Как уже говорилось, каждая форма сохраняется в проекте в виде отдельного файла.

Этот файл содержит описание рабочей среды и код, относящийся к элементам управления и форме. Формы сохраняются как обычные текстовые файлы.

Кроме стандартных свойств, таких как Caption , BackColor , Font и т.д., формы имеют и свои собственные свойства, присущие только им. Эти свойства рассматриваются ниже. Для просмотра свойств формы в окне свойств нужно либо щелкнуть в пустом месте формы (но не в строке заголовка), либо выбрать форму из списка объектов в окне свойств.

Свойство BorderStyle

Стандартное окно имеет рамку ( Border ). С ее помощью пользователь может изменять размеры окна. Для этого в системном меню имеется соответствующая команда. Вид рамки можно изменить с помощью свойства BorderStyle , которое может принимать одно из следующих значении :

0 – Окно без рамки. Размер окна изменяться не может. Нет строки заголовка. Окно не может перемещаться. Минимизация и максимизация окна также невозможны.

1 – Фиксированная рамка. Есть заголовок, кнопки минимизации и максимизации, но размер окна изменяться не может.

2 – Значение по умолчанию. Возможны все изменения размера окна.

3 – Окно окаймляется толстой рамкой. Изменения размера невозможны. Нет кнопок минимизации и максимизации. Минимизировать и максимизировать можно только из

системного меню.

4 – Поведение такое же, как и при значении 1, но в Windows 95 строка заголовка более узкая и имеет меньший шрифт. Эта форма не отображается на панели задач Windows 95.

5 – Поведение такое же, как и при 2, но строка заголовка более узкая и имеет меньший шрифт. Эта форма также не отображается на панели задач Windows 95.

С помощью рамки можно изменять не только внешний вид окна, но и его размеры. А это важно, так как содержимое окна не подгоняется автоматически к его измененному размеру. Это может привести к тому, что элемент управления после изменения размера будет находиться вне видимой области и поэтому “забудется”. Не включится также и полоса прокрутки.

Свойство ControlBox

Свойство ControlBox определяет, отображается ли системное меню, с помощью которого пользователь может выйти из программы ([Alt+F4]). Если же системное меню удаляется, пользователю следует обеспечить другой способ выхода из программы.

Свойство MaxButton

Кнопкой максимизации пользователь может увеличить окно до размера экрана. Ее наличие определяется свойством MaxButton формы. Если присвоить этому свойству значение False , то соответствующая кнопка будет отсутствовать, а команда Maximize (Развернуть) удаляется из системного меню.

Свойство MinButton

Если для свойства MinButton задать значение False , то кнопка затемняется, а из системного меню удаляется строка Minimize (Свернуть).

Основные события формы

Событие Load

Это событие происходит при загрузке формы в память компьютера. Поэтому это событие используется для инициализации переменных принадлежащих форме.

Событие Unload

Unload вызывается когда форма выгружается из памяти.

Событие Resize

Это событие возникает при любом изменение размеров формы. Его удобно использовать для определения положения элементов на форме в случае изменения размеров окна.
Вернуться
4.5.2 Стандартные элементы управления

Кнопка ( CommandButton )

Назначение

Этот элемент используется для того, чтобы начать, прервать или закончить какой либо процесс. Кнопка встречается во всех приложениях Windows .

События

Основным событием для кнопки является Click . Кроме этого события, у кнопки могут быть и другие, но они применяются редко. Для вызова события Click имеются разные способы. Самый простой — непосредственный щелчок на кнопке мышью. Это же событие вызывается также, если с помощью клавиши [ Tab ] переместить фокус на кнопку, а затем нажать клавишу [ Enter ]. Можно программно вызвать событие Click , установив равным True значение свойства Value , доступного только во время выполнения.

Свойства

Существуют два свойства кнопки, связанных с событием Click .

Свойство Default определяет, что данная кнопка является кнопкой, активной по умолчанию. Если это свойство равно True , то нажатием клавиши [ Enter ] автоматически генерируется событие Click этой кнопки независимо от того, какой элемент имеет фокус. Присваивать значение True этому свойству можно только для одной кнопки в форме. Следует учитывать, что в этом случае нажатие клавиши [ Enter ] перехватывается и передается этой кнопке. Обычно кнопкой по умолчанию является кнопка ОК.

Свойство Cancel используется подобно Default . Оно обеспечивает перехват клавиши [ Esc ] и вызов события Click для соответствующей кнопки. Обычно это свойство имеют кнопки Cancel (Отмена).

Надпись ( Label )

Надпись ( Label ) предназначена для отображения текста, который пользователь не может изменить с клавиатуры.

События

Хотя некоторые события этого элемента управления можно обрабатывать, обычно эта возможность не используется.

Свойства

Самым важным свойством надписи является Caption , содержащее отображаемый текст. Воспользовавшись свойством BorderStyle , можно установить способ отображения текста (с рамкой или без нее). Оформлять текст можно, используя все возможности форматирования текста, доступные в окне свойств. Если те кст дл иннее, чем поле надписи, то оставшаяся часть текста просто не отображается (усекается). Этого можно избежать, если присвоить значение True свойству AutoSize , что приводит размер надписи в соответствие с длиной текста. Таким же образом можно корректировать размер надписи и по вертикали. Для этого одновременно со свойством AutoSize нужно установить свойство Wordwrap . Тогда слова, не помещающиеся в строке, автоматически будут переноситься в следующую строку.

Установка в тексте надписи перед любой буквой символа амперсанд (&) позволяет определить для выбора объекта клавишу быстрого доступа Т ак как надпись не может получать фокус, она передает его следующему элементу управления. Если амперсанд просто должен появляться в тексте без дальнейшего действия, следует отключить свойство UseMnemonic .

Текстовое поле ( TextBox )

Назначение

Текстовое поле ( TextBox ) является основным элементом управления, предназначенным для ввода данных.

События

При использовании текстового поля представляют интерес несколько событий. Прежде всего, это событие Change , которое вызывается при изменении содержимого текстового поля. Это событие происходит каждый раз при вводе, удалении или изменении символа. Например, при вводе в текстовое поле слова ” Hello ” событие Change вызывается пять раз – по одному разу для каждой буквы.

Для анализа введенного в поле текста лучше всего подходит событие LostFocus Э то событие вызывается после того, как текстовое поле становится неактивным (после передачи фокуса другому элементу, т.е. когда пользователь закончит ввод). Однако если это поле является единственным элементом управления в форме, оно не может потерять фокус.

Чтобы удалить или инициализировать содержимое текстового окна, используется событие GotFocus . Оно вызывается, когда пользователь “входит” в текстовое окно.

Свойства

Самым важным свойством является свойство Text . Это свойство содержит отображаемый в поле текст.

Private Sub txtInput_ LostFocus ()

strText $ = txtInput.Text

EndSub

В данном примере при возникновении события LostFocus переменной strText присваивается значение txtInput.Text , т.е. текст поля.

Элементы управления, которые разрешают ввод символов, имеют свойство Text , а элементы, предназначенные только для отображения текста, — свойство Caption . Текстовое поле подобно маленькому редактору. Чтобы использовать его в таком качестве, достаточно установить свойство MultiLine . Это дает возможность вводить в поле несколько строк.

В многострочном поле для перехода на новую строку можно использовать клавишу [ Enter ]. Но при этом следует помнить, что для некоторой кнопки, возможно, установлено свойство Default . Поэтому нажатие клавиши [ Enter ] вызовет срабатывание этой кнопки. В таком случае для перехода на новую строку надежнее использовать комбинацию клавиш [ Ctrl+Enter ] или [ Shift+Enter ].

Флажок ( CheckBox )

Назначение

Флажки ( CheckBox ) – это элементы управления, которые можно отмечать (ставить “галочку”), выбирая из ряда опций одну или несколько. CheckBox может иметь два различных состояния – отмеченное и не отмеченное.

Собственно, он может иметь и третье состояние. В этом случае элемент управления отображается как отмеченный, но недоступный. Установить такое состояние элемента управления можно только программно.

События

Важнейшим для флажка, как и для кнопки, является событие Click .

Свойства

Единственным важным свойством элемента управления CheckBox является его значение ( Value ). В зависимости от того, отмечен флажок или нет. Value может принимать следующие значения:

0 – Не отмечен

1 – Отмечен

2 – Отмечен, но недоступен

Переключатель ( OptionButton )

Назначение

Этот элемент управления, представляющий собой кружок с точкой или без, предназначен для установки только одной опции из группы. Обычно все переключатели формы объединены в одну группу. Если вы желаете сформировать новую группу переключателей, то нужно поместить их в отдельный элемент контейнер, например Frame .

События

Так же, как и для элемента управления CheckBox , для переключателей важно только одно событие – Click .

Свойства

Важнейшим свойством переключателей является свойство Value . С его помощью можно определить состояние переключателя. Это свойство может принимать значения True и False .

Список ( ListBox )

Назначение

Список ListBox – позволяет пользователю выбирать из списка один или несколько элементов. В любое время в список можно добавлять новые элементы или удалять существующие. Если не все элементы могут одновременно отобразиться в поле списка, то в нем автоматически отображаются полосы прокрутки.

События

Основное событие списка – Click . Это событие вызывается, если пользователь с помощью мыши или клавиш управления курсором выбирает элемент в списке.

Методы

Окно списка – это первый из рассмотренных нами элементов управления, для которых важную роль играют методы. Методы списка необходимы для обработки элементов списка – добавления или удаления.

Для добавления новых элементов используется метод Addltem :

ListBox.Addltem “Элемент” , Индекс

Параметр Элемент задает добавляемый элемент списка. С помощью параметра Индекс указывается место вставки в список нового элемента. Данный метод должен вызываться при вставке каждого элемента. Как правило, заполнение списка выполняется при загрузке формы.

Для удаления элемента из списка используется метод RemoveItem , которому в качестве параметра передается Индекс удаляемого элемента. Индексация элементов списка начинается с 0.

List 1. RemoveItem 8 – Удаляет 9 элемент из списка List 1

Для удаления всех элементов списка используется метод Clear :

List1.Clear

Свойства

Использование свойства списка Text – самая простая возможность получить текст выбранного элемента списка. В любой момент времени значение этого свойства содержит текст выбранного элемента списка или пустую строку, если ни один элемент не выбран. Для определения текста выбранного элемента существуют и другие возможности. Однако следует помнить, что и в памяти все элементы списка сохраняются в виде списка. При этом первый элемент списка имеет индекс 0.

Свойство NewIndex

Это свойство возвращает индекс последнего добавленного элемента списка.

Свойство TopIndex .

Данное свойство возвращает номер элемента списка, отображаемого в верхней позиции окна раскрывающегося списка. Допустим, в списке ListBox присутствует 100 элементов, и пользователь с помощью линейки прокрутки отобразил в окне часть списка, начиная с восемнадцатого элемента, тогда Свойство TopIndex вернет значение 17. С помощью этого свойства можно программным путем вызвать прокрутку окна. Если установить значение TopIndex равным 20, элемент управления ListBox отобразит список, начиная с двадцать первого элемента.

Свойство Text

Свойство, возвращающее текущий выбранный элемент списка ListBox .

Свойство MultiSelect .

Это свойство, которое устанавливает или возвращает режим выбора элементов списка. При значении vbMultiSelectNone элементы списка можно выбирать только по одному. При этом выбор нового элемента списка отменяет предыдущий выбор. Значение vbMultiSelectSimple означает, что пользователь может помечать и снимать отметку элементов списка с помощью мыши или клавиши Space . Значение vbMultiSelectExtended означает режим, схожий с режимом работы Проводника Windows ( Windows Explorer ). Удерживая клавишу Shift , пользователь может отметить несколько элементов списка подряд, а с помощью клавиши Ctrl отмечать элементы списка в любом порядке и количестве.

Свойство Selected

Массив типа Boolean с индексами, начинающимися с 0, указывающий отмеченные элементы в списке. Например, если выражение Selected (3) = True истинно, это означает, что четвертый элемент списка отмечен пользователем. Данное свойство применяется при необходимости разрешить отмечать сразу несколько элементов.

Свойство SelCount

Это свойство, которое возвращает количество отмеченных элементов списка.

Поле со списком ( ComboBox )

Назначение

Поле со списком ComboBox – это комбинированный список, который представляет собой комбинацию двух элементов управления – самого списка со значениями и поля ввода текста (текстового поля). Поля со списком используются в том случае, если нельзя заранее определить значения, которые следует включить в список, или список содержит слишком много элементов. В таком списке нужное значение можно не только выбирать, но и вводить непосредственно в поле ввода. Новое значение после ввода автоматически помещается в список.

События

Для поля со списком важную роль играют события как поля ввода, так и списка. Основные из них – Click , используемое для выбора элемента списка, и Change – для изменения записи в поле ввода текста.

Свойства

Поле со списком имеет почти все свойства текстового поля TextBox и списка ListBox (исключением является свойство MultiLine ). Однако особо следует выделить свойство Style , определяющее внешний вид и функционирование поля со списком.

Для элемента управления ComboBox значение vbComboDropdownList заставляет его вести себя подобно обычному списку ListBox с той разницей, что он просто сворачивается, после того как пользователь выберет элемент из списка; пользователь не может вводить данные в поле для редактирования. При значении vbComboSimple список ComboBox отображается как раскрывающийся список с полем для редактирования, в котором пользователь может вводить текст. При значении vbComboDropDown список раскрывается, когда пользователь нажимает на стрелку в правой части окна, сворачивается, после того как пользователь выберет элемент из списка, и позволяет пользователю вводить текст в окне.

Полосы прокрутки ( ScrollBar )

Назначение

Элемент управления ScrollBar – это полосы прокрутки окна. Некоторые элементы управления (например, TextBox , ListBox ) используют такие полосы прокрутки, причем от разработчика не требуется написание программною кода для выполнения прокрутки. Однако полоса прокрутки как элемент управления Visual Basic , хотя и предназначена для выполнения аналогичных функций, но не выполняет автоматически каких либо действий, т.е. ее поведение необходимо программировать. Существует два вида полос прокрутки: горизонтальная и вертикальная.

События

Полосы прокрутки имеют два интересных события: Change , которое возникает после изменения позиции бегунка или после программного изменения значения свойства Value , и Scroll , происходящее во время прокрутки (когда пользователь захватил и передвигает бегунок).

Свойства

Перед тем, как использовать полосу прокрутки, необходимо установить для нее диапазон прокрутки, который показывает количество шагов прокрутки между крайними позициями бегунка. Текущее положение бегунка определяется значением свойства Value .

Диапазон прокрутки определяется свойствами Min и Мах полосы прокрутки. При этом значение Min всегда соответствует верхнему концу полосы, а Мах – нижнему (для вертикальной полосы прокрутки), и при прокрутке содержимого окна сверху вниз значение свойства Value увеличивается. Чтобы изменить направление изменения свойства Value , достаточно поменять местами значения свойств Min и Мах.

Щелчок на одной из двух кнопок со стрелками на полосе изменяет значение свойства Value на величину, определяемую свойством SmallChange . Если пользователь щелкнет в области между бегунком и какой либо из кнопок, то значение свойства Value полосы прокрутки и соответственно положение бегунка изменяется на величину, определяемую свойством LargeChange .

Таймер ( Timer )

Назначение

Использование таймера является хорошим способом управления вашей программой. С помощью таймера вы можете запускать или завершать процессы приложения в определенные моменты времени. Таймер может быть полезным и в том случае, если приложение выполняется в фоновом режиме. Во время проектирования таймер отображается в форме, но во время выполнения программы он является невидимым.

События

Таймер имеет единственное событие – Timer , которое вызывается по истечении установленного временного интервала.

Свойства

Для установки интервала времени служит свойство Interval , значение которого устанавливается в миллисекундах. Например, задание значения 250 вызывает событие Timer через каждые 250 миллисекунд независимо от того, какое приложение активно. Для отключения таймера следует присвоить свойству Interval значение 0 или свойству Enabled значение False . Максимально допустимый интервал составляет 64757 миллисекунд. Но следует помнить, что операционная система может обрабатывать только 18,2 прерывания таймера в секунду, поэтому точность задания интервала составляет максимум одну восемнадцатую секунды. Необходимо также учесть, что при большой загрузке системы (поддержка сети, печать и т.п.) прерывания могут обрабатываться еще реже.

В Windows вы можете использование не более 32 таймеров. Поскольку для работы системы также нужен таймер, то для всех приложений остается максимум 31. Если обработка события Timer длится дольше, чем задано значением Interval , то новое событие Timer не вызывается, пока Visual Basic не обработает это событие.

Список, устройств ( DriveListBox )

Назначение

Элемент управления DriveListBox относится к группе элементов управления, предназначенных для отображения и работы с дисками, каталогами и файлами. DriveListBox служит для отображения списка всех доступных дисков и устройств системы и обеспечивает возможность их выбора.

События

Самым интересным событием элемента DriveListBox является Change . Это событие вызывается при смене носителя данных.

Свойства

Элемент DriveListBox обладает почти всеми свойствами обычного поля со списком. Но чаще всего используется только свойство Drive , возвращающее выбранный диск или устройство (например, ” С :\”).

Список каталогов ( DirectoryListBox )

Назначение

DirectoryListBox или кратко DirListBox – это второй элемент управления, предназначенный для выбора файлов. Он отображает структуру выбранного диска и позволяет осуществлять выбор и смену каталога.

События

Для этого элемента также главную роль играет событие Change . Оно вызывается в результате двойного щелчка мышью на имени каталога в окне просмотра.

Свойства

Элемент управления DirListBox имеет некоторое сходство со списком. Однако главным его свойством является свойство Path , возвращающее полный путь к выбранному каталогу, включая имя диска (например, C: \ WINDOWS\ TEMP ). После добавления в форму элементов управления DriveListBox и DirListBox они еще не работают совместно. То есть в один и тот же момент в DriveListBox может отображаться имя диска С , а в DirListBox – структура каталогов диска D. Поэтому прежде чем использовать эти элементы управления, их необходимо синхронизировать. Это происходит при обработке события Change в DriveListBox :

Private Sub Drivel_Change ()

Dirl.Path = Drivel.Drive

End Sub

Обычно для выбора каталога пользователь нажимает клавишу [ Enter ]. Однако элемент управления DirListBox игнорирует эту клавишу. Решением такой проблемы является возможность обработки события KeyPress и программная смена каталога.

Рамка ( Frame )

Назначение

Рамка ( Frame ) – это один из элементов контейнеров. Его назначение – объединить в группу несколько элементов управления. Объекты, объединенные с помощью рамки, можно как единое целое перемещать, активизировать и деактивизировать , делать видимыми или невидимыми. Некоторые элементы сами нуждаются в контейнере – например, все переключатели в форме всегда объединяются в одну группу. Чтобы создать вторую группу опций, нужно требуемые переключатели объединить в элементе контейнере.

Для объединения объектов в группу нужно сначала создать элемент контейнер, а затем добавить в него нужные элементы управления. Если требуемые элементы управления уже находятся в форме, их достаточно переместить в элемент контейнер. Чтобы проверить, действительно ли элемент принадлежит контейнеру, достаточно переместить контейнер. Элемент управления, принадлежащий контейнеру, будет перемещаться вместе с ним.

Свойства

Рамка – это элемент управления, который не имеет особых свойств, присущих только ей.

События

События рамки обычно не анализируются, так как чаще всего проектировщик работает только с элементами управления, принадлежащими рамке.

Окно с рисунком ( PictureBox )

Назначение

Как следует из самого названия, элемент PictureBox предназначен для отображения рисунков и других графических объектов. Этот элемент управления также является элементом контейнером, поэтому его можно использовать для объединения других элементов.

События

Как и события рамки, события элемента PictureBox обычно не обрабатываются, хотя при необходимости это можно сделать.

Свойства

Положение PictureBox в форме задается свойством Align , которое определяет будет ли PictureBox закрепляться у одного из краев формы или сохранит положение, заданное разработчиком. Если элемент управления закрепляется у одного из краев формы, то его размер (ширина или высота) всегда устанавливается в соответствии с размером формы.

Свойство AutoSize определяет, будут ли автоматически изменяться размеры элемента управления для отображения рисунков различного размера. Самое важное свойство PictureBox – Picture , которое содержит отображаемый графический объект. Это может быть растровое изображение (*. ВМР), пиктограмма (*. I СО), метафайл (*.WMF) или расширенный метафайл (*.EMF), а также GIF и JPEG файлы.

При выполнении приложения для изменения свойства используется функция LoadPicture :

Picturel.Picture = LoadPicture ( “C:\WINDOWS\AUTOS.BMP”)

Сохранить изображение можно при помощи функции SavePicture :

SavePicture Picturel.Picture , “BUILD.BMP”

Методы

Методы PictureBox позволяют нарисовать точку, линию и окружность, а также вывести текст (метод Print ):

picDisplay.Print “Hello world” picDisplay.Line (0, 0) (100, 500), vbRed

picDisplay Circle (300, 300), 250, vbBlue

Способность элемента PictureBox отображать рисунки различных форматов можно использовать для преобразования пиктограммы (*. I СО) в растровое изображение (*. ВМР). Для этого нужно загрузить пиктограмму и сохранить ее с расширением BMP. Однако растровое изображение преобразовать в пиктограмму нельзя.

Изображение ( Image )

Назначение

Элемент управления Image также создан для отображения рисунков. Но в отличие от PictureBox , он не является элементом контейнером. Он не позволяет рисовать и не допускает группирования объектов. Однако Image использует меньше ресурсов и перерисовывает быстрее, чем PictureBox . Поэтому для отображения рисунков Image может быть лучшим вариантом.

События

Так как главное назначение Image – отображение рисунков, его события обычно не анализируются.

Свойства

Главным свойством Image также является Picture . С его помощью можно определить рисунок, отображаемый элементом управления, на стадии проектирования либо при выполнении программы. Свойство Stretch определяет, как отображается рисунок. Если значение свойства Stretch равно True , то размеры рисунка изменяются до размеров элемента управления Image , в противном случае элемент управления изменяется до размера рисунка.
Вернуться
4.6 Процедуры

Процедуры – это последовательность объявлений и инструкций, объединенных для выполнения

В зависимости от назначения процедуры подразделяются на :

· процедуры обработки событий;

· процедуры общего назначения.

В зависимости от области определения процедуры бывают:

· закрытые ( Private );

· общие ( Public ).
Вернуться
4.6.1 Процедуры обработки событий

Процедуры обработки предназначены для обработки событий, связанных с элементами управления.

Как уже было сказано ранее, различные действия пользователя с кнопкой CommandButton ( Click , KeyDown , MouseMove и т.п.) вызывают соответствующие события, которые далее обрабатываются в виде процедуры.

Разработчик, применяя одну или несколько процедур обработки события, может определить реакцию приложения на конкретное действие пользователя.

Процедуру обработки события легко отличить и по ее имени, в котором обязательно присутствуют имена объекта и события, а также по состоянию рабочей среды. Например, если вы находитесь в такой процедуре, то в поле списка Object окна кода указывается имя объекта, а в поле списка Procedure — имя события.

Имя процедуры обработки события всегда составляется из имен объекта и события, разделенных символом подчеркивания (_).

Например :

Private Sub Command1_ Click()

Form 1. BackColor = & H 80&

End Sub

При удалении процедуры обработки события следует учитывать некоторые особенности. Если удаляется процедура, включая Private Sub и End Sub , то удаляется все ее содержимое. Однако это не значит, что обработка этого события больше невозможна: просто выберите в списке ( Object ) имя требуемого элемента, а в списке ( Procedure ) требуемое событие, и Visual Basic создаст для вас эту процедуру заново, но уже без тела процедуры.

Если же удаляется сам элемент управления, то все его процедуры обработки событии сохраняются, но поскольку объекта больше нет в проекте, эти процедуры становятся общими. Если вы создадите элемент управления с тем же именем, что и удаленный, то все процедуры удаленного элемента связываются с новым.
Вернуться
4.6.2 Процедуры общего назначения

Основной отличительной чертой процедур общего назначения является то, что они не связаны ни с каким событием, и их вызов разработчик осуществляет по своему усмотрению.

Для создания процедуры общего назначения достаточно ввести ключевое слово Sub и имя процедуры в окне кода (но не внутри другой процедуры или функции) и нажать клавишу [ Enter ]. После этого Visual Basic дополнит введенный код оператором конца процедуры End Sub самостоятельно.

Например :

Sub New_ Prod ()

End Sub

Процедуры общего назначения относятся к секции General . Так как процедура не связана ни с одним элементом управления, то поле Object окна кода вместо имени объекта содержит строку General .

Чтобы просмотреть список процедур общего назначения, необходимо выбрать в списке Object поле General .

Процедуры общего назначения используются, как правило, для решения каких либо общих задач, например расчетов, которые необходимо выполнять в различных местах программы.
Вернуться
4.6.3 Закрытые процедуры

Закрытые процедуры – это процедуры, доступные только внутри контейнера (формы, модуля, класса), в котором они содержатся.

Все процедуры обработки событий объявляются по умолчанию как Private . Это значит, что такую процедуру можно вызывать только внутри этой формы. Общие процедуры формы или модуля класса также являются закрытыми. Они останутся закрытыми даже после того, как вы объявите их как Public .

Это можно проверить, если вызвать в форме Form1 общую процедуру формы Form2. В этом случае Visual Basic выдаст сообщение об ошибке ” Sub or Function

not defined ” (“Процедура или функция не определена”).

Тем не менее, общую процедуру можно вызвать из другой формы, если только она не была объявлена как Private . Для этого следует указать перед ее вызовом имя формы, которой она принадлежит, например Form2.SomeProcedure.
Вернуться
4.6.4 Общие процедуры

Общие процедуры – процедуры, которые могут быть вызваны процедурами другого контейнера. Это возможно только в том случае, если такая процедура содержится в модуле – обычно каждая процедура модуля может вызываться любой другой процедурой.

В модулях также полностью проявляется действие ключевых слов Private и Publi с . Чтобы объявить процедуру общей, в ее заголовке указывается ключевое слово Public . Но это не обязательно, так как процедуры в модулях общедоступны по умолчанию.

Если вызов процедуры другим контейнером нежелателен, это можно предотвратить с помощью ключевого слова Private .

Option Private Module

Выражение Option Private Module используется в модуле для указания того, что модуль является закрытым для других приложений. С опцией Option Private Module составные элементы модуля (переменные, процедуры, функции, пользовательские типы данных и пр.), не объявленные как Private , доступны другим модулям проекта, но не другим проектам или приложениям.

В модуле выражение Option Private Module должно предшествовать всем процедурам.
Вернуться
4.6.5 Особенности написания продцедур

Процедуры могут использовать аргументы, список которых (при необходимости с указанием типа), размещают в скобках после имени процедуры. В процедурах событий набор аргументов зависит от события и не может быть изменен разработчиком, например:

Private Sub Form_ MouseDown ( Button As Integer, Shift As Integer, X As Single,_

Y As Single )

End Sub

В общих процедурах количество и порядок используемых аргументов определяется разработчиком.

В заголовке процедуры можно указывать тип данных для аргумента. В

приведенном выше примере аргументы Button и Shift имеют тип Integer , а Х и Y – тип Single .
Вернуться
4.6.6 Способ передачи аргументов

В Visual Basic аргументы могут передаваться двумя способами:

· ссылками ( ByRef );

· значением ( ByVal ).

Различие между двумя видами передачи аргументов состоит в том, что при передаче аргумента как ссылки можно изменять значение этого аргумента. Так как вызываемая и вызывающая процедуры обращаются к одной и той же области памяти, значение переменной для них идентично.

Передача аргументов как ссылки ByRef

Если аргумент передается как ссылка, то вызванная процедура получает физический адрес памяти передаваемой переменной.

Для того чтобы передать аргумент как ссылку, следует перед аргументом указать ключевое слово ByRef . Однако поскольку по умолчанию аргументы в Visual Basic именно так и передаются, ByRef можно и опустить:

Private Sub Commandl_ Click ()

А = 5

SomeProcedure А , В

Print В ‘результат: 25

End Sub

Sub SomeProcedure ( ByRef First, Second)

Second = First * 5

End Sub

В данном примере переменные А и В передаются процедуре SomeProcedure по ссылке. В самой процедуре эти переменные фигурируют под именами First и Second соответственно. Значение переменной Second изменяется и затем может быть использовано в процедуре Command1_Click.

Таким образом, процедура может возвращать несколько значений. При вызове процедуры ей передаются аргументы, значения которых она может изменить. Если процедура не должна изменять аргументы, их следует передавать как значения.

Передача аргументов как значение ByVal

Для передачи аргументов в качестве значений перед именем аргумента в заголовке процедуры следует указывать ключевое слово ByVal . В этом случае процедуре передается копия этого значения. При передаче аргументов в качестве значений ключевое слово ByVal должно указываться обязательно.
Вернуться
4.6.7 Именованные аргументы

Для многих встроенных функций, операторов и методов Visual Basic обеспечивает возможность использования именованных аргументов для упрощения ввода их значений.

Обычно аргументы передают в последовательности, указанной в заголовке процедуры:

Private Sub Command1_ Click()

SomeProcedure 1, 2, 3

End Sub

Sub SomeProcedure ( aOne , aTwo , aThree )

Print aOne , aTwo , aThree ‘ Вывод 123

End Sub

Использование именованных аргументов позволяет передавать часть или все аргументы в любом порядке. Для этого при вызове процедуры указывается имя аргумента и его значение, разделяемые специальным знаком — двоеточием со знаком равенства (:=), например MyArgument : = someValue . Аргументы разграничиваются запятыми; порядок их следования значения не имеет:

Private Sub Commandl_Click ()

SomeProcedure aThree := 3, aTwo := 2, aOne := l

End Sub

Sub SomeProcedure ( aOne , aTwo , aThree )

Print aOne , aTwo , aThree ‘ вывод : 123

End Sub

В примере при вызове процедуры аргументы указаны в другой последовательности, чем в заголовке, однако, благодаря именованию, каждой переменной присваивается соответствующее значение.

При вызове процедур можно передавать именованные и неименованные аргументы комбинированно. Однако следует помнить, что как только в списке передачи появляется именованный аргумент, все последующие аргументы должны передаваться также именованными:

Private Sub Conmtandl_Click ()

SomeProcedure 1, aTwo := 2, aThree :=3

End Sub

Sub SomeProcedure ( aOne , aTwo , aThree )

Print aOne , aTwo , aThree ‘ вывод : 123

End Sub

В этом примере первый аргумент 1 определяется своей позицией. Два других, 3 и 2, передаются как именованные.

Именованные аргументы поддерживают и многие другие функции Visual Basic , Однако именованные аргументы не поддерживаются методами объектов библиотеки Visual Basic . Они поддерживаются в Visual Basic for Applications (VBA) и методами доступа к данным библиотеки DAO.

Использование именованных аргументов имеет два преимущества:

· имя аргумента разъясняет его назначение, поэтому не нужны дополнительные комментарии;

· позволяет предотвратить ошибочное присваивание значений не тем аргументам.

Последнее проявляется при вызове процедур, для которых не обязательно указывать все аргументы.
Вернуться
4.6.8 Необязательные аргументы

Если при вызове процедуры указать не все аргументы, то последует сообщение об ошибке. Однако в процессе описания процедуры можно определить, что не все аргументы указываются при вызове. Такие аргументы называются необязательными.

Для того чтобы аргумент стал необязательным, перед именем аргумента ставится ключевое слово Optional . После первого необязательного аргумента все последующие должны быть также необязательными:

Private Sub Commandl_ Click ()

SomeProcedure 1

SomeProcedure 1, 2

SomeProcedure 1, 2, 3

SomeProcedure aThree := 3, aTwo :=2, a0ne:=l

End Sub

Sub SomeProcedure ( aOne , Optional aTwo , Optional aThree AskInteger )

If IsMissing ( aTwo ) Then aTwo = 2

If aThree = 0 Then aThree = 3

Print aOne , aTwo , aThree ‘ вывод : 123

End Sub

В этом примере в процедуре Commandl_C l i k показаны различные возможности вызова процедуры с необязательными аргументами. Для необязательных аргументов наряду с типом Variant можно задавать и другие типы данных, за исключением пользовательских.

Функция isMissing позволяет проверить, передан или нет аргумент типа Variant . Если некоторые необязательные аргументы не были переданы процедуре, они инициализируются значениями по умолчанию соответствующего типа данных.


Leave a Comment

Your email address will not be published. Required fields are marked with *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Pin It on Pinterest

Яндекс.Метрика