Kimmon 0 / 0 / 0 Регистрация: 21.12.2020 Сообщений: 25 |
||||
1 |
||||
Вывод матрицы в форме15.04.2021, 01:06. Показов 4695. Ответов 6 Метки нет (Все метки)
Помогите пожалуйста, нужно код этой матрицы переписать на форму, в формах совсем не разбираюсь, заранее спасибо
__________________
0 |
Gunner_Shark 35 / 20 / 15 Регистрация: 29.03.2021 Сообщений: 78 |
||||
15.04.2021, 14:18 |
2 |
|||
Сообщение было отмечено Kimmon как решение РешениеНа форме должны быть кнопка (button) и таблица (datagridview).
1 |
546 / 477 / 315 Регистрация: 24.09.2013 Сообщений: 3,345 Записей в блоге: 1 |
|
16.04.2021, 14:34 |
3 |
Kimmon, В каком виде нужна матрица: в консольном(как сейчас) или в Windows ? Можно в Windows, тогда нужны размеры матрицы (хоть примерные)
0 |
0 / 0 / 0 Регистрация: 21.12.2020 Сообщений: 25 |
|
16.04.2021, 14:37 [ТС] |
4 |
zna926 в windows
0 |
zna926 546 / 477 / 315 Регистрация: 24.09.2013 Сообщений: 3,345 Записей в блоге: 1 |
||||
16.04.2021, 22:52 |
5 |
|||
Kimmon, Сначала зададимся размерами матрицы(например 5 Х 7) , потом заполним ее клетки случайными, целыми числами Добавлено через 21 минуту
1 |
0 / 0 / 0 Регистрация: 21.12.2020 Сообщений: 25 |
|
12.05.2021, 22:54 [ТС] |
6 |
я хотел бы спросить, как сделать так, чтобы размерность матрицы была не встроенной, а её можно было бы менять в textBox
0 |
0 / 0 / 0 Регистрация: 21.12.2020 Сообщений: 25 |
|
26.05.2021, 23:55 [ТС] |
7 |
zna926, А можешь пожалуйста сделать так, чтобы через textBox можно было бы менять размерность (n)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
26.05.2021, 23:55 |
Помогаю со студенческими работами здесь Вывод на форме вывод в форме Вывод таблицы на форме Вывод итогов в форме Вывод файла в форме Вывод реализовать на форме! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 7 |
На мой взгляд, самым простым и в то же время наиболее функциональным будет сочетание DataTable вместе с DataGridView.
Сразу же вижу потенциальную проблему в
том, что DataGridView автоматически не
будет добавлять / удалять колонки у
матрицы при изменении данных,
потребуется реализовывать это вручную.
Ничего подобного, при таком коде:
DataTable matrix = new DataTable("Матрица");
...
//загоняем матрицу в matrix
...
dataGridView.DataSource = matrix;
/* этой строчкой теперь все изменения dataGridView
будут отражаться в matrix */
И если на форму добавить, к примеру, TextBox и Button для добавления нового столбца, то реализация нажатия кнопки будет следующая:
matrix.Columns.Add(textBox.Text, typeof(int));
dataGridView.Update();
И новая колонка будет добавлена в matrix.
Более того, в силу своего утверждения о функциональности, можно сохранить эту матрицу в файл одной строчкой:
matrix.WriteXml("Matrix.xml", XmlWriteMode.WriteSchema);
И также одной строчкой загрузить при необходимости…
На мой взгляд, самым простым и в то же время наиболее функциональным будет сочетание DataTable вместе с DataGridView.
Сразу же вижу потенциальную проблему в
том, что DataGridView автоматически не
будет добавлять / удалять колонки у
матрицы при изменении данных,
потребуется реализовывать это вручную.
Ничего подобного, при таком коде:
DataTable matrix = new DataTable("Матрица");
...
//загоняем матрицу в matrix
...
dataGridView.DataSource = matrix;
/* этой строчкой теперь все изменения dataGridView
будут отражаться в matrix */
И если на форму добавить, к примеру, TextBox и Button для добавления нового столбца, то реализация нажатия кнопки будет следующая:
matrix.Columns.Add(textBox.Text, typeof(int));
dataGridView.Update();
И новая колонка будет добавлена в matrix.
Более того, в силу своего утверждения о функциональности, можно сохранить эту матрицу в файл одной строчкой:
matrix.WriteXml("Matrix.xml", XmlWriteMode.WriteSchema);
И также одной строчкой загрузить при необходимости…
ЛАБОРАТОРНАЯ
РАБОТА 3
Создание
Windows-приложения для обработки матрицы
Цель
работы:
научиться создавать элементы интерфейсов
для приложения и писать простой
обработчик событий на C++ для приложения
Windows Forms, работающего под управления
.NET Framework.
Методические
указания к лабораторной работе
В
лабораторной работе необходимо научиться
использовать элементами управления,
такими как Надписи (label), Текстовые поля
(textbox), Кнопки (Button)
и Меню (MenuStrip)
для разработки программного интерфейса.
Лабораторная работа состоит из двух
заданий.
Задание
1. Создать на форме меню для ввода и
обработки матрицы.
В
лабораторной работе необходимо создать
форму с меню, предназначенного формировать
датчиком случайных чисел матрицу
размером 5х5, обрабатывать эту матрицу
и выводить результаты вычислений. Кроме
этого предусмотрим вывод информации о
разработчике на экран. В качестве примера
обработки определим максимальное
значение из элементов матрицы. Для
этого:
-
Создать
новый проект Windows Forms с именем
form_lab3.cpp.
-
Разместить
на форме элементы управления и
настроить их свойства
Сначала
настроим свойства формы: введем заголовок
формы в свойство Text, увеличим ширину
формы и зададим цвет формы, изменив
свойство BackColor, например,на цвет LightGrey
из списка Web.
Поместить
на форму компонент
MenuStrip (Меню). При
этом на форме появится светлый
прямоугольник с текстом: «Вводить
здесь». Щелкнув мышью по прямоугольнику,
вы перейдете в режим ввода названия
пункта меню. Например, назовем первый
пункт: «Выбор цвета формы». Ниже откроется
прямоугольник для ввода пунктов подменю,
а правее: названия следующего пункта
меню. Таким образом, создайте первый
пункт меню следующего вида:
Т.к.
выбор каждого пункта меню должен
приводить к выполнению некоторых
действий, создайте обработчики событий
для каждого подпункта этого пункта
меню, изменяя свойство формы BackColor,
например, так:
this->BackColor=Color::Red;
Откомпилируйте
проект и проверьте работу первого пункта
меню.
Добавим
следующий пункт меню, назвав его «Работа
с матрицей», а для него создадим два
подпункта: «Формирование» и «Обработка».
Меню примет вид:
Закончим
формирование меню, добавив третий пункт
«О программе», в котором создадим
подпункты: «Сведения о разработчике»
и «Задание по обработке».И последний
пункт будет называться «Выход».
Перетащим
на форму Надпись (label)
для вывода результатов обработки и
разместим её на середине формы. Форма
примет вид:
-
Создать
обработчики событий для остальных
пунктов меню
Перейдем
к написанию обработчиков событий для
пункта меню «Работа с матрицей». Напишем
две функции: для формирования матрицы
датчиком случайных чисел и для поиска
максимального значения и поместим их
в библиотечный файл с исходными кодами.
Для этого щелкнем правой кнопкой мыши
в Обозревателе
решений
на папке Файлы
исходного кода,
далее вызовем меню правой кнопкой мыши.
В появившемся меню выберем: Добавить
-> Создать Элемент. В открывшемся окне
вписываем название файла – Matrica.cpp
и нажимаем Добавить.
В
файл поместим следующий код:
#pragma
once
#include
«stdafx.h»
#include
«stdlib.h»
//библиотека
содержит функцию rand()
void
form(int
matr[5][5])
{
int
i,j;
for
(i=0;i<5;i++)
for(j=0;j<5;j++)
matr[i][j]=rand()%100-40;
}
int
Maximum(int
matr[5][5])
{int
i,j;int
m=0;
for
(i=0;i<5;i++)
for(j=0;j<5;j++)
if(matr[i][j]>m)
m=matr[i][j];
return
m;
}
Следующим
шагом нужно добавить заголовочный файл
Matrica.h
в проект. Для этого щелкнем правой
кнопкой мыши в Обозревателе
решений
на папке Заголовочные
файлы,
далее меню Добавить -> Создать Элемент,
вписываем название файла – Matrica.h
и нажимаем Добавить. В данном файле
будет содержаться прототипы (заголовки)
разработанных функций и описание общих
переменных. Добавляем туда следующий
исходный код:
static
int
A[5][5];
//Описание
матрицы
void
form(int
matr[5][5]);
int
Maximum(int
matr[5][5]);
Далее
подключаем этот файл к проекту с помошью
директивы #include
– Открываем главный файл проекта:form_lab3.cpp
и добавляем туда после строчки #include
«stdafx.h»
следующий код:
#include
«Matrica.h»
Теперь
наш заголовочный файл подключен к
проекту и все готово к созданию
обработчиков событий.
Приведите
обработчики событий выбора пунктов
меню «форматирование» и «обработка» к
следующему виду:
//формирование
матрицы датчиком случайных чисел
private:
System::Void
формированиеToolStripMenuItem_Click(System::Object^
sender,
System::EventArgs^
e)
{
int
i,j;
System::String^s=gcnew
String(«»);
form(A); //вызов
функции
Form()
/*
Вывод
матрицы
в
окно
MessageBox
for
(i=0;i<5;i++)
{
for(j=0;j<5;j++)
s=s+System::Convert::ToString(A[i][j])+»t»;
s=s+»rn»;
}
MessageBox::Show(s,»
Матрица»);
}
//обработка
матрицы
private:
System::Void обработкаToolStripMenuItem_Click(System::Object^
sender, System::EventArgs^ e) {
int
max;
max=Maximum(A);
//вызов
функции
Maximum()
label1->Text=»Значение
максимума=»
+System::Convert::ToString(max);
}
Используя
окно сообщений MessageBox,
создадим обработчики событий для вывода
информации о разработчике и задания по
обработке матрицы.
Процедуру
обработки события «выход» приведем к
следующему виду:
private:
System::Void выходToolStripMenuItem_Click(System::Object^
sender, System::EventArgs^ e) {
this->Close();
}
Откомпилируйте
проект и проверьте работу всех пунктов
меню.
Задание
2. Обработка массива по индивидуальному
заданию.
Напишите
программу на языке С++ для обработки
матрицы по варианту, выбранному из
методических указания к лабораторной
работе №11.
Соседние файлы в папке Информатика
- #
- #
- #
- #
- #
- #
11.04.2015788.37 Кб52Учебное пособие_С++_от20Марта.docx
Here’s an approach to doing it (not the only way):
First, give Box
a method to draw itself to a Graphics context:
class Box
{
public Color color { get; set; } = Color.Red;
// Note: Conventionally, property names begin with a capital letter.
/// <summary>
/// Draw this block to the given graphics context.
/// </summary>
/// <param name="g">The graphics context to draw to.</param>
/// <param name="x">X-coordinate of the block within the graphics context.</param>
/// <param name="y">Y-coordinate of the block within the graphics context.</param>
/// <param name="width">Width of the area in which to draw the block.</param>
/// <param name="height">Height of the area in which to draw the block.</param>
public void DrawTo(Graphics g, int x, int y, int width, int height)
{
// Fill in the color of this block:
Brush brush = new SolidBrush(color); // fill style, color etc.
g.FillRectangle(brush, x, y, width, height);
// Black outline:
Pen pen = new Pen(Color.Black); // line style, color, etc.
g.DrawRectangle(pen, x, y, width, height);
// look up the documentation of the System.Drawing.Graphics class for other methods for drawing.
}
}
Now, if you wanted to draw the matrix to a bitmap image, you could do this:
private void DrawMatrix(System.Drawing.Bitmap bm)
{
Graphics g = Graphics.FromImage(bm);
try
{
for (int y = 0; y < MatrixHeight; y++)
for (int x = 0; x < MatrixWidth; x++)
{
boxes[x, y].DrawTo(g, x * CellWidth, y * CellHeight, CellWidth, CellHeight);
}
}
finally
{
g.Dispose();
}
}
// Size of the matrix:
const int MatrixWidth = 100;
const int MatrixHeight = 100;
// Size of each cell in pixels:
const int CellWidth = 20;
const int CellHeight = 20;
But that would be too slow to do each frame (for a 100×100 matrix).
You could update an off-screen image like this if you were updating only individual cells whenever they changed.
You could then place a PictureBox
control on the form, and set its Image
property to the Bitmap updated here. You can create that bitmap (parameter to this method) with new Bitmap(MatrixWidth * CellWidth, MatrixHeight * CellHeight)
.
Alternatively, you could draw to the form’s canvass in the OnPaint event handler (the Draw
method in your question).
Assuming that the window scrolls (and not all of the matrix is visible within the viewport at any time),
you would loop through only the visible cells and make them draw themselves to the form’s Graphics context.
The form’s Graphics context is the property Graphics
on the event arguments object. This is what you need for the Box.Draw
method above. When drawing each cell, you have to take account of its position in the grid and how the window is scrolled, in order to calculate the coordinates to be passed to that method.
On each invocation of the OnPaint event, only part of the window has to be redrawn. This part is given by the property ClipRectangle
. (Windows breaks down the area to be redrawn into one or more rectangles, and does a call for each rectangle.)
(ClipRectangle
could be the whole window.)
Drawing outside of this is allowed but can be inefficient.
So, for efficiency, you should loop through only all cells that fall at least partly within ClipRectangle
, calculate their position within the visible area and call their Box.Draw
.
The coordinates used with the Graphics
class are the visible coordinates, so (0,0) is the top left of the window, regardless of scrolling.
See these properties for the scroll position:
Form.HorizontalScroll.Value
Form.VerticalScroll.Value
Here’s an approach to doing it (not the only way):
First, give Box
a method to draw itself to a Graphics context:
class Box
{
public Color color { get; set; } = Color.Red;
// Note: Conventionally, property names begin with a capital letter.
/// <summary>
/// Draw this block to the given graphics context.
/// </summary>
/// <param name="g">The graphics context to draw to.</param>
/// <param name="x">X-coordinate of the block within the graphics context.</param>
/// <param name="y">Y-coordinate of the block within the graphics context.</param>
/// <param name="width">Width of the area in which to draw the block.</param>
/// <param name="height">Height of the area in which to draw the block.</param>
public void DrawTo(Graphics g, int x, int y, int width, int height)
{
// Fill in the color of this block:
Brush brush = new SolidBrush(color); // fill style, color etc.
g.FillRectangle(brush, x, y, width, height);
// Black outline:
Pen pen = new Pen(Color.Black); // line style, color, etc.
g.DrawRectangle(pen, x, y, width, height);
// look up the documentation of the System.Drawing.Graphics class for other methods for drawing.
}
}
Now, if you wanted to draw the matrix to a bitmap image, you could do this:
private void DrawMatrix(System.Drawing.Bitmap bm)
{
Graphics g = Graphics.FromImage(bm);
try
{
for (int y = 0; y < MatrixHeight; y++)
for (int x = 0; x < MatrixWidth; x++)
{
boxes[x, y].DrawTo(g, x * CellWidth, y * CellHeight, CellWidth, CellHeight);
}
}
finally
{
g.Dispose();
}
}
// Size of the matrix:
const int MatrixWidth = 100;
const int MatrixHeight = 100;
// Size of each cell in pixels:
const int CellWidth = 20;
const int CellHeight = 20;
But that would be too slow to do each frame (for a 100×100 matrix).
You could update an off-screen image like this if you were updating only individual cells whenever they changed.
You could then place a PictureBox
control on the form, and set its Image
property to the Bitmap updated here. You can create that bitmap (parameter to this method) with new Bitmap(MatrixWidth * CellWidth, MatrixHeight * CellHeight)
.
Alternatively, you could draw to the form’s canvass in the OnPaint event handler (the Draw
method in your question).
Assuming that the window scrolls (and not all of the matrix is visible within the viewport at any time),
you would loop through only the visible cells and make them draw themselves to the form’s Graphics context.
The form’s Graphics context is the property Graphics
on the event arguments object. This is what you need for the Box.Draw
method above. When drawing each cell, you have to take account of its position in the grid and how the window is scrolled, in order to calculate the coordinates to be passed to that method.
On each invocation of the OnPaint event, only part of the window has to be redrawn. This part is given by the property ClipRectangle
. (Windows breaks down the area to be redrawn into one or more rectangles, and does a call for each rectangle.)
(ClipRectangle
could be the whole window.)
Drawing outside of this is allowed but can be inefficient.
So, for efficiency, you should loop through only all cells that fall at least partly within ClipRectangle
, calculate their position within the visible area and call their Box.Draw
.
The coordinates used with the Graphics
class are the visible coordinates, so (0,0) is the top left of the window, regardless of scrolling.
See these properties for the scroll position:
Form.HorizontalScroll.Value
Form.VerticalScroll.Value
Программа в C# предназначена для вычисления суммы чисел, которые находятся за главной диагональю сгенерированной квадратной матрицы, размеры которой задаются с помощью констант в программном коде. Для лучшей визуализации сгенерированные числа в DataGridView выделены цветом. Те, что выделены зеленым цветом, суммируются. А главная диагональ выделена серым цветом. Остальные числа, слева от главной диагонали, оставлены с цветом по умолчанию. Программа может использоваться для сдачи лабораторной работы по программированию в визуальной среде Visual Studio на языке C#.
Созданное решение в визуальной студии выполнено из одной Windows формы, на которой размещено несколько визуальных элементов для выполнения поставленной математической задачи. Основной модуль проекта состоит из 104 строк кода.
Список используемых компонентов:
- DataGridView — используется для вывода значений матрицы;
- Button — кнопка, которая запускает процесс вычисления;
- TextBox — вывод числового значения результата;
- Label — метка.
Скрины к работе:
-
View the full image
Выполнение программы работы с матрицей
-
View the full image
Windows Forms работы с матрицей в C#
-
View the full image
Код работы с матрицей в среде Visual Studio C#
Другие проекты этой группы:
Лабораторные работы си шарп и задания по теме «Язык программирования c sharp: двумерные массивы»
Содержание:
- Теория
- Задания и лабораторные работы
- Дополнительные задания
Теория
-
В примере ниже показан код для объявления двумерного массива из пяти строк и трех столбцов (5 х 3).
- Объявление массива:
- Инициализация массива значениями:
- Доступ к элементам массива:
- Получение значения определенного элемента массива и присвоение его переменной:
- Получение общего количества элементов (или размерности массива):
- Получение количества строк и столбцов:
int[,] arr = new int[5, 3];
// 1. Инициализация массива при объявлении: int[,] arr1 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Тот же массив с заданными размерами: int[,] arr1 = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // 2. Инициализация массива без указания размерности: int[,] arr2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // 3. Инициализация массива после его объявления: int[,] arr; arr = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Присваивание значения конкретному элементу массива: arr[2, 1] = 25;
int[,] arr1 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; System.Console.WriteLine(arr1[0, 0]); //1 System.Console.WriteLine(arr1[0, 1]); //2 System.Console.WriteLine(arr1[1, 0]); //3 System.Console.WriteLine(arr1[1, 1]); //4 System.Console.WriteLine(arr1[3, 0]); //7
int elementValue = arr1[2, 1];
int[,] arr = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; var arrayLength = arr.Length; var total = 1; for (int i = 0; i < arr.Rank; i++) { total *= arr.GetLength(i); } System.Console.WriteLine("{0} равно {1}", arrayLength, total); // 8 равно 8
int[,] matrix = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; int r=matrix.GetLength(0); // строки int c=matrix.GetLength(1); // столбцы
Задания и лабораторные работы
Лабораторная работа 1.
Выполнить: Инициализируйте двумерный массив* с именем arr2d
заданными целочисленными значениями: ((1, 2); (3, 4); (5, 6))
.
1) Сначала выведите все элементы массива.
2) После этого выведите следующие элементы в консоль (элементы для вывода отмечены синим цветом):
(1, 2) (3, 4) (5, 6)
* Двумерный массив может называться матрицей.
Пример выполнения:
Массив: 1 2 3 4 5 6 1-й элемент = 3, 2-й элемент = 5
[Название проекта: Lesson_10Lab1
, название файла L10Lab1.cs
]
✍ Алгоритм:
- Создайте новый проект с именем файла, как указано в задаче.
- Подключите следующую библиотеку, чтобы не печатать каждый раз название класса
console
:
using static System.Console;
arr2d
, мы можем использовать оператор int[,] arr2;
. Сразу в этой же строке инициализируем массив значениями. Для этого добавьте следующий код в функцию Main
:int[,] arr2d= { {1, 2}, {3, 4}, {5, 6} };
Теперь у нас есть двумерный массив со значениями.
for (int i = 0; i < arr2d.GetLength(0); i++) { for (int j = 0; j < arr2d.GetLength(1); j++) { Console.Write($"{arr2d[i, j]} "); } Console.WriteLine(); }
Чтобы вывести значение конкретного элемента в окно консоли, нам нужно понять, в какой строке и столбце находится элемент. Обратите внимание, что индексы начинаются со значения 0
. Итак, к элементу со значением 3 можно получить доступ как arr2[1,0]
(где 1 — строка и 0 — столбец), а к элементу со значением 5 можно получить доступ так: arr2[2,0]
.
Console.WriteLine($"1-й элемент = {arr2d[1,0]}, 2-й элемент = {arr2d[2, 0]}");
Задание 1:
Приведены значения температуры воздуха за 4 дня; значения взяты с трех метеостанций, расположенных в разных регионах страны:
Station number | 1-й день | 2-й день | 3-й день | 4-й день |
---|---|---|---|---|
1 | -8 | -14 | -19 | -18 |
2 | 25 | 28 | 26 | 20 |
3 | 11 | 18 | 20 | 25 |
То есть в двумерном массиве это выглядело бы так:
t[0,0]=-8; | t[0,1]=-14; | t[0,2]=-19; | t[0,3]=-18; |
t[1,0]=25; | t[1,1]=28; | t[1,2]=26; | t[1,3]=20; |
t[2,0]=11; | t[2,1]=18; | t[2,2]=20; | t[2,3]=25; |
Указание: Инициализация массива:
int [,] t = { {-8,-14,-19,-18}, { 25,28, 26, 20}, { 11,18, 20, 25} };
Выполнить:
- Выведите значение температуры на 2-й метеостанции в течение 4-го дня и на 3-й метеостанции в течение 1-го дня (результат должен быть
20
и11
). - Выведите значения температуры всех метеостанций в течение 2-го дня (необходим
for
цикла). - Выведите значения температуры всех метеостанций в течение всех дней.
- Рассчитайте среднюю температуру на 3-й метеостанции (необходим
for
цикла). - Выведите дни и номера метеостанций, где температура была в диапазоне 24—26 градусов.
Пример вывода:
1-е задание: 20 and 11
2-е задание: 25 28 26 20
3-е задание:
-8 -14 -19 -18
25 28 26 20
11 18 20 25
4-е задание: 18
5-е задание:
станция 1 день 0
станция 1 день 2
станция 2 день 3
[Название проекта: Lesson_10Task1
, название файла L10Task1.cs
]
Задание 2:
To do: Вводятся элементы двумерного массива 2 х 3 ([2,3]). Посчитайте сумму элементов.
Указание 1: Для объявления массива размерностью 2 х 3 используйте код:
int[,] arr=new int[2, 3];
Указание 2: Для ввода значений элементов массива и перебора элементов, воспользуйтесь вложенными циклами:
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { ... } }
Пример вывода:
Введите 6 значений для матрицы 2 х 3 2 5 1 6 7 8 Матрица: 2 5 1 6 7 8 Сумма = 29
[Название проекта: Lesson_10Task2
, название файла L10Task2.cs
]
Задание 3:
Выполнить: Вводятся элементы двумерного массива 4 х 3. Посчитайте количество положительных элементов.
Пример вывода:
Пожалуйста, введите значения матрицы 4 х 3 2 5 -1 6 7 8 1 8 6 -3 1 -6 Матрица: 2 5 -1 6 7 8 1 8 6 -3 1 -6 кол-во положительных = 9
[Название проекта: Lesson_10Task3
, название файла L10Task3.cs
]
Лабораторная работа 2. Использование функции Random
Выполнить: Создайте метод FillMatrix
для заполнения двумерного массива случайными числами в диапазоне от -10 до 10.
Указание: Заголовок функции FillMatrix
должен быть таким:
FillMatrix(matrix, minValue, maxValue);
Пример выполнения:
Введите кол-во строк: 3 Введите кол-во столбцов: 4 Массив: -10 -7 -3 -4 -6 1 4 0 -5 -8 -1 -5
[Название проекта: Lesson_10Lab2
, название файла L10Lab2.cs
]
✍ Алгоритм:
- Создайте новый проект с названием файла, которое указано в задании.
- Подключите следующую библиотеку чтобы не указывать название класса
console
:
using static System.Console;
Main
добавьте код для того, чтобы попросить пользователя ввести количество строк и количество столбцов матрицы. Присвойте введенные значения переменным:... Console.WriteLine("введите кол-во строк"); int rows = int.Parse(ReadLine()); Console.WriteLine("введите кол-во столбцов"); int columns = int.Parse(ReadLine());
int[,] matrix = new int[rows,columns];
int minValue=-10; int maxValue=10;
Чтобы сделать программу более эффективной лучше использовать ReSharper (для инициализации метода):
FillMatrix
в коде функции Main
(несмотря на то, что мы еще ее не создали). В функцию Main()
введите следующий код:FillMatrix(matrix, minValue, maxValue);
Alt+Enter
). Следует выбрать пункт «Генерировать метод Program.FillMatrix».FillMatrix(int[,] matrix, int minValue = -10, int maxValue = 10);
matrix
— a declared matrix without initialization;
minValue
-устанавливать нижнюю границу для функции Random, значение по умолчанию — -10
maxValue
— устанавливать верхнюю границу для функции Random, значение по умолчанию 10
Random rand = new Random();
minValue
до maxValue
):... for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = rand.Next(minValue, maxValue); Write(matrix[i, j].ToString().PadLeft(4)); } WriteLine(); }
Обратите внимание, что matrix.GetLength(0)
означает число столбцов, а matrix.GetLength(1)
означает число столбцов.
Для прохода по элементам матрицы необходимо использовать вложенный цикл. Счетчики циклов должны быть разными переменными, можно использовать для их названий i
и j
. Метод GetLength(0)
возвращает кол-во строк матрицы, метод GetLength(1)
возвращает кол-во столбцов.
CTRL+a, CTRL+k, CTRL+F
для форматирования вашего кода.L10Lab2.cs
.Задание 4:
Выполнить: Создайте метод FillMatrix
для заполнения двумерного массива случайными числами от -15 до 15. Создайте еще один метод для нахождения минимального и максимального элементов массива (FindMinMaxArr
).
Указание 1: Сигнатура (заголовок) метода FindMinMaxArr
должен быть таким:
private static void FindMinMaxArr(int[,] matrix, ref int min, ref int max)
Указание 2: Алгоритм поиска минимального и максимального элемента можно посмотреть в одном из прошлых уроков Урок 5 -> Лаб. раб. 4.
Пример вывода:
введите кол-во строк 4 введите кол-во столбцов 5 Массив: 10 2 9 3 4 -3 -10 -14 -4 2 2 -9 11 3 -10 -1 -13 -5 -2 3 min = -14, max = 11
[Название проекта: Lesson_10Task4
, название файла L10Task4.cs
]
Лабораторная работа 3. Обмен определенных столбцов матрицы
Выполнить: Создайте метод ChangeColumns
для обмена определенных столбцов матрицы размера 3 х 4 (порядковые номера столбцов вводятся).
Указание: Помимо метода ChangeColumns
необходимо создать метод FillMatrix
для заполнения матрицы случайными числами, и метод PrintMatrix
для вывода элементов матрицы.
Пример вывода:
Матрица: -10 -7 -3 -4 -6 1 4 0 -5 -8 -1 -5 введите номера столбцов для обмена (первый столбец - 0-й): 1 2 Результирующая матрица: -10 -3 -7 -4 -6 4 1 0 -5 -1 -8 -5
[Название проекта: Lesson_10Lab3
, название файла L10Lab3.cs
]
✍ Fkujhbnv:
- Создайте новый проект и переименуйте главный файл согласно заданию.
- Необходимо создать матрицу с тремя строками и четырьмя столбцами. Объявите матрицу в функции
Main
:
int[,] matrix = new int[3, 4];
FillMatrix
из Лабораторной работы 2 и вставьте его в текущий проект. Или создайте метод заново. После этого у Вас будет код:static void FillMatrix(int[,] matrix, int minValue = -10, int maxValue = 10) { Random rand = new Random(); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = rand.Next(minValue, maxValue); } } }
PrintMatrix
для вывода элементов матрицы. Метод принимает один параметр — саму матрицу: static void PrintMatrix(int[,] m) { for (int i = 0; i < m.GetLength(0); i++) { for (int j = 0; j < m.GetLength(1); j++) { Console.Write(m[i, j].ToString().PadLeft(4)); } Console.WriteLine(); } }
Чтобы выводить элементы с одинаковыми отступами построчно мы конвертировали их в строкой тип данных и использовали метод PadLeft
для формирования одинаковых отступов слева.
Main
необходимо вызвать созданные методы: сначала — метод FillMatrix
и затем — метод PrintMatrix
.... FillMatrix(matrix); Console.WriteLine("Матрица 3 x 4: "); PrintMatrix(matrix);
... Console.WriteLine("введите номера столбцов для обмена (первый столбец - 0-й):"); int col1= int.Parse(Console.ReadLine()); int col2 = int.Parse(Console.ReadLine());
ChangeColumns
для обмена столбцов с указанными номерами:static void ChangeColumns(int[,] matrix, int col1, int col2) { System.Diagnostics.Debug.Assert((col1 < matrix.GetLength(1)) && (col2 < matrix.GetLength(1)), "указанный номер столбца выходит за границы размерности массива!"); for (int i = 0; i < matrix.GetLength(0); i++) { int temp = matrix[i, col1]; matrix[i, col1] = matrix[i, col2]; matrix[i, col2] = temp; // если используется Visual studio 2019: // (matrix[i, col1], matrix[i, col2]) = (matrix[i, col2], matrix[i, col1]); } }
Счетчик i
цикла проходится по строкам матрицы и в то же время каждый элемент col1
обменивается значениями с элементом col2
в каждой строке.
System.Diagnostics.Debug.Assert
используется для того, чтобы вызвать исключение при вводе значения большего, чем кол-во столбцов матрицы.
main
. Затем вызовите метод PrintMatrix
, чтобы увидеть результат:... ChangeColumns(matrix, col1, col2); Console.WriteLine("The resulting matrix:"); PrintMatrix(matrix);
CTRL+F5
.L10Lab3.cs
.Задание 5:
To do: Создайте метод PlaceZero
, который замещает некоторые элементы матрицы (5 х 5) нулями (0
). Посмотрите на пример вывода, чтобы понять, какие элементы должны быть замещены нулями.
Указание 1: Создайте методы для заполнения и вывода матрицы.
Указание 2: Заголовок метода PlaceZero
должен быть следующим:
static void PlaceZero(int[,] matrix)
Указание 3: Для замены элементов нулями используйте циклы.
Пример вывода:
Матрица: 10 2 9 3 6 3 10 14 4 8 2 9 11 3 2 1 13 5 2 7 12 3 11 4 5 Результирующая матрица: 0 0 0 0 0 0 10 14 4 0 0 9 11 3 0 0 13 5 2 0 0 0 0 0 0
[Название проекта: Lesson_10Task5
, название файла L10Task5.cs
]
Задание 6:
To do: Создайте метод FindProductOfColumn
для нахождения произведения элементов матрицы M
-го столбца (матрица 3 х 4) (M вводится). M
— это параметр out
(вывода).
Note: Сигнатура метода FindProductOfColumn
должна быть следующей:
static void FindProductOfColumn(int[,] matrix, int M,out int product)
Пример вывода:
Матрица: -10 -3 -7 -4 -6 4 1 0 -5 -1 -8 -5 Введите номер столбца (первый столбец - 0-й): 2 Произведение элементов 2-го столбца = -64
[Название проекта: Lesson_10Task6
, название файла L10Task6.cs
]
Главная и побочная диагонали
В алгебре главная диагональ матрицы A
— это все элементы матрицы Ai,j
, для которых i=j
. Элементы вне главной диагонали обозначены нулями, а элементы главной диагонали обозначены красными единицами:
Побочная диагональ матрицы B
размерности N
— это элементы Bi,j
, для которых i+j=N+1
для всех 1<=i,j<=N
. Но если i
и j
начинаются с нуля, то формула будет i+j=N-1
:
Лабораторная работа 4. Работа с диагоналями матрицы
Выполнить: Создайте квадратную матрицу M-х-M (значение M
вводится). Посчитайте сумму элементов побочной диагонали матрицы.
Примерный вывод:
Введите размерность матрицы: 3 Матрица 3-х-3: 10 -7 -3 6 1 4 5 -8 -1 сумма элементов побочной диагонали = 3
[Название проекта: Lesson_10Lab4
, название файла L10Lab4.cs
]
✍ Алгоритм:
- Создайте новый проект и измените название главного файла согласно заданию.
- Попросите пользователя ввести размерность матрицы и присвойте введенное значение переменной
M
:
Console.WriteLine("Введите размерность матрицы:"); int M = int.Parse(Console.ReadLine());
M
-х-M
. Объявите матрицу в коде функции Main
:int[,] matrix = new int[M, M];
FillMatrix
с предыдущей лабораторной работы и вставьте его до или после функции Main
.PrintMatrix
и также вставьте его после метода FillMatrix
.AntidiagonalSum
, который будет суммировать элементы побочной диагонали матрицы.static int AntidiagonalSum(int[,] matrix) { ... }
i+j=M-1
. Для прохода по элементам матрицы будем использовать вложенные циклы:... int sum = 0; for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { if ((i+j == M-1) { sum+ = matrix[i,j]; } } }
return
:...
return sum;
Main
:int result = AntidiagonalSum(matrix); Console.WriteLine($"сумма элементов побочной диагонали = {result}");
CTRL+F5
) и проверьте результат.Задание 7:
Выполнить: Create square matrix M-by-M (M
is inputted). Calculate a product of its elements within a main diagonal.
Указание: a main diagonal elements are such as i=j
.
Примерный вывод:
Введите размерность матрицы: 3 Матрица 3-х-3: 10 -7 -3 6 1 4 5 -8 -1 Произведение элементов главной диагонали = -10
[Название проекта: Lesson_10Task7
, название файла L10Task7.cs
]
Дополнительные задания
Доп. задание 1:
Выполнить: Запрашиваются натуральные M
и N
. Создайте метод FillMatrix
для заполнения матрицы размерностью M
-х-N
; все элементы J
-го столбца вычисляются по формуле X
*J
(J — номер столбца, J
= 1, …, N
), а X
— число — аргумент метода.
Указание: заголовок метода должен быть следующим:
static int[,] FillMatrix(int M, int N, int X)
Примерный вывод:
введите кол-во строк: 3 введите кол-во столбцов: 4 Введите значение множителя (аргумента): 3 Матрица 3-х-3: 3 6 9 12 3 6 9 12 3 6 9 12
[Название проекта: Lesson_10ExTask1
, название файла L10ExTask1.cs
]
Доп. задание 2:
Выполнить: Даны две матрицы одинаковой размерности (необходимо создать метод для заполнения матриц случайными числами). Посчитайте сумму элементов матрицы, используйте для этого еще одну матрицу.
Указание: Заголовок метода:
static int[,] SumMat(int[,] a, int[,] b)
Примерный вывод:
Matrix 1: -3 8 3 -9 -6 4 6 4 -2 Matrix 2: 4 -4 1 -5 1 -1 4 8 -10 Result matrix: 1 4 4 -14 -5 3 10 12 -12
[Название проекта: Lesson_10ExTask2
, название файла L10ExTask2.cs
]