МегаПредмет

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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

Примеры решения типовых задач





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

Работа с матрицами

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

Создаем новый проект.

В свойствах главной формы подписываем ее как: Matrix.

Помещаем на форму элемент NumericUpDown и подписваем его при помощи элемента Label. Элемент NumericUpDown будет служить для изменения размерности матрицы.

В свойствах NumericUpDown даем ему программное имя – matrixsize, минимальное допустимое значение устанавливаем равное 1, а максимальное 20.

Помещаем на форму элемент GroupBox, а в него два элемента RadioButton и подписываем их все соответствующим образом.

В свойствах RadioButton-ов даем им программные имена rb1 и rb2 соответственно.

Помещаем на форму элемент DataGridView и подписваем его при помощи элемента Label. Элемент DataGridView будет служить таблицей для ввода значений матрицы.

В свойствах DataGridView даем ему программное имя – matrix_table, а также устанавливаем свойства AllowUserToAddRows, AllowUserToDeleteRows, AllowUserToResizeColumns, AllowUserToResizeRows, ColumnHeadersVisible, RowHeadersVisible в false, тем самым мы запрещаем пользователю вручную добавлять и удалять строки, изменять размер столбцов и строк, а также скрываем заглавные строку и столбец.

Свойство ColumnHeadersHeightSizeMode устанавливаем в AutoSize.

Добавляем на форму элементы Button и RichTextBox, которые будут служить для выполнения выбранной операции и вывода результата соответственно.

В свойствах даем им программные имена - start_button и RTB.

После этих действий дизайн нашего приложения должен иметь вид, показанный на рисунке 3.1.

Рисунок 3.1 – Дизайн приложения из примера 1

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

Событию Load нашей главной формы зададим следующий код.

matrix_table->ColumnCount = 1; // начальное число столбцов и строк

matrix_table->RowCount = 1;

matrix_table->AutoResizeColumns();//выравнивание ячеек

Этот код позволит задать начальную размерность таблицы для ввода матрицы, которая совпадает с начальным значением элемента NumericUpDown, а также установить автовыравнивание ширины ячеек таблицы.

Событию ValueChanged элемента NumericUpDown зададим такой код.

matrix_table->ColumnCount = Convert::ToInt32(matrixsize->Value); //изменяем размерность таблицы

matrix_table->RowCount = Convert::ToInt32(matrixsize->Value);

matrix_table->AutoResizeColumns(); //выравнивание ячеек

Он позволит изменять размерность таблицы пропорционально и автоматически выравнивать ячейки по ширине.

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

Назовем ее scanmatrix и вставим в наш исходный код, например, после строчки #pragma endregion.

private: void scanmatrix(int size,int **matrix){// size размерность матрицы, **matrix – указатель на указатель типа int (собственно сама матрица)

for (int i = 0; i < size; i++){

for (int j = 0; j < size; j++){

matrix[i][j] = Convert::ToInt32(matrix_table->Rows[i]->Cells[j]->Value); // записываем в матрицы значения ячеек таблицы, предварительно конвертировав их в тип int

}

}

}

Как видим, данная функция производит считывание элементов из ячеек таблицы и записывает их по соответствующим индексам в двумерном массиве.

Зададим обработчик события CellValueChanged элемента DataGridView, который будет выравнивать ширину ячеек после каждого ввода.

matrix_table->AutoResizeColumns(); //выравнивание ячеек



Осталось создать обработчик события Click элемента Button.

int Msize = Convert::ToInt32(matrixsize->Value); // записываем в переменную Msize значение matrixsize (размерность матрицы)

int **matrixvar = new int *[Msize];

for (int i = 0; i < Msize; i++){ //создаем динамический двумерный массив

matrixvar[i] = new int[Msize];

}

scanmatrix(Msize, matrixvar); //записываем в наш двумерный массив значения из таблицы

if (rb1->Checked){ // если выбрали искать сумму элементов

int sum = 0;

for (int i = 0; i < Msize; i++){ // находим сумму

for (int j = 0; j < Msize; j++){

sum += matrixvar[i][j];

}

}

RTB->Text = Convert::ToString(sum); // и записываем в текстовое поле

 

}

else if (rb2->Checked) { // если среднее арифметическое

double avg = 0;

for (int i = 0; i < Msize; i++){ // находим его

for (int j = 0; j < Msize; j++){

avg += matrixvar[i][j];

}

}

avg = avg / (Msize*Msize);

RTB->Text = Convert::ToString(avg);// и записываем в текстовое поле

}

else {

RTB->Text = "Нужно выбрать операцию"; //если ничего не выбрали

}

Из исходного кода видно, что при клике на элемент Button, динамически создается массив, после чего в него вносятся данные из таблицы и выполняется выбранная операция. Ее результат выводится в текстовое поле.

Результаты работы показаны на рисунке 3.2

Рисунок 3.2 – Результаты работы программы из примера 1 (среднее арифметическое)

 





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