русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-23; просмотров: 1212; Нарушение авторских прав


Лабораторная работа №8

Работа с двухмерными массивами

Цель:

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

Результат обучения:

o знать алгоритмы ввода/вывода двухмерного массива;

o уметь составлять описание двухмерных массивов;

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

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

В Visual Basic имеется возможность работы с двухмерными массивами. В математике аналогом двухмерного массива является матрица.

А =

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

В двухмерном массиве элемент также определяется двумя индексами, которые заключаются в скобки и отделяются друг от друга запятыми, например: a(2, 3)

В двухмерном массиве первый индекс указывает на номер строки, а второй индекс указывает на номер столбца, на пересечении которых расположен элемент. В матрице А, записанной выше, элемент а(2, 3) равен 1, а элемент a(3, 2) равен 0.

Предположим, перед нами стоит задача обнулить все элементы первой строки. Можно рассматривать строку матрицы как одномерный массив. Тогда нужно записать оператор:

For i=1 To 4

a (1, i) =0

Next i

Первый индекс элемента остается неизменным, он равен 1. Это номер строки. Второй индекс изменяется от 1 до 4. Это номер столбца.

Пусть теперь необходимо обнулить все элементы первого столбца.

For i=1 To 4

a (i ,1 ) =0

Next i

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

Если нужно обнулить все элементы матрицы, то следует организовать два вложенных цикла.   For i=1 To 4 For j =1 To 4 a (i ,j) =0 Next j Next i

При каждом значении i (номера строки) j пробегает все значения от 1 до 4.



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

Для ввода элементов используется текущий лист электронной таблицы. For i = 1 To n For j = 1 To m A(i, j) = cells(i, j) Next j Nexti Для ввода элементов массива в VBA используется функция InputBox: For i = 1 To n For j = 1 To m A(i, j) = InputBox("a(" + Str(i) + Str(j) + ")") Next j Nexti

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

For j = 1 To 4

For i = 1 To 4

a (i, j) = cells(i, j)

Next j : Next i

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

Примеры объявления массивов:

Dim intA(21) As Integer

Public sngMas(6, 4) As Single

или

Dim intA(1 To 21) As Integer, intD(- 4 To 5) As Single

Public sngMas(1 To 6, 1 To 4) As Single

В первом варианте в массиве intA(21) всего 22 элемента, т. к. индекс изменяется от 0 до 21. Но можно использовать только элементы с индексами от 1 до 21, хотя элемент intA(0) также будет существовать. А в двумерном массиве sngMas(6, 4) всего 35 элементов (7х5), т. к. отсчет каждого индекса начинается с 0. В одномерном массиве intD(- 4 To 5) начальное значение индекса – отрицательное число.

Элементов с нулевыми индексами во втором варианте объявления массивов нет. И количество элементов в массиве intA() всего 21, а в sngMas() – 24 (6х4). Но можно «заставить» вести отсчет индексов всегда с 1, если ввести оператор Option Base 1 в раздел (General) (Declarations).

Объявление динамического массива производится в случае, когда размер массива может изменяться во время выполнения программы. В начале программы (процедуры) необходимо объявить массив без указания его размера, например для массива А

Dim A() As Integer

После того, как размер массива (N и M) в программе станет известен, нужно переопределить массив с помощью оператора Redim:

ReDim A(M, N) As Integer

Форма:

Данная задача решена в среде VBA. Для ввода информации используются редакторы ввода TextBox1 и TextBox2. Для вывода информации используется текстовый редактор TextBox3. Его свойство MultiLine должно быть равно True.  

Пример 1.

Условие задачи: сформировать матрицу размером N на M и вывести ее на экран. Программа формирует двухмерный массив с помощью датчика случайных чисел и выводит массив на экран.


 

Схема алгоритма: Программа: Private Sub CommandButton1_Click() Dim A() As Single n = Val(TextBox1.Text) m = Val(TextBox2.Text) ReDim A(n, m) For i = 1 To n For j = 1 To m A(i, j) = Int(Rnd * 10) Next j Next i Rez = "" For i = 1 To n For j = 1 To m Rez = Rez + Str(A(i, j)) + vbTab Next j Rez = Rez + vbCrLf Next i TextBox3.Text = Rez End Sub
   
     

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

В поле TextBox3 выводится строка Rez. В строке Rez записана матрица. Численные значения элементов матрицы преобразованы в строку с помощью функции STR. Константа vbTab обеспечивает расстояние в 7 пробелов между элементами массива при выводе. Константа vbCrLf — перевод положения курсора на новую строку.

Пример 2.

Условие задачи: Рассчитать суммы элементов строк матрицы. Результат представить в виде одномерного массива.

Дано: n — количество строк матрицы. m — количество столбцов матрицы. [B] — матрица с элементами bij, где i изменяется от 1 до n, j изменяется от 1 до m. Найти: Sumi =

Фрагмент схемы: Фрагмент программы: ‘Расчет суммы строк одномерного массива For I = 1 To n Sum(i) =0 For j=1 To m Sum(i) = Sum(i) + a(i, j) Next j Next i Rez = “” For i:= 1 To n Rez = Rez + Str(Sum(i))+vbTab Next i TextBox3.Text = Rez  

Сумма каждой строки матрицы должна храниться в соответствующем элементе одномерного массива. Так, сумма 1-ой строки должна храниться в первом элементе Sum1, сумма 2-ой строки в элементе Sum2 и так далее. Цикл по i определяет номер элемента одномерного массива Sum и номер строки матрицы А. Индекс j определяет номер столбца матрицы. В цикле по j накапливается сумма элементов соответствующей строки матрицы.

На поиск в массиве элемента, с заданными значениями индексов, затрачивается время. Адрес i-го элемента определяется прибавлением к адресу начала массива значения i. Поэтому для повышения эффективности лучше использовать вспомогательную переменную S при суммировании, что исключает многократное обращение к элементам массива Sum.

For i = 1 To n

S =0

For j=1 To m

S = S + a(i,j)

Next j

Sum(i) = S

Next i

Пример 3.

Условие задачи:

Дана матрица размером N на M. Поменять местами четные и нечетные столбцы матрицы.

Схемы ввода и вывода матрицы приведены в предыдущих примерах. Схема алгоритма перестановки столбцов в соответствие с условием задачи:

Фрагмент программы: ‘ ***Перестановка столбцов *** For i=1 To n ‘Цикл по строкам ‘Цикл по столбцам. ‘Перебираем только четные столбцы. For j =2 To m Step 2 ‘Перестановка четного и нечетного элементов Z = D(i, j – 1) : D(i, j – 1) = D(i, j) : D(i, j) = Z Next j Next i  

Для перестановки элементов четных и нечетных столбцов организован цикл с шагом 2. Перебираются только четные столбцы (со второго по последний с шагом 2). Нечетный столбец определен как J – 1. Во избежание потери информации вводится вспомогательная переменная Z, которая является буфером для хранения значения элемента нечетного столбца.

 

Пример 4.

Условие задачи: написать программу удаления строки из матрицы.

Удалить k-ую строку матрицы можно, сдвинув строки, следующие за k-ой строкой на одну позицию вверх.

Фрагмент схемы: Фрагмент программы:   For i = k To n – 1 For j = 1 To m a( i, j ) = a (i + 1, j) Next j Next i  

Все строки, начиная с (k+1)-й, нужно переместить вверх. Цикл по строкам начинается с k-ой строки. Все элементы k-ой строки заменяются на k + 1 строку. Число строк уменьшается на единицу.

Пример 5.

Условие задачи:

Написать программу включения строки в матрицу. Включаемая строка задана как вектор.

В этой задаче задана матрица размером N на M и вектор, состоящий из M элементов. Задано k — номер новой строки.

Фрагмент схемы алгоритма: Фрагмент программы: For i = n To k Step -1 For j = 1 To m ‘с n –ой по k –ую строки передвинули вниз a(i + 1, j) = a(i, j) Next j Next i n = n+1 For j = 1 To m ‘На место k –ой строки матрицы записали вектор a(k, j) = c(j) Next j  

Матрица [A] будет увеличена на одну строку, поэтому в описании переменной [A] максимальный размер строк должен быть увеличен на единицу.

Два первых цикла организуют перемещение строк матрицы вниз на одну строку.

В цикле по строкам параметр цикла изменяется с шагом –1. Начиная с n-ой строки и до k-ой, все строки смещаются вниз, оставляя k-ую строку свободной для элементов вектора С. Перемещение одной строки связано с пересылкой всех элементов этой строки, что требует организации цикла по номеру столбца. Отдельно организован цикл для записи элементов вектора С на место k-ой строки матрицы [A]. В цикле по j элементам Akj присваивается значение Cj




<== предыдущая лекция | следующая лекция ==>
 | Самостоятельная работа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.455 сек.