Примеры решения задач visual basic – Практикум по программированию в среде Visual Basic (примеры решения задач)

Содержание

Задачник на VBA (часть I)*

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего профессионального образования

«КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ЭНЕРГЕТИЧЕСКИЙ УНИВЕРСИТЕТ»

Н.К. ПЕТРОВА, М.М. ВОЛЧЕНКО

ПРОГРАММИРОВАНИЕ НА VBA В ПРИМЕРАХ И ЗАДАЧАХ

ЧАСТЬ I. БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ

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

«Информатика», «Компьютерные технологии в науке и образовании», «Программные средства информатики», «Новые информационные технологии»

Казань 2010

УДК 681.3 ББК 32.973 П78

Рецензенты:

кандидат физико-математическихнаук, доцент Татарского государственного педагогического университетаИ.Н. Голицына;

кандидат физико-математическихнаук, доцент Казанского государственного энергетического университетаР.А. Ишмуратов

П78 Петрова Н.К., Волченко М.М.

Программирование на VBA. Часть I. Базовые алгоритмические структуры. Практикум / Н.К. Петрова, М.М. Волченко. – Казань: Казан. гос. энерг. ун-т,2010. – 55 с.

Предлагается своего рода «Задачник» по программированию, ориентированный на обучение студентов основам алгоритмизации математических и инженерных задач средствами языка VBA в приложении к Excel.

Содержание I части охватывает разделы программы, посвященные базовым алгоритмическим структурам: линейные программы, «ветвление», «цикл» - арифметический и итерационный. Изложение материала оформлено в виде отдельных разделов, в которых кратко представлены основные теоретические сведения.

Типовые задачи даются с подробными решениями. Имеется большое количество задач для самостоятельной работы. Задания делятся на три типа: 1 – умение «читать» готовые программы, 2 – разрабатывать программы по шаблонному алгоритму и 3 – разрабатывать программы с неявным алгоритмом.

Практикум предназначен для студентов всех специальностей КГЭУ, изучающих «Информатику».

УДК 681.3 ББК 32.973

© Казанский государственный энергетический университет, 2010

3

Предисловие

Вучебной литературе имеется не так много пособий по практической работе на VBA, ориентированных на решение математических, инженерных задач. Данный практикум разработан с целью восполнить существующий пробел. Он предназначен для обучения – самостоятельно или под руководством преподавателя – основам алгоритмизации с использованием языка VBA (Visual Basic for Application) в приложении к одному из самых популярных приложений MS Office – MS Excel.

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

Втексте практикума приняты такие соглашения:

1.Элементы языка VBA в текстовой части практикума выделены

таким стилем.

2.Курсивом выделены новые термины, имена переменных в текстовой части практикума, в комментариях к операторам программ.

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

4.При описании структуры операторов[необязательные операнды] взяты в квадратные скобки, альтернативные параметры –Yes | No –

написаны через вертикальную черту.

5. В тексте используются следующие сокращения:

ОП – оперативная память; ПК – компьютер; п/п – программа-процедура;п/ф –программа-функция

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

4

Общие теоретические сведения по программированию на VBA

I. Структура программ на VBA. Процедуры и функции пользователя

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

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

Программа-процедура (п/п) на VBA имеет следующую структуру:

[Private|Public] Sub ИмяПроцедуры (СпискиПараметров) <<Тело п/п>>

End Sub

где [Private|Public] – необязательные ключевые слова, определяющие область видимости программы;Sub – ключевое слово, определяющее тип п/п.ИмяПроцедуры – имя п/п (дает сам пользователь).СписокПараметров служит для передачи процедуре исходных данных для вычислений (может отсутствовать). Он состоит из элементов списка, разделенных запятыми.

Этот элемент списка параметров имеет синтаксис:

ИмяЭлемента [As ТипДанных]

где ИмяЭлемента – идентификатор;As – ключевое слово;ТипДанных – тип данных элемента списка (Табл. 1.1).

Процедура пользователя может быть вызвана из другой п/п оператором Call или указанием ее имени.

5

Например:

 

Private Sub Prog1( )

Начало процедуры с именем Prog( )

Dim t As Integer

Описание типа переменной t

t = 2

Присвоение переменной t значения 2

Call Prog2 (t)

Вызов процедуры Prog2 (t) с фактическим

[Другие операторы]

параметром t

Prog2 (t)

другой способ вызова п/п Prog2

[Другие операторы]

 

End Sub

Конец процедуры Prog1

Public Sub Prog2(x As

Начало п/п Prog2 с формальным параметромх

Integer)

 

MsgBox x

Выдача значения x в специальном окне

End Sub

Конец процедуры Prog2

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

[Private|Public]Function ИмяФункции([СпискиПараметров])[As ТипДанных]

<<Тело п/ф>>

ИмяФункции = ВозвращаемоеЗначение

End Sub

Function – ключевое слово, указывающее на то, что это функция; остальные параметры те же, что и вSub. ВозвращаемоеЗначение – значение, возвращаемой функцией.

Обращение к п/ф может производиться из процедуры другой функции. Если в функции предусмотрено рекурсивное обращение, то ее можно вызвать из нее самой. Если функция записана в модуле, то ее можно вызвать из Excel с помощью Мастера функций, так как функция пользователя заносится в библиотеку функций.

Пример:

Private Sub Prog3( ) Dim u,t As Integer

t = 2

y = Func ( t ) [Другие операторы] End Sub

Public Function Func(x As Integer) As Integer

f % = x ^ 2 + x + 5

func = f % End Function

6

Начало вызывающей п/п Задание типа переменным u,t

Присвоение переменной t значения 2 Вызов п/фFunc с фактическим аргументомt

Конец п/п

Начало п/ф Func, имеющей целочисленный тип. Формальный аргументt имеет целочисленный тип

Вычисление полинома по t и присвоение результата целочисленной переменнойf % Присвоение возвращаемого значения Конец п/ф

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

II. Типы констант. Представление числовых констант в формате с фиксированной и плавающей десятичной точкой

Константой называется некоторая величина, не изменяющая своего числового или символьного значения в течение выполнения всей программы. Имеются два типа константчисловые и символьные.

Числовые константы: представляют собой положительные или отрицательные числа двух видов:

а)целочисленные, представляющие собой положительные и отрицательные числа и ноль, при их записи не должна использоваться

десятичная запятая: -100

2

0 +458 ;

 

 

б)вещественные константы – все действительные числа, включая и

целые. Записываются в двух форматах:

100.

–0.001

+2.563

с фиксированной точкой, например,

(вместо десятичной запятой используется при записи точка)

 

с плавающей точкой,например,

2.5·10-2,записываемое как

2.5Е-02или 2.5D-02.

Здесь

2.5 –

мантисса, Е, D –

десятичная

экспонента одинарной (Е) или двойной (D) точности.

Например: 1,510-3 1.5Е-3=0.15Е-02=15Е-04=0.0015,

150000 1.5Е+05,

0,0000254 2.54Е-05.

7

III. Объявление переменных на VBA

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

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

Для эффективного использования памяти и времени ПК необходимо правильно выбрать тип переменной. Объявить переменную – значит заранее сообщить программе о ее существовании. Объявление переменной производится специальным оператором: Dim переменная [As тип]

Одновременно с объявлением переменной после ее имени можно

записать ключевое слово

As, после которого

задается

тип переменной

(Табл. 1.1).

Dim power As

 

 

Например: оператор

single

приписывает

переменной power вещественный тип одинарной точности.

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

DefТип.

Например, если на уровне модуля дана инструкция DefInt I-N, это означает, что всем переменным, имена которых начинаются с букв, лежащих в диапазоне отI доN (и прописных, и строчных), в программах данного модуля будет присвоен типInteger. Другие значения инструкцииDefТип представлены в Табл. 1.2.

8

Таблица 1.1 Некоторые типы переменных VBA

Тип

Хранимая

Занимаемая

 

Диапазон значений

информация

