Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_metodichka.pdf
Скачиваний:
11
Добавлен:
26.03.2015
Размер:
1.88 Mб
Скачать

том для кнопки «ЗАДАЧА1» на основе цикла For...Next с выводом в соответствующее графическое окно.

4.Для кнопки «ЗАДАЧА2» последовательно повторить вычисления с изменением значений одной из переменных на основе цикла Do…Loop последовательно с использованием операндов While и Until.

5.Для кнопки «ЗАДАЧА3» провести вычисление по формулам, изменив количество выполнения цикла до тех пор, пока для переменных целого типа i, j или k (соответственно варианту в табл. 4) не выполнятся условия:

 

i2

 

j

 

 

> 0.1 или k + 1 < 10

 

< 1 0 0 или

 

i

+

j

+ 1

i = 1

1

j = 0

k =0

4.Для кнопки «ОЧИСТКА» запрограммировать очистку результатов, выводимых на форму и в графические окна.

5.Проверить работу всех командных кнопок.

6.Сохранить проект приложения и его exe-файл в свой каталог.

7.Выйти из среды редактора Visual Basic и поработать с созданным приложением, запустив на выполнение его exe-файл из Про-

водника.

 

 

 

 

Таблица 4

 

 

 

 

Формула для вычислений

For...Next

Do...Loop

 

 

 

 

1

h = (10r j) / c2 +em ln(c +1)

c = 2.1;r =14. 104

j =

 

y = (h m j2 ) +(0.001c)2

m = 7;

= 0(0.1)1.7

 

 

 

j = {4,2;0,3;1,7}

 

 

 

 

 

 

2

y =

i b b2 a

a = 012. 103 ;

i =

 

z = y tg(n / 4) e1+b / 100

b = 8.5;n = 2;

=1(0.5)10

 

 

 

i = {2;1;8,3}

 

 

 

 

 

 

4

z =

a +1 tg(4 + j + y)

y = −155.; k = 6

j =

 

q = ej 0.01y +(k z)2

j = {8,9;0,6;1;6,4}

2(0.2) 0.1

 

 

 

a = 2.7 104

 

 

 

 

 

 

49

Формула для вычислений

For...Next

Do...Loop

 

 

 

 

5

y = (m j +b) / tga e10 a

b = 2.5; m = 3

j =

 

z = 2 y b + a +b / (mb 1)

a =1.4 103

= b(0.25)3.5

 

j ={0,7;2,6;2,9}

 

 

 

 

 

6

c = 2(b +i) / k

2 y / 0.014

b = −1.74;

i =

 

d =e1c +4.9(x2 +1)

 

i = {0,9;8,4;2}

= 0(0.5)3

 

 

 

 

 

 

y =106. 104

 

 

 

 

 

 

 

x = −156.; k = 6

 

 

 

 

 

 

7

v = 0.4 u +b 2

0.7k +3.9 / m

b = −5.4;m = 4

k =

 

w =1000 e0.2u ln(800.1u)

u = 0.05 104

=1(0.5)5.5

 

 

 

 

 

 

k = {6;4;0,3;7}

 

 

 

 

 

 

8

z = ty2

i + x /(ix +1) tgy

x = 0.911; y = 2.92;

i =

 

q =

z2 +5z ln( y +0.33)

t = 6.96 105

=1(0.2)2

 

 

 

 

 

 

i = {9;1,4;5}

 

 

 

 

 

9

w = 0.76 j +etj (4 y / n)2

y = 2.5;t = −7.4;

j =

 

s = 21 w 0.1t /(2 +n2 ) j / 4

n = 9;

= 0(0.1)2

 

 

 

 

 

 

j = {0,5;8,4;0,3}

 

 

 

 

 

 

10

y = s / ln(5.2 f ) /(es +

5s +km)

s = 7.94;m =10

k =

 

v =

(1+my mk) / ln(1

+ y)

f = 3.2 104

= 0(0.5)10

 

 

 

 

 

 

