Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
informatika / Вариант1.doc
Скачиваний:
90
Добавлен:
16.04.2015
Размер:
1.9 Mб
Скачать

Лабораторная работа № 9 программирование многомерных массивов

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

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ:

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

Таблица. Двумерный массив, содержащий десять строк и десять столбцов.

I\J

1

2

3

4

5

6

7

8

9

10

1

2

3

5

8

1

23

17

54

36

36.45

2

4

54

5

9

8

15

45

5.2

5.7

25.4

3

-8

5

76

43

76

12

45

32

4.5

2.1

4

-45

7

98.12

64

43

45

4

1

3

2

5

-2

7

-32

1

26

79

21

19

89

478

6

-7

0

-4

1

34

48

21

54

65

54

7

9

3

0

21

16

78

13

68

45

65

8

4

5

21.4

13

24

98

14

14

25

21

9

2

0

21.1

14

46

-72

-4

-9

134

12

10

8

7

12

14

-78

-98

-4

12

12

32

Ввод двумерного массива целесообразно осуществлять из файла, так как при отладке программы экономится время на ввод значений элементов массива. В качестве примера напишем программу, осуществляющую ввод значений элементов массива и отображающую ее в элементе MSFlexGrid. Создайте текстовый файл в текстовом редакторе Блокнот, который содержит приведенную выше таблицу (см. рис.). Приложение будет содержать систему меню. В пункте менюFileбудут находиться подпунктыOpen… - для открытия файла,SaveAs… для сохранения файлов иExitдля выхода из программы. Меню вVisualBasicсоздается с помощью редактора меню. Выберите пункт менюVisualBasicTools, а в выпадающем меню подпунктMenuEditor… На экране появится окно редактора меню (см. рис. 27).

Рис. 27. Окно редактора меню.

Рассмотрим основные поля и клавиши редактора. Свойство Caption отображает на экране пункт меню, а свойствоNameприсваивает имя пункту меню. ПолеShortcutпозволяет установить «горячие клавиши» для пункта меню. Для создания подпункта меню, необходимо нажать на стрелку вправо, расположенную рядом с клавишамиNext,InsertиDelete.

Создадим меню нашего приложения. Для создания меню выполните следующие действия:

  1. В поле CaptionвведитеFile.

  2. В поле NameвведитеmnuFile. Префиксmnuговорит программисту о том, что этот объект является пунктом меню.

  3. Нажмите кнопку Next. Затем, для того чтобы создать подпункт меню, нажмите на кнопку.

  4. В поле CaptionнаберитеOpen…, а в полеNamenmuOpen. Нажмите на кнопкуNext.

  5. В поле CaptionвведитеSaveAs…, в качестве имени подпункта меню введитеmnuSave.

  6. Для того чтобы отделить пункты меню от выхода из программы, необходимо поставить разделитель. Для этого в поле Captionнаберите знак -, а в полеNameвведитеmnuSep(от английскогоSeparation- разделение), затем, нажмите кнопкуNext.

  7. И, наконец, добавьте последний пункт меню. В поле CaptionвведитеExit, а в полеNameвведитеmnuExit. В результате окно редактора меню должно выглядеть примерно так как показано на рисунке 28.

Рис. 28. Вид окна редактора меню.

  1. Нажмите на кнопку Ok.

Пункты меню, так же как и командные кнопки обладают событием Click. Поэтому с ними можно работать также как и с кнопками.

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

Форма приложения приведена на рисунке 29.

Рис. 29. Изображение формы приложения с выпадающим меню.

Программный код приложения приведен ниже:

Dim a() As Single, n As Integer, m As Integer

Private SubmnuExit_Click()

End

End Sub

Private Sub mnuOpen_Click()

Dim s As String, i As Integer, j As Integer

CommonDialog1.Action = 1

s = CommonDialog1.FileName

Open s For Input As #1

Input#1, n, m

ReDim a(1 To n, 1 To m) As Single

For i = 1 To n

For j = 1 To m

Input#1, a(i, j)

Nextj

Nexti

Close#1

End Sub

Private SubmnuSave_Click()

Dim s As String, i As Integer, j As Integer

CommonDialog1.Action = 2

