ayuda por favor
Hola, saludos a todos.
Alguien me puede decir por favor, por que este bendito código no me quiere
mostrar bien el resultado de la multiplicación de dos matrices que se leen
allí.-------------> (es el case 11 la opcion de multiplicar las dos
matrices).
Se adjunta código.
Gracias ya, suerte.
//*********************************************************************
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef int tipomatriz[6][6];
/*************************************************************************
Procedimiento--->Para leer el orden de las matrices a operar.*/
void leerordenmatrices(int&maxf,int&maxc)
{
gotoxy(1,1);
cout<<"DEBE INGRESAR UN NUMERO IGUAL O MENOR A 5.";
do
{
cout<<endl<<endl<<"Ingrese el n£mero de filas: ";cin>>maxf;
}
while(maxf>=6);
do
{
cout<<"Ingrese el n£mero de columnas: ";cin>>maxc;
}
while(maxc>=6);
cuadritos(maxf,maxc);
}
/*************************************************************************
Procedimiento--->Lee las matrices a operar.*/
void leermatrices(int maxf,int maxc,tipomatriz auxMATRIZ)
{
cuadritos(maxf,maxc);
int i,j,columna;
gotoxy(1,1);
cout<<"Digite los datos de la matriz "<<maxf<<" x "<<maxc<<" por filas.";
for(i=0;i<maxf;i++)
{
columna=16;
for(j=0;j<maxc;j++)
{
gotoxy(columna,(i*2)+11);
cin>>auxMATRIZ[i][j];
columna+=4;
}
}
}
/****************************************************************************
Procedimiento--->Da el resultado de la suma de la matriz 1 mas matriz 2.*/
void sumamatrices(int maxf,int maxc,tipomatriz &matriz1,tipomatriz &matriz2)
{
int i,j,columna;
tipomatriz auxmatriz3;
clrscr();
cuadritos(maxf,maxc);
for(i=0;i<maxf;i++)
{
columna=16;
for(j=0;j<maxc;j++)
{
auxmatriz3[i][j]=matriz1[i][j]+matriz2[i][j];
gotoxy(columna,(i*2)+11);
cprintf("%d",auxmatriz3[i][j]);
columna+=4;
}
}
}
/****************************************************************************
Procedimiento--->Da el resultado de la multiplicaci¢n de la matriz 1 por la
matriz 2.*/
void multiplicamatrices(int maxf,int maxc,tipomatriz &matriz1,tipomatriz
&matriz2)
{
int i,j,k,columna,m,n;
tipomatriz auxmatriz3;
clrscr();
for(i=0;i<maxf;i++)
{
for(j=0;j<maxc;j++)
{
for(k=0;k<maxf;k++)
{
auxmatriz3[j][i]=auxmatriz3[j][i]+(matriz1[j][k] * matriz2[k][i]);
}
}
}
for(m=0;m<maxf;m++)
{
columna=16;
for(n=0;n<maxc;n++)
{
gotoxy(columna,(m*2)+11);
cout<<auxmatriz3[m][n];
columna+=4;
}
}
}
/*************************************************************************
Programa principal.*/
main()
{
int opc;
int maxf=0,maxc=0;
tipomatriz matriz1,matriz2,matriz3;
clrscr();
do
{
textcolor(0);textbackground(15);
clrscr();
cout<<" >>>>>MENU PRINCIPAL<<<<<"<<endl<<endl;
cout<<"0--->Para salir del programa."<<endl<<endl<<endl;
cout<<"1--->Para leer el orden de las matrices."<<endl;
cout<<"2--->Para leer la matriz 1."<<endl;
cout<<"3--->Para leer la matriz 2."<<endl;
cout<<"4--->Presentar la matriz leida (1)."<<endl;
cout<<"5--->Presentar la matriz leida (2)."<<endl;
cout<<"6--->Mostrar n£meros pares e impares (1) y (2)."<<endl;
cout<<"7--->Mostrar n£meros primos y no primos (1) y (2)."<<endl;
cout<<"8--->Mostrar la diagonal principal de cada matriz."<<endl;
cout<<"9--->Mostrar la diagonal secundaria de cada matriz."<<endl;
cout<<"10-->Mostrar el resultado de la suma entre las dos matrices."<<endl;
cout<<"11-->Mostrar el resultado de la multiplicaci¢n entre las dos
matrices."<<endl;
gotoxy(2,20);
scanf("%d",&opc);
switch(opc)
{
.
.
.
.
.
..
.
.
..
gotoxy(5,7);
cprintf("Matriz 1");
press();
diagonalesprincipales(maxf,maxc,matriz2);
gotoxy(5,7);
cprintf("Matriz 2");
press();
}
else
{
clrscr();
gotoxy(10,9);
cout<<"Su error fue--->";
gotoxy(10,11);
cout<<"-DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1). ¢";
gotoxy(10,12);
cout<<"-DEBEN SER IGUALES EL NUMERO DE COLUMNAS Y FILAS.";
press();
}
break;
case 10:if((maxf>0)&&(maxc>0))
{
sumamatrices(maxf,maxc,matriz1,matriz2);
gotoxy(5,7);
cprintf("El resultado de la suma es:");
press();
}
else
{
clrscr();
gotoxy(10,10);
cout<<"DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1).";
press();
}
break;
case 11:if((maxf>0)&&(maxc>0)&&(maxf==maxc))
{
multiplicamatrices(maxf,maxc,matriz1,matriz2);
gotoxy(5,7);
cprintf("El resultado de la multiplicaci¢n es:");
press();
}
else
{
clrscr();
gotoxy(10,9);
cout<<"Su error fue--->";
gotoxy(10,11);
cout<<"-DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1). ¢";
gotoxy(10,12);
cout<<"-DEBEN SER IGUALES EL NUMERO DE COLUMNAS Y FILAS.";
press();
}
break;
}
}
while(opc!=0);
clrscr();
cout<<endl<<endl<<endl;
cout<<"copy right by Juan Esteban Ospina Herrera.....in June 2004.";
getch();
return 0;
}
Alguien me puede decir por favor, por que este bendito código no me quiere
mostrar bien el resultado de la multiplicación de dos matrices que se leen
allí.-------------> (es el case 11 la opcion de multiplicar las dos
matrices).
Se adjunta código.
Gracias ya, suerte.
//*********************************************************************
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef int tipomatriz[6][6];
/*************************************************************************
Procedimiento--->Para leer el orden de las matrices a operar.*/
void leerordenmatrices(int&maxf,int&maxc)
{
gotoxy(1,1);
cout<<"DEBE INGRESAR UN NUMERO IGUAL O MENOR A 5.";
do
{
cout<<endl<<endl<<"Ingrese el n£mero de filas: ";cin>>maxf;
}
while(maxf>=6);
do
{
cout<<"Ingrese el n£mero de columnas: ";cin>>maxc;
}
while(maxc>=6);
cuadritos(maxf,maxc);
}
/*************************************************************************
Procedimiento--->Lee las matrices a operar.*/
void leermatrices(int maxf,int maxc,tipomatriz auxMATRIZ)
{
cuadritos(maxf,maxc);
int i,j,columna;
gotoxy(1,1);
cout<<"Digite los datos de la matriz "<<maxf<<" x "<<maxc<<" por filas.";
for(i=0;i<maxf;i++)
{
columna=16;
for(j=0;j<maxc;j++)
{
gotoxy(columna,(i*2)+11);
cin>>auxMATRIZ[i][j];
columna+=4;
}
}
}
/****************************************************************************
Procedimiento--->Da el resultado de la suma de la matriz 1 mas matriz 2.*/
void sumamatrices(int maxf,int maxc,tipomatriz &matriz1,tipomatriz &matriz2)
{
int i,j,columna;
tipomatriz auxmatriz3;
clrscr();
cuadritos(maxf,maxc);
for(i=0;i<maxf;i++)
{
columna=16;
for(j=0;j<maxc;j++)
{
auxmatriz3[i][j]=matriz1[i][j]+matriz2[i][j];
gotoxy(columna,(i*2)+11);
cprintf("%d",auxmatriz3[i][j]);
columna+=4;
}
}
}
/****************************************************************************
Procedimiento--->Da el resultado de la multiplicaci¢n de la matriz 1 por la
matriz 2.*/
void multiplicamatrices(int maxf,int maxc,tipomatriz &matriz1,tipomatriz
&matriz2)
{
int i,j,k,columna,m,n;
tipomatriz auxmatriz3;
clrscr();
for(i=0;i<maxf;i++)
{
for(j=0;j<maxc;j++)
{
for(k=0;k<maxf;k++)
{
auxmatriz3[j][i]=auxmatriz3[j][i]+(matriz1[j][k] * matriz2[k][i]);
}
}
}
for(m=0;m<maxf;m++)
{
columna=16;
for(n=0;n<maxc;n++)
{
gotoxy(columna,(m*2)+11);
cout<<auxmatriz3[m][n];
columna+=4;
}
}
}
/*************************************************************************
Programa principal.*/
main()
{
int opc;
int maxf=0,maxc=0;
tipomatriz matriz1,matriz2,matriz3;
clrscr();
do
{
textcolor(0);textbackground(15);
clrscr();
cout<<" >>>>>MENU PRINCIPAL<<<<<"<<endl<<endl;
cout<<"0--->Para salir del programa."<<endl<<endl<<endl;
cout<<"1--->Para leer el orden de las matrices."<<endl;
cout<<"2--->Para leer la matriz 1."<<endl;
cout<<"3--->Para leer la matriz 2."<<endl;
cout<<"4--->Presentar la matriz leida (1)."<<endl;
cout<<"5--->Presentar la matriz leida (2)."<<endl;
cout<<"6--->Mostrar n£meros pares e impares (1) y (2)."<<endl;
cout<<"7--->Mostrar n£meros primos y no primos (1) y (2)."<<endl;
cout<<"8--->Mostrar la diagonal principal de cada matriz."<<endl;
cout<<"9--->Mostrar la diagonal secundaria de cada matriz."<<endl;
cout<<"10-->Mostrar el resultado de la suma entre las dos matrices."<<endl;
cout<<"11-->Mostrar el resultado de la multiplicaci¢n entre las dos
matrices."<<endl;
gotoxy(2,20);
scanf("%d",&opc);
switch(opc)
{
.
.
.
.
.
..
.
.
..
gotoxy(5,7);
cprintf("Matriz 1");
press();
diagonalesprincipales(maxf,maxc,matriz2);
gotoxy(5,7);
cprintf("Matriz 2");
press();
}
else
{
clrscr();
gotoxy(10,9);
cout<<"Su error fue--->";
gotoxy(10,11);
cout<<"-DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1). ¢";
gotoxy(10,12);
cout<<"-DEBEN SER IGUALES EL NUMERO DE COLUMNAS Y FILAS.";
press();
}
break;
case 10:if((maxf>0)&&(maxc>0))
{
sumamatrices(maxf,maxc,matriz1,matriz2);
gotoxy(5,7);
cprintf("El resultado de la suma es:");
press();
}
else
{
clrscr();
gotoxy(10,10);
cout<<"DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1).";
press();
}
break;
case 11:if((maxf>0)&&(maxc>0)&&(maxf==maxc))
{
multiplicamatrices(maxf,maxc,matriz1,matriz2);
gotoxy(5,7);
cprintf("El resultado de la multiplicaci¢n es:");
press();
}
else
{
clrscr();
gotoxy(10,9);
cout<<"Su error fue--->";
gotoxy(10,11);
cout<<"-DEBE INGRESAR EL ORDEN DE LA MATRIZ (Opci¢n 1). ¢";
gotoxy(10,12);
cout<<"-DEBEN SER IGUALES EL NUMERO DE COLUMNAS Y FILAS.";
press();
}
break;
}
}
while(opc!=0);
clrscr();
cout<<endl<<endl<<endl;
cout<<"copy right by Juan Esteban Ospina Herrera.....in June 2004.";
getch();
return 0;
}
Trate de analizar tu programa, pero es imposible.
No adjuntantes la funcion cuadritos()
No adjuntantes la funcion cuadritos()
Trate de analizar tu programa, pero es imposible.
No adjuntastes la funcion cuadritos(), que es usada mas de una vez.
Para ganar tiempo te mando un programa que multiplica dos matrices. Adaptalo a tus necesidades :
// program MultMat.cpp
// written in Borland C++ ver 4.5 - 18/5/2004
#include <iomanip.h>
#include <iostream.h>
// una matriz de 3x4 que multiplique otra de 4x2 y lo guarde en una de 3x2.
void Show(int *a,int M,int N,char *msg)
{
cout << msg << " : " << endl << endl;
for(int i = 0;i < M;i++)
{
for(int j = 0;j < N;j++)
cout << setw(10) << a[i*N+j];
cout << endl;
}
cout << endl << endl;
} // SHOW
int Multiply(int *a,int P)
{
for(int i = 0;i < P;i++)
cout << setw(5) << a[i];
cout << endl;
}
void Mult(int a[][4],int b[][2],int c[][2],int M,int N,int P)
{
for(int i = 0;i < M;i++)
{
Multiply(a[i],P);
for(int j = 0;j < N;j++)
{
c[i][j] = 0;
for(int k = 0;k < P;k++)
c[i][j] += a[i][k]*b[k][j];
}
}
} // MULT
void main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}},
b[4][2] = {{1,2},{3,4},{5,6},{7,8}},
c[3][2];
Show(&a[0][0],3,4,"matriz a");
Show(&b[0][0],4,2,"matriz b");
Mult(a,b,c,3,2,4);
Show(&c[0][0],3,2,"matriz c = a*b");
cout << "end of program - good bye ! ! !" << endl;
} // MAIN
No adjuntastes la funcion cuadritos(), que es usada mas de una vez.
Para ganar tiempo te mando un programa que multiplica dos matrices. Adaptalo a tus necesidades :
// program MultMat.cpp
// written in Borland C++ ver 4.5 - 18/5/2004
#include <iomanip.h>
#include <iostream.h>
// una matriz de 3x4 que multiplique otra de 4x2 y lo guarde en una de 3x2.
void Show(int *a,int M,int N,char *msg)
{
cout << msg << " : " << endl << endl;
for(int i = 0;i < M;i++)
{
for(int j = 0;j < N;j++)
cout << setw(10) << a[i*N+j];
cout << endl;
}
cout << endl << endl;
} // SHOW
int Multiply(int *a,int P)
{
for(int i = 0;i < P;i++)
cout << setw(5) << a[i];
cout << endl;
}
void Mult(int a[][4],int b[][2],int c[][2],int M,int N,int P)
{
for(int i = 0;i < M;i++)
{
Multiply(a[i],P);
for(int j = 0;j < N;j++)
{
c[i][j] = 0;
for(int k = 0;k < P;k++)
c[i][j] += a[i][k]*b[k][j];
}
}
} // MULT
void main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}},
b[4][2] = {{1,2},{3,4},{5,6},{7,8}},
c[3][2];
Show(&a[0][0],3,4,"matriz a");
Show(&b[0][0],4,2,"matriz b");
Mult(a,b,c,3,2,4);
Show(&c[0][0],3,2,"matriz c = a*b");
cout << "end of program - good bye ! ! !" << endl;
} // MAIN
