01/10/2018, 09:48
Sửa lỗi chương trình về mảng trong winform C#
Bài này em làm C về tìm giá trị riêng lớn nhất của mảng chạy ra kết quả đúng rồi nhưng mà khi e viết winform C# em không ra kết quả đúng .Mong anh chị tìm lỗi sai hộ em với .
void main()
{
int i, j, k, n, t;
char tl;
float t0, t1, epsi, s;
float a[max][max];
float x0[max], x1[max];
/*clrscr();*/
printf("Phuong phap lap luy thua tim tri rieng lon nhat
");
printf("Cho so hang va cot cua ma tran n = ");
scanf_s("%d", &n);
printf_s("Cho cac phan tu cua ma tran a :
");
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
{
printf("a[%d][%d] = ", i, j);
scanf_s("%f", &a[i][j]);
}
printf("
");
printf("Ma tran ban da nhap
");
printf("
");
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%15.5f", a[i][j]);
printf("
");
}
fflush(stdin);
t = 1;
epsi = 1e-5;
printf("
Ma tran ban dau
");
printf("
");
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%15.5f", a[i][j]);
printf("
");
}
printf("
");
for (i = 1; i <= n; i++)
x0[i] = 1;
k = 1;
t = 0;
t1 = 0;
do
{
t0 = t1;
for (i = 1; i <= n; i++)
{
x1[i] = 0;
for (j = 1; j <= n; j++)
x1[i] = x1[i] + a[i][j] * x0[j];
}
s = 0;
j = 0;
for (i = 1; i <= n; i++)
if (s<fabs(x1[i]))
{
j = i;
s = fabs(x1[i]);
}
t1 = x1[j];
for (i = 1; i <= n; i++)
x1[i] = x1[i] / t1;
if (fabs(t1- t0)<epsi)
{
printf("Da thuc hien %d buoc lap
", k);
printf("Gia tri rieng lon nhat Vmax = %15.5f
", t1);
printf("vec to rieng tuong ung
");
for (i = 1; i <= n; i++)
printf("%.5f
", x1[i]);
t = 1;
}
if (fabs(t1-t0)>epsi)
{
for (i = 1; i <= n; i++)
x0[i] = x1[i];
k = k + 1;
}
if (k>max)
t = 1;
} while (t == 0);
system("pause");
}
Đây là chương trình winform C#
double[,] a = { { a16, a17, a18 }, { a19, a20, 21 }, { a22, a23, a24 } };
epsi = 1E-5;
for (i = 0; i <= 2; i++)
x0[i] = 1;
k = 1;
t = 0;
t1 = 0;
do
{
t0 = t1;
for (i = 0; i <= 2; i++)
{
x1[i] = 0;
for (j = 0; j <= 2; j++)
x1[i] = x1[i] + a[i, j] * x0[j];
}
s = 0;
j = 0;
for (i = 0; i <= 2; i++)
if (s < Math.Abs(x1[i]))
{
j = i;
s = Math.Abs(x1[i]);
}
t1 = x1[j];
for (i = 0; i <= 2; i++)
{
x1[i] = x1[i] / t1;
}
if (Math.Abs(t1 - t0) < epsi)
{
textBox37.Text = String.Format("{0:0.000}", t1).ToString();
label20.Text =((t1 - 3)/ 2).ToString();
label21.Text = (((t1 - 3)/ 2)/0.58).ToString();
t = 1;
}
if (Math.Abs(t1 - t0) > epsi)
{
for (i = 0; i <= 2; i++)
{
x0[i] = x1[i];
k = k + 1;
}
textBox37.Text = String.Format("{0:0.000}", t1).ToString();
label20.Text = ((t1 - 3)/ 2).ToString();
label21.Text = (((t1 - 3)/ 2) / 0.58).ToString();
}
if (k > 50)
{
t = 1;
}
textBox37.Text = String.Format("{0:0.000}", t1).ToString();
label20.Text = ((t1 - 3)/ 2).ToString();
label21.Text = (((t1 - 3)/ 2) / 0.58).ToString();
} while (t == 0);
}
else
{
MessageBox.Show("Dữ liệu bạn chưa nhập đủ", "Lỗi");
}
}
Bài liên quan
Code có giống nhau đâu mà đòi ra giống nhau.
1 thằng for(i=1; i<=n; i++)
1 thằng kia tìm lòi mắt không thấy.
Bạn ơi mình chỉ đổi for chạy từ 1 vs chạy từ 0 thôi mà
Bạn phải cho nó giống nhau.
Vì mình áp dụng cho ma trận 3*3 nên mình mới để i chạy từ 0 đến 2.Mình nghĩ là mình sai các vòng for chưa cho chạy đúng điều kiện thôi