chuyển ma trận thường sang ma trận bậc thang [Archive] – Cộng đồng C Việt

View Full Version : chuyển ma trận thường sang ma trận bậc thang

fithou91192

bài này khó viết code quá các anh cho em hướng giải quyết với

fithou91192

trời vẫn chưa có ai trả lời sao híc (?)

clamvn

cho ví dụ đi,em ngu nên ko biết 😀

fithou91192

cho ví dụ đi,em ngu nên ko biết 😀

bạn chưa học đến ma trận sao .Mình không biết viết kí hiệu toán học lên đây nên giải thích thế này:
cho một ma trận bạn làm cách nào cho chữ số đầu tiên của hàng thứ hai=0 hàng đầu giữ nguyên rồi lần lượt các hàng sau chữ số 0 tăng dần cho đến khi tạo thành bậc thang thì dừng .khả năng sư phạm của mình có hạn bạn đọc cố hiểu nhé (:-)??

clamvn

Như thế này hé :

1 1 1 1 1 1 1 1 1 1 1 1 1
0 2 2 2 2 2 2 2 2 2 2 2 2
0 0 3 3 3 3 3 3 3 3 3 3 3
0 0 0 4 4 4 4 4 4 4 4 4 4
……………………………
0 0 0 0 0 0 0 0 0 0 0 N

xuyenit55

cho ví dụ đi,em ngu nên ko biết 😀

ví dụ đây !

x y z
0 a b
0 0 c

clamvn

thử cái này xem

for(i=1;i<n;i++)
for(j=0;j<i;j++)
a[i][j]=0;

xuyenit55

thử cái này xem

for(i=1;i<n;i++)
for(j=0;j<i;j++)
a[i][j]=0;

ko đc đâu bạn ơi ! chuyển từ ma trận thường sang ma trận bậc thang phải dùng các công thức biến đổi nó sao cho định thức của nó không thay đổi kia !
giả sử dùng phương pháp của ông róc đan !

clamvn

Tại vì chủ topic nói vậy nên viết vậy.
Nói như bạn thì hiểu.
Mấy bài này chuối chác lém. Mấy bài áp dụng toán học chán ốm

lightbringer

Tại vì chủ topic nói vậy nên viết vậy.
Nói như bạn thì hiểu.
Mấy bài này chuối chác lém. Mấy bài áp dụng toán học chán ốm

tin học từ toán mà ra, bạn nói thế tức là bạn chán lập trình luôn à /!\

conrongchautien

Bạn dùng thuật toán Gauss để đưa về ma trận bậc thang. Trong 4rum có khá nhiều bài dạng này, bạn tự tìm đi nhé

clamvn

tin học từ toán mà ra, bạn nói thế tức là bạn chán lập trình luôn à /!\

(=D)>(=D)>

Mình nói chuối chứ có nói chán đâu.
Ko phải ko làm dc mà là nếu áp dụng thẳng như toán học thì quả là ……
Vấn đề là phải tìm dc thuật toán rời rạc, dễ dàng hơn.
Máy tính nó ko như não người.
Còn nếu bạn nói vậy thì làm thử đi !

heroandtn3

Thử code này xem có được không các bạn ;;)

//ma tran bac thang
#include<stdio.h>
#include<conio.h>
#define MAX 20
float a[MAX][MAX],t;
int i,j;
int hang,cot;
int nhap()
{
printf(“Nhap du lieu cho ma tran.\n”);
printf(“So hang: “); scanf(“%d”,&hang);
printf(“So cot: “); scanf(“%d”,&cot);

for (i=0;i<hang;i++)
for (j=0;j<cot;j++)
{
printf(“a[%d][%d] = “,i+1,j+1);
scanf(“%f”,&a[i][j]);
}
return 0;
}
/*****Ma tran*******
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44
********************/
int xu_ly(float a[MAX][MAX],int hang, int cot)
{
int ii;
for (i=0;i<hang;i++)
for (ii=i+1;ii<hang;ii++)
{
t=a[ii][i]/a[i][i];
for (j=0;j<cot;j++)
a[ii][j]-=t*a[i][j];
}
return 0;

}
int main()
{
nhap();
xu_ly(a,hang,cot);
for (i=0;i<hang;i++)
{
for (j=0;j<cot;j++)
printf(“%.1f “,a[i][j]);
printf(“\n”);
}
printf(“Nhan ESC de ket thuc!”);
while(getch()!=27);
return 0;
}

dehin

Dùng các phép biến đổi sơ cấp ( thuât toán Gauss) để đưa về ma trận bậc thang
Code ko khó đâu.
Code bạn hero ko đc: Nếu a[i][i]=0 thì làm sao mà chia đc
Phải dùng thuật toán Gauss ( trong đó có bước tìm hàng có phần tử chốt khác 0, đổi chỗ 2 hàng đó, sau đó với nhân để triệt tiêu)

fithou91192

Thử code này xem có được không các bạn ;;)

//ma tran bac thang
#include<stdio.h>
#include<conio.h>
#define MAX 20
float a[MAX][MAX],t;
int i,j;
int hang,cot;
int nhap()
{
printf(“Nhap du lieu cho ma tran.\n”);
printf(“So hang: “); scanf(“%d”,&hang);
printf(“So cot: “); scanf(“%d”,&cot);

for (i=0;i<hang;i++)
for (j=0;j<cot;j++)
{
printf(“a[%d][%d] = “,i+1,j+1);
scanf(“%f”,&a[i][j]);
}
return 0;
}
/*****Ma tran*******
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44
********************/
int xu_ly(float a[MAX][MAX],int hang, int cot)
{
int ii;
for (i=0;i<hang;i++)
for (ii=i+1;ii<hang;ii++)
{
t=a[ii][i]/a[i][i];
for (j=0;j<cot;j++)
a[ii][j]-=t*a[i][j];
}
return 0;

}
int main()
{
nhap();
xu_ly(a,hang,cot);
for (i=0;i<hang;i++)
{
for (j=0;j<cot;j++)
printf(“%.1f “,a[i][j]);
printf(“\n”);
}
printf(“Nhan ESC de ket thuc!”);
while(getch()!=27);
return 0;
}

bài này mình chạy thử có chạy đúng đâu bạn bạn xem lại thử xem sao(:=(|)

heroandtn3

bài này mình chạy thử có chạy đúng đâu bạn bạn xem lại thử xem sao(:=(|)
Tớ thấy code của tớ còn 2 chỗ chưa được:

1. Khi a[i][i]=0 thì không chia được.
2. Kết quả ở dạng làm tròn.

@fithou91192: bạn test với ma trận nào mà không ra kết quả đúng thế 😀

Dark_chautam

giúp mình bài này đi: Nhập vào một số nguyên dương có 2 chữ số, xuất ra số đảo ngược
Vd: Nhập vào 23, xuất ra 32

Dark_chautam

viết chương trình xuất ra màn hình:
*
* *
* * *
* * * *
Giúp mình đi,thanks rất nhiều

xuyenit55

giúp mình bài này đi: Nhập vào một số nguyên dương có 2 chữ số, xuất ra số đảo ngược
Vd: Nhập vào 23, xuất ra 32

bài của bạn đây !

#include<iostream>
using namespace std;
int main()
{
int n ;
int a;
cout<<” nhap n = “;
cin>>n;
while ( n >0)
{
a = n % 10;
n /=10;
cout<< a;
}
cout<<endl;
system (“pause”);
return 0;
}

fithou91192

viết chương trình xuất ra màn hình:
*
* *
* * *
* * * *
Giúp mình đi,thanks rất nhiều
trên diễn đàn có nhiều rồi mà:(:P)

#include<conio.h>
#include<stdio.h>
void main()
{
int i,j,n;
clrscr();
printf(“\n nhap so dong n=”);
scanf(“%d”,&n);
for(i=0,i<n;i++)
{
for(j=0;j<i+1;j++)
printf(“*”);
printf(“\n”);
}
getch();
}

Rate this post

Viết một bình luận