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");
            }
        }
Văn Dương viết 11:59 ngày 01/10/2018

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.

Thảo Nguyễn viết 12:01 ngày 01/10/2018

Bạn ơi mình chỉ đổi for chạy từ 1 vs chạy từ 0 thôi mà

Văn Dương viết 11:59 ngày 01/10/2018

Bạn phải cho nó giống nhau.

Thảo Nguyễn viết 12:03 ngày 01/10/2018

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

Bài liên quan
0