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

Đề tài: Lập trình C, Định thức ma trận, các bạn giúp mình sửa lỗi với?

  1. #1
    Ngày gia nhập
    05 2009
    Bài viết
    5

    Arrow Lập trình C, Định thức ma trận, các bạn giúp mình sửa lỗi với?

    PHP Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<iostream.h>
    #include<math.h>
      
    void Docmatran(char*stfloat A[][100],int &h,int &c)
      {
        
    FILE*f=fopen(st,"r");
        if(
    f!=NULL)
        {
            
    fscanf(f,"%d%d",&h,&c);
            for(
    int i=1;i<=h;i++)
            {          
    float  x;
                for(
    int j=1;j<=c;j++)
                {     
    fscanf(f,"%f",&x);
                      
    A[i][j]=x;
                }

             }
             
    fclose(f);
        }
        else
        {    
    cout<<"Khong mo duoc file";
            
    getch();
            exit(
    0);
        }
       }

      
    void Nhan(float A[][100],float B[][100],float C[][100],int h,int c,int p)
      {
          for(
    int i=1;i<=h;i++)
          for(
    int j=1;j<=c;j++)
        {
          
    C[i][j]=0;
          for(
    int k=1;k<=p;k++)
            
    C[i][j]=C[i][j]+A[i][k]*B[k][j];
        }
       }
      
    void Xuat(float A[][100],int h,int c)
      {
        for(
    int i=1;i<=h;i++)
          { for(
    int j=1;j<=c;j++)
            {
             
    cout<<A[i][j];
             
    cout.width(4);
            }
            
    cout<<"\n";
           }
       }
      
    void Hoanvi(float &a,float &b)
      {
          
    float t=a;
          
    a=b;
          
    b=t;
       }
      
    int min(int a,int b)
      {
         if(
    a<b)
         return 
    a;
         return 
    b;
       }
      
    int Hang(float A[][100],int h,int c)
      {  
    int i,j,k,l;
         for(
    i=1;i<=h;i++)
           {
        if(
    A[i][i]==0)
        {
          
    j=i+1;
          while(
    A[j][i]==0j++;
          if(
    j<=h)
           {
             for(
    k=1;k<=c;k++)
             
    Hoanvi(A[i][k],A[j][k]);
           }
          else
           {  
    l=i+1;
              while(
    A[i][l]) l++;
              if(
    l<=c)
              for(
    k=1;k<=h;k++)
              
    Hoanvi(A[k][i],A[k][l]);
           }
        }
          for(
    j=i+1;j<=h;j++)
          if(
    j!=i)
           {   
    float t=-A[j][i];
               for(
    k=1;k<=c;k++)
               
    A[j][k]=A[j][k]+t*A[i][k];
            }

        }
         
    int kq=min(h,c);
         for(
    i=1;i<=h;i++)
         {
         
    float t=0;
         for(
    j=1;j<=c;j++)
         
    t=t+A[i][j];
         if(
    t==0kq--;
          }
       return 
    kq;
       }
          
    // Tinh dinh thuc

     
    float Dinhthuc(float a[100][],int n)
      { 
    int i,j,k;
        
    float kq=1;
        for(
    i=1;i<=n;i++)
         {
           if(
    a[i][i]==0)
        {
          
    j=i+1;
          while(
    a[j][i]==0j++;
          if(
    j<=n)
           {
             for(
    k=1;k<=n;k++)
             
    Hoanvi(a[i][k],a[j][k]);
             
    kq=-kq;
           }
          else
           return 
    0;
           exit(
    0);
        }
           for(
    j=i;j<=n;j++)
         {
             
    float t=-a[j][i]/a[i][i];
             for(
    int k=i;k<=n;k++)
             
    a[j][k]=a[j][k]+a[i][k]*t;
          }
           
    kq=kq*a[i][i];
         }
         return 
    kq;
      }

    /*
      float dinhthuc(float **A,int n)
      {
        if(n==1)
          kq=A[1][1];
        else
          int s=0;
          for(int i=1;i<=n;i++)
          { loai(A,n,1,i,B,k);
            s=s+pow((-1),(i+1));
            dinhthuc(B,k);
          }
         return s;
      }
    */

      
    void crame(float A[][100],int n)
      {
         
    float kq,deta1;
         
    float deta0=Dinhthuc(A,n);
         if(
    deta0==0)
         {  
    cout<<"\n He suy bien, Khong phai he crame";
            exit(
    0);
         }
         else
             for(
    int i=1;i<=n;i++)
              { 
    int b=0;
                for(
    int j=1;j<=n;j++)
                {
                   
    b=b+A[i][j];
                   
    A[i][i]=A[i][b];
                   
    deta1=Dinhthuc(A,n);
                   
    kq=deta1/deta0;
                }
               }
        
    cout<<"\n Nghiem "<<i<<" phuong trinh la : "<<kq;
      }

      
    void main()
      {   
    int h17,h2,h3,c1,c2,c3,n;
          
    float a[][100],A[][100],B[][100],C[][100];
          
    int ilenh;
          
    char ctieptuc;

          do{
          
    clrscr();
          
    cout<<"\n MA TRAN";
          
    cout<<"\n1_NHAN HAI MA TRAN";
          
    cout<<"\n2_TIM HANG CUA MA TRAN";
          
    cout<<"\n3_TINH DINH THUC";
          
    cout<<"\n4_GIAI PT BANG PHUONG PHAP CRAME";
          
    cout<<"\n5_THOAT KHOI CHUONG TRINH";
          
    cout<<"\nNHAP LENH DE LAM VIEC\n\n";cin>>ilenh;
          switch(
    ilenh)
            {
               case 
    1:{     cout<<"\n\n\n";
                    
    Docmatran("mt1.txt",A,h1,c1);
                    
    Xuat(A,h1,c1);
                    
    cout<<"\n\n\n";
                    
    Docmatran("mt2.txt",B,h2,c2);
                    
    Xuat(B,h2,c2);
                    
    cout<<"\n\n\n";
                    if(
    c1==h2)
                    {
                      
    Nhan(A,B,C,h1,c2,h2);
                      
    cout<<"KET QUA PHEP NHAN MA TRAN:\n";
                      
    Xuat(C,h1,c2);
                     }
                    else 
    cout<<"KHONG NHAN DUOC";
                    
    cout<<"\n\n\n";
                    break;
                   }
               case 
    2:{       cout<<"\n\n\n";
                      
    Docmatran("mt1.txt",A,h1,c1);
                      
    Xuat(A,h1,c1);
                      
    cout<<"\n\n\n";
                      
    cout<<"HANG CUA MA TRAN =  "<<Hang(A,h1,c1);
                      
    cout<<"\n\n\n";
                      break;
                   }
               case 
    3:{       cout<<"\n\n\n";
                      
    Docmatran("mt1.txt",A,h1,c1);
                      
    Xuat(A,h1,c1);
                      
    cout<<"\n\n\n";
                      
    cout<<"DINH THUC =  "<<Dinhthuc(a,n);
                      
    cout<<"\n\n\n";
                      break;
                }
               case 
    4:{       cout<<"\n\n\n";
                      
    Docmatran("mt1.txt",A,h1,c1);
                      
    Xuat(A,h1,c1);
                      
    cout<<"\n\n\n";
                      
    crame(A,n);
                      break;
                }
               case 
    5:{
                      exit(
    0);
                      break;
                }
            }
            
    cout<<"BAN CO MUON KLAM VIEC NUA KHONG Y/N:";cin>>ctieptuc;
         }while((
    ctieptuc)=='Y');

         
    getch();
       } 
    sữa giúp mình chỗ định thức với sao nó cứ ra bằng 0 miết và ko đúng kết quả :(
    thanks

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    IDE mà bạn sử dụng là gì ?
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  3. #3
    Ngày gia nhập
    05 2009
    Bài viết
    5

    IDE là gì vậy bạn :-??, bạn xem lại thử mình xai chỗ nào sao mà kết quả định thức ra toàn bằng 0 :((
    giúp mình với thanks

  4. #4
    Ngày gia nhập
    05 2009
    Bài viết
    16

    IDE là công cụ hỗ trợ lập trình!! Của C/C++ chính là mấy cái code::block, devC++, VC++ đó!!
    IDE: Intergrated Development Environment: Môi trường phát triển tích hợp!!

  5. #5
    Ngày gia nhập
    05 2009
    Bài viết
    5

    mình viết bằng tubor C đó :(, mình làm mà chạy sai kết quả miết, bạn sữa giúp mình với thanks

  6. #6
    Ngày gia nhập
    05 2009
    Bài viết
    16

    Mặc định Lập trình C, Định thức ma trận, các bạn giúp mình sửa lỗi với?

    Trích dẫn Nguyên bản được gửi bởi mmasjer Xem bài viết
    mình viết bằng tubor C đó :(, mình làm mà chạy sai kết quả miết, bạn sữa giúp mình với thanks
    Thú thực là mình cũng đang suy nghĩ bài này còn chưa biết bắt đầu từ đâu!! Nhìn code dài quá mình ngại đọc << giờ đang ôn thi túi bụi!! Chắc phải thi xong mới có thờ gian ngồi nghĩ quá!!

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

    mình còn 2 ngày nữa là nộp đề án rồi mà giờ chưa xong phần ma trận đó :((

  8. #8
    Ngày gia nhập
    05 2009
    Bài viết
    16

    Đây là bài mình mới làm đấy!! Dùng phương pháp Gauss-Jordan!! Chạy đúng ngon rồi đấy!! À mà mình làm trên code block!! Có thể paste vào DevC++ vẫn chạy được!! Còn trong Turbo thì không chắc đâu!!

    PHP Code:
    #include <conio.h>
    #include <iostream>
    #include <iomanip>
    #include <math.h>
    #include <process.h>

    using namespace std;

    void Swap (double &dXdouble &dY);
    void Swap (double &dXdouble &dY)
    {
        
    double dTam;
        
    dTam dX;
        
    dX dY;
        
    dY dTam;
    }

    main ()
    {
        
    int iCapiCnt1iCnt2iCheck 0iRowiCol;
        
    cout << "Cap dinh thuc: N = ";
        
    cin >> iCap;
        
    double adMa[iCap][iCap], dDet 1dTam;

        
    /*Nhap so lieu cho dinh thuc*/
        
    cout << "\nNhap so lieu cho dinh thuc:\n\n";
        for (
    iCnt1 0iCnt1 iCapiCnt1++)
        {
            for (
    iCnt2 0iCnt2 iCapiCnt2++)
            {
                
    cout << "A[" << iCnt1 << "][" << iCnt2 << "] = ";
                
    cin >> adMa[iCnt1][iCnt2];
            }
        }

        
    cout << "\nDinh thuc ban vua nhap la:\n\n";
        for (
    iCnt1 0iCnt1 iCapiCnt1++)
        {
            for (
    iCnt2 0iCnt2 iCap; ++iCnt2)
            {
                
    cout << setw(5) << adMa[iCnt1][iCnt2];
            }
            
    cout << "\n\n";
        }

        
    /*Tinh Dinh thuc*/
        
    for (iCnt1 0iCnt1 iCapiCnt1++)
        {
            
    iCheck 0;
            for (
    iCnt2 iCnt1iCnt2 iCap; ++iCnt2)
            {
                if (
    adMa[iCnt2][iCnt1] == 0)
                {
                    
    iCheck++;
                }
            }
            if (
    iCheck == iCap iCnt1)
            {
                
    cout << "\n\nDinh thuc cua Matrix la: Det = 0\n\n";
                exit (
    0);
            }

            if (
    adMa[iCnt1][iCnt1] == 0)
            {
                for (
    iCnt2 iCnt1 1iCnt2 iCapiCnt2++)
                {
                    if (
    adMa[iCnt2][iCnt1] != 0)
                    {
                        for (
    int iCnt3 0iCnt3 iCapiCnt3++)
                        {
                            
    Swap (adMa[iCnt1][iCnt3], adMa[iCnt2][iCnt3]);
                        }
                        
    dDet = - dDet;
                        break;
                    }
                }
            }

            for (
    iRow iCnt1 1iRow iCap; ++iRow)
            {
                
    dTam = -adMa[iRow][iCnt1] / adMa[iCnt1][iCnt1];
                for (
    iCol 0iCol iCapiCol++)
                {
                    
    adMa[iRow][iCol]+= dTam adMa[iCnt1][iCol];
                }
            }

            
    dDet*= adMa[iCnt1][iCnt1];
        }

        
    /*Dinh thuc sau bien doi*/
        
    cout << "\n\nDinh thuc sau khi bien doi so cap:\n\n";
        for (
    iCnt1 0iCnt1 iCapiCnt1++)
        {
            for (
    iCnt2 0iCnt2 iCap; ++iCnt2)
            {
                
    cout << setw(5) << adMa[iCnt1][iCnt2];
            }
            
    cout << "\n\n";
        }

        
    cout << "Va dinh thuc tinh duoc la: Det = " << dDet;

        
    getch ();


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

    bạn giúp mình sữa luôn phần giải hệ phương trình bằng phương pháp crame đc ko ? faanf định thức mình làm đc rồi cảm ơn bạn nhiều thanks

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

  1. Lập trình C hỏi về con trỏ, trả lời giúp mình vs
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 01-06-2013, 09:43 PM
  2. Class ma trận, lỗi câu lệnh if kiểm tra điều kiện nhân 2 ma trận, sửa giúp mình!
    Gửi bởi code_c trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 12
    Bài viết cuối: 25-12-2011, 10:22 PM
  3. bài tập về ma trận vuông.giúp em với
    Gửi bởi cafedrao trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 20-08-2010, 02:38 PM
  4. tích hai ma trận. Giúp mình sửa lỗi?
    Gửi bởi quyen1991 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 06-08-2010, 09:10 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