RE: La CPU NTVDM ha encontrado una instruccion no
Publicado por
UNiver (1 intervención) el 30/09/2008 02:04:22
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int i,j,suma[10][10],resta[10][10],producto[10][10],Mt[10][10];
void Inicializacion(int M[][10],int lin, int col)
{
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++)
M[i][j]=0;
}
}
int Inserta(int M[][10],int lin, int col)
{
clrscr();
if(lin>10 || col>10)
{
cout<<"
numero mayor a 4"
<<"
Presione una tecla para ingresar valor nuevamente";
getch();
return 1;
}
else
{
cout<<" _*_*_*_*_*_* INGRESA VALORES DE LA MATRIZ *_*_*_*_*_*_ "
<<"
Valores < 10";
int x=4,y=4, op;
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++)
{
do
{
gotoxy(2,15);cout<<"
"
<<"
";
op=0;
gotoxy(x,y);cout<<"";
cin>>M[i][j];
if(M[i][j]>10)
{
gotoxy(x,y);cout<<" ";
gotoxy(2,15);cout<<"
El valor es mayor a 10"
<<"
presiona una tecla para ingresar otro valor";
getch();
op=1;
}
}while(op==1);
x=x+4;
}
x=4;
y=y+2;
}
return -1;
}
}
void Mostrar(int M1[][10],int lin1,int col1,int x)
{
int x1=x, y=6;
for(i=0;i<lin1;i++)
{
for(j=0;j<col1;j++)
{
gotoxy(x1,y);cout<<M1[i][j];
x1=x1+5;
}
x1=x;
y=y+2;
}
cout<<"
";
}
void Suma(int M1[][10],int M2[][10],int lin, int col)
{
int x=7,x1, x2;
gotoxy(1,lin+5);cout<<"A+B = ";
gotoxy(col*3+11,lin+5);cout<<"+";
gotoxy(col*6+17,lin+5);cout<<"=";
x1=col*3+13;
x2=col*6+20;
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++)
{
suma[i][j]=M1[i][j]+M2[i][j];
}
}
Mostrar(M1,lin,col,x);
Mostrar(M2,lin,col,x1);
Mostrar(suma,lin,col,x2);
}
void Resta(int M1[][10],int M2[][10],int lin, int col)
{
int x=7,x1, x2;
gotoxy(1,lin+5);cout<<"A-B = ";
gotoxy(col*3+11,lin+5);cout<<"-";
gotoxy(col*6+17,lin+5);cout<<"=";
x1=col*3+13;
x2=col*6+20;
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++)
{
resta[i][j]=M1[i][j]-M2[i][j];
}
}
Mostrar(M1,lin,col,x);
Mostrar(M2,lin,col,x1);
Mostrar(resta,lin,col,x2);
}
void Producto(int M1[][10],int M2[][10],int lin1, int col1,int lin2,int col2)
{
if (col1!=lin2)
{
cout<<"
El numero de Columnas de A es diferente al numero de Filas de B";
cout<<"
Columnas de A = "<<col1<<"
Filas de B = "<<lin2;
}
else
{
int x=7, x1, x2, prod=0;
gotoxy(1,lin1+5);cout<<"A*B = ";
gotoxy(col1*3+11,lin1+5);cout<<"*";
gotoxy(col1*6+18,lin1+5);cout<<"=";
x1=col1*3+13;
x2=col1*6+22;
for(i=0;i<lin1;i++)
{
for(j=0;j<col2;j++)
{
for(int k=0;k<lin2;k++)
prod=prod+(M1[i][k]*M2[k][j]);
producto[i][j]=prod;
prod=0;
}
}
Mostrar(M1,lin1,col1,x);
Mostrar(M2,lin2,col2,x1);
Mostrar(producto,lin1,col2,x2);
}
}
void Transpuesta(int M[][10],int lin1,int col1)
{
int x=7, x1;
gotoxy(20,1);cout<<" _*_*_*_*_*_* TRANSPUESTA *_*_*_*_*_*_
";
gotoxy(1,lin1+5);cout<<"M = ";
gotoxy(col1*3+13,lin1+5);cout<<"Mt = ";
x1=col1*3+16;
for(i=0;i<lin1;i++)
{
for(j=0;j<col1;j++)
Mt[j][i]=M[i][j];
}
Mostrar(M,lin1,col1,x);
Mostrar(Mt,col1,lin1,x1);
}
void Ejemplos(int op)
{
int ejem[10][10],ejem2[10][10],k=1;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
ejem[i][j]=k;
k++;
}
}
k=2;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
ejem2[j][i]=k;
k++;
}
}
switch(op)
{
case 1:
cout<<"El numero de Filas y Columnas de las dos matrices deben ser iguales
Ejemplo:";
Suma(ejem,ejem2,3,3);
break;
case 2:
cout<<"El numero de Filas y Columnas de las dos matrices deben ser iguales
Ejemplo:";
Resta(ejem,ejem2,3,3);
break;
case 3:
cout<<"El Numero de Columnas de la Primera Matriz
debe ser igual al Numero de Filas de la Segunda Matriz
Ejemplo:";
Producto(ejem,ejem2,2,3,3,2);
break;
}
}
main()
{
textbackground(LIGHTGRAY);
textcolor(BLUE);
clrscr();
int A[10][10], B[10][10], lin=0, linB=0, col=0, colB=0, op;
Inicializacion(A,10,10);
Inicializacion(B,10,10);
do
{
clrscr();
cout<<"
_*_*_*_*_*_*_*_*_*_*_* Menu de Opciones *_*_*_*_*_*_*_*_*_"
<<"
1. Suma A + B"
<<"
2. Resta A - B"
<<"
3. Producto A * B"
<<"
4. Salir"
<<"
Elija una opcion: ";
cin>>op;
switch(op)
{
case 1:
do
{
clrscr();
gotoxy(20,1);cout<<" _*_*_*_*_*_* SUMA DE A + B *_*_*_*_*_*_
";
Ejemplos(1);
cout<<"Presione una tecla para ingresar valores";
getch();
cout<<"
Numero de Filas: ";cin>>lin;
cout<<"
Numero de Columnas: ";cin>>col;
op=Inserta(A,lin,col);
}while(op==1);
Inserta(B,lin,col);
clrscr();
gotoxy(20,1);cout<<" _*_*_*_*_*_* SUMA DE A + B *_*_*_*_*_*_ ";
Suma(A,B,lin,col);
cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
while(op==1)
{
clrscr();
cout<<"
1. Resta
2. Producto
3. Transpuesta
Elige una opcion: ";cin>>op;
clrscr();
if(op==1)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* RESTA DE A - B *_*_*_*_*_*_";
Resta(A,B,lin,col);
}
if(op==2)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* PRODUCTO DE A * B *_*_*_*_*_*_";
Producto(A,B,lin,col,lin,col);
}
if(op==3)
{
cout<<"
1. Matriz A
2. Matriz B
3. Matriz Resultante
Elige una opcion: ";cin>>op;
clrscr();
switch(op)
{
case 1: Transpuesta(A,lin,col);break;
case 2: Transpuesta(B,lin,col);break;
case 3: Transpuesta(suma,lin,col);break;
default: cout<<"Opcion no valida"; break;
}
}cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
};
op=1;
cout<<"
Presione una tecla para regresar al menu";
getch();
break;
case 2:
do
{
clrscr();
gotoxy(20,1);cout<<" _*_*_*_*_*_* RESTA DE A - B *_*_*_*_*_*_
";
Ejemplos(2);
cout<<"Presione una tecla para ingresar valores";
getch();
cout<<"
Numero de Filas: ";cin>>lin;
cout<<"
Numero de Columnas: ";cin>>col;
op=Inserta(A,lin,col);
}while(op==1);
Inserta(B,lin,col);
clrscr();
Resta(A,B,lin,col);
cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
while(op==1)
{
clrscr();
cout<<"
1. Suma
2. Producto
3. Transpuesta
Elige una opcion: ";cin>>op;
clrscr();
if(op==1)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* SUMA DE A + B *_*_*_*_*_*_";
Suma(A,B,lin,col);
}
if(op==2)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* PRODUCTO DE A * B *_*_*_*_*_*_";
Producto(A,B,lin,col,lin,col);
}
if(op==3)
{
cout<<"
1. Matriz A
2. Matriz B
3. Matriz Resultante
Elige una opcion: ";cin>>op;
clrscr();
switch(op)
{
case 1: Transpuesta(A,lin,col);break;
case 2: Transpuesta(B,lin,col);break;
case 3: Transpuesta(resta,lin,col);break;
default: cout<<"Opcion no valida"; break;
}
}cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
};
op=1;
cout<<"
Presione una tecla para regresar al menu";
getch();
break;
case 3:
do
{
clrscr();
gotoxy(20,1);cout<<" _*_*_*_*_*_* PRODUCTO DE A * B *_*_*_*_*_*_
";
Ejemplos(3);
cout<<"
Presione una tecla para ingresar valores";
getch();
clrscr();
cout<<" >>>>>> Matriz A <<<<<<";
cout<<"
Numero de Filas: "; cin>>lin;
cout<<"
Numero de Columnas: "; cin>>col;
linB=col;
op=Inserta(A,lin,col);
}while(op==1);
do
{
clrscr();
cout<<" >>>>>> Matriz B <<<<<<";
cout<<"
Numero de Filas: "<<linB;
cout<<"
Numero de Columnas: ";cin>>colB;
op=Inserta(B,linB,colB);
}while(op==1);
clrscr();
Producto(A,B,lin,col,linB,colB);
cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
while(op==1)
{
clrscr();
cout<<"
1. Suma
2. Resta
3. Transpuesta
Elige una opcion: ";cin>>op;
clrscr();
if(op==1 || op==2)
{
if(lin!=linB || col!=colB)
cout<<"
No se puede realizar la operacion
Las dimenciones son diferentes";
else
{
if(op==1)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* SUMA DE A + B *_*_*_*_*_*_";
Suma(A,B,lin,col);
}
if(op==2)
{
gotoxy(20,1);cout<<" _*_*_*_*_*_* RESTA DE A - B *_*_*_*_*_*_";
Resta(A,B,lin,col);
}
}
}
if(op==3)
{
cout<<"
1. Matriz A
2. Matriz B
3. Matriz Resultante
Elige una opcion: ";cin>>op;
clrscr();
switch(op)
{
case 1: Transpuesta(A,lin,col);break;
case 2: Transpuesta(B,lin,col);break;
case 3: Transpuesta(producto,lin,col);break;
default: cout<<"Opcion no valida"; break;
}
}cout<<"
Desea Hacer otra operacion con las mismas matrices? Si[1] No[2]: ";cin>>op;
};
op=1;
cout<<"
Presione una tecla para regresar al menu";
getch();
break;
case 4:
exit(0);
default:
clrscr();
cout<<"
Esa opcion no existe"
<<"
Presione una tecla para elegir otra opcion";
getch();
op=1;
break;
}
}while(op==1);
exit(0);
getch();
return 0;
}