память

 

 

 

 

 

Целочисленные типы

 

Byte

Целые числа

1 байт

 

От 0 до 255

Boolean

Логические

2 байт

 

True или False

значения

 

Integer

Целые числа

2 байт

 

От -32768 до 32 767

Long

Длинное целое

4 байт

 

От -2147 483 648 до 2 147 483

 

647

 

 

 

 

 

Типы с плавающей точкой

 

 

 

 

От -3,402823E38до

 

Вещественные

 

 

-1,401298E-45

Single

числа с плавающей

4 байт

 

для отрицательных значений;

 

точкой одинарной

(7 цифр)

 

от 1,401298E-45до

 

точности

 

 

3,402823E38

 

 

 

 

для положительных значений

 

 

 

 

От -1,79769313486232E308

 

Вещественные с

 

 

до -4,94065645841247E-324

 

8 байт

 

для отрицательных значений;

Double

плавающей точкой

 

(15 цифр)

 

от 4,94065645841247E-324

 

двойной точности

 

 

 

 

до 1,79769313486232E308 для

 

 

 

 

 

 

 

 

положительных значений

 

 

Строковые типы

 

 

 

 

 

 

 

Текстовая

 

 

 

String

информация

10 байт + 1 байт

 

От 0 до приблизительно

 

(строка) переменной

на каждый символ

 

2 миллиардов символов

 

длины

 

 

 

String*n

Строка постоянной

Длина строки

 

От 1 до приблизительно

длины в n символов

 

65 400

 

 

Типы Variant

 

 

Variant

Значения любого из

16 байт для чисел;

 

Любое числовое или

перечисленных

22 байт + 1 байт

 

строковое значение вплоть до

 

типов данных

на каждый символ

 

границ диапазона для типа

 

строки

 

Double.

 

 

 

9

Таблица1.2. ЗначенияинструкцииDefТиписоответствующихпостфиксов

Инструкция

Тип данных

Постфикс

Инструкция

Тип данных

Постфикс

DefBool

Boolean

нет

DefSng

Single

!

DefByte

Byte

нет

DefDbl

Double

#

DefInt

Integer

%

DefStr

String

$

DefLng

Long

&

DefVar

Variant

нет

IV. Значения и типы переменных по умолчанию

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

(табл. 1.3), согласно которому все переменные принимают тип Variant и

соответствующие значения. Применение данного типа позволяет выполнять операции, не обращая внимания на тип данных, которые они содержат. Удобен для объявления переменных, тип которых заранее неизвестен. Переменные этого типа могут содержатьспециальные значения: Empty (пусто), Null (Нуль), Error (ошибка).

Таблица 1.3. Значения и типы переменных разных типов по умолчанию

Тип

Значение

Тип

Значение

Тип

Значение

Boolean

Ложь/False

Single

0,0

String

““

Byte

0

Double

0,0

String*n

“¬ . . . ¬“

Integer

0

Long

0

 

n пробелов

 

 

 

 

 

 

Variant

Empty, Null, Error

 

 

 

 

Из таблицы следует, что если переменная описана как числовая

(любого типа – Byte, Integer, Long, Single, Double) то ее значение по умолчанию равно 0 (ноль). Для символьных переменных типаString значение по умолчанию "" – отсутствие символов, еслиString*n, то ее значение будет равноn пробелам. Для логических (Boolean) переменных значение по умолчанию будет «ложь»

Несколько правил для корректного использования разных типов данных в одной программе или в одном выражении:

1. Переменные, описанные с помощью DIM на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне п/п, доступны только в данной п/п.

10

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

3.Переменным типа Variant могут присваиваться как строковые, так и

числовые выражения. Однако обратное не всегда верно.

4.Присвоение выражения с одним из числовых типов переменной с другим числовым типом данных преобразует значение выражения в тип данных результирующей переменной. Например: еслиa % = 2.33, тоа % будет иметь целое значение 2 (округление с недостатком) илиb % = 2.65, тоb % = 3 (округление с избытком), таким образом, присвоение вещественного числа целочисленной переменной приводит к округлению его до ближайшего целого (аналогично функцииINT).

5.Если присваивается численное выражение типизированной переменной с меньшей точностью (например, Double → Long), VBA

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

6. Если переменной типа String присваивается переменная типаVariant, содержащая число, VBA автоматически преобразует это число в строку.

V. Встроенные математические функции

Таблица 1.4. Некоторые стандартные функции VBA

 

 

 

Функция

 

Выполняемое действие

 

 

 

Atn(аргумент)

 

Возвращение арктангенса угла в радианах

 

 

 

Sin (аргумент)

 

Возвращение синуса угла, заданного в радианах

 

 

 

Cos(аргумент)

 

Возвращение косинуса угла, заданного в радианах

 

 

 

Tan(аргумент)

 

Возвращение тангенса угла, заданного в радианах

 

 

 

Exp(аргумент)

 

Возвращение значения ex, где x - значение переменной

 

 

или введенное число

 

 

 

Log(аргумент)

 

Возвращение натурального ln(x) логарифма числаx

 

 

 

Sqr(аргумент)

 

Возвращение квадратного куреня числа

 

 

 

Randomize

 

Запуск генератора случайных чисел

 

 

 

studfiles.net

Примеры решения задач - стр. 2

Примеры решения задач

Приведем несколько примеров решения задач на VBA.

Пример 1. Вычислить значение выражения a равного

, при x = 3, y = 2.5

Решение.

Sub выражение1()

Dim A, x, y

x = 3

y = 2.5

A = 2 * x - 3 * y

MsgBox (A)

End Sub

Пояснение решения.

В строке Dim A, x, y объявляются переменные A, x, y.

Пример 2. Вычислить значение выражения равного

, при x = 3, y = 2.5

Замечание: значения x и вводит пользователь.

Решение.

Sub выражение2()

Dim A, x, y As Double

x = InputBox("Введите x=")

y = InputBox("Введите y=")

A = 2 * x - 3 * y

MsgBox (A)

End Sub

Пояснение решения.

В строке Dim A, x, y As Double описываются переменные Axкак числа двойной точности.

При использовании строки

x = InputBox("Введите x=")

появиться окно

Пример 3. Вычислить значение выражения равного

, при x = 3, y = 2.5

Замечание: значения x и вводит пользователь, ответ выводится в виде «a =».

Решение.

Sub выражение3()

Dim A, x, y As Double

Dim ответ As String

x = InputBox("Введите x=")

y = InputBox("Введите y=")

A = 2 * x - 3 * y

ответ = "a=" + Str(A)

MsgBox (ответ)

End Sub

Пояснение решения.

В строке Dim ответ As String описывается переменная ответ как строковая.

Код Str(A) преобразует значение переменной A в строку.

Пример 4. Вычислить значения выражений при x = 3, y = 2.5

,

,

,

,

Решение.

Sub выражение4()

Dim A, b, c, d, a1, x, y As Double

x = InputBox("Введите x=")

y = InputBox("Введите y=")

A = 2 * x - 3 * y

b = (2 * x - 3 * y) / 2

c = (2 * x - 3 * y) / 2 * x

d = (2 * x - 3 * y) / (2 * x)

a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y)

MsgBox ("a=" + Str(A))

MsgBox ("b=" + Str(b))

MsgBox ("c=" + Str(c))

MsgBox ("d=" + Str(d))

MsgBox ("a1=" + Str(a1))

End Sub

Пример 5. Выполнить пример 4, другим способом, с помощью вспомогательных переменных.

Решение.

Sub выражение5()

Dim A, b, c, d, a1, a2, b1, c1, c2, x, y As Double

x = InputBox("Введите x=")

y = InputBox("Введите y=")

A = 2 * x - 3 * y

b = (2 * x - 3 * y) / 2

c = (2 * x - 3 * y) / 2 * x

d = (2 * x - 3 * y) / (2 * x)

a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y)

‘ новое решение

b1 = A / 2

c1 = b * x

c2 = b / (2 * x)

