| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
difer1125
Registrado: 12 Oct 2006 Mensajes: 16
| Publicado: 13/10/2006 4:59 pm | | | Título: algoritmo en c++ para realizar operaciones entre matrices |
| | hola amigos soy nuevo en el foro y estoy desarrollando un software tipo tutorial para mi proyecto de segundo semestre de la universidad, es un tutorial que realice operaciones con matrices como suma, resta, multiplicacion, suma de diagonal principar de una matriz m*n si alguien tiene el algoritmo podria pasarmelo. muchisimas gracias |
| | Volver arriba | |  | Polimeron
Registrado: 12 Jul 2006 Mensajes: 38
| Publicado: 14/10/2006 12:10 pm | | | Título: |
| | Los algoritmos que se usan son triviales de algebra pero para la multiplicación de matrices se puede aplicar el algoritmo de multiplicación rapida. Te recomiendo que crees una clase matriz y a partir de ahi lo implementes, no es nada dificil. Si es solo el código lo que necesitas, postea otra vez y te lo mando pero creo que deberias intentar hacerlo solo. Saludos |
| | Volver arriba | |  | difer1125
Registrado: 12 Oct 2006 Mensajes: 16
| Publicado: 14/10/2006 12:29 pm | | | Título: |
| | amigo lo que pasa es que nesesito que el software muestre los cuadritos de la matriz para introducirle los valores, ya que es un software tipo tutorial, y la intension es seguir paso a paso el procedimiento para que el usuario lo entienda, yo ya hice los algoritmos para la mayoria de las operaciones, pero no se como implementar lo de los cuadritos en pantalla para los valores de la matriz, si sabes como hacerlo me avisas, muchas gracias por tu consejo creo que yo era el que tena que hacer el algoritmo y ya lo hice, pero necesito de tu ayuda para este inconveniente |
| | Volver arriba | |  | | williams17
Registrado: 13 Oct 2006 Mensajes: 1
| Publicado: 14/10/2006 2:46 pm | | | Título: yo tengo q hacer lo mismo.. |
| estoy en segundo semestre de ing. de sistemas en la uniguajira y pues ya llevo el mio bastante adelantado,solo ahi un problema pequeño en el menu para q regrese de nuevo a el pero todo el programa en si esta perfecto,solo trata de arrglar ese pequeño detalle ahi esta el de multiplicasion,traza,ortogonal,idempotente entre otras...bueno ya solo t queda organizarlo como tu quieras ok? bueno hablamos y cuidese...
#include<stdio.h> #include<conio.h> #include<iostream.h> void mulma(); void mulmac(); void nummayor(); void traza(); void transpuesta(); void maorto(); void maidem(); void mainvo(); void menu(); int op;
void maidem() { clrscr();
int i,j,m,n,p,m1[7][7],A,B,m2[7][7],m3[7][7]; int cont,cont2=0;
do { printf("introduzca la cantidad de filas de la matriz A(menor que 7)\n"); scanf("%d",&A);
printf("introduzca la cantidad de columnas (debe ser igual el numero de filas\n"); scanf("%d",&B); }while(B!=A);
for(i=0;i<A;i++) { for(j=0;j<B;j++) {
printf("dijite el elemento de matriz en la posicion\t%d%d\n",i,j);
scanf("%d",&m1[i][j]); } }
for(i=0;i<A;i++) { for(j=0;j<B;j++) {
m1[i][j]=m2[i][j];
} }
for(m=0;m<A;m++) { for(p=0;p<A;p++) { cont=0; for(n=0;n<A;n++) { cont=cont+m1[m][n]*m2[n][p]; } m3[m][p]=cont;
} }
for(m=0;m<A;m++) { for(p=0;p<A;p++) { if(m1[m][p]==m3[m][p])
cont2=cont2+1; } } if(cont2==0) printf("la matriz no es idempotente");
else { printf("la matriz es idempotente");}
getch();
}
void nummayor() { clrscr();
int v[7][7],i,j,k,x,y; int mayor=0; int mayof=0; int mayoC=0; int suma[7]; int suma1=0; int suma2=0; int sumaC[7]; int p,pC; do { printf("digite el numero de filas que tendra la matriz A menor a 7\n"); scanf("%d",&x); }while(x>7); do { printf("dijite el numero de filas(que sea igual al numero de filas)\n"); scanf("%d",&y); }while(y>7);
for(i=0;i<x;i++){
for(j=0;j<y;j++){
printf("escriba el valor de la matriz en la pocision:\t %d %d\n",i,j); scanf("\n %d",&v[i][j]);
}
}
for(i=0;i<x;i++){ for(j=0;j<y;j++){
if(mayor<v[i][j]) mayor=v[i][j];
} }
for(i=0;i<x;i++){
suma1=0;
for(j=0;j<y;j++){ suma1=suma1+v[i][j];
} suma[i]=suma1;
} for(i=0;i<x;i++){ if(suma[i]>mayof){ mayof=suma[i]; p=i; } } for(i=0;i<y;i++){
suma2=0;
for(j=0;j<x;j++){ suma2=suma2+v[j][i];
} sumaC[i]=suma2;
} for(i=0;i<y;i++){ if(sumaC[i]>mayoC) { mayoC=sumaC[i]; pC=i;
} }
printf("el numero mayor almacenado en la matriz es el numero:\t%d",mayor); printf("\n\n\nla mayor suma de fila se encuentra en la fila:\t %d",p); printf("\n\n\nla mayor suma de columna se encuentra en la Columna:\t %d",pC);
getch();
} void mulma() { clrscr(); int i,j,mat[7][7],mata[7][7],matr[7][7],M,N,X,Y,Z,p,m,n; int cont=0; do { printf("introduzca la cantidad de filas de la matriz A(menor que 7)\n"); scanf("%d",&M); }while(M>7); do { printf("introduzca la cantidad de columnas de la matriz A(menor que 7)\n"); scanf("%d",&N); }while(N>7); do { printf("la cantidad de filas de la matriz B debe ser igual matriz a la cantidad de "); printf("columnas de la matriz A\n"); scanf("%d",&X); }while(X!=N); do { printf("dijite la cantidad de columnas de la matriz B(menor que 7)\n"); scanf("%d",&Z); }while(Z>7); printf("llene la matriz A:\n"); for(i=0;i<X;i++) { for(j=0;j<Z;j++) {
printf("dijite el elemento de matriz en la posicion\t%d%d\n",i,j);
scanf("%d",&mata[i][j]); } } printf("llene la matriz B:\n"); for(i=0;i<M;i++) { for(j=0;j<M;j++) {
printf("dijite el elemento de matriz en la posicion\t%d%d\n",i,j);
scanf("%d",&mat[i][j]); } }
for(m=0;m<N;m++) { for(p=0;p<X;p++) { cont=0; for(n=0;n<X;n++) { cont=cont+mata[m][n]*mat[n][p]; } matr[m][p]=cont; printf("\nel valor de la matriz resultante en la pocision%d%d\n",m,p); printf("es:%d",matr[m][p]);
} }
getch(); }
void traza() { clrscr(); int i,j,v[7][7],a,b; int acoms=0;
do { printf("digite el numero de filas que tendra la matriz A menor a 7\n"); scanf("%d",&a); }while(a>7); do { printf("dijite el numero de filas(que sea igual al numero de filas)\n"); scanf("%d",&b); }while(b>7);
for(i=0;i<a;i++){
for(j=0;j<b;j++){
printf("escriba el valor de la matriz en la pocision:%d%d\n",i,j); scanf("%d",&v[i][j]);
}
} for(i=0;i<a;i++){
for(j=0;j<b;j++){
if(i==j){ acoms=acoms + v[i][j]; } } }
printf("la traza de la matriz es:%d\t",acoms); getch(); }
void transpuesta() { clrscr();
int i,j,v[7][7],ma[7][7],l,m;
do { printf("digite el numero de filas que tendra la matriz A menor a 7\n"); scanf("%d",&l); }while(l>7); do { printf("dijite el numero de columnas\n"); scanf("%d",&m); }while(m>7);
for(i=0;i<l;i++){
for(j=0;j<m;j++){
printf("escriba el valor de la matriz en la pocision:\t %d %d\n",i,j); scanf("\n %d",&v[i][j]);
}
} for(i=0;i<m;i++){
for(j=0;j<l;j++){
ma[i][j]=v[j][i];
}
}
for(i=0;i<m;i++){
for(j=0;j<l;j++){
printf("el valor de la matriz en la pocision%d%d,es:%d\n",i,j,ma[i][j]);
}
} getch();
} void mulmac() {
clrscr();
int j,i,M,N,m,n,mat[7][7],mata[7][7],p,Y; do { printf("digite el numero de filas que tendra la matriz A menor a 7\n"); scanf("%d",&M); }while(M>7); do { printf("dijite la cantidad de columnas:\n"); scanf("%d",&N); }while(N>7);
printf("introduzca un numero(x) para multiplicarlo por la matriz\n"); scanf("%d",&Y);
for(i=0;i<M;i++) { for(j=0;j<M;j++) {
printf("dijite el elemento de matriz en la posicion\t%d%d\n",i,j);
scanf("%d",&mat[i][j]); } }
for(i=0;i<M;i++) { for(j=0;j<N;j++) { mata[i][j]=Y * mat[i][j];
} }
for(m=0;m<M;m++) { for(p=0;p<N;p++) { printf("\nel valor de la matriz resultante en la pocision%d%d\n",i,j); printf("es:%d",mata[m][p]); } } getch();
} void maorto() { clrscr();
int M,N,j,i,m,p,n,cont,conta,contad; int mat[7][7],mata[7][7],matr[7][7];
do { cout<<"digite el numero de filas que tendra la matriz A menor a 7"; cin>>M; cout<<"digite el numero de columnas que tendra la matriz A igual a la filas"; cin>>N; }while(M>=7&&N==M);
for(i=0;i<M;i++) { for(j=0;j<N;j++) { cout<<"dijite el elemento de matriz en la posicion"<<i,j; cin>>mat[i][j]; } }
for(i=0;i<N;i++) { for(j=0;j<M;j++) { mata[i][j]=mat[j][i];
} }
for(m=0;m<M;m++) { for(p=0;p<N;p++) { cont=0; for(n=0;n<N;n++) { cont=cont+mat[m][n]*mata[n][p]; } matr[m][p]=cont; } } conta=0;contad=0; for(m=0;m<M;m++) { for(p=0;p<N;p++) { if(m==p) { if(matr[m][p]!=1) conta=conta+1; } if(m!=p) { if(matr[m][p]!=0) contad=contad+1; } } }
if(conta==0&&contad==0) cout<<"la matriz es ortogonal"; else{ cout<<"la matriz no es ortogonal";} getch(); }
void mainvo() { clrscr();
int W,Z,i,j,m,n,p,conta,contad; int cont=0,ma[7][7],mi[7][7],mit[7][7]; do { printf("digite el numero de filas que tendra la matriz A menor a 7\n"); scanf("%d",&W); printf("dijite la cantidad de columnas(debe ser igual al numero de filas)\n"); scanf("%d",&Z); }while(W!=Z&&W>7);
for(i=0;i<W;i++) { for(j=0;j<Z;j++) {
printf("dijite el elemento de matriz en la posicion\t%d%d\n",i,j);
scanf("%d",&ma[i][j]); } } for(i=0;i<W;i++) { for(j=0;j<Z;j++) { mi[i][j]=ma[i][j];
} }
for(m=0;m<W;m++) { for(p=0;p<W;p++) { cont=0; for(n=0;n<W;n++) { cont=cont+mi[m][n]*ma[n][p]; } mit[m][p]=cont; }
}
conta=0;contad=0;
for(m=0;m<W;m++) { for(p=0;p<Z;p++) { if(m==p) { if(mit[m][p]!=1) conta=conta+1; } if(m!=p) { if(mit[m][p]!=0) contad=contad+1; } } }
if(conta==0&&contad==0) printf("la matriz es involuntiva");
else{ printf("la matriz no es involuntiva");} getch();
} void main() { clrscr(); do { for(; { clrscr(); gotoxy(20,2); printf("<--------MENU PRINCIPAL------->"); gotoxy(20,4);printf("1.MULTIPLICAR MATRICES"); gotoxy(20,6);printf("2.MULPIPLICAR UNA MATRIZ POR UN NUMERO C"); gotoxy(20, ;printf("3.NUMERO MAYOR,FILA Y COLUMNA CON LA MAYOR SUMA"); gotoxy(20,10);printf("4.TRAZA DE UNA MATRIZ"); gotoxy(20,12);printf("5.TRANSPUESTA DE UNA MATRIZ"); gotoxy(20,14);printf("6.MATRIZ ORTOGONAL"); gotoxy(20,16);printf("7.MATRIZ IDEMPOTENTE"); gotoxy(20,1 ;printf("8.MATRIZ INVOLUNTIVA"); gotoxy(20,20);printf("9.SISTEMAS DE ECUACIONES LINEALES"); gotoxy(20,22);printf("10.SALIR"); gotoxy(20,24);printf("ESCOJA UNA OPCION[ ]"); op=getchar();
switch (op) { case '1': mulma(); break; case '2': mulmac(); break; case '3': nummayor(); break; case '4': traza(); break; case '5': transpuesta(); break; case '6': maorto(); break; case '7': maidem(); break; case '8': mainvo(); break; case '10': clrscr(); printf("gracias por utilizar este programa..."); getchar(); op= 10; break;
} }
}while(op!=10); } |
| | Volver arriba | |  | Polimeron
Registrado: 12 Jul 2006 Mensajes: 38
| Publicado: 15/10/2006 11:01 pm | | | Título: |
| | Pues la verdad es que diciendolo asi supongo que quieres un programa bonito, que no muestre en la pantalla negra los resultados y la verdad es que no trabajo con aplicaciones asi, pero creo que con c++ builder podrias hacerlo, poner el codigo "por detras" como funciones y crear una pantallita bonita para que interactue con el usuario. Otra posibilidad es que lo hagas como una animacion flash para lo cual no te haria falta mas que la libreria ming para c++ solo que los cuadraitos de lectura de numeros ya creo que no los podrias hacer, pero sirviria para mostrar la traza del algoritmo. En todo caso intenta con el builder seguro que se puede hacer bastante bien. Saludos |
| | Volver arriba | |  | jalf2006
Registrado: 08 Mar 2010 Mensajes: 1
| Publicado: 08/03/2010 12:25 pm | | | Título: no me corre |
| | la verdad no me corre ni en visual 6 ni dev c++, me podrian ayudar? gracias |
| | Volver arriba | |  | | marilin zarate
Registrado: 27 Ene 2011 Mensajes: 1 Ubicación: Loja
| Publicado: 27/01/2011 7:37 am | | | Título: |
| | hola como estas mira me podrias ayudar haciendo que el numero de ingreso de la matriz sea para cualkier numero no solo para el que tu propones en tu algoritmo gracias |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |