Ваш браузер устарел. Рекомендуем обновить его до последней версии.




 


Многомерные массивы и их обработка. Компонент: поле ввода-редактирования строки символов Edit. Квадратная матрица и ее закономерности

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

Двумерный массив – это определенный набор однотипных данных, упорядоченных в нескольких строках и нескольких столбцах. Каждый элемент двумерного массива носит общее имя массива и для его однозначной идентификации имеет два индекса, определяющие его положение в массиве – номер строки и номер столбца. Например, a[n][m]. Как и любая переменная, а здесь мы имеем дело с целым набором переменных, массив перед использованием необходимо объявить. Сделать это можно, например, так: int a[99][9]. Это будет означать, что вы зарезервировали область памяти под массив a на 100 строк и 10 столбцов для тысячи целых чисел. Говорят, что размерность такого массива будет составлять 100х10. Обратите внимание, нумерация индексов элементом массива начинается с нуля. Двумерный массив имеет и другое название – матрица. Матрица является квадратной, если в ней число строк и столбцов совпадает. Примером квадратной матрицы является удивительный квадрат, который открыли три тысячи лет назад китайские ученые. Размер такого квадрата 3х3, в него входят девять цифр привычной нам десятичной системы счисления кроме нуля. А замечателен он тем, что сумма в нем в любых строках, столбцах и обеих диагоналях равна одному и тому же числу, причем ни в одной ячейке цифры не повторяются! Подробнее остановимся на квадратных матрицах в конце урока.

Сформируем двумерный массив размерностью 10х20 из двухсот целых случайных чисел с помощью двойного цикла «Для». Внутренний цикл является вложенным во внешний. Измените размеры стартовой формы так, чтобы ее высота была чуть меньше высоты экрана, а ширина составила примерно четвертую часть от ширины экрана. На этой форме нового приложения разместите два объекта: электронную кнопку Button1 и поле вывода текста Label1. Свойству Caption компонента Label1 предварительно придайте значение пустого множества. В функции обработки Button1Click разместите программный код:

 

int a[10][20], i, j;     //объявление переменных

randomize();     //рандомизация

 

for (i=0; i<10; i++)     //внешний цикл

{

for (j=0; j<20; j++)     //внутренний цикл

{

a[i][j] = random (10);     //формирование матрицы

Label1->Caption = Label1->Caption + a[i][j] + " ";     //вывод матрицы на экран

}

Label1->Caption = Label1->Caption + "\n";     //переход в следующую строку

}

 

На электронной кнопке Button1 поместите надпись «Матрица». Запустите проект приложения, кликните мышью по этой кнопке. На поверхность формы выплеснется матрица, состоящая из десяти строк и двадцати столбцов. В каждую ячейку матрицы помещается случайное целое однозначное число. Кликните по кнопке еще раз – появится вторая матрица. Для того чтобы отделить эти матрицы друг от друга добавьте последней строкой, после фигурной скобочки «}», еще одну строку «переход в следующую строку». Посмотрите, что из этого получилось. Если вам непонятно, что делает какая-либо строка, то закоментируйте ее и запустите приложение на выполнение. Иногда полезно удалить часть строки, чтобы уяснить, как работает эта строка.

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

 

Label1->Caption ="";     //очистка поля вывода текста

 

Проверьте проект приложения в работе. Откомпилируйте программу.

А теперь сформируем целочисленный двумерный массив 10х10, элементы которого будут взяты из диапазона от -50 до 50 и будут располагаться в этом массиве случайным образом. Пусть программа подсчитает число отрицательных элементов в этой квадратной матрице и вычислит сумму всех ее элементов. Приложение можно построить на базе предыдущего приложения. Алгоритм решения поставленной задачи в среде C++ Builder может выглядеть, например, так:

 

int a[10][10], i, j, n, s;     //объявление переменных

randomize();     //рандомизация

n = 0, s = 0;     //обнуление переменных

for (i=0; i<10; i++)     //внешний цикл ДЛЯ

{

for (j=0; j<10; j++)     //внутренний цикл ДЛЯ

{

a[i][j] = random(100) - 50;     //формирование матрицы

Label1->Caption = Label1->Caption + a[i][j] + " ";     //вывод матрицы на экран

If (a[i][j] < 0) n = n + 1;     //подсчет отрицательных

s = s + a[i][j];     //суммирование всех элементов

}

Label1->Caption = Label1->Caption + "\n";

}

Label1->Caption = Label1->Caption + "Отрицательных " + n + "\n";

Label1->Caption = Label1->Caption + "Сумма = " + s + "\n" + "\n";

 

Для проверки правильности сформированной квадратной матрицы и ее последующей обработки целесообразно временно ее размерность уменьшить до 3х3. Теперь вы быстро сможете протестировать программу.

До сих пор размерность матрицы, а, следовательно, число ее элементов задавал программист. Сделаем так, что бы пользователь мог сам задавать размерность матрицы. Воспользуемся компонентом поле ввода-редактирования строки символов Edit (Редактор), который можно извлечь из палитры компонентов во вкладке Standard. Самым значимым свойством компонента Edit является свойство Text (Текст), которое содержит вводимую строку символов. Для решения поставленной задачи целесообразно начать новый проект. На стартовой форме разместите компоненты: Label1, Button1, Edit1 и Edit2. Причем первый компонент расположите в верхнем левом углу формы, а остальные три компонента в правой стороне формы. Свойству Text компонентов Edit1 и Edit2 придайте произвольные начальные значения, например, «5» и «10». Свойству Caption компонента Label1 не забудьте придать значение пустого множества. Затем приступайте к написанию функции обработки Button1Click:

 

int n = StrToInt(Edit1->Text);     //число строк

if (n > 30) return;     //ограничение числа строк

int m = StrToInt(Edit2->Text);     //число столбцов

if (m > 30) return;     //ограничение числа столбцов

int i, j, a[30][30];

randomize();

Label1->Caption = "";     //очистка поля вывода матрицы

for (i=0; i<n; i++)     //внешний цикл

{

for (j=0; j<m; j++)     //внутренний цикл

{

a[i][j] = random(10);     //заполнение матрицы

Label1->Caption = Label1->Caption + "  " + a[i][j];

}

Label1->Caption = Label1->Caption + "\n";

}

 

Первая и третья строки программного кода берут размерность матрицы из полей ввода-редактирования текста. Здесь используется функция преобразования StrToInt, которая позволяет переменную строкового типа преобразовать в переменную целого типа.

Протестируйте программу, создайте исполняемый EXE-файл и проверьте его работоспособность.

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

 

int i, j, max, a[4][5];

randomize();

max = 0;

 

for (i=0; i<4; i++)

{

for (j=0; j<5; j++)

{

a[i][j] = random(1000);

Label1->Caption = Label1->Caption + a[i][j] + "  ";

}

Label1->Caption = Label1->Caption + "\n";

}

 

for (i=0; i<4; i++)

for (j=0; j<5; j++)

{

if (a[i][j] > max) max = a[i][j];

}

Label1->Caption = Label1->Caption + "Максимальный элемент " + max + "\n";

 

На этом можно завершить первое знакомство с матрицами. Если же вы заинтересовались этим разделом программирования, то рассмотрите ниже приведенные закономерности в квадратной матрице.

Двумерный массив в котором число строк совпадает с числом столбцов называют квадратной матрицей. Рассмотрим закономерности определяющие характерное расположение элементов в квадратной матрице. Очевидно, что для элемента расположенного на главной диагонали номер его строки равен номеру его столбца i = j. Для элемента расположенного на побочной диагонали справедливо i + j = n + 1, где n — размер квадратной матрицы. Проверьте справедливость этого равенства.

Для элементов расположенных выше главной диагонали справедливо утверждение i < j, то есть номер строки элемента обязательно меньше номера его столбца. Для нижних элементов справедливо: i > j. Выше побочной диагонали  i + j < n + 1, ниже соответственно —  i + j > n + 1.

Если рассматривать положение элемента в квадратной матрице относительно обеих диагоналей, то он может находиться в одной из четвертей при условии:

1 четверть — (i < j) и (i + j < n + 1)

2 четверть — (i < j) и (i + j > n + 1)

3 четверть — (i > j) и (i + j > n + 1)

4 четверть — (i > j) и (i + j < n + 1)

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

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

2. Постройте программу, которая сформирует матрицу размерностью n = 10 из случайных чисел в диапазоне от нуля до девяти и подсчитает число двоек и пятерок, упавших на побочную диагональ.

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

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

 

Надоели матрицы? Отдохни в шахматной матрице размерностью 8 х 8


Flag Counter
200stran.ru: показано число посетителей за сегодня, онлайн, из каждой страны и за всё время
Яндекс.Метрика
Besucherzahler russain brides
счетчик посещений

Выбери лучшее!

allbest