a2 = d + (5 - x) / (3 + y)

MsgBox ("a=" + Str(A))

MsgBox ("b=" + Str(b))

MsgBox ("c=" + Str(c))

MsgBox ("d=" + Str(d))

MsgBox ("a1=" + Str(a1))

MsgBox ("b1=" + Str(b1))

MsgBox ("c1=" + Str(c1))

MsgBox ("c2=" + Str(c2))

MsgBox ("a2=" + Str(a2))

End Sub

Пример 6. Вычислить площадь треугольника по трем известным сторонам. Например, a = 3b = 4c = 5.

Решение.

Sub Герон1()

Dim A, b, c, p, s As Double

A = 3

b = 4

c = 5

p = (A + b + c) / 2

s = Sqr(p * (p - A) * (p - b) * (p - c))

MsgBox ("s=" + Str(s))

End Sub

Пояснение решения.

Для решения задачи используется формула Герона.

Пример 7. Вычислить площадь треугольника по трем известным сторонам.

Решение.

Sub Герон2()

Dim A, b, c, p, s As Double

A = Val(InputBox("Введите a="))

b = Val(InputBox("Введите b="))

c = Val(InputBox("Введите c="))

p = (A + b + c) / 2

s = Sqr(p * (p - A) * (p - b) * (p - c))

MsgBox ("s=" + Str(s))

End Sub

Пояснение решения.

Код Val(InputBox("Введите a=")) преобразует введенное значение через InputBox в число, так как InputBoxвозвращает строку. Если такого преобразования не сделать, то программа правильно вычислять s не будет.

Пример 8. Вычислить гипотенузу прямоугольного треугольника по двум катетам.

Решение.

Sub гипотенуза()

Dim a, b, c, p, s As Double

a = Val(InputBox("Введите a="))

b = Val(InputBox("Введите b="))

c = Sqr(a ^ 2 + b ^ 2)

MsgBox ("c=" + Str(c))

End Sub

Организация ветвления на языке Visual Basic for Application

 

Необходимость обработки критических ситуаций возникает при программировании довольно часто.

Например, при решении задачи: вычислить значение выражения .

Sub выражение6()

Dim x, y, z As Double

x = Val(InputBox("Введите x="))

y = Val(InputBox("Введите y="))

z = (x + y) / (x - y)

MsgBox ("z=" + Str(z))

End Sub

При вводе значений x = 3, y = 3 программа прекратит работу и выдаст сообщение

о прекращении работы, так как произошло деление на 0. Нажатие на кнопку Debug позволяет перейти в строку, в которой состоялась ошибка выполнения (Run-time error).

 

Необходимо, преобразовать программу следующим образом:

Sub выражение7()

Dim x, y, z As Double

x = Val(InputBox("Введите x="))

y = Val(InputBox("Введите y="))

If x - y 0 Then

z = (x + y) / (x - y)

MsgBox ("z=" + Str(z))

Else

MsgBox ("Знаменатель равен =0")

End If

End Sub

Для организации ветвлений в языке VBA предусмотрено несколько операторов: If и Select Case.

Общий вид оператора If:

If выражение Then [инструкции]

[ElseIf выражение-n Then [иначе_если_инструкции] ...

[Else [иначе_инструкции]]

End If

Выражение должно возвращать логическое значение: истина или ложь (True или False).

Общий вид оператора Select Case:

Select Case выражение

[Case выражение-n

[инструкции -n]] ...

[Case Else

[иначе_инструкции]]

End Select

Пример использования Select Case.

Sub пример_select_case()

Dim Number

Number = 8

Select Case Number

Case 1 To 5

MsgBox "Между 1 и 5"

Case 6, 7, 8

MsgBox "Между 6 и 8"

Case 9 To 10

MsgBox "Между 9 и 10"

Case Else

MsgBox "Не в диапазоне от 1 до 10"

End Select

End Sub

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

Пример 1. Вычислить значение выражения 

Решение.

Sub выражение8()

Dim x, y, z As Double

x = Val(InputBox("Введите x="))

y = Val(InputBox("Введите y="))

If x - y 0 And x > 0 Then

z = (x + y) / (x - y) + Sqr(x)

MsgBox ("z=" + Str(z))

Else

MsgBox ("Выражение не имеет смысла")

End If

End Sub

Пояснение решения.

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

Пример 2. Вычислить площадь треугольника по трем известным сторонам.

Решение.

Sub Герон3()

Dim A, b, c, p, s As Double

A = Val(InputBox("Введите a="))

b = Val(InputBox("Введите b="))

c = Val(InputBox("Введите c="))

If (A + b > c) And (A + c > b) And (b + c > A) Then

p = (A + b + c) / 2

s = Sqr(p * (p - A) * (p - b) * (p - c))

MsgBox ("s=" + Str(s))

Else

MsgBox ("Треугольник не существует")

End If

End Sub

Пояснение решения.

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

Правильное решение в примере 3.

Пример 3. Вычислить площадь треугольника по трем известным сторонам.

Sub Герон4()

Dim A, b, c, p, s As Double

Dim d1, d2, tr_ok As Boolean

A = Val(InputBox("Введите a="))

b = Val(InputBox("Введите b="))

c = Val(InputBox("Введите c="))

d1 = (A >= 0) And (b >= 0) And (c >= 0)

d2 = (A + b > c) And (A + c > b) And (b + c > A)

tr_ok = d1 And d2

If tr_ok Then

p = (A + b + c) / 2

s = Sqr(p * (p - A) * (p - b) * (p - c))

MsgBox ("s=" + Str(s))

Else

MsgBox ("Треугольник не существует")

End If

End Sub

Пояснение решения.

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

Программирование циклов на языке Visual Basic for Application

 

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

Оператор While

Общий вид оператора While:

While выражение

[инструкции]

Wend

Оператор While предназначен для организации цикла-пока.

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

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма1()

Dim x, s As Double

x = 0

s = 0

While x

s = s + x

x = x + 1

Wend

MsgBox ("s=" + Str(s))

End Sub

Пояснение решения.

В переменной s накапливается значение суммы.

 

Оператор Do While

Общий вид оператора Do While:

Do [While выражение]

[инструкции]

[Exit Do]

[инструкции1]

Loop

Оператор Do While предназначен для организации цикла-пока.

Инструкции будут выполняться пока выражение будет истинно. Конструкция Exit Do предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма2()

Dim x, s As Double

x = 0

s = 0

Do While x

s = s + x

x = x + 1

Loop

MsgBox ("s=" + Str(s))

End Sub

Оператор Do Loop Until

Общий вид оператора Do Loop Until:

Do

[инструкции]

[Exit Do]

[инструкции1]

Loop [Until выражение]

Оператор Do Loop Until предназначен для организации цикла-до.

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

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма3()

Dim x, s As Double

x = 0

s = 0

Do

s = s + x

x = x + 1

Loop Until x > 100

MsgBox ("s=" + Str(s))

End Sub

Оператор For

Общий вид оператора For:

For счетчик = начальное_знач To конечное_знач [Step шаг]

[инструкции]

[Exit For]

[инструкции1]

Next [счетчик]

Оператор For предназначен для организации цикла-для.

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

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма4()

Dim x, s As Integer

s = 0

For x = 0 To 100

s = s + x

Next x

MsgBox ("s=" + Str(s))

End Sub

Примеры решения задач

Пример 1. Представить таблицу квадратов чисел от 2 до 10.

Решение.

Для отображения результатов воспользуемся Excel и для доступа к ячейкам функцией Cells (номер_строки, номер_колонки).

Sub квадраты()

Dim x

Cells(2, 1).Value = "x"

Cells(3, 1).Value = "x^2"

For x = 2 To 10

Cells(2, x).Value = x

Cells(3, x).Value = x ^ 2

Next x

End Sub

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

Решение.

Наибольший общий делитель двух натуральных чисел — это самое большое натуральное число, на которое они делятся. Например, у чисел 12 и 18 наибольшие делители: 2, 3, 6. наибольшим общим делителем является число 6. Это записывается так:

НОД(12, 18) = 6.

Идея алгоритма Евклида для нахождения НОД основана на том свойстве, что если M>N, то

НОД(M, N) = НОД(M-N, N).

Иначе говоря, НОД двух натуральных чисел равен НОД их положительной разности и меньшего числа.

Sub Евклид()

Dim M, N, NOD

M = Cells(1, 2)

N = Cells(2, 2)

While M N

If M > N Then

M = M - N

Else

N = N - M

End If

Wend

NOD = M

Cells(3, 2).Value = NOD

End Sub

Пример 3. Построить график функции: улитку Паскаля.

Улитка Паскаля задается следующим образом:

x=A*cos(t)+B*cos(t)

y=A*cos(t)sin(t)+B*sin(t), A>B, B>0, 0

Решение.

1. Подготовить данные в электронной таблице

2. Ввести код программы.

Sub улитка_паскаля()

Dim a, b, Pi, t As Double

Dim i As Integer

a = Cells(1, 2)

b = Cells(2, 2)

Pi = 3.14

i = 2

t = 0

While t

x = a * Cos(t) + b * Cos(t)

y = a * Cos(t) * Sin(t) + b * Sin(t)

Cells(3, i).Value = x

Cells(4, i).Value = y

t = t + 0.1

i = i + 1

Wend

End Sub

3. Построить график с помощью мастера диаграмм, выбрав точечную диаграмму.

4. Изменить данные a и b.

A=2

B=1

5. Перезапустить макрос.

Создание пользовательских форм на языке Visual Basic for Application

 

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

Приведем создание проекта «Вычисление площади треугольника по трем известным сторонам» по шагам.

Шаг 1. Создание первоначальной формы.

1.1. Выполнить Сервис ® Макрос ® Редактор Visual Basic.

1.2. Вставить форму с помощью меню Insert ® UserForm или кнопкой .

1.3. Дать внутреннее имя форме Форма_Герон с помощью окна Properties, выставляя свойство (Name) равноеФорма_Герон.

1.4. Присвоить заголовку форму имя Герон с помощью окна Properties, выставляя свойство Caption равное Герон.

1.5. Создать надпись «Вычисление площади треугольника» с помощью инструмента Надпись  панели элементов. При необходимости воспользоваться окном Properties, свойствами FontAlign.

1.6. В результате получиться следующий рисунок.


Шаг 2. Создание элементов для ввода данных.

2.1. Создать блок для ввода данных стороны a с помощью инструмента Поле панели элементов. В окнеProperties, присвоить ему свойство (Name) равное a_Textbox.

2.2. Создать надпись «Сторона A=» с помощью инструмента Надпись  панели элементов. При необходимости воспользоваться окном Properties, свойствами FontAlign.

2.3. В результате получиться следующее.

2.4. Аналогично создать блоки для ввода значений сторон B, C и вывода площади треугольника S. Для B —b_Textbox, C — c_Textbox, S — s_Textbox.


Шаг 3. Создание элемента для начала вычислений.

3.1. Создать кнопку «Вычислить!» с помощью инструмента Кнопка панели элементов. В окне Properties, выставить свойства (Name) равное Calc_Button, Caption равное «Вычислить!».

3.2. Сделать двойной щелчок на кнопке Вычислить! и ввести программный код.

Private Sub Calc_Button_Click()

Dim A, b, c, p, s As Double

Dim d1, d2, tr_ok As Boolean

A = Val(a_TextBox.Value)

b = Val(b_TextBox.Value)

c = Val(c_TextBox.Value)

d1 = (A >= 0) And (b >= 0) And (c >= 0)

d2 = (A + b > c) And (A + c > b) And (b + c > A)

tr_ok = d1 And d2

If tr_ok Then

p = (A + b + c) / 2

s = Sqr(p * (p - A) * (p - b) * (p - c))

s_TextBox.Value = s

MsgBox ("s=" + Str(s))

Else

MsgBox ("Треугольник не существует")

s_TextBox.Value = "Треугольник не существует"

End If

End Sub


Шаг 4. Запуск формы.

4.1. Осуществить запуск формы с помощью Run ® Run Sub/UserForm или с помощью кнопки .

Обработка массивов на языкеVisual Basic for Application

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

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

 


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

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

Все действия с массивами выполняются поэлементно, в цикле. Поскольку массив — это последовательность с известным числом элементов, удобнее использовать цикл For. 

 


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

Результат вычисления среднего роста будут записаны в ячейку B9.

Решение.

Sub средний_рост()

Dim Rost(6) As Double

Dim i As Integer

Dim Сумма, Среднее As Double

' ввод таблицы для обработки

For i = 1 To 6

Rost(i) = Cells(1 + i, 2).Value

Next i

' нахождение суммы чисел в таблице

Сумма = 0

For i = 1 To 6

Сумма = Сумма + Rost(i)

Next i

' вычисление среднего

Среднее = Сумма / 6

'вывод

Cells(9, 2).Value = Среднее

MsgBox (Среднее)

End Sub

Пояснение решения.

В строке Dim Rost(6) As Double объявляется массив чисел двойной точности именем Rost размерностью 6, то есть одномерная таблица Rost емкостью 6 (шесть) ячеек.

Аналогичным образом можно обрабатывать и двумерные массивы.


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

Решение.

Sub simetria()

Const n = 4

Dim i, j

Dim x(n, n)

Dim t, check As Boolean

For i = 1 To n

For j = 1 To n

x(i, j) = Cells(i, j)

Next

Next

t = True 'предположим, что матрица симметрична

i = 2

While t And (i

j = 1

While (j

j = j + 1

Wend

t = (j = i)

i = i + 1

Wend

check = t

MsgBox check

End Sub

Обработка строк на языкеVisual Basic for Application

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

В VBA существует несколько функций для обработки строк.


Функция Mid

Общий вид функции Mid:

Mid(Строка, Начальная_позиция[, Длина])

Функция Mid возвращает вырезку из строки Строка, начиная со позиции Начальная_позиция, длиною Длина.

Пример 1.

Sub пример_mid()

Dim MyString, Word1, Word2, Word3

MyString = "Демо функции Mid"

Word1 = Mid(MyString, 1, 4) ' результат "Демо"

MsgBox Word1

Word2 = Mid(MyString, 14, 3) ' результат "Mid"

MsgBox Word2

Word3 = Mid(MyString, 6)   ' результат "функции Mid"

MsgBox Word3

End Sub


Функция Len

Общий вид функции Len:

Len (Строка)

Функция Len возвращает длину строки Строка.

Пример 2.

Sub пример_len()

Dim MyString

Dim Длина

MyString = "Демо функции Len"

Длина = Len(MyString)

MsgBox Длина

End Sub


Функция InStr

Общий вид функции InStr:

InStr([нач_позиция, ]Строка1, Строка2[, Опция_1_или_0])

Функция InStr номер первого вхождения в строке Строка1 строки Строка2, начиная с позиции Нач_позиция.

Пример 3.

Sub пример_instr()

Dim Mystring

Mystring = "Где Вася"

номер = InStr(Mystring, "Вася") ' результат 5

MsgBox номер

End Sub

Кроме приведенных функций в VBA имеются: Left (вырезка слева), Right (вырезка справа),  Trim (убирает пробелы слева и справа), StrComp (сравнение строк) и др.

Приведем пример обработки строк.

Пример 4. В строке подсчитать количество цифр.

Решение.

Sub пример_str_4()

Dim Mystring, char

Dim i, n

Mystring = InputBox("Введите строку")

n = 0

For i = 1 To Len(Mystring)

char = Mid(Mystring, i, 1)

If char >= "0" And char

Next i

MsgBox n

End Sub

По материалам сайта

gigabaza.ru

3.3. Проектирование решения линейной задачи средствами Visual Basic

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

Рассмотрим реализацию линейного алгоритма на конкретном примере.

3.3.1. Постановка задачи

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

3.3.2. Экономико-математическая модель

Стоимость купленного товара определятся по формуле:

Стоимость = Цена * Количество

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

Алгоритм решения задачи приведен на рис. 3.1.

3.3.4. Структура данных

При решении задачи используются следующие данные:

Цена – дробное число;

Количество – целое число;

Стоимость – дробное число.

Рис. 3.1. Алгоритм вычисления стоимости товара

Данные Цена и Количество являются исходными и вводятся с клавиатуры в текстовые поля. Поэтому в программе им присвоим имена txtЦена и txtКоличество соответственно.

Результат «Стоимость» выводится на форму. Он зависит от исходных данных и не может быть произвольно изменен пользователем. Поэтому в программе он представлен надписью с именем lblрзтСтоимость.

Структура данных задачи представлена в табл. 3.2.

Таблица 3.2

Структура данных

Реквизит

Имя

Назначение

Цена

txtЦена

Цена товара

Количество

txtКоличество

Количество товара

Стоимость

lblрзтСтоимость

Стоимость товара

3.3.5. Интерфейс с пользователем

Решение задачи производится с помощью формы, приведенной на рис. 3.2. В заголовке формы указано название приложения «Касса».

Рис. 3.2. Форма для вычисления стоимости товара

На форме слова «Цена», «Количество» и «Стоимость» представляются надписями. Исходные значения цены и количества вводятся в текстовые поля. Вычисления производятся при нажатии кнопки «Вычислить». Результат помещается в вогнутую область рядом с надписью «Стоимость». Вогнутая область в форме представляется надписью.

3.3.6. Код программы

В процедуре, которая обрабатывает событие "Щелчок на кнопке «Вычислить»", должен быть только один оператор:

lbрзтlСтоимость.Caption = txtЦена.Text * txtКоличество.Text

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

lblрзтСтоимость = txtЦена * txtКоличество

Процедура, которая обрабатывает событие "Щелчок на кнопке «Вычислить»", представлена ниже.

PrivateSubcmdВычислить_Click()

lblрзтСтоимость = txtЦена * txtКоличество

End Sub

3.3.7. Реализация проекта

Реализация проекта осуществляется в такой последовательности:

1. Загрузить VB командой Пуск – Программы – Microsoft Visual Studio 6.0 – Microsoft Visual Basic 6.0.

2. Выбрать в диалоговом окне New Project (Создание проекта) во вкладке New тип проекта (значок <Standard EXE>) и нажать кнопку «Открыть». В результате появляется главное окно VB, в рабочей области которого в окне формы «Project1 Form1 (Form)» представлена пустая форма «Form1».

3. Задать имя и заголовок формы. Для этого при выделенной форме (отображаются маркеры по границе формы) необходимо:

3.1. Ввести значение «Касса» в свойстве Caption (Заголовок).

3.2. Выделить введенное значение (клавиши <Shift+Home>) и скопировать в буфер (клавиши <Ctrl+C>).

3.3. Щелкнуть на названии свойства Name, вставить из буфера значение «Касса» (клавиши <Ctrl+V>) и в начале этого слова добавить префикс frm, т.е. свойство Name получает значение frmКасса.

4. На форму поместить надпись «Цена» и соответствующее текстовое поле. Для этого необходимо:

    1. На панели элементов управления щелкнуть элемент Label и указать место и его размер на форме. Аналогично создать текстовое поле (TextBox) справа от надписи. В результате на форме появляется подпись «Label1» и текстовое поле «Text1».

4.2. Выделить на форме элемент Label1 и в окне свойств в свойстве Caption ввести значение «Цена».

4.3. Выделить введенное значение и скопировать в буфер.

4.4. Щелкнуть на названии свойства Name и вставить из буфера значение «Цена». В начале этого слова добавить префикс lbl.

4.5. Выделить на форме текстовое поле Text1, а в окне свойств в свойстве Name вставить из буфера значение «Цена». В начале этого слова добавить префикс txt. Таким образом свойство Name для текстового поля получает значение txtЦена.

4.6. В свойстве Text1 текстового поля удалить значение «Text1», что избавит в дальнейшей работе от необходимости каждый раз удалять это значение перед вводом цены (выделить значение «Text1» и нажать клавишу <Delete>).

5. Ниже в форме создать надпись «Количество» и соответствующее текстовое поле подобно тому, как это было сделано в п.4.

6. Создать командную кнопку «Вычислить». Для этого надо:

6.1. На панели элементов управления щелкнуть элемент CommandButton и указать место и его размер на форме.

6.2. В окне свойств в свойстве Caption ввести значение «Вычислить».

6.3. Выделить введенное значение и скопировать в буфер.

6.4. Щелкнуть на имени свойства Name, вставить из буфера название "Вычислить" и в начале этого слова добавить префикс cmd. Таким образом, свойство Name для командной кнопки получает значение cmdВычислить.

7. В нижней части формы создать две надписи: надпись «Стоимость» и надпись, в которую будет помещаться результат. Для этого надо:

7.1. Создать две надписи на одной линии.

7.2. Выделить первую надпись, в свойство Caption ввести значение «Стоимость», а свойству Name задать значение lblСтоимость.

7.3. Выделить вторую надпись, в свойство Caption ввести значение «0» (будет выводиться в надписи до выполнения вычислений), а в свойстве Name задать значение lblрзтСтоимость. В свойстве BorderStyle из раскрывающегося списка выбрать 1-Fixed Single, что придает вид вдавленного поля, похожего на текстовое поле. Но оставшийся серый цвет фона будет свидетельствовать о том, что поле не доступно для изменений (оно содержит результат вычислений). На этом заканчивается создание интерфейса.

8. Создать код процедуры, обрабатывающей нажатие кнопки «Вычислить». Для этого:

8.1. Дважды щелкнуть на кнопке «Вычислить». В результате чего открывается окно кода, в котором уже имеется заголовок процедуры Private Sub cmdВычислить_Click() (т.е. как раз той процедуры, которая обрабатывает нужное событие) и окончание процедуры End Sub.

    1. В теле процедуры ввести оператор

lblрзтСтоимость = txtЦена * txtКоличество

Во избежание ошибок в именах элементов следует вводить префикс и затем нажать комбинацию клавиш <Ctrl+J>. Из появившегося списка выбрать нужное имя и нажать клавишу <Tab>, чтобы вставить его в код процедуры.

9. Сохранить форму и проект в папке МЭО13 на диске D:.

studfiles.net

Задания по программированию в VBA

Практическая работа по информатике: Программирование в VBA

Тема 1: Вычисление значений таблично заданной функции.

Цель. Рассмотреть алгоритм решения таблично заданной функции и составить программу в VBA.

      Sin(x)+lg(x) x>3.5

Y=                               X 2;5 ΔX=0.25

    Cos2 (x) x<=3.5

Блок-схема

 

 

 

Мы водим в лист MS Excel начальные данные: Xmin, Xmax и h:

 

А

В

1

Xmin=

2

2

Xmax=

5

3

H=

0,25

Создаем макрос:Сервис – Макрос – макросы. Задвем имя(решение). Вводим программу:

Sub решение()

Xmin = Cells(1, 2)

Xmax = Cells(2, 2)

h = Cells(3, 2)

For X = Xmin To Xmax Step h

If 3.5 < X Then

y = Sin(X) + Log(X)

ElseIf X <= 3.5 Then

y = (Cos(X)) ^ 2

End If

Cells(i + 2, 4) = X

Cells(i + 2, 5) = y

i = i + 1

Next X

End Sub

Запускаем программу: кнопка F5.

Сворачиваем программу и на листе MS Excel нам выдает данные:

X

Y

2

0,173178

2,25

0,394602

2,5

0,641831

2,75

0,854335

3

0,980085

3,25

0,988294

3,5

0,876951

3,75

0,750195

4

0,629492

4,25

0,55193

4,5

0,526547

4,75

0,558852

5

0,650514

Это и есть решение нашей функции.

Строим диаграмму:

Вывод. В ходе работы мы рассмотрели алгоритм решения таблично заданной функции(блок-схему) и составили программу в VBA.

Задача №2.

Тема: Поиск экстремумов функции.

Цель. Рассмотреть методику нахождения экстремумов функции, составить блок-схему и программу вычисления в VBA.

X3 -6x2+9x+4

Найти максимум на промежутке 0,2;1,5 с шагом 0,3. точность поиска экстремумов 10-5

Максимум функции будет, когда она начинает убывать. Если она начала убывать, то на этом промежутке находится максимальное значение У. для достижения заданной точности пользуемся правилом: если модуль(у-у1)> желаемой точности, то возвращаемся на 2 шага назад, уменьшаем шаг в 10 раз и опять повторяем до тех пор, пока условие не будет выполняться.

Блок-схема.

Мы водим в лист MS Excel начальные данные: Xmin, Xmax и h:

 

А

В

1

Xmin=

0,2

2

Xmax=

1,5

3

H=

0,3

4

Eps=

0,00001

Создаем макрос:Сервис – Макрос – макросы. Задаем имя(экстремуму). Вводим программу:

Sub экстремуму()

Xmin = Cells(1, 2)

Xmax = Cells(2, 2)

h = Cells(3, 2)

eps = Cells(4, 2)

For X = Xmin To Xmax Step h

Y = X ^ 3 - 6 * X ^ 2 + 9 * X + 4

Cells(i + 1, 4) = X

Cells(i + 1, 5) = Y

i = i + 1

Next X

Ymax = 0

Do

X = Xmin

Y0 = Ymax

Do

Y = X ^ 3 - 6 * X ^ 2 + 9 * X + 4

Y1 = (X + h) ^ 3 - 6 * (X + h) ^ 2 + 9 * (X + h) + 4

X = X + h

Loop While Y1 > Y

Ymax = Y

XYmax = X - h

Xmin = X - 2 * h

h = h / 10

Loop While Abs(Y - Y1) > eps

Cells(i + 2, 6) = XYmax

Cells(i + 2, 7) = Ymax

End Sub

Запускаем программу: кнопка F5.

Сворачиваем программу и на листе MS Excel нам выдает данные:

0,2

5,568

   

0,5

7,125

   

0,8

7,872

   

1,1

7,971

   

1,4

7,584

   

0,75

7,796875

   

1,05

7,992625

   

1,2

7,888

   

1,35

7,675375

   

1,5

7,375

   
       

1,00005

8

   

Вывод. В ходе работы мы рассмотрели методику нахождения экстремума функции, составили блок-схему и программу вычисления в VBA.

Задача 3.

Тема 3: Решение нелинейных уравнений.

Цель. Рассмотреть методы решения нелинейных уравнений : метод деления отрезка пополам. Составить алгоритм решения и реализовать программы в VBA.

0.8x4-2x2

Интервал 1;2 . точность 10-5

1) Метод деления отрезка пополам.

Делим отрезок пополам:

X=(a+b)/2

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

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

Блок-схема.

 

 Мы водим в лист MS Excel начальные данные: a, b,f(x), eps:

 

А

В

1

a=

1

2

b=

2

3

Eps=

0,00001

4

   

Создаем макрос: Сервис – Макрос – макросы. Задаем имя(нелинейное). Вводим программу:

Sub нелинейное()

a = Cells(1, 2)

b = Cells(2, 2)

eps = Cells(3, 2)

X = 0

Do

X0 = X

X = (a + b) / 2

If f(a) * f(X) > 0 Then

a = X

Else

b = X

End If

Cells(i + 3, 4) = X

Cells(i + 3, 5) = f(X)

i = i + 1

Loop While Abs(X - X0) > eps

End Sub

Function f(X)

f = 0.8 * X ^ 4 - 2 * X ^ 2

End Function

Запускаем программу: кнопка F5.

Сворачиваем программу и на листе MS Excel нам выдает данные:

X

f(x)

1,5

-0,45

1,75

1,378125

1,625

0,29707

1,5625

-0,11444

1,59375

0,081361

1,578125

-0,01897

1,585938

0,03058

1,582031

0,005652

1,580078

-0,0067

1,581055

-0,00053

1,581543

0,002558

1,581299

0,001012

1,581177

0,00024

1,581116

-0,00015

1,581146

4,69E-05

1,581131

-5E-05

1,581139

-1,4E-06

2)Метод хорд.

Основан на предположении, что на маленьком отрезке функция изменяется линейно. Тогда кривую можно заменить хордой и в качестве приближенного значения принять точку пересечения хорды с осью абсцисс. Точка Х находиться по формуле Х=a-((b-a)*f(a))/(f(b)-f(a)). Определяют знак функции f(x) и выбирают ту половину отрезка, на концах которого функция принимает значение разных знаков и деление повторяется.

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

Эти два метода очень похожи и различаются только способом нахождения Х. все остальное то же самое.

 Мы водим в лист MS Excel начальные данные: a, b,f(x), eps:

 

А

В

1

a=

1

2

b=

2

3

Eps=

0,00001

4

   

Создаем макрос: Сервис – Макрос – макросы. Задаем имя(нелинейное). Вводим программу:

Sub нелинейное()

a = Cells(1, 2)

b = Cells(2, 2)

eps = Cells(3, 2)

X = 0

Do

X0 = X

X = a - ((b - a) * f(a)) / (f(b) - f(a))

If f(a) * f(X) > 0 Then

a = X

Else

b = X

End If

Cells(i + 3, 4) = X

Cells(i + 3, 5) = f(X)

i = i + 1

Loop While Abs(X - X0) > eps

End Sub

Function f(X)

f = 0.8 * X ^ 4 - 2 * X ^ 2

End Function

Вывод. В ходе работы мы рассмотрели методы решения нелинейных уравнений: метод деления отрезка пополам и метод хорд. Составили алгоритм решения и реализовали программу в VBA.

zadachi-ru.com.ua

Решение задач в Visual Basic, решение задач в вижуал бейсике. Решение задач в visual basic онлайн

  • Проблемы с написанием программ на Visual Basic (Вижуал Бейсик)?
  • Скоро экзамен и для допуска нужно сдать море лабораторных работ по программированию?
  • Не понимаете материал, а на разборы нет времени?

Решение всех проблем — это агентство Neudoff.net!

О нас

Агентство Neudoff.net работает на рынке образовательных услуг уже не протяжении многих лет. Мы помогаем студентам и школьникам, столкнувшимся с проблемами в учебе, в частности трудностями с программированием. Написание программ на языке Visual Basic (Вижуал Бейсик) – это наша работа!

У нас работают только первоклассные специалисты. Каждый из них имеет высшее образование и огромный опыт работы.

Наши возможности

Язык Visual Basic (Вижуал Бейсик) часто изучается в курсе информатики, как пример языка поддерживающего объектно-ориентированное программирование.

На счету наших сотрудников множество качественно выполненных лабораторных работ по Visual Basic (Вижуал Бейсику). Все клиенты остались довольны!

Чтобы примкнуть к их числу, вам достаточно сделать заказ!

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

Как заказать работу?

Чтобы заказать решение задачи, лабораторной или контрольной работы по Visual Basic (Вижуал Бейсик) вам нужно воспользоваться специальной «Формой отправки заказа». Она проста и удобна в использовании. С ее помощью вы быстро и без проблем сможете прислать нам задания для решения, указать сроки выполнения и иную важную информацию.

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

Мы принимаем заказы круглосуточно!

Наши гарантии

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

Neudoff.net очень дорожит своей репутацией и мы стремимся чтобы каждый клиент остался доволен. Качественное предоставление услуг наш приоритет!

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

Наши бонусы и скидки

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

Остались вопросы? Что-то стало не понятно? Спросите! Напишите нам и задайте все интересующие вас вопросы.

neudoff.net

Вариант № 1 - Задачи по Visual Basic


Задачи по Visual Basic
скачать (186 kb.)

Доступные файлы (15):


содержание

Лабораторные работы.doc

Реклама MarketGid:
Вариант № 1

Задача № 1


  1. Постановка задачи: Составить программу нахождения площади прямоугольника со сторонами Х и У.

  1. Интерфейс задачи:


  1. Листинг программы:

Dim x As Integer, y As Integer, z As Integer

Private Sub Command1_Click()

Text3.Text = Text1 + Text2.Text

x = Text1.Text

y = Text2.Text

z = x * y: Text3.Text = z

End Sub

Private Sub Command2_Click()

Form1.Hide: Form2.Show

End Sub

Задача № 2


  1. Постановка задачи: Составить программу перевода строки в нижний регистр.

  1. Интерфейс задачи:


  1. Листинг программы:

Dim x As String, y As String

Private Sub Command1_Click()

x = Text1.Text

y = LCase(x): Text2.Text = y

End Sub

Private Sub Command2_Click()

Form2.Hide: Form3.Show

End Sub

Private Sub Command3_Click()

Form2.Hide: Form1.Show

End Sub

Задача № 3


  1. Постановка задачи: Составить программу перевода температуры из шкалы Фаренгейта в шкалу Цельсия (0 F соответствует -17,8, а 0 C соответствует+32 F ).

  2. Интерфейс задачи:


  1. Листинг программы:

Dim x As Variant, y As Variant

Private Sub Command1_Click()

x = Text1.Text

y = (5 * (32 - x) / 9): Text2.Text = y

End Sub

Private Sub Command2_Click()

Form3.Hide: Form4.Show

End Sub

Private Sub Command3_Click()

Form3.Hide: Form2.Show

End Sub

Задача № 4


  1. Постановка задачи: Составить программу определения, в норме ли вес обследуемого пациента (нормой считается вес, равный (рост(см)-100)5кг).

  2. Интерфейс задачи:


  1. Листинг программы:

Dim x As Integer, y As Integer

Private Sub Command1_Click()

x = Text1.Text

y = Text2.Text

If (y < (x - 100) - 5) Or (y > (x - 100) + 5) Then MsgBox "Вес не в норме" Else MsgBox "Вес в норме"

End Sub

Private Sub Command2_Click()

Form4.Hide: Form5.Show

End Sub

Private Sub Command3_Click()

Form4.Hide: Form3.Show

End Sub

Задача № 5


  1. Постановка задачи: Составить программу, определяющую сколько раз встречается заданное число (вводится с клавиатуры) в диапазоне от 10 до 352.

  2. Интерфейс задачи:


  1. Листинг программы:


Dim x As String, s As Integer

Private Sub Command1_Click()

x = Text1.Text

k = Len(x)

Select Case k

Case 1

s = 0

For i = 10 To 352

n = Len(i)

For j = 1 To n

For y = 1 To k

If Mid(x, y, 1) = Mid(i, j, k) Then s = s + 1

Next y

Next j

Next i

Case 2

s = 0

For i = 10 To 352

For j = 1 To k

If x = Mid(i, j, 2) Then s = s + 1

Next j

Next i

Case 3

s = 0

For i = 10 To 352

For j = 1 To k

If x = Mid(i, j, 3) Then s = s + 1

Next j

Next i

End Select

Text2.Text = s

End Sub

Private Sub Command2_Click()

Form5.Hide: Form6.Show

End Sub

Private Sub Command3_Click()

Form5.Hide: Form4.Show

End Sub

Задача № 6


  1. Постановка задачи: Составить программу нахождения суммы минимального и максимального в массиве из 20 чисел.

  2. Интерфейс задачи:


  1. Листинг программы:

Private Sub Command1_Click()

Dim x(19) As Integer

For y = 0 To 19

x(y) = MSFlexGrid1.TextMatrix(y, 0)

Next y

Dim max As Integer

Dim min As Integer

max = x(0)

min = x(0)

For i = 1 To 19

If max < x(i) Then

max = x(i)

End If

If min > x(i) Then

min = x(i)

End If

Next i

Text2.Text = min

Text3.Text = max

Text1.Text = max + min

End Sub

Private Sub Command2_Click()

Form6.Hide: Form5.Show

End Sub

Private Sub Command3_Click()

Form7.Show: Form6.Hide

End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 48 To 57

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

Case 45

If Mid(MSFlexGrid1.Text, 1, 1) = "-" Then

MSFlexGrid1.Text = Mid(MSFlexGrid1.Text, 2, Len(MSFlexGrid1.Text) - 1)

Else

MSFlexGrid1.Text = "-" & MSFlexGrid1.Text

End If

End Select

End Sub


Задача № 7

  1. Постановка задачи: Составить программу определения средней оценки списка студентов по трём предметам.

  2. Интерфейс задачи:


  1. Листинг программы:

Private Sub Command1_Click()

Dim a(6, 5) As Variant

Dim s(1 To 5) As Variant

For k = 1 To 5

s(k) = 0

For i = 1 To 3

s(k) = s(k) + MSFlexGrid1.TextMatrix(k, i)

Next i

MSFlexGrid1.TextMatrix(k, 4) = s(k) / 3

Next k

End Sub

Private Sub Command2_Click()

Form7.Hide: Form6.Show

End Sub

Private Sub Command3_Click()

Form7.Hide: Form8.Show

End Sub

Private Sub Form_Load()

MSFlexGrid1.TextMatrix(0, 1) = "Матем."

MSFlexGrid1.TextMatrix(0, 2) = "Физика"

MSFlexGrid1.TextMatrix(0, 3) = "Информ."

MSFlexGrid1.TextMatrix(0, 4) = "Ср.оценка"

End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 0 To 255

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

End Select

End Sub

Задача № 8


  1. Постановка задачи: Решить задание № 7 и отсортировать список по возрастанию средней оценки.

  1. Интерфейс задачи:

До сортировки:

После сортировки:


  1. Листинг программы:

Dim a(6, 5) As Variant

Dim x As Variant

Private Sub Command1_Click()

Dim s(1 To 5) As Variant

Dim tmp As Variant

For k = 1 To 5

s(k) = 0

For i = 1 To 3

s(k) = s(k) + MSFlexGrid1.TextMatrix(k, i)

Next i

MSFlexGrid1.TextMatrix(k, 4) = s(k) / 3

Next k

End Sub

Private Sub Command2_Click()

Form8.Hide: Form7.Show

End Sub

Private Sub Command3_Click()

Form8.Hide: Form9.Show

End Sub

Private Sub Command4_Click()

x = 4

For j = 1 To MSFlexGrid1.Rows - 1

For i = j To MSFlexGrid1.Rows - 1

If MSFlexGrid1.TextMatrix(j, x) > MSFlexGrid1.TextMatrix(i, x) Then

For k = 0 To MSFlexGrid1.Cols - 1

tmp = MSFlexGrid1.TextMatrix(j, k)

MSFlexGrid1.TextMatrix(j, k) = MSFlexGrid1.TextMatrix(i, k)

MSFlexGrid1.TextMatrix(i, k) = tmp

Next k

End If

Next i

Next j

End Sub

Private Sub Form_Load()

MSFlexGrid1.TextMatrix(0, 1) = "Матем."

MSFlexGrid1.TextMatrix(0, 2) = "Физика"

MSFlexGrid1.TextMatrix(0, 3) = "Информ."

MSFlexGrid1.TextMatrix(0, 4) = "Ср.оценка"

End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 0 To 255

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

End Select

End Sub

Private Sub MSFlexGrid2_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 0 To 255

MSFlexGrid2.Text = MSFlexGrid1.Text & Chr(KeyAscii)

End Select

End Sub

Задача № 9

(Функция)


  1. Постановка задачи: Решить задание № 8 с использованием подпрограмм.

  2. Интерфейс задачи:


До сортировки


После сортировки


  1. Листинг программы:

Private Sub Command1_Click()

Dim a(6, 5) As Variant

Dim s(1 To 5) As Variant

Dim tmp As Variant

For k = 1 To 5

s(k) = 0

For i = 1 To 3

s(k) = s(k) + MSFlexGrid1.TextMatrix(k, i)

Next i

MSFlexGrid1.TextMatrix(k, 4) = s(k) / 3

Next k

End Sub

Private Sub Command2_Click()

Form9.Hide: Form8.Show

End Sub

Private Sub Command3_Click()

Form9.Hide: Form11.Show

End Sub

Public Sub Command4_Click()

w = Sort(MSFlexGrid1, 4)

End Sub

Private Sub Form_Load()

MSFlexGrid1.TextMatrix(0, 1) = "Матем."

MSFlexGrid1.TextMatrix(0, 2) = "Физика"

MSFlexGrid1.TextMatrix(0, 3) = "Информ."

MSFlexGrid1.TextMatrix(0, 4) = "Ср.оценка"

End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 0 To 255

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

End Select

End Sub

(Процедура)


  1. Постановка задачи: Решить задание № 8 с использованием подпрограмм.

  2. Интерфейс задачи:


До сортировки


После сортировки


  1. Листинг программы:

Private Sub Command1_Click()

Dim a(6, 5) As Variant

Dim s(1 To 5) As Variant

Dim tmp As Variant

For k = 1 To 5

s(k) = 0

For i = 1 To 3

s(k) = s(k) + MSFlexGrid1.TextMatrix(k, i)

Next i

MSFlexGrid1.TextMatrix(k, 4) = s(k) / 3

Next k

End Sub

Private Sub Command2_Click()

Form11.Hide: Form9.Show

End Sub

Private Sub Command3_Click()

Form11.Hide: Form10.Show

End Sub

Public Sub Command4_Click()

Sortirovka MSFlexGrid1, 4

End Sub

Private Sub Form_Load()

MSFlexGrid1.TextMatrix(0, 1) = "Матем."

MSFlexGrid1.TextMatrix(0, 2) = "Физика"

MSFlexGrid1.TextMatrix(0, 3) = "Информ."

MSFlexGrid1.TextMatrix(0, 4) = "Ср.оценка"

End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 0 To 255

MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)

End Select

End Sub

Модуль1.

Public Function Sort(w As Object, x As Long) As Long

For j = 1 To w.Rows - 1

For i = j To w.Rows - 1

If CInt(w.TextMatrix(j, x)) > CInt(w.TextMatrix(i, x)) Then

For k = 0 To w.Cols - 1

tmp = w.TextMatrix(j, k)

w.TextMatrix(j, k) = w.TextMatrix(i, k)

w.TextMatrix(i, k) = tmp

Next k

End If

Next i

Next j

Exit Function

End Function

Public Sub Sortirovka(w As Object, x As Long)

For j = 1 To w.Rows - 1

For i = j To w.Rows - 1

If CInt(w.TextMatrix(j, x)) > CInt(w.TextMatrix(i, x)) Then

For k = 0 To w.Cols - 1

tmp = w.TextMatrix(j, k)

w.TextMatrix(j, k) = w.TextMatrix(i, k)

w.TextMatrix(i, k) = tmp

Next k

End If

Next i

Next j

Exit Sub

End Sub

Задача № 10


  1. Постановка задачи: Составить программу рисования цифр 0-9 в псевдографике. Полученный рисунок сохранить в файл.

  1. Интерфейс задачи:


  1. Листинг программы:

Dim n As Integer

Private Sub Command1_Click()

Text1.Text = " 000 " & vbCrLf & " 0 0 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & " 0 0 " & vbCrLf & " 000 "

End Sub

Private Sub Command10_Click()

Text1.Text = " 000 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 " & vbCrLf & " 0" & vbCrLf & " 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 "

End Sub

Private Sub Command11_Click()

Dim Name As String

Dim k As String

k = Text1.Text

n = FreeFile

CommonDialog1.ShowSave

Name = CommonDialog1.FileName

If Name = "" Then MsgBox "íå ââåäåíî çíà÷åíèå"

If Name <> "" Then

Open Name For Output As n

Do Until EOF(n)

Line Input #n, k

Loop

Close

End If

CommonDialog1.FileName = ""

End Sub

Private Sub Command13_Click()

Form10.Hide: Form11.Show

End Sub

Private Sub Command2_Click()

Text1.Text = " 0 " & vbCrLf & " 00 " & vbCrLf & " 0 0 " & vbCrLf & "0 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0000 "

End Sub

Private Sub Command4_Click()

Text1.Text = " 000 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & " 0 " & vbCrLf & " 00 " & vbCrLf & " 0 " & vbCrLf & " 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 "

End Sub

Private Sub Command3_Click()

Text1.Text = " 000 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & "0 " & vbCrLf & "00000"

