View Full Version : C++ tích 2 ma trận đây
boyqna9x
26-05-2009, 12:38 AM
Mình thấy Votjnh_it có post lên nhưng bài đó bạn VoTjnh làm sai nên minh post lên:
void nhap(float a[][10],int hang,int cot)
{
int i,j;
for(i=0;i<hang;i++)
for(j=0;j<cot;j++)
{
cout<<"["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<endl;
}
float xuat(float a[][10],float b[][10],int i,int j,int hangb)
{
float s=0;
for(int m=0;m<hangb;m++)
{
s=s+a[i][m]*b[m][j];
}
return s;
}
void main()
{
int hanga,cota,hangb,cotb,i,j;
float a[10][10],b[10][10];
cout<<"Nhap ma tran a"<<endl;
cout<<"So hang:";cin>>hanga;
cout<<"So cot:";cin>>cota;
nhap(a,hanga,cota);
cout<<"Nhap ma tran b sao cho so cot a = so hang cua b"<<endl;
cout<<"So hang:";cin>>hangb;
cout<<"So cot:";cin>>cotb;
nhap(b,hangb,cotb);
cout<<"Tich 2 ma tran a va b la:"<<endl;
for(i=0;i<hanga;i++)
{
for(j=0;j<cotb;j++)
{
cout<<xuat(a,b,i,j,hangb)<<"\t";
}
cout<<endl;
}
}
Thank mình 1 cái cổ vũ tinh thần nha. Các bạn không hiểu thì liên hệ mình sẽ hướng dẫn rõ hơn B1-208
boythichkpop
22-06-2009, 02:05 AM
cám ơn nhé, nhờ bài của bạn mình đã biết thuật toán. Nhưng bài của bạn trình bày hơi rối. Mạn phép trình bày lại như sau:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
void nhap(int a[10][20], int b[10][20], int &m, int &n){
do{
clrscr();
cout<<"\n Nhap so hag cua cac ma tran: ";
cin>>m;
cout<<"\n Nhap so cot cua cac ma tran: ";
cin>>n;
}while(n<2 && m>10);
cout<<"\n Nhap cac phtu cua ma tran thu 1: ";
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
cout<<"\n a["<<i+1<<","<<j+1<<"]= ";
cin>>a[i][j];
}
cout<<"\n Nhap cac phtu cua ma tran thu 2: ";
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
cout<<"\n b["<<i+1<<","<<j+1<<"]= ";
cin>>b[i][j];
}
return;
}
void tich(int a[10][20], int b[10][20], int m, int n){
int i,j,k,d[10][20];
if(m==n)
cout<<"\n Hai ma tran nay kha tich";
else{
cout<<"\n Ko ton tai tich 2 ma tran nay";
return;
}
for(i=0;i<m;i++)
for(j=0;j<n;j++){
d[i][j]=0;
for(k=0;k<m;k++)
d[i][j]=d[i][j]+a[i][k]*b[k][j];
}
cout<<"\n Tich cua 2 ma tran vua nhap la: "<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++){
cout<<setw(5)<<d[i][j];
if(j==n-1)
cout<<"\n";
}
return;
}
void main(){
int n,m,a[10][20],b[10][20];
nhap(a,b,m,n);
tich(a,b,m,n);
}
Thư viện iomanip.h chứa hàm setw() --> thêm vào trình bày cho đẹp ;)
hongthulove
29-05-2010, 12:01 PM
cam ơn nhiều nha! nhưng thuật toán của bạn chưa tối ưu.bạn có thể tham khảo
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
main()
{
int x1;
cout<<"Hay nhap so hang cua ma tran a:";
cin >> x1;
int a[x1][x1];int b[x1][x1];int c[x1][x1];
cout<<"Hay nhap vao cac phan tu cua ma tran a:\n";
for(int i=1;i<=x1;i++)
for(int j=1;j<=x1;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin >> a[i][j];
}
cout<<"\nHay nhap vao cac phan tu cua ma tran b:\n";
for(int i=1;i<=x1;i++)
for(int j=1;j<=x1;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin >> a[i][j];
}
for(int i=1;i<=x1;i++)
{
for(int j=1;j<=x1;j++)
{
c[i][j]=0;
for(int k=1;k<=x1;k++)
{
c[i][j] +=a[i][k] * b[k][j];
}
}
}
for(int i=1;i<=x1;i++)
{
for(int j=1;j<=x1;j++)
{
cout<<setw(10)<< c[i][j];
}
cout<<"\n";
}
getch();
}
chúc các bạn thành công :cheers:
vodanh_traloi1989
29-05-2010, 03:39 PM
bữa nay,ai viết như vậy nữa???????
viết bằng hàm cho pro nha!
update đi.:003::handshake::003:
vodanh_traloi1989
29-05-2010, 03:40 PM
nếu cần liên hệ với mình,mình viết hàm nha!!!
2mit chỉ vậy thui!!!!!!!!!!!!!!:haha::haha::haha::infatuated:
jinyotino
29-05-2010, 04:46 PM
#include <iostream.h>
#include <iomanip.h>
int C[100][100];
void nhap(int A[100][100], char k,int n,int m)
{
int i,j;
cout<<"\nNhap gia tri cho ma tran "<<k<<" : "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"A["<<i<<"]["<<j<<"]= ";
cin>>A[i][j];
}
}
void xuat(int A[100][100], char k,int n,int m)
{
int i,j;
cout<<"\nXuat ma tran "<<k<<" : "<<endl;
cout<<"\n";
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cout<<setw(4)<<A[i][j];
}
cout<<"\n\n";
}
}
void nhan2mt(int A[100][100],int B[100][100],int C[100][100],int n,int m)
{
int i,h,k;
for(i=1;i<=n;i++)
{
for(h=1;h<=n;h++)
for(k=1;k<=m;k++){
C[i][h]+=A[i][k]*B[k][h];
}
}
}
void main()
{
int n,m;
int A[100][100],B[100][100];
cout<<"Nhap hang, cot : ";
cin>>n>>m;
nhap(A,'A',n,m);
nhap(B,'B',m,n);
xuat(A,'A',n,m);
xuat(B,'B',m,n);
nhan2mt(A,B,C,n,m);
cout<<"\nA * B = C"<<endl;
xuat(C,'C',n,n);
}
Powered by vBulletin® Version 4.1.7 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.