s = CommonDialog1.FileName

Open s For Output As #1

WithMSFlexGrid1

.Rows = n + 1

.Cols = m + 1

For i = 1 To n

.Col = 0

.Row = i

.Text = CStr(i)

For j = 1 To m

.Row = 0

.Col = j

.Text = CStr(j)

.Row = i

.Text = CStr(a(i, j))

Print#1, a(i, j); " ";

Nextj

Print#1, ""

Nexti

Close#1

End With

End Sub

Приведенный выше программный код требует пояснений. В нем используется оператор WithEndWith. Данный оператор позволяет обращаться к свойствам объекта, описанного после ключевого словаWith. Оператор заканчивается ключевым словомEnd With. Между ключевыми словамиWithиEnd Withзаписываются свойства объекта,

перед которыми ставится точка.

Рассмотрим еще один пример работы с двумерными массивами. Создадим программу, определяющую наименьшие элементы строк двумерного массива, и записывающую их в одномерный массив. Форма приложения будет содержать два текстовых окна Text1 иText2, куда будут выводиться соответственно одномерный и двумерный массивы. Ввод двумерного массива будет осуществляться из файла, а вывод одномерного массива только в текстовое окно. Форма приложения в момент выполнения представлена на рисунке 30.

Рис. 30. Изображение формы в период выполнения программы.

Блок-схема программы приведена ниже:

Программный код приложения имеет вид:

Dim a() As Single, n As Integer, m As Integer

Private SubCommand1_Click()

Dim s As String, i As Integer, j As Integer

CommonDialog1.Action = 1

s = CommonDialog1.FileName

Open s For Input As #1

Input#1, n, m

ReDim a(1 To n, 1 To m) As Single

For i = 1 To n

For j = 1 To m

Input#1, a(i, j)

Next j

Nexti

Close#1

End Sub

Private Sub Command2_Click()

Dim min() As Single, j As Integer, i As Integer

ReDim min(1 To n) As Single

Text1.Text = ""

Text2.Text = ""

For i = 1 To n

min(i) = a(i, 1)

For j = 2 To m

If a(i, j) < min(i) Then min(i) = a(i, j)

Next j

Nexti

For i = 1 To n

Text2.Text = Text2.Text + CStr(min(i)) + vbCrLf

For j = 1 To m

Text1.Text = Text1.Text + CStr(a(i, j)) + " "

Nextj

Text1.Text = Text1.Text + vbCrLf

Nexti

End Sub

Private SubCommand3_Click()

End

End Sub

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

Forj= 1Tom

Text1.Text = Text1.Text + CStr(a(i, j)) + " "

Nextj

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

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ:

Найти количество элементов двумерного массива, равных 0 и количество элементов массива больше чем 7. Ввод массива осуществить через функцию InputBox().

Блок –схема:

Private SubCommand3_Click()

End

End Sub

ЗАДАНИЕ:

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

Блок-схема:

Форма приложения:

Программный код:

Dim __As _______, __As _______, ____As _______

Private SubCommand1_Click()

Dim __As _______, __As ______, __As ______

WithCommonDialog1

.Action = ___

__= .________

End With

Open __For Input As #1

Input#1, __, __

WithMSFlexGrid1

.Cols = ______

.Rows = ______

ReDim __(__ To __, __ To __) As _______

For __ = __ To __

.Col = __

.Row = __

.Text = _____(__)

Next__

For __ = __ To __

.Row = __

.Col = __

.Text = ____(__)

Next __

For __ = __ To __

For __ = __ To __

.Row = __

.Col = __

Input#1, ______

.Text = CStr(______)

Next__

Next__

End With

Close #1

End Sub

Private SubCommand2_Click()

Dim __As _______, __As _______, ____As ______, ____As ______

ReDim __(__ To __) As ______

For __= __To __

____ = __

For __=__ To __

If ______ __ __ Then ___ = ____ + ______

Next__

Next__

___ = __

For __ = __ To __

____ = ____+ ___

Next__

Text1._____ = _____(____ / ___)

For i = __ To __

List1.__________(_____(____))

Next__

End Sub

Private Sub Command3_Click()

_____

End Sub

Соседние файлы в папке informatika