End Sub

Private Sub Command5_Click()

Text1.Text = " 0 " & vbCrLf & " 00 " & vbCrLf & " 0 0 " & vbCrLf & "0 0 " & vbCrLf & "00000" & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 "

End Sub

Private Sub Command6_Click()

Text1.Text = "00000" & vbCrLf & "0 " & vbCrLf & "0 00 " & vbCrLf & "00 0 " & vbCrLf & "0 0" & vbCrLf & " 0" & vbCrLf & " 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 "

End Sub

Private Sub Command7_Click()

Text1.Text = " 0000 " & vbCrLf & "0 0" & vbCrLf & "0 " & vbCrLf & "0000 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 "

End Sub

Private Sub Command8_Click()

Text1.Text = "0000000" & vbCrLf & " 0" & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 " & vbCrLf & " 0 "

End Sub

Private Sub Command9_Click()

Text1.Text = " 000 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 00 " & vbCrLf & "0 0 " & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0" & vbCrLf & "0 0 " & vbCrLf & " 000 "

End Sub

^

Выполнил: студент II курса

факультета МФИ

(прикладная информатика)

Принял преподаватель:

Тихвин 2007г.


Скачать файл (186 kb.)


gendocs.ru

Задачи по Visual Basic [DOC]

Электронное учебное пособие "VBA. Решение задач" - учебник по VBA с примерами. По этому учебнику легко научиться программировать на Visual Basic, так как написан очень доходчиво. Есть описание работы с компилятором Visual Basic 6, который встроен в продукты Microsoft (Excel, Word и Access).

  • 5,11 МБ
  • дата добавления неизвестна
  • изменен

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

  • 298,56 КБ
  • дата добавления неизвестна
  • изменен

Архив содержит большое количество задач, решённых на языке QBasic. Представлены как задачи из школьной программы, так и олимпиадные задачи на разные темы.

  • 787,66 КБ
  • дата добавления неизвестна
  • изменен

Общие сведения о Visual Basic. Лабораторная работа № 1 Изучение интегрированной среды и основ работы в Visual Basic. Лабораторная работа № 2 Организация ввода-вывода данных, изменение свойств объектов, разработка приложений с линейными алгоритмами. Лабораторная работа № 3 Разработка приложений с разветвляющимися алгоритмами. Лабораторная работа № 4 Разработка приложений с...

  • 2,25 МБ
  • дата добавления неизвестна
  • изменен

Собрано 18 сделаных и провереных лабораторных работ по Visual Basic. Простая форма, MDI-форма, циклы, массивы, сетка, графики, диаграммы, дополнительные элементы управления, анимация, работа с файлами.

  • 30,56 КБ
  • дата добавления неизвестна
  • изменен

Сюда входят различные учебники по VISIAL BASIC 6.0. : Коннэлл Visual Basic 6 Введение в программирование баз данных,Visual Basic. Освой на примерах, Пособие-самоучитель on-line "Visual Basic с нуля", Встроенные функции Visual Basic, Электронный лабораторный практикум по VISIAL BASIC.

  • 27,92 МБ
  • дата добавления неизвестна
  • изменен

www.twirpx.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *