Adelinka
(Аделина)
16.Ноябрь.2020 14:43:01
#1
Добрый вечер!
задание вот такое:
Дана матрица A(N,M). В каждой строке поменять местами
наибольший и наименьший элементы.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double zam;
double[,] a = new double[10, 10];
Random random = new Random();
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 0; j < a.GetLength(1); j++)
{
textBox1.Text = ("a[" + Convert.ToString(i + 1) + "," + Convert.ToString(j + 1) + "]=");
textBox1.Text = (" ");
}
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox1.Text = (a[i, j] + " ");
}
}
int i_min = 0, j_min = 0;
int i_max = 0, j_max = 0;
double min = a[0, 0];
double max = a[0, 0];
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 1; j < a.GetLength(1); j++)
{
if (a[i, j] <= min)
{
min = a[i, j];
i_min = i;
j_min = j;
}
if (a[i, j] >= max)
{
max = a[i, j];
i_max = i;
j_max = j;
}
}
zam = a[i_min, j_min];
a[i_min, j_min] = a[i_max, j_max];
a[i_max, j_max] = zam;
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox2. Text=(Convert.ToString(a[i, j]) + " ");
}
}
}
}
}
Код компилируется но при нажатии на Button выводится только одно число а не весь массив.Помогите пожалуйста решить эту проблему.
Adelinka
(Аделина)
16.Ноябрь.2020 15:43:05
#3
Спасибо.
Еще один вопрос тогда почему теперь выводит одни нули?
AlexP
(Alex P.)
16.Ноябрь.2020 15:50:50
#4
Где именно?
Видимо в массив ничего другого не записано
Adelinka
(Аделина)
16.Ноябрь.2020 15:51:49
#5
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double zam;
double[,] a = new double[10, 10];
Random random = new Random();
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 0; j < a.GetLength(1); j++)
{
}
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox1.Text += (a[i, j] + " ");
}
}
int i_min = 0, j_min = 0;
int i_max = 0, j_max = 0;
double min = a[0, 0];
double max = a[0, 0];
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 1; j < a.GetLength(1); j++)
{
if (a[i, j] <= min)
{
min = a[i, j];
i_min = i;
j_min = j;
}
if (a[i, j] >= max)
{
max = a[i, j];
i_max = i;
j_max = j;
}
}
zam = a[i_min, j_min];
a[i_min, j_min] = a[i_max, j_max];
a[i_max, j_max] = zam;
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox2. Text+=((a[i, j]) + " ");
}
}
}
}
}
Adelinka
(Аделина)
16.Ноябрь.2020 15:53:10
#6
В коде по сути должно заполнение текст бокс быть рандомными числами а у меня нули
Adelinka
(Аделина)
16.Ноябрь.2020 15:57:58
#7
извиняюсь забыла строчку
a[i, j] = random.Next(0, 100);
``
Adelinka
(Аделина)
16.Ноябрь.2020 16:02:02
#8
Еще одна проблема числа не меняются местами наибольшие и наименьшие числа.
Подскажите пожалуйста где ошибка.
Adelinka
(Аделина)
16.Ноябрь.2020 16:02:33
#9
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double zam;
double[,] a = new double[10, 10];
Random random = new Random();
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 0; j < a.GetLength(1); j++)
{
a[i, j] = random.Next(0, 100);
}
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox1.Text += (a[i, j] + " ");
}
}
int i_min = 0, j_min = 0;
int i_max = 0, j_max = 0;
double min = a[0, 0];
double max = a[0, 0];
for (int i = 0; i < a.GetLength(0); i++)
for (int j = 1; j < a.GetLength(1); j++)
{
if (a[i, j] <= min)
{
min = a[i, j];
i_min = i;
j_min = j;
}
if (a[i, j] >= max)
{
max = a[i, j];
i_max = i;
j_max = j;
}
}
zam = a[i_min, j_min];
a[i_min, j_min] = a[i_max, j_max];
a[i_max, j_max] = zam;
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox2. Text+=(a[i, j] + " ");
}
}
}
}
}
AlexP
(Alex P.)
16.Ноябрь.2020 16:31:16
#10
Adelinka:
zam = a[i_min, j_min];
a[i_min, j_min] = a[i_max, j_max];
a[i_max, j_max] = zam;
Тут только один раз меняются, а не в каждой строке.
Если вообще нигде не поменялись, то надо для начала посмотреть какие значения min, i_min и т.д. получились.
Отладчиком или отладочным выводом (в С# например удобно Debug.WriteLine
).
Adelinka:
забыла строчку
Поэтому надо стараться не смешивать саму задачу и ввод/вывод/UI
Хотя бы так на функции разделить:
private void button1_Click(object sender, EventArgs e)
{
double[,] a = GenerateRandomMatrix(10, 10);
PrintMatrix(textBox1, a);
ReplaceMinMax(a);
PrintMatrix(textBox2, a);
}
private void PrintMatrix(TextBox textBox, double[,] a)
{
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
textBox.Text += a[i, j] + " ";
}
textBox.Text += Environment.NewLine; // у текстбокса должен быть Multiline = True
}
}
private double[,] GenerateRandomMatrix(int n, int m)
{
double[,] a = new double[n, m];
Random random = new Random();
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
a[i, j] = random.Next(0, 100);
}
}
return a;
}
private void ReplaceMinMax(double[,] a)
{
int i_min = 0, j_min = 0;
int i_max = 0, j_max = 0;
double min = a[0, 0];
double max = a[0, 0];
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 1; j < a.GetLength(1); j++)
{
if (a[i, j] <= min)
{
min = a[i, j];
i_min = i;
j_min = j;
}
if (a[i, j] >= max)
{
max = a[i, j];
i_max = i;
j_max = j;
}
}
}
double zam = a[i_min, j_min];
a[i_min, j_min] = a[i_max, j_max];
a[i_max, j_max] = zam;
}
Adelinka
(Аделина)
16.Ноябрь.2020 17:22:12
#11
Все равно числа не меняются местами
AlexP
(Alex P.)
16.Ноябрь.2020 17:25:34
#12
Не меняются где? В моем коде это не исправлено, см. первую часть сообщения выше.
Adelinka
(Аделина)
16.Ноябрь.2020 17:40:48
#13
Такой момент я точку останова ставля где идет код замены i j цифры до 10 а я поставил рандомное заполнение с 10,100
что не так?
Adelinka
(Аделина)
16.Ноябрь.2020 18:33:14
#15
Тогда я не понимаю что не так почему не меняются
AlexP
(Alex P.)
Разделил(а) эту тему
12.Ноябрь.2021 14:48:50
#17