k = {4;0,5;8}

 

 

 

 

 

11

w = tg(a / 3) +(1 +1.3t) +ea / m

a = −1.24;m =16

j =

 

r = 0.99

3w + j +| a + a2 1|

t =15 105

=1.78(0.2)3.

 

 

 

 

 

 

j = {0,5;9,1;5}

 

 

 

 

 

12

d = 2 sin(k / a) / cos(m +b)

a = 5.05;m = 6

k =

 

c = d /(d 2 b +1) /(1e0.004k 0.4 )

b = 5 103

= a(0.5)3

 

 

 

 

 

 

k = {1,6;9,1;8}

 

 

 

 

 

 

 

 

 

50

Формула для вычислений

For...Next

Do...Loop

 

 

 

 

13

y = a /(b +e10 b ) /(1+ ji)

b = 2.9; j = 6

i =

 

t = y +1/ cos( y +1) / | 1.2 j |

a =110.5 108

= b(0.1)2

 

 

 

 

i = {7;4;2;6}

 

 

 

 

 

 

 

14

z =

t a +m +4 e

2.2 j +2.5 y

a = −117.; y = 0.14;

j =

 

 

t = 45 105 ;m = 4;

= 0.8(0.02)1

 

w = ln(0.4 m) / (31.+0.7a z)

 

 

 

 

j = {5;3;1;7;3}

 

 

 

 

 

15

r = j x + 1+20a /(1+5a)

x = −1555. 104

j =

 

b = r +12r e7.5 (x r / n)

a = 4.43;n =15

= a(0.1)5.43

 

 

 

 

j = {5,4;2,7;0,1}

 

 

 

 

 

 

 

4.3.Контрольные вопросы

1.Какие вычисления требуют использования циклических операторов?

2.Какие операторы используются в VB для организации циклических вычислений?

3.Как работает цикл For...Next?

4.Как происходит выход из цикла For...Next?

5.Особенности использования конструкции Step в цикле

For...Next .

6.Как работает цикл Do…Loop?

7.Как задается и работает условие выхода из циклов Do…Loop?

8.В чем отличия выполнения операторов цикла с условиями

While и Until?

9.Как задать шаг изменения значения переменной в циклах

While и Until?

10.Как применяются операторы цикла для вычисления сумм?

11.Как применяются операторы цикла для вычисления произве-

дений?

12.Правила записи вложенных циклических операторов.

51

5. ОДНОМЕРНЫЕ МАССИВЫ

5.1. Общие сведения

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

Одномерные массивы имеют один индекс, например a(i), где a – имя массива, i – номер элемента массива.

Массивы, до их использования в программе, должны быть объявлены в операторе Dim, например:

Dim a(5) As Single

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

После объявления элементы массива могут использоваться в выражениях подобно простым переменным, но с указанием индекса в круглых скобках. Например, после приведенного выше объявления массива а(i) в программном коде можно обращаться к следующим элементам массива: а(0), а(1), а(2), а(3), а(4), а(5)

Если необходимо использовать определенную нумерацию элементов массива, например с 5 до 10, то это указывается при объявлении массива следующим образом:

Dim a(5 to 10) As Single

После этого в программном коде будут доступны следующие элемен-

ты массива: а(5), а(6), а(7), а(8), а(9), а(10)

Ввод элементов массива может производиться с помощью оператора присваивания или в режиме диалога.

Пример 5.1 программы ввода элементов одномерного массива в диалоговом режиме и вывода их в графическое окно в одну строку.

Dim z(10) As Single For i = 0 To 10

z(i) = InputBox(«Введите z») Picture1.Print z(i),

Next i

52

Запятая в конце строки вывода с оператором Print оставляет «курсор печати» в той же строке, что приводит к эффекту «разворачивания» выводимых в цикле элементов массива в строку.

Пример 5.2. Программа вычисления суммы элементов массива b = {5, 2; 4,5; 1; 2,9; 3}.

Dim b(1 To 5) As Single, s As Single, i As Integer s = 0

For i = 1 To 5

b(i) = Val(InputBox(«Введите элемент массива b»)) s = s + b(i)

Next i

Print «Сумма элементов массива равна»; s

Пример 5.3. Программа определения максимального элемента массива d = {12; 0,4; 30; -2; 5; 9,3} и номера этого элемента.

Dim d(1 To 6) As Single

Dim max As Single, n As Integer, i As Integer For i = 1 To 6

d(i) = Val(InputBox(«Введите элемент массива d»)) Next i

max = d(1) n = 1

For i = 1 To 6

If d(i) > max Then max = d(i): n = i End If

Next i

Print «Макс. значение =»; max; «имеет элемент с номером»; n

В приложении А рассматриваются приемы работы с массивами элементов управления для создания приложения «Калькулятор» (см. раздел А2), а также простыми и комбинированными списками для создания приложения «Накладная» (см. раздел А3), которые с некоторыми оговорками также можно использовать в качестве одномерных массивов обрабатываемых данных.

5.2.Задание для выполнения на компьютере

1.Создать на форме пользовательский интерфейс, представленный на рис. 5.1.

53

2.Для командной кнопки «Ввод массива» создать и выполнить программу для ввода в память исходного массива из табл. 5, согласно своему варианту (если по условию их два, то выбрать один из них), и вывода значений его элементов в графическое окно по щелчку мыши.

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

4.Для командной кнопки «Произведение» создать и выполнить программу, вычисляющую произведение элементов массива.

5.Для командной кнопки «Максимум» создать и выполнить программу, вычисляющую максимальный элемент массива.

Label

PictureBox

CommandButton

Рис. 5.1. Примерный интерфейс задачи

6.Для командной кнопки «Минимум» создать и выполнить программу, вычисляющую минимальный элемент массива.

7.Для командной кнопки «Очистка» создать программу очистки всех графических окон на форме и проверить ее работу.

8.Используя объект Form и процедуру обработки события Click, составить для него программу по условиям задачи, приведенным в табл. 5, согласно своему варианту, и вывести результат на форму.

54

9. Очистить графические окна и форму и выполнить расчеты для другого массива.

 

 

 

 

 

 

 

 

Таблица 5

 

 

 

 

Формула для вычислений

Исходные данные

 

 

 

 

 

 

 

 

 

 

1

n

 

 

n =

5;d =

12.55 10

4

;

 

h = d +ai 2

 

 

 

 

 

 

a =

{

 

 

}

 

i =1

 

 

0.8;4;0.17;2;0.9;1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

m

 

 

m = 4;c = −0.0045;

 

 

g = c (bj +1)2

b =

{

 

 

}

 

j =1

 

 

 

 

 

 

 

0.49;0.55;2;0.71

 

 

 

 

 

 

 

3

 

m

m = 5;

 

 

 

 

z = 01. x3 +(xi 2)2

x =

{2.1;0.6;1.1;2.7;4}

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

4

f = k !

 

 

k = 6;

 

 

 

 

g = f / 5

(ai

/ i)

a =

{2.3;7;7.2;4;9}

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

5

a +vi ,

vi > 0

a =1.75;b = −4.15;

 

 

wi =

 

vi 0

v =

{1;1.5;4;12.9;3}

 

b / vi ,

 

 

 

 

 

6

 

 

 

n = 5;

 

 

}

 

 

 

 

x =

{

 

 

 

n

 

 

2.7;5;4;3.5;7.7

 

q = (xi yi )

y =

{

}

 

 

 

i =1

 

 

 

 

 

 

 

2;3;15.;2;1

 

 

 

 

 

 

 

 

 

7

ci = ai +bi

 

n = 6;

 

}

 

 

 

 

a =

{

 

 

n

 

 

0.5;2;2.5;1;0;0.7

 

 

d = (ci / i)

 

b =

{

}

 

 

i 1

 

 

 

 

=

 

 

2.3;4;0.5;2;3;9

 

 

 

 

 

 

 

 

 

 

 

55

№ Формула для вычислений

Исходные данные

8

 

 

 

 

 

 

 

 

 

 

n1

= 6; n2

= 5;

 

 

 

n1

 

 

n2

 

 

 

a

=

{0.8;12;4;39.2;3;0.4}

 

 

 

 

 

 

 

2

b =

{19;1;24;4.2;8}

 

d = ai c (bi 1)

 

 

 

 

 

 

 

 

 

i =1

 

 

i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

d =51.05 104 ;

 

a

i

= (d exi

sin x ) / (

5 +cos x )

x

=

{0.7;6;7;0.9;0.2;1}

 

 

 

 

 

 

 

i

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

a

 

n

 

 

 

xi > 0

 

 

 

 

 

 

 

 

= xi ,

 

 

 

n

= 6;

 

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

xi 0

 

 

x

=

3;2;0.7;4.1;2;7

 

b = xi ,

 

 

 

 

 

{

}

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

s

 

 

n

 

2 /(i +1)

 

 

a = 5.45;n = 5;

 

= a +xi

 

 

x =

{

}

 

 

 

i

=

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4;2.1;2;4;3

 

 

 

n

 

 

 

 

 

 

 

y = 2.1;7.7;4.9;5;9

 

q = s yi / (i

 

+1)

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

z = max{xi }

 

 

 

 

x = {1;2.7;4.7;6;10}

 

 

 

5

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y = z xi

 

 

 

 

 

 

 

 

 

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

p = min{yi }

 

 

 

 

 

 

{

}

 

 

 

n

 

 

 

 

 

 

 

y =

 

 

 

 

 

5) + p

 

 

3;2;0.9;0.75;1

 

q = ( yi

 

 

 

 

 

 

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

56

Формула для вычислений

Исходные данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

yi > c

 

 

 

 

 

 

sin2 c,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i =1

 

 

 

 

y =

4;6;3;3;9;11

 

z =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

{

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

c,

 

 

yi c

 

 

c =10.1

 

 

cos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

q = t +

x +1

 

x

2

+

1

 

x +1

t =

0.45;

 

 

 

1

 

 

+

 

 

 

+... +

6

 

x =

{1.1;6.2;3;4;6;1}

 

 

x1

 

x2

 

x6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.3.Контрольные вопросы

1.Какие данные можно рассматривать как массив?

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

3.Как занести в память значения для элементов массива?

4.Как записываются значения элементов массива в расчетных формулах?

5.Как определить количество элементов в массиве?

6.Как задать нумерацию элементов массива в нужном интер-

вале?

7.Как найти сумму элементов массива?

8.Как найти произведение элементов массива?

9.Как найти минимальный элемент массива?

10.Как найти максимальный элемент массива?

57

6. ДВУМЕРНЫЕ МАССИВЫ

6.1. Общие сведения

Двумерные массивы имеют два индекса, например b(i, j), и используются для представления таблиц, матриц и т.п. Используются также и многомерные массивы, например, трехмерные массивы с(i, j, k), которые можно использовать для представления данных в многослойных таблицах, кубических матрицах, трехмерных тензорах и т. д.

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

Dim b(3, 4) As Integer

Здесь определен двумерный массив с 20-ю элементами целого типа с номерами индексов i начиная с 0 и заканчивая 3, а для j – начиная с 0 и заканчивая 4. Если необходимо нумерацию индексов начать с определенного номера, то это должно быть указано специально. Например, после объявления вещественного двумерного массива а следующим образом:

Dim а(5 to 10, 5 to 10) As Single

в памяти будет зарезервировано место для хранения 36 элементов массива a(i,j) объемом по 4 байта каждый с номерами по индексам i и j, начиная с 5 и заканчивая 10.

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

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

58

циальных приемов использования оператора Print внутри циклов: пустой Print, форматирование вывода функцией Format в операторе Print, запятая в конце списка в операторе Print, которые комментируются в нижеследующем примере.

Пример 6.1. Программа вывода двумерного массива размерно-

стью 2х3 в виде соответствующей ему матрицы

A =

 

1,2

0.4

0

 

 

4.1

2.2

1.7

 

 

 

 

 

Dim A(1 To 2, 1 To 3) As Single

A(1, 1) = 1: A(1, 2) = 0.4: A(1, 3) = 0

A(2, 1) = -4.1: A(2, 2) = 2.2: A(2, 3) = 1.7

For i = 1 To 2

For j = 1 To 3

Print Format(A(i, j), «##.#»);

Next j

Print

Next i

В этом примере оператор Dim объявляет двумерный массив с номерами строк от 1 до 2 и столбцов от 1 до 3. В двух следующих строках присваиваются значения элементам массива A(i, j). Для удобства и наглядности в каждой из этих строк записаны по три оператора присваивания, которые отделяются друг от друга обязательным символом двоеточия, используемым в языке VB именно для этой цели –

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

Далее, оператор For…Next со счетчиком i формирует вывод двух строк матрицы. Оператор For…Next со счетчиком j выводит по три элемента матрицы в каждой строке, формируя, таким образом, вывод трех столбцов матрицы. Оператор

Print.Format(А(i, j), «##.#»);

выводит значение числовых элементов матрицы A(i, j) в формате «##.#», т.е. две цифры резервируются для целой части и одна после десятичной точки, что соответствует значениям элементов исходной матрицы, c отступом в три позиции для выравнивания печати.

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

59

нее воспользоваться просто запятой для вывода значений по зонам в 14 позиций каждая.

Наконец, оператор Print без параметров служит для перевода «курсора печати» в начало следующей строки перед продолжением выполнения внешнего цикла со счетчиком i и переходе при этом к следующей строке матрицы.

Пример 6.2. Программа транспонирования матрицы А, т.е. перемены местами строк и столбцов (без ввода значений элементов матрицы А).

Dim A(1 To 2, 1 To 3) As Single, i As Integer

Dim B(1 To 3, 1 To 2) As Single, j As Integer

For i = 1 To 2

For j = 1 To 3

B(j, i) = A(i, j)

Next: Next

For i = 1 To 3

For j = 1 To 2

Print B(i, j);

Next: Print: Next

Пример 6.3. Программа перемножения матриц A и B (без ввода значений элементов матриц А и В)

Dim A(1 To 2, 1 To 3) As Single, B(1 To 3, 1 To 2) As Single Dim C(1 To 2, 1 To 2) As Single, i As Integer

Dim j As Integer, k As Integer For i = 1 To 2

For j = 1 To 2

For k = 1 To 3

C(i, j) = C(i, j) + A(i, k) * B(k, j) Next k: Next j: Next i

For i = 1 To 2

For j = 1 To 2 Print C(i, j);

Next j: Print: Next i

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

60

мере 6.1 значения элементов матрицы А будут сохраняться в памяти и после выполнения этой программы и могут быть использованы последовательно для вычисления элементов матрицы В в программе примера 6.2 и затем элементы матриц А и В для вычисления элементов матрицы С в программе примера 6.3. Однако в таком случае следует убрать объявления матриц оператором Dim из текста программ в локальных процедурах Sub, иначе это приведет к переобъявлению матриц и матрица А в примере 6.2, а также матрицы А и В в примере 6.3 окажутся пустыми.

6.2.Задание для выполнения на компьютере

1.Разработать пользовательский интерфейс, аналогичный представленному на рис. 6.1.

2.В соответствии со своим вариантом для матрицы из табл. 6 сделать в разделе General соответствующие объявления в операторе Dim для того, чтобы она была доступна во всех процедурах разрабатываемого приложения.

Label

PictureBox

CommandButton

Рис. 6.1. Примерный интерфейс задания для работы с двумерными массивами

61

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]