Формы записи алгоритмов

Loop

Do

Loop

Dim A As Variant

End Select

Select Case KeyKode

Case vbkey 0: MsBox “Нажали 0”

Case vbkey 1, vbkey 2: MsBox “Нажали 1 или 2”

Case vbkey 3 to vbkey 9, vbkey A to vbkey z: MsBox “Нажали цифру от 3 до 9 или буквенную клавишу”

Case Else: MsBox “Нажата не буква и не цифра”

End Sub

 

8.10.5. Операторы повтора

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

В этом операторе заранее известно число повторений цикла. Заданы начальное, конечное значения параметра (переменной) цикла и шаг изменения параметра цикла. Он имеет вид:

For <переменная цикла> = <начало> То <конец> [Step<шаг>]

<блок операторов 1> ‘тело цикла

[Exit For] ‘прекращение цикла по внутреннему условию

<блок операторов 2> ‘– повторяется определённое число раз

Next <переменная цикла>

Пример 1:Суммирование элементов массива:

A = Array (1, 4, 12, 23, 34, 3, 24)

S = 0

For i = LBound (A) to UBound (A)

S = S+A(i)

Next i

Пример 2: Нахождение произведения первых n натуральных чисел.

Sub Factor ()

Const n as Integer=20, Fact as Integer=1

Dim i as Integer

For i=1 to n

Fact = Fact*i

Next i

MsgBox Format (Fact, “############”)

‘ Будет выведено 2432902008176640000

End Sub

Пример 3: Суммирование элементов выделенного диапазона

With Selection

n=.Rows.Count

m=.Column.Count

End With : S=0

For i=1 to n

For j=1 to m

S=S+selection.Cells(i,j).value

Next j

Next i

with Section.End(xlDown) ‘ Здесь под I столбцом выделенного

.offset (1,0).value = “Сумма” ‘диапазона выводится «сумма»,

.offset (1,1).value = S ‘а в соседней клетке значение S

End With

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

Он создаёт логически управляемый цикл. Имеет 4 модификации:

а) условие True в начале цикла

Do [While <условие>] – выполняется пока условие истинно

[<блок операторов>]

[Exit Do]

[<блок операторов>]

б) условие True в конце цикла:

[<блок операторов>]

[Exit Do]

[<блок операторов>]

Loop [While <условие>]

в) условие False в начале цикла:

Do [Until <условие>] – выполняется пока условие

[<блок операторов>] не станет истинным

[Exit Do]

[<блок операторов>]

г) условие False в конце цикла:

Do

[<блок операторов>]

[Exit Do]

[<блок операторов>]

Loop [Until <условие>]

Пример 1:

Option Explicit

Sub Do_Rnd()

Dim a As Single: Dim I as Integer

Randomize

Do While True

a = Rnd()

Debug.Print a ‘печать случайного числа

If a>0.99 Then Exit Do

Loop

End Sub

Пример 2: Последовательное отображение имен файлов с расширением .sys на устройстве С:

Файл = Dir (“C:\*.sys”)

Do while <Len (Файл)

MsBox Файл – Без Exit!

Файл = Dir

Loop

Пример 3: Суммирование всех вводимых чисел.

S=0: Do

x=InputBox (“Введите число”)

If Not IsNumeric (x) then Exit Do

S=S+x

Loop

Пример 4:Код, ожидающий правильного ввода пароля

Do : Пароль = InputBox(“Введите пароль”)

Loop Until Пароль = “Привет”

Следующей разновидностью оператора цикла является оператор While ­_ Wend.

Его невозможно прервать – нет Exit Do.Он имеет следующую конструкцию:

While <условие>

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

Wend

Пример: Бросается игральная кость до выпадения 6 очков.

Dim Бросок As integer, Очки As integer

Randomize

Очки = Int(6*Rnd())+1

Бросок = 1

While Очки<6

Бросок = Бросок + 1

Очки = Int (6+ Rnd ())+1

Wend

MsgBox “Победили на броске” & CStr(Бросок)

Циклический оператор For Each _ Next относится к операторам объектного типа, т.е. применяется к массивам и наборам элементов. Имеет вид:

For Each <элемент>In<набор>

[<блок операторов >]

[Exit For] ‘– используется для прерывания цикла

[<блок операторов >]

Next [<элемент>]

Пример 1: Суммирование элементов массива

Dim A As Variant

Dim b, s as Integer

A = Array (1, 4, 12, 23, 34, 3, 23)

S = 0

b=InputBox (" введите с клавиатуры значение для b ")

For Each b in A

S=S+b

Next b

Пример 2:

S = 0

For Each с in Selection.Cells

S = S+c.value

Next c 'Из выделенного диапазона

MsgBox “S=”&CStr(S)

Пример 3:Работа с семейством рабочих листов – удаление из книги рабочего листа Тест.

For Each Лист in Worksheets

If Лист.Name = “Tест” then

Лист.Delete

End If

Next Лист

Пример 4:Работа с семейством ячеек в диапазоне А1 : С4, ячейки с положительными значениями окрашиваются в синий цвет, а с неположительными в красный.

With Ячейка

if .value <=0 then

.Interior.ColorIndex =3

else .Interior.ColorIndex =5

End if

End With

Next Ячейка

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

1 вариант:

With Range (“A1”)

.value = 3

.Font.Italic = True

End With

2 вариант:

With Range (“A1”)

.value = 3

With .Font

.italic = True

.size = 12

.Bold = True

.Color = RGB(255, 30, 255)

End With

End With

8.11. Встроенные диалоговые окна

8.11.1. Окно ввода информации

Встроенных диалоговых окон существует 2 типа: окно сообщений и окно ввода. Окно сообщений выводит простейшую информацию (MsgBox), а окно ввода (InputBox) обеспечивает ввод информации.

Функция InputBox – окно с двумя кнопками ОК и Cancel, строкой сообщения и полем ввода. Рассмотрим оператор, выдающий это окно на экран.

InputBox (Prompt[,Title] [,Default] [,xPos] [,yPos] [,Helpfile, Context]), где:

Prompt - строковое выражение, отображаемое в строке заголовка окна

Title – строковое выражение отображаемое в строке заголовка окна.

Default - строковое выражение отображаемое в поле ввода по умолчанию, если не ввести другое.

xPos – расстояние по горизонтали между левой границей ДО и левым краем экрана (если нет, то по центру горизонтали)

yPos - расстояние по вертикали между верхней границей ДО и верхним краем экрана (если нет, на 1/3 высоты экрана)

Helpfile – адрес файла-справки о ДО, а Context – номер соответствующего раздела в системе.

Пример:Option Explicit

Sub Msg_Inp()

Dim Response As Integer

Dim Message As String

Dim Default As String

Dim Title As String

Dim Help As String

Dim Style As Integer

Dim Ctxt As Integer

Message = «Введите Фамилию, Имя и Отчество студента» ‘ строка-‘сообщение

Title=”Пример окна для ввода” ‘Заголовок окна

Default = “Смирнов Игорь Александрович” ‘текст по умолчанию

Responce = InputBox (Message; Title; Default; 100; 100):End Sub

 
 

 


Рис.61. Окно ввода данных

8.11.2. Встроенные диалоговые окна для обмена сообщениями

Они бывают нескольких типов.

А) Простое окно-сообщение

Пример: MsgBox (“Строка сообщения”)

Б) Функция MsgBox – выводит на экран ДО с сообщением, устанавливая режим ожидания нажатия кнопки пользователя.

MsgBox ((Prompt[,Buttons] [,Title] [,Helpfile, Context])

Prompt – строковое сообщение в ДО

Buttons – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых в ДО кнопок: 0 – ОК+отмена; 2 – стоп + повтор + пропустить; 3 – да + нет + отмена; 4 – да + нет; 5 – повтор + отмена.

Остальные пункты команды, как в InputBox.

Кроме кнопок можно отображать значки:

16 – – белый на сером;

 

48 – – черный на светло сером;

 

Перед рисунком указан код этих значков.

Пример.Использование окна с кнопками Да, Нет, Отмена.

Sub Три_кнопки ()

Dim Сообщение As String: Dim Кнопкa As Integer

‘В Переменной сообщение задаётся структура ДО

Сообщение = vbYesNoCancel + vbQuestion + vbDefaultButton1

‘Кнопка возвращает число при нажатии кнопки

Кнопка = MsgBox (“Выберите Да, Нет, или Отмена?”, Сообщение, “Ещё пример”)

‘В зависимости от полученного значения будет одно из сообщений из Select Case:

Select Case Кнопка

Case vbYes: MsgBox “Выбрали Да”,vbInformation, “Еще пример”

Case vbNo: MsgBox “Выбрали Нет” vbInformation, “Еще пример”

Microsoft Excel  
    Значение случайного числа. 1445231
Case vbCancel: MsgBox “Выбрали Отмена”, vbInformation, “Еще пример”

End Select

End Sub

Пример. Использование в программе.

Sub Msg_Priim()

OK
Dim a As Single

Randomize

a=rnd()

MsgBox “Значение случ. числа” &cstr(a) Рис. 62. Окно вывода результата

End Sub

Пример.Ввод значения.

x= InputBox(“Введите х”, “Пример”) : y=x^2

Для вывода в окне командной кнопки используются коды, приведённые в табл. 6.

Таблица 6

Коды командных кнопок и пиктограмм

Код Константа Описание
      vb OK Only vb OK Cancel vb AbortRetryIgnore   vb YesNoCancel vb YesNo vb RetryCancel Коды командных кнопок: OK OK, Отмена Прекратить, Повторить, Игнорировать Да, Нет, Отмена Да, Нет Повторить, Отмена
        vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 Коды активности по умолчанию Активная первая Активная вторая Активная третья
        vbCritical vbQuestion   vbExclamation   vbInformation Коды пиктограмм Важное сообщение Предупредительный запрос (справка) Предупредительное сообщение Информационное сообщение
        vbApplicationModal     vbSystemModal Коды модальности Программное модальное описание (требуется обязательный ответ, работа приложения приостанавливается) Системное модальное описание (требуется обязательный ответ – работа всех приложений приостанавливается)

Рассмотрим пример использования этих кодов (рис. 63).

Пример.Использование кодов кнопок.

Option Explicit

Sub Msg_Priim()

Dim Response As Integer:Dim Msg As String

Dim Title As String

Dim Help As String

Dim Style As Integer

Dim Ctxt As Integer

Msg= «Вы хотите продолжить?»

Style = 35’vbYesNoCancel+ vbDefaultButton1+ vbQuestion

Title=”Пример окна сообщения” ‘ (Заголовок окна)

Help = “DEMO.HLP” ‘Имя файла-подсказки

Ctxt = 0 ‘Номер контекста внутри файла-подсказки

Response = MsgBox ( Msg; Style; Title; Help; Ctxt ) ‘ присвоение

‘ переменной кода ответа

End Sub

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

Вставка/ Макрос/ Диалог – тип вставляемого листа.

На экране есть панель инструментов Формы для размещения и настройки элементов окна и основа для построения ДО пользователя.

 
 

 

 


 

Рис. 63. Окно вывода с кнопками

8.11.3. Диалоговые окна пользователей

Состав пиктограмм панели инструментов Формы имеет вид, приведённый в табл. 7.

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

Метки – не могут редактироваться пользователем в процессе работы с диалоговым окном, но могут изменяться программным путем с помощью свойства Caption объекта Labels()

Пример.Sheets(“<имя_листа_диалога>”). Labels (“<имя_объекта_метки>”). Caption = “строка_текста”

Поле ввода – является многострочным, содержит текст, который можно корректировать. Поле ввода входит в набор EditBoxes(), его можно редактировать и программным способом.

Пример.Sheets(“<имя_листа_диалога>”). EditBoxes (“<имя_окна>”). Text = “строка_текста”

Таблица 7

Перечень пиктограмм

Вид Название вида
Метка (создание текстовых вставок в окне) Label
Поле ввода текста EditBox
Рамка группы (обеспечение элементов окна) GroupBox
Командная кнопка (может быть назначена процедура или макросы) CreateBatton
Поле ввода со списком (комбинированное окно) Combination List Edit
Поле ввода с раскрывающимся списком Combination Drop_Down Edit
Редактор органов управления (свойства объекта) Control Propites
Переключатель координатной сетки Toggle grid
Флажок (контрольный индикатор) Check Box
Переключатель (кнопка выбора) OptionBatton
Окно списка ListBox
Раскрывающийся список (выпадающее окно) Drop_Down
Линейка прокрутки ScrollBar
Регулятор счетчика (спиннер) Spinner
Редактор кода программы EditCode
Выполнение диалога RunDialog

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

Флажок - обеспечивает аддитивный выбор, имеет свойство Value (значение True или False) и образует набор CheckBoxes().

Выбран не выбран

Кнопка переключателя – обеспечивает альтернативный выбор из списка взаимоисключающих опций. Образуют набор OptionBattons () Свойство Value имеет значения True или False - не выбрана кнопка.

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

а) ListFillRange – ссылка на диапазон ячеек электронной таблицы, содержащая значения элементов списка.

б) List() – перечисление элементов списка, непосредственно, замена старого списка новым целиком.

Раскрывающийся список – подобен окну списков, но входит в набор DropDowns()

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

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

Линейка прокрутки – создаёт вертикальную или горизонтальную линейку прокрутки. Value содержит положение ползунка – число, доступ к линейкам через набор ScrolBars(). Свойства Min и Max – это диапазон значений, а свойства LargeChange и SmallChange содержат величину изменения Value.

Регулятор счетчика – аналогичен линейке прокрутки, но нет свойства LargeChange.

ЗАКЛЮЧЕНИЕ

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

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

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

Например. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

Алгоритм может быть следующим:

1. задать два числа;

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

3. определить большее из чисел;

4. заменить большее из чисел разностью большего и меньшего из чисел;

5. повторить алгоритм с шага 2.

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

Словесный способ не имеет широкого распространения по следующим причинам:

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