Mình có mấy bài tập này bạn nào biết chỉ mình với!(dùng con trỏ và bộ nhớ động)
1>..........
Viết chương trình tạo ma trận nghịch đảo n x n .
2>............
Giải hệ phương trình bằng phương pháp Gauss
Đây là FULL CODE của bài 2, bạn xem thử có đúng ý bạn không nhé ^_^
C Code:
#include <stdio.h> #include <math.h> #include<conio.h> #define MAX 10 double A[MAX][MAX], B[MAX][MAX], X[MAX][MAX]; void gauss_jordan(int n, int p) { int i=0, j, done=0, m, k; double max, c; while (!done) { if (A[i][i] == 0) { max = 0; m = i; for (k=i+1; k<n; k++) { m = k; } if (m != i) { for (j=i; j<n; j++) { c = A[i][j]; A[i][j] = A[m][j]; A[m][j] = c; } for (j=0; j<p; j++) { c = B[i][j]; B[i][j] = B[m][j]; B[m][j] = c; } } if (m == i) done = 1; } if (A[i][i] != 0) { c = 1/A[i][i]; for (j=i; j<n; j++) A[i][j] = A[i][j] * c; for (j=0; j<p; j++) B[i][j] = B[i][j] * c; for (k=0; k<n; k++) if (k != i) { c= A[k][i]; for (j=i; j<n; j++) A[k][j] = A[k][j] - A[i][j]*c; for (j=0; j<p; j++) B[k][j] = B[k][j] - B[i][j] * c; } } for (k=0; k<n; k++) { } i++; if (i>=n) done = 1; } if (i >= n) for (j=0; j<n; j++) for (k=0; k<p; k++) X[j][k] = B[j][k]; } void in_A(int n) { int i, j; for (i=0; i<n; i++) { } } void in_B(int n, int p) { int i, j; for (i=0; i<n; i++) { for (j=0; j<p; j++) } } void in_X(int n, int p) { int i, j; for (i=0; i<n; i++) { } } void main() { clrscr(); int n, i, j, p; for (i=0; i<n; i++) for (j=0; j<n; j++) { } for (i=0; i<n; i++) for (j=0; j<p; j++) { } in_A(n); in_B(n,p); gauss_jordan(n,p); in_X(n, p); getch(); }
Giải hệ phương trình - bình thường thì được ? phương pháp gauss gì đó thì chịu , nhưng một khi đã có phương pháp có nghĩa là có các hướng định sẵn mà cậu phải làm theo từng bước , chỉ cần cậu mò theo đúng hướng thì cậu đã thành công rồi !
Tớ nghĩ là cậu nên tự viết thử rồi đưa code lên hơn là chép code về rồi ngó ok ?
cám ơn các bạn nhiều
mình còn một số vấn đề nữa hi vọng các bạn giúp đỡ.Nếu có trong diễn đàn thì có thể bạn cho mình vị trí của bài đó (nếu có thể và cám ơn nhiều nhiều).
bây giờ mình nhập được ma trận và xuất ra dạng
a[1,1]=2
a[1,2]=3
a[2,1]=4
a[2,2]=7
.....
mình muốn xuất ra dạng
2 3
4 7
thì phải làm sao.
Các bạn biết chỉ gấp cho minh với.
Cám ơn nhiều!
Muốn in theo kiểu vậy thì bạn có thể viết như thế này:
Bạn chú ý quy cách in là "%3d", chương trình sẽ cấp cho mỗi số in ra là 3 vị trí trên màn hình.Code:for(i=0;i<m;i++) //m là số dòng { for(j=0;j<n;j++) //n là số cột printf("%3d",A[i][j]); //Tên ma trận là A printf("\n"); }
Đã được chỉnh sửa lần cuối bởi thangkho : 25-04-2007 lúc 09:30 PM.
Cám ơn bạn nhưng có vấn đề
nếu làm như bạn
a[1,1]=2
a[1,2]=3
a[2,1]=4
a[2,2]=7
thì kết quả là
4
7
4
7
còn mình sửa thành
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%3d",A[i][j]);
if(j=n)
printf("\n");
}
thì kết quả là
4 7
4 7
giờ phải làm sao?
Mình có đoạn chương trình sau các bạn xem thử xem có gì sai không mà kết quả chạy không đúng.
nhập
a[11]=1
a[12]=2
a[21]=3
a[22]=4
kết quả
3 4
3 4
code
C Code:
# include<stdio.h> # include<alloc.h> # include<conio.h> main() { int *a,n,m,i,j; clrscr(); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(j==m) }} getch(); return 0; }
Thiệt muốn giúp lắm nhưng đọc cái code bạn mình muốn hoa mắt luôn ?
Không biết sai chỗ nào nữa ! nhưng lại có góp ý +thắc mắc thế này :
cái vòng for cuối cùng thì không cần cặp {}
cái cách lưu và xuất của cậu lạ thật a[i,j] tớ nhớ là a[i][j] không biết đây có phải là cách khác không ?
Cuối cùng cái vòng for này rớ viết lại như sau:
-->for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
printf("\t%3d",a[i,j]);
if(j==m)
printf("\n");
}}
Không biết nó còn sai chỗ nào nữa !for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
printf("\t%3d",a[i][j]);
printf("\n");
}
fix như bài trên .printf("a[%d%d]=",i,j);
scanf("%d",&a[i,j]);
-> ngược , chưa có m , n mà đã memory allocationa=(int*)malloc(n*m*sizeof(int));
printf("nhap n=");
scanf("%d",&n);
printf("nhap m=");
scanf("%d",&m);
None!