МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


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


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


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


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


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


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


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

Написание программного кода с использованием процедур





Тексты программного кода приведены на рис. 4.8-2.

Option Strict On Public Class Form1 Dim a(,) As Integer 'Процедура вывода одномерного массива с заголовком z Sub PrintL(ByRef x() As Integer, ByVal z As String, _ ByRef LB As ListBox) Dim i As Integer LB.Items.Add(" ") : LB.Items.Add(z) Dim y As String = "" For i = 0 To UBound(x) y = y + CStr(x(i)) + Space(4) Next i LB.Items.Add(y) End Sub ' Процедура вывода результата с заголовком z в ListBox Sub vivodlist(ByVal c As Integer,ByVal z As String, _ ByRef Lb As ListBox) Lb.Items.Add(" ") z = z + CStr(c) Lb.Items.Add(z) End Sub 'Процедура форматированного вывода матрицы в ListBox Sub PrintMatr(ByRef x(,) As Integer, ByRef LB As ListBox) Dim i, j, m, n As Integer Dim z, z1 As String m = x.GetLength(0) - 1 n = x.GetLength(1) - 1 LB.Items.Clear() For i = 0 To m z = "" For j = 0 To n z1 = Format(x(i, j), "000") If x(i, j) < 0 Then z1 = Space(2) + z1 Else z1 = Space(3) + z1 End If z = z + z1 Next j LB.Items.Add(z) Next i End Sub 'Процедура ввода матрицы(по индексу выбранной строки из ComboBox1) Sub vvodMatr(ByRef a(,) As Integer, ByVal index As Integer) Dim i, j, m, n As Integer Dim r1, r2 As String Dim y As String m = a.GetLength(0) - 1 n = a.GetLength(1) - 1 Select Case index Case 0 'Ввод элементов массива с клавиатуры For i = 0 To m For j = 0 To n r1 = Str(i) : r2 = Str(j) y=InputBox("эл-т массива a("+r1+","+r2+ =", _ "Ввод эначений эл-тов массива A()") a(i, j) = CInt(y) Next j Next i Case 1 'Формирование массива с помощью генератора случайных чисел For i = 0 To m For j = 0 To n a(i, j) = CInt(Rnd(1) * 100 - 50) Next j Next Case 2 'Формирование массива по заданной формуле For i = 0 To m For j = 0 To n a(i, j) = (i + j) * 25 - 150 Next j Next i End Select End Sub ' Вычисление суммы эл-тов побочной диагонали матрицы Sub m5(ByRef a(,) As Integer,ByRef pob As Integer, _ ByRef flag As Integer) Dim RawCount, ColumnCount As Integer Dim i, mm, nn As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) pob = 0 : flag = 0 mm = RawCount - 1 : nn = ColumnCount - 1 If nn = mm Then For i = 0 To mm pob = pob + a(i, mm - i) Next i Else flag = 1'флаг,что кол-ва строк и столбцов не равны End If End Sub ' Вычисление суммы эл-тов главной диагонали Sub m4(ByRef a(,) As Integer, ByRef Glav As Integer, _ ByRef flag As Integer) Dim RawCount, ColumnCount As Integer Dim i, nn, mm As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) Glav = 0 : flag = 0 mm = RawCount - 1 : nn = ColumnCount - 1 If nn = mm Then For i = 0 To mm Glav = Glav + a(i, i) Next i Else flag = 1'флаг,что кол-ва строк и столбцов не равны End If End Sub 'Вычисление сумм эл-тов матрицы по столбцам(создание одномерного 'массива) Public Sub m3(ByRef a(,) As Integer, ByRef stolb() As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, nn, mm As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) mm = RawCount - 1 : nn = ColumnCount - 1 ReDim stolb(0 To nn) For j = 0 To nn stolb(j) = 0 For i = 0 To mm stolb(j) = stolb(j) + a(i, j) Next i Next j End Sub ' Вычисление сумм эл-тов матрицы по строкам (создание одномерного массива) Public Sub m2(ByRef a(,) As Integer, ByRef strok() As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, mm, nn As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) mm = RawCount - 1 : nn = ColumnCount - 1 ReDim strok(0 To mm) For i = 0 To mm strok(i) = 0 For j = 0 To nn strok(i) = strok(i) + a(i, j) Next j Next i End Sub 'Функция ввода данных (кол-ва строк и столбцов) из TextBox Function vvod(ByVal T As TextBox) As Integer Return CInt(T.Text) End Function ' Вычисление суммы всех эл-тов матрицы Public Sub m1(ByRef a(,) As Integer, ByRef sum As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, mm, nn As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) sum = 0 mm = RawCount - 1 : nn = ColumnCount - 1 For i = 0 To mm For j = 0 To nn sum = sum + a(i, j) Next j Next i End Sub ' Поиск максимального эл-та матрицы и его индексов Public Sub m0(ByRef a(,) As Integer, ByRef max As Integer, _ ByRef imax As Integer, ByRef jmax As Integer) Dim RawCount, ColumnCount As Integer Dim i, j, nn, mm As Integer RawCount = a.GetLength(0) : ColumnCount = a.GetLength(1) mm = RawCount - 1 : nn = ColumnCount - 1 max = a(0, 0) : imax = 0 : jmax = 0 For i = 0 To mm For j = 0 To nn If a(i, j) > max Then max = a(i, j) imax = i jmax = j End If Next j Next i End Sub 'Процедура обработки события щелчка кнопки «Выход» Private Sub Button2_Click(ByVal sender As System.Object,ByVal e _ As System.EventArgs) Handles Button2.Click End End Sub 'Процедура обработки события выбора элемента из ComboBox1 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ ComboBox1.SelectedIndexChanged Dim index, m, n As Integer m = vvod(TextBox1) 'кол-во строк массива n = vvod(TextBox2) 'кол-во столбцов массива ReDim a(0 To m, 0 To n) ListBox1.Items.Clear() ListBox2.Items.Clear() index = ComboBox1.SelectedIndex'индекс выбр-го эл-та из ComboBox1 (выбор способа ввода матрицы) vvodMatr(a, index) 'ввод проц. ввода матрицы PrintMatr(a, ListBox1) 'вывод матрицы End Sub 'Процедура обработки события выбора элемента из ComboBox2 для способа обработки матрицы Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As _ System.Object, ByVal e As System.EventArgs) Handles _ ComboBox2.SelectedIndexChanged Dim s, f As Integer Dim imax, jmax As Integer Dim z As String = "" Dim mas() As Integer Select Case ComboBox2.SelectedIndex Case 0 ' Поиск максимального эл-та в матрице m0(a, s, imax, jmax) z = " Max элемент массива а()=" vivodlist(s, z, ListBox2) z = " Номер строки элемента =" vivodlist(imax, z, ListBox2) z = " Номер столбца элемента =" vivodlist(jmax, z, ListBox2) Case 1 ' Вычисление суммы всех эл-тов массива m1(a, s) z = " Сумма элементов массива а()=" vivodlist(s, z, ListBox2) Case 2 ' Вычисление сумм эл-тов массива по строкам m2(a, mas) z = " Сумма по строкам массива а()=" PrintL(mas, z, ListBox2) Case 3' Вычисление сумм эл-тов массива по столбцам m3(a, mas) z = " Сумма элементов массива a() по столбцам " PrintL(mas, z, ListBox2) Case 4' Вычисление суммы эл-тов главной диагонали m4(a, s, f) If f = 0 Then z = " Сумма элементов главной диагонали =" Else z ="Количество строк не равно количеству столбцов" End If vivodlist(s, z, ListBox2) Case 5' Вычисление суммы эл-тов побочной диагонали m5(a, s, f) If f = 0 Then z = " Сумма элементов побочной диагонали =" Else z= "Количество строк не равно количеству столбцов" End If vivodlist(s, z, ListBox2) End Select End Sub 'Процедура обработки события щелчка кнопки «Повторить» Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click ListBox1.Items.Clear() ListBox2.Items.Clear() TextBox1.Text = "" TextBox2.Text = "" End Sub End Class

Рис. 4.8-2




5. Выполнения приложения и получение результатов

Результаты выполнения приложения представлены на рис. 4.8-3.

Рис. 4.8-3

 

6. Доказательство правильности работы программ

 

Исходная матрица a(3,3):

21 3 8 -21

-20 27 -49 26

31 21 -45 -9

36 29 -13 46

 

Получим суммы элементов матрицы по столбцам:

 

21-20+31+36=68

3+27+21+29=80

8-49-45-13 = -99

-21+26-9+46 = 42

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

 


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

«Программирование алгоритмов формирования и обработки двумерных массивов»

1.Что понимают в программировании под двумерным массивом данных?

2.В чем отличие ввода элементов двумерного массива по строкам и по столбцам?

3.Какие средства языка программирования применяются для вывода на экран двумерного массива по строкам?

4.Что может служить параметрами циклов в операторах For при вводе, обработке и выводе элементов массива?

5.Что такое динамический массив, и какие средства языка программирования используются для объявления динамического массива?

6.В чем отличие объявления одномерных и двумерных массивов?

7.С какого значения ведется нумерация индексов?

8.Как называется двумерный массив, у которого количество индексов равно?

9.Что может использоваться в качестве индексов двумерного массива?

10.На что указывают индексы в двумерном массиве?

11.Какой размер двумерного массива A(2,3)?

12.Что необходимо сделать перед использованием двумерного массива в программе?

13.На что указывает при объявлении двумерного массива диапазон изменения индексов?

14.Что такое размерность (ранг) массива?

15.На что указывает первый индекс в двумерном массиве?

16.Какой размер имеет двумерный массив A(2,3)?

17.На что указывает второй индекс в двумерном массиве?

18.С помощью какого оператора перед использованием двумерного массива в программе его необходимо объявить?

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

20.Как должен быть организован при вводе и обработке массива по столбцам внутренний цикл?

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

22. Чем отличаются функции GetLength( ) и GetUpperBound( )?

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.