Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Đọc ghi ma trận từ tệp + Menu

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    9

    Mặc định Đọc ghi ma trận từ tệp + Menu

    Mình có bài C này chưa biết làm thế nào mong các bạn giúp đỡ

    Xây dựng Menu thực hiện các chức năng :

    Cộng ma trận , Nhân ma trận, Tính định thức ma trận (Ma trận m,n)
    +> Dữ liệu vào Tệp số liệu
    +> Dữ liệu ra Tệp số liệu kết quả


    Mình xin cảm ơn bạn rất nhiều !!!

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

    Dễ mà, đại khái như sau :
    + Đọc từ tệp, dùng fopen, fscanf...
    + Thực hiện cộng, nhân... Chẳng cần thuật toán gì cao siêu, lấy sách ra áp công thức y chang vào
    + Ghi kết quả, dùng fopen, fprintf...

    Xong

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

    Xử lý Ma trận thì mình làm được. Mình chỉ vấp đoạn Đọc/Ghi ma trận từ TỆP thôi. Ai Demo cho mình với !!!

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mình làm tương đối cho bạn rồi, phần menu bạn tự làm nhé:
    C Code:
    1. /**
    2.   **/
    3. #include<stdio.h>
    4. #include<stdlib.h>
    5. #include<math.h>
    6. /*
    7. */
    8. int AllocMatrix(float **(*iMatr), int sz);
    9. void DeleteMatrix(float **(*iMatr), int sz);
    10.  
    11. void ReadFile(FILE *f,char *fileName, float **(*iMatr), int *size);
    12. void ShowMatrix(float **iMatr, int size);
    13. void WriteFile(FILE *f,char *fileName, float **iMatr, int size);
    14.  
    15. void AddMatrix(float** a, float** b, float **(*c), int sz);
    16. void MultiMatrix(float** a, float** b, float **(*c), int sz);
    17. float Det(float **a, int n);
    18.  
    19.  
    20. int main()
    21. {
    22.     FILE *f;
    23.     float **a, **b, **c;
    24.     int sz;
    25.     printf(" - Input matrix one.\n");
    26.     ReadFile(f,"Matrix1.txt",&a,&sz);
    27.     ShowMatrix(a,sz);
    28.     printf(" - DET of matrix a is %5.2f \n",Det(a,sz));
    29.  
    30.     printf("\n - Input matrix two.\n");
    31.     ReadFile(f,"Matrix2.txt",&b,&sz);
    32.     ShowMatrix(b,sz);
    33.     printf(" - DET of matrix b is %5.2f \n",Det(b,sz));
    34.  
    35.     printf("\n - Add two matrix.\n");
    36.     AddMatrix(a,b,&c,sz);
    37.     ShowMatrix(c,sz);
    38.     WriteFile(f,"Output1.txt",c,sz);
    39.     printf(" - DET of matrix a+b is %5.2f \n",Det(c,sz));
    40.  
    41.     printf("\n - Multi two matrix.\n");
    42.     MultiMatrix(a,b,&c,sz);
    43.     ShowMatrix(c,sz);
    44.     WriteFile(f,"Output2.txt",c,sz);
    45.     printf(" - DET of matrix a*b is %5.2f \n",Det(c,sz));
    46.  
    47.     DeleteMatrix(&a,sz);
    48.     DeleteMatrix(&b,sz);
    49.     DeleteMatrix(&c,sz);
    50.     return 0;
    51. }
    52.  
    53. /********************************************************************************/
    54. int AllocMatrix(float **(*iMatr), int sz)
    55. {
    56.     int i;
    57.     (*iMatr) = (float**) malloc(sz*sizeof(float*));
    58.     if ((*iMatr)==NULL) return 0;
    59.     for (i=0; i<sz; ++i)
    60.     {
    61.         (*iMatr)[i] = (float*) malloc(sz*sizeof(float));
    62.         if ((*iMatr)[i]==NULL) return 0;
    63.     }
    64.     return 1;
    65. }
    66.  
    67. void DeleteMatrix(float **(*iMatr), int sz)
    68. {
    69.     int i;
    70.     for (i=0; i<sz; ++i)
    71.         free ((*iMatr)[i]);
    72.     free (*iMatr);
    73. }
    74.  
    75. /********************************************************************************/
    76.  
    77. void ReadFile(FILE *f,char *fileName, float **(*iMatr), int *size)
    78. {
    79.     f = fopen(fileName,"rt");
    80.     float x;
    81.     int count=0;
    82.     while (!feof(f))
    83.     {
    84.         fscanf(f,"%f",&x);
    85.         count++;
    86.     }
    87.     fclose(f);
    88.  
    89.     *size = sqrt(count);
    90.  
    91.     f = fopen(fileName,"rt");
    92.     int i,j;
    93.     if (!AllocMatrix(iMatr,*size)) return;
    94.  
    95.     fprintf(f,"\n");
    96.     for (i=0; i<*size; i++)
    97.         for (j=0; j<*size; j++)
    98.         {
    99.             fscanf(f,"%f",&(*iMatr)[i][j]);
    100.         }
    101.     fclose(f);
    102. }
    103.  
    104. void ShowMatrix(float **iMatr, int size)
    105. {
    106.     int i,j;
    107.     for (i=0; i<size; ++i)
    108.     {
    109.         for (j=0; j<size; ++j) printf("%5.2f ",iMatr[i][j]);
    110.         printf("\n");
    111.     }
    112. }
    113.  
    114. void WriteFile(FILE *f,char *fileName, float **iMatr, int size)
    115. {
    116.     f = fopen(fileName,"wt");
    117.     int i,j;
    118.     for (i=0; i<size; i++)
    119.     {
    120.         for (j=0; j<size; j++)
    121.             fprintf(f,"%5.2f  ",iMatr[i][j]);
    122.         fprintf(f,"\n");
    123.     }
    124.     fclose(f);
    125.     printf("\n  Write file successful.\n");
    126. }
    127.  
    128. void AddMatrix(float** a, float** b, float **(*c), int sz)
    129. {
    130.     int i,j;
    131.     if (!AllocMatrix(c,sz)) return;
    132.  
    133.     for (i=0; i<sz; ++i)
    134.         for (j=0; j<sz; ++j)
    135.             (*c)[i][j] = a[i][j] + b[i][j];
    136. }
    137.  
    138. void MultiMatrix(float** a, float** b, float **(*c), int sz)
    139. {
    140.     int i,j,o;
    141.     if (!AllocMatrix(c,sz)) return;
    142.  
    143.     for (i=0; i<sz; ++i)
    144.         for (j=0; j<sz; ++j) (*c)[i][j]=0;
    145.  
    146.     for (i=0; i<sz; ++i)
    147.         for (j=0; j<sz; ++j)
    148.             for (o=0; o<sz; ++o)
    149.                 (*c)[i][j] += a[i][o] * b[o][j];
    150. }
    151.  
    152. /*DET calculated by the matrix square*/
    153. float Det(float **a, int n)
    154. {
    155.     if (n==1) return a[0][0];
    156.     if (n==2) return a[0][0]*a[1][1] - a[0][1]*a[1][0];
    157.  
    158.     /*Tao matrix phu*/
    159.     float **b;
    160.     int i, j, k;
    161.     if (!AllocMatrix(&b,n)) return 0;
    162.  
    163.     for (i=0; i<n; i++)
    164.         for (j=0; j<n; j++)
    165.             b[i][j] = a[i][j];
    166.  
    167.     /*Tim det*/
    168.     for (i=0; i<n-1; i++)
    169.         for (j=i+1; j<n; j++)
    170.         {
    171.             for (k=i+1; k<n; k++)
    172.             {
    173.                 b[j][k] += -b[j][i]/b[i][i]*b[i][k];
    174.             }
    175.             b[j][i] = 0;
    176.         }
    177.  
    178.     float tmp=1;
    179.     for (i=0; i<n; i++)
    180.         tmp *= b[i][i];
    181.  
    182.     DeleteMatrix(&b,n);
    183.     return tmp;
    184. }

    Matrix1.txt

    1 2 1
    1 1 1
    2 1 1

    Matrix2.txt

    1 1 1
    0 1 1
    0 0 1

  5. #5
    Ngày gia nhập
    10 2007
    Bài viết
    9

    Cảm ơn Quang Hoàng nhiều nhé !!!

    Phần Menu Text Thì mình làm được rùi, Nhưng còn phần Menu đồ họa thì hơi khó 1 tý...

  6. #6
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Đọc ghi ma trận từ tệp + Menu

    Đồ họa trên dos thì mình không biết, nhưng làm cái menu có chút màu mè thì ok.
    Demo:

    Cách gọi menu
    C Code:
    1. /*    MAIN MENU
    2.  * 1. Create new student list.
    3.  * 2. Add student in list.
    4.  * 3. View student list.
    5.  * 4. Find student infomation.
    6.  * 5. Quit.
    7. */
    8. void MenuList()
    9. {
    10.     NODE plist;
    11.     do
    12.     {
    13.     int i=ShowMenu();
    14.     system("cls");
    15.     switch (i)
    16.     {
    17.             case 1:initiation(plist);EnterList(plist);break;
    18.             case 2:EnterList(plist);break;
    19.             case 3:cout << "             LIST STUDENT";ShowList(plist);system("pause");break;
    20.             case 4:SearchInfo(plist);system("pause");break;
    21.             case 5:DestroyList(plist);exit (0);break;
    22.     }
    23.     } while (true);
    24. }

    File chứ cái menu màu mè:
    menu.h
    C Code:
    1. #ifndef __MAINMENU_H_
    2. #define __MAINMENU_H_
    3.  
    4. #include <cstdio>
    5. #include <windows.h>
    6. #include <conio.h>
    7.  
    8.  
    9. void SetColor(WORD color)
    10. {
    11.     HANDLE hConsoleOutput;
    12.     hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    13.  
    14.     CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
    15.     GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);
    16.  
    17.     WORD wAttributes = screen_buffer_info.wAttributes;
    18.     color &= 0x000f;
    19.     wAttributes &= 0xfff0;
    20.     wAttributes |= color;
    21.  
    22.     SetConsoleTextAttribute(hConsoleOutput, wAttributes);
    23. }
    24.  
    25.  
    26. void clrscr(void)
    27. {
    28.     CONSOLE_SCREEN_BUFFER_INFO  csbiInfo;
    29.     HANDLE  hConsoleOut;
    30.     COORD   Home = {0,0};
    31.     DWORD   dummy;
    32.  
    33.     hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    34.     GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    35.  
    36.     FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
    37.    csbiInfo.dwCursorPosition.X = 0;
    38.    csbiInfo.dwCursorPosition.Y = 0;
    39.    SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
    40. }
    41. /* 1. Create new student list.
    42.  * 2. Add student in list.
    43.  * 3. View student list.
    44.  * 4. Find student infomation.
    45.  * 5. Quit.
    46. */
    47. void menu1()
    48. {
    49.     SetColor(8);printf("\n1. Create new student list.");
    50.     SetColor(15);printf("\n2. Add student in list.");
    51.     printf("\n3. View student list.");
    52.     printf("\n4. Find student infomation.");
    53.     printf("\n5. Quit.\n");
    54. }
    55. void menu2()
    56. {
    57.     printf("\n1. Create new student list.");
    58.     SetColor(8);printf("\n2. Add student in list.");
    59.     SetColor(15);printf("\n3. View student list.");
    60.     printf("\n4. Find student infomation.");
    61.     printf("\n5. Quit.\n");
    62. }
    63. void menu3()
    64. {
    65.     printf("\n1. Create new student list.");
    66.     printf("\n2. Add student in list.");
    67.     SetColor(8);printf("\n3. View student list.");
    68.     SetColor(15);printf("\n4. Find student infomation.");
    69.     printf("\n5. Quit.\n");
    70. }
    71. void menu4()
    72. {
    73.     printf("\n1. Create new student list.");
    74.     printf("\n2. Add student in list.");
    75.     printf("\n3. View student list.");
    76.     SetColor(8);printf("\n4. Find student infomation.");
    77.     SetColor(15);printf("\n5. Quit.\n");
    78. }
    79. void menu5()
    80. {
    81.     printf("\n1. Create new student list.");
    82.     printf("\n2. Add student in list.");
    83.     printf("\n3. View student list.");
    84.     printf("\n4. Find student infomation.");
    85.     SetColor(8);printf("\n5. Quit.\n");
    86.     SetColor(15);
    87. }
    88.  
    89. int ShowMenu()
    90. {
    91.     int i=1;
    92.     char c;
    93.     do{
    94.         system("cls");
    95.         switch (i)
    96.         {
    97.             case 1:menu1();break;
    98.             case 2:menu2();break;
    99.             case 3:menu3();break;
    100.             case 4:menu4();break;
    101.             case 5:menu5();break;
    102.         }
    103.         c=getch();
    104.         if (c==80 && i<5)i++;  //nhan mui ten xuong
    105.         if (c==72 && i>1)i--;  //nhan mui ten len
    106.       } while (c!=13);
    107.       return i;
    108. }
    109.  
    110. #endif // __MAINMENU_H_
    Mình dùng trình biến dịch C for win nên cần dùng một số hàm viết lại, bạn có thể không cần đến nó: như là setcolor()

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    523

    cho em hỏi sao 2 cái code của anh quang hoàng ko chạy dc trên dos à?
    Em định copy vào file word làm tài liệu mà nó ko run.

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    cho em hỏi sao 2 cái code của anh quang hoàng ko chạy dc trên dos à?
    Em định copy vào file word làm tài liệu mà nó ko run.
    Uh, vì mình dùng code block. Bạn sẽ thấy thư viện windows.h nó không chạy trên dos,

    Tuy nhiên bạn bỏ nó đi, dùng thư viện trên dos, bỏ cả 2 hàm viết lại đi mình nghĩ là nó có thể chạy ngon trên dos đó.

  9. #9
    Ngày gia nhập
    03 2009
    Bài viết
    523

    em ko biết cách bỏ (ko tìm thấy), em chỉ mới học tới file trong dos chưa làm bài tập.
    anh có thể tạo 1 bản copy run in dos cho em tham khảo?

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

  1. Cách Remove border trắng phía dưới menu?
    Gửi bởi thanhtuan1989 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 12-08-2013, 10:26 AM
  2. Dựng 1 menu Asp.net bằng thẻ <ul> <li> hay Control [ Menu , SiteMap , Repeater , Treeview]
    Gửi bởi teodainhan trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 8
    Bài viết cuối: 30-05-2013, 01:04 PM
  3. Source Code menu thêm item vào Menu Context
    Gửi bởi babyboy_pk trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 25-03-2013, 01:56 PM
  4. Cách lưu trạng thái menu được sắp xếp bởi User
    Gửi bởi happi trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 8
    Bài viết cuối: 14-08-2012, 03:42 PM
  5. làm trạng thái active cho menu như thế nào?
    Gửi bởi xiaoku trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 29
    Bài viết cuối: 02-08-2011, 03:38 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