Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Con trỏ và bộ nhớ động trên C

  1. #1
    No Avatar
    cong_dong_viet Khách

    Exclamation Con trỏ và bộ nhớ động trên C

    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

  2. #2
    No Avatar
    Leon88 Khách

    Trích dẫn Nguyên bản được gửi bởi cong_dong_viet Xem bài viết
    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
    Bài 1 có trong 4rum rồi ... bạn search đi
    Bài 2 PP Gauss là gì vậy bạn giải thích luôn đi .. để xem có giúp gì dc ko ^^

  3. #3
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Đây là FULL CODE của bài 2, bạn xem thử có đúng ý bạn không nhé ^_^
    C Code:
    1. #include <stdio.h>
    2. #include <math.h>
    3. #include<conio.h>
    4. #define MAX 10
    5. double A[MAX][MAX], B[MAX][MAX], X[MAX][MAX];
    6. void gauss_jordan(int n, int p)
    7. {
    8.     int i=0, j, done=0, m, k;
    9.     double max, c;
    10.     printf("\nTinh nghiem cua he phuong trinh");
    11.     while (!done)
    12.     {
    13.         if (A[i][i] == 0)
    14.         {
    15.             max = 0;
    16.             m = i;
    17.             for (k=i+1; k<n; k++)
    18.             if (max < fabs(A[k][i]))
    19.             {
    20.                 m = k;
    21.                 max = fabs(A[k][i]);
    22.             }
    23.             if (m != i)
    24.             {
    25.                 for (j=i; j<n; j++)
    26.                 {
    27.                     c = A[i][j];
    28.                     A[i][j] = A[m][j];
    29.                     A[m][j] = c;
    30.                 }
    31.                 for (j=0; j<p; j++)
    32.                 {
    33.                     c = B[i][j];
    34.                     B[i][j] = B[m][j];
    35.                     B[m][j] = c;
    36.                 }
    37.             }
    38.             if (m == i) done = 1;
    39.         }
    40.         if (A[i][i] != 0)
    41.         {
    42.             c = 1/A[i][i];
    43.             for (j=i; j<n; j++) A[i][j] = A[i][j] * c;
    44.             for (j=0; j<p; j++) B[i][j] = B[i][j] * c;
    45.             for (k=0; k<n; k++)
    46.                 if (k != i)
    47.                 {
    48.                     c= A[k][i];
    49.                     for (j=i; j<n; j++) A[k][j] = A[k][j] - A[i][j]*c;
    50.                     for (j=0; j<p; j++) B[k][j] = B[k][j] - B[i][j] * c;
    51.                 }
    52.         }
    53.         printf("\nLan khu hang %d", i);
    54.         for (k=0; k<n; k++)
    55.         {
    56.             printf("\n");
    57.             for (j=0; j<n; j++) printf("%10.5lf", A[k][j]);
    58.             for (j=0; j<p; j++) printf(" = %10.5lf", B[k][j]);
    59.         }
    60.         i++;
    61.         if (i>=n) done = 1;
    62.     }
    63.     if (i >= n)
    64.         for (j=0; j<n; j++)
    65.             for (k=0; k<p; k++)
    66.                 X[j][k] = B[j][k];
    67. }
    68.  
    69. void in_A(int n)
    70. {
    71.     int i, j;
    72.     printf("\nMa tran A :");
    73.     for (i=0; i<n; i++)
    74.     {
    75.         printf("\n");
    76.         for (j=0; j<n; j++) printf("%10.5lf", A[i][j]);
    77.     }
    78. }
    79.  
    80. void in_B(int n, int p)
    81. {
    82.     int i, j;
    83.     printf("\nMa tran B :\n");
    84.     for (i=0; i<n; i++)
    85.     {
    86.         printf("\n");
    87.         for (j=0; j<p; j++)
    88.         printf("%10.5lf", B[i][j]);
    89.     }
    90. }
    91.  
    92. void in_X(int n, int p)
    93. {
    94.     int i, j;
    95.     printf("\nMa tran nghiem X :\n");
    96.     for (i=0; i<n; i++)
    97.     {
    98.         printf("\n");
    99.         for (j=0; j<p; j++) printf("%10.5lf", X[i][j]);
    100.     }
    101. }
    102.  
    103. void main()
    104. {
    105.     clrscr();
    106.     int n, i, j, p;
    107.     printf("Giai he phuong trinh tuyen tinh AX = B.");
    108.     printf("\nbang phuong phap khu GAUSS.");
    109.     printf("\nCho biet cap ma tran A: ");
    110.     scanf("%d%*c", &n);
    111.     printf("\nCho biet cap ma tran B : ");
    112.     scanf("%d%*c", &p);
    113.     printf("\nNhap ma tran A :\n");
    114.     for (i=0; i<n; i++)
    115.         for (j=0; j<n; j++)
    116.         {
    117.             printf("A[%d][%d] = ", i, j);
    118.             scanf("%lf", &A[i][j]);
    119.         }
    120.     printf("\nNhap ma tran B :\n");
    121.     for (i=0; i<n; i++)
    122.         for (j=0; j<p; j++)
    123.         {
    124.             printf("B[%d][%d] = ", i, j);
    125.             scanf("%lf", &B[i][j]);
    126.         }
    127.     in_A(n);
    128.     in_B(n,p);
    129.     gauss_jordan(n,p);
    130.     in_X(n, p);
    131.     getch();
    132. }

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    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 ?

  5. #5
    No Avatar
    cong_dong_viet Khách

    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!

  6. #6
    Ngày gia nhập
    04 2007
    Bài viết
    3

    Mặc định Con trỏ và bộ nhớ động trên C

    Muốn in theo kiểu vậy thì bạn có thể viết như thế này:

    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");
    }
    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.
    Đã được chỉnh sửa lần cuối bởi thangkho : 25-04-2007 lúc 09:30 PM.

  7. #7
    No Avatar
    cong_dong_viet Khách

    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?

  8. #8
    No Avatar
    cong_dong_viet Khách

    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:
    1. # include<stdio.h>
    2. # include<alloc.h>
    3. # include<conio.h>
    4. main()
    5. {
    6.  
    7. int *a,n,m,i,j;
    8. clrscr();
    9.  
    10. a=(int*)malloc(n*m*sizeof(int));
    11.  
    12. printf("nhap n=");
    13. scanf("%d",&n);
    14. printf("nhap m=");
    15. scanf("%d",&m);
    16.  
    17. for(i=1;i<=n;i++)
    18. for(j=1;j<=m;j++)
    19. {
    20. printf("a[%d%d]=",i,j);
    21. scanf("%d",&a[i,j]);
    22. }
    23.  
    24. for(i=1;i<=n;i++)
    25. {
    26.   for(j=1;j<=m;j++)
    27. {
    28. printf("\t%3d",a[i,j]);
    29. if(j==m)
    30. printf("\n");
    31. }}
    32. free(a);
    33. getch();
    34. return 0;
    35. }

  9. #9
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    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");
    }}
    -->
    for(i=1;i<=n;i++)
    { for(j=1;j<=m;j++)
    printf("\t%3d",a[i][j]);
    printf("\n");
    }
    Không biết nó còn sai chỗ nào nữa !

  10. #10
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    printf("a[%d%d]=",i,j);
    scanf("%d",&a[i,j]);
    fix như bài trên .

    a=(int*)malloc(n*m*sizeof(int));

    printf("nhap n=");
    scanf("%d",&n);
    printf("nhap m=");
    scanf("%d",&m);
    -> ngược , chưa có m , n mà đã memory allocation
    None!

Các đề tài tương tự

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Lập trình Socket trên C++ có thể giao tiếp chương trình Java trên Server được ko các
    Gửi bởi jacobkruse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:10 PM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn