Logo Studenta

Reporte Practica 3

¡Este material tiene más páginas!

Vista previa del material en texto

Programación Visual
TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE LA LAGUNA
Programación visual
	
Edgar Daniel Alba González (19130736)
6º Semestre de Ing. Electrónica
Practica #3
Profesor: Alejandro Enrique Dzul López
Índice
Introducción	3
Planteamiento del programa	4
Desarrollo	4
Resultados	5
Ejecución	17
Conclusión	19
Introducción 
Una estructura de datos es una forma particular de organizar datos en una computadora para que pueda ser utilizado de manera eficiente. Diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunos son altamente especializados para tareas específicas. Las estructuras de datos son un medio para manejar grandes cantidades de datos de manera eficiente para usos tales como grandes bases de datos y servicios de indización de Internet. Por lo general, las estructuras de datos eficientes son la clave para diseñar algoritmos eficientes. Algunos métodos formales de diseño y lenguajes de programación destacan las estructuras de datos, en lugar de los algoritmos, como el factor clave de organización en el diseño de software.
Los archivos o ficheros son la forma en la que C++ permite el acceso al disco.
Todos los procesos tienen abiertos, por defecto, los archivos 0(entrada), 1(salida) y 2(salida de errores), de manera que en C++ se corresponden con los objetos cin, cout y cerr. De estos últimos, el primero pertenece a la clase ifstream, que a su vez desciende de istream (flujo de entrada). Los dos últimos pertenecen a la clase ofstream, que desciende de la clase ostream (flujo de salida).
Las matrices o como algunos las llaman "arreglos multidimensionales" son una estructura de datos bastante similar a los vectores o arreglos. De hecho, una matriz no es más que una serie de vectores contenidos uno en el otro (u otros), es decir, una matriz es un vector cuyas posiciones son otros vectores. Hablemos con más detalle de esto para quedar más claros.
Planteamiento del programa
Desarrollar un programa, en lenguaje C++ y en modo consola. El programa mostrará el siguiente menú repetitivo:
MENU
1 – Llenar la matriz A
2 – Obtener la matriz traspuesta de A
3 – Obtener el determinante de A
4 – Obtener la matriz de cofactores de A
5 – Obtener la matriz inversa de A
6 – Salir
Desarrollo
Para solucionar el problema iniciamos con la declaración de las librerías que utilizaremos en el desarrollo del programa; en este programa definí un límite de 3 en n para la declaración de la matriz, la cual me ayuda a no generar más dígitos que se incluyan en la matriz, después proseguí a iniciar la función principal a la cual llamé CMatriz que se compone de la función switch (que se utiliza para seleccionar uno o más bloques de ejecución) el cual está separado por 6 opciones que componen el menú de la práctica. 
Después de eso, continue a realizar cada una de las estructuras de las opciones, al inicio del programa declaré funciones en public y en private, para después usarlas de acuerdo con sus funciones asignadas tanto en void como double. Después llamé a los espacios vacíos (void) los cuales guardaban los datos de la estructura, al tener estos espacios vacíos, pude agregar una lista la cual me ayudó a ingresar los datos y guardarlos, al tener esos datos continue a realizar los arreglos que me permitirán llenar, guardar y ordenar los datos requeridos que introduce el usuario. 
Resultados
Código
#include<iostream>
#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<iomanip>
using namespace std;
#define n 3
#define pres 3
unsigned int sel;
class CMatriz{
	private:
		double matriz[n][n];
		double invA[n][n];
		double traA[n][n];
		double cofA[n][n];
		double adjA[n][n];
		double detA;
		
	public:
		CMatriz();
		void inA();
		double coefij(double m[n][n],int fila, int col);
		double ret_detA();
		double ret_matInv(int fila, int col);
		double coffij(int fila, int col);
		void getA(double mat[n][n]);
		void calMatCof();
		void calMatInv();
		void calMatTra();
		void sol();
		void det();
};
int menu();
int main(){
	
	bool salir=false;
	double aux;
	int i,j;
	cout.setf(ios::fixed);
	cout.precision(pres);
	CMatriz sys;
	
	while(!salir){
		system("CLS");	
		sel = menu();
		switch (sel){
			case 1:
				sys.inA();
			break;
			case 2:
				sys.calMatTra();
			break;
			case 3:
				system("CLS");
				cout<<endl<<" El determinante de A es: "<<sys.ret_detA()<<endl;
				getch();
				system("CLS");
			break;
			case 4:
				sys.calMatCof();
			break;
			case 5:
 sys.calMatInv();
			break;
			case 6:
 system("CLS");
				salir=true;
			break;
			default:
 system("CLS");
				cout<<"\n Opcion Erronea"<<endl;
 cout<<endl<<endl<<" Oprima enter para volver al menú...";
 getch();
			break;
		}
	}
	return 0;
}
int menu(){
	unsigned int seleccion;
	cout<<" 1) Llenar matriz A"<<endl;
	cout<<" 2) Obtener la matriz traspuesta de A"<<endl;
	cout<<" 3) Calcular el determinante de A"<<endl;
	cout<<" 4) Obtener la matriz de cofactores de A"<<endl;
	cout<<" 5) Obtener la matriz inversa de A"<<endl;
	cout<<" 6) Salir"<<endl;
	cout<<endl<<"Escoja una opcion: ";
	cin>>seleccion;
	return seleccion;
}
//	Constructor	
CMatriz::CMatriz(){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			matriz[i][j]=0;
		}
	}
}
void CMatriz::inA(){
	int i,j;
	system("CLS");
	cout<<endl<<" Ingrese los coefcientes de la matriz del sistema"<<endl;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			cout<<" Ingrese el coeficiente a["<<i+1<<","<<j+1<<"]: ";
			cin>>matriz[i][j];
		}
		cout<<endl;
	}
	cout<<endl<<" La matriz del sistema es: "<<endl;
	getA(matriz);
 getch();
	system("CLS");
}
double CMatriz::coefij(double m[n][n],int fila, int col){
	double aux = m[fila][col];
	return aux;
}
double CMatriz::ret_detA(){
	det();
	return detA;
}
double CMatriz::ret_matInv(int fila, int col){
	double aux = invA[fila][col];
	return aux;
}
void CMatriz::getA(double mat[n][n]){
	int i,j;
	cout<<endl<<endl;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(mat[i][j]>0){
				cout<<"\t "<<mat[i][j];
			}
			else{
				cout<<"\t "<<mat[i][j];				
			}
	
		}
		cout<<endl;
	}
}
double CMatriz::coffij(int fila, int col){
	double cofactor;
	double maux[n-1][n-1];
	int i,j,x,y;
	x = 0;
	y = 0;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(i!=fila && j!=col){
				maux[x][y] = matriz[i][j];
				y++;
				if(y>=n-1)
				{
					x++;
					y=0;
				}
			}
		}
	}
	
	cofactor = ( pow(-1,fila+col) ) * (maux[0][0]*maux[1][1] - maux[1][0]*maux[0][1]);
	return cofactor;
}
void CMatriz::calMatCof(){
	int i,j;
	system("CLS");
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			cofA[i][j] = coffij(i,j);
		}
	}
	cout<<endl<<" La matriz de cofactores es: "<<endl;
	getA(cofA);
	getch();
	system("CLS");
}
//	Esta función regresa el determinante de la matriz
void CMatriz::det(){
	int i;
	detA = 0;
	double cof = 0;
	double coe = 0;
	for (i=0;i<n;i++){
		coe = coefij(matriz,0,i);
		cof = coffij(0, i);
		detA += coe * cof;
	}
}
void CMatriz::calMatInv(){
	int i,j;
	double detA = ret_detA();
	double aux;
	system("CLS");
	if (detA != 0){
		for(i=0;i<n;i++){
			for(j=0;j<n;j++){
				adjA[j][i] = coffij(i,j);
				aux = adjA[j][i];
				invA[j][i] = aux / detA;
			}
 cout<<endl<<" La matriz inversa de A es: "<<endl;
		getA(invA);
		getch();
		system("CLS");
		}
	}
	else{
		cout<<" El determinante es 0, no existe matriz inversa"<<endl;
 getch();
	}
}
void CMatriz::calMatTra(){
	int i,j;
	system("CLS");
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			traA[i][j]=matriz[j][i];
		}
	}
	cout<<endl<<" La matriz transpuesta es: "<<endl;
	getA(traA);
	system("CLS");
}
Ejecución
Opción #1 Llenar la matriz A
Opción #2 Obtener la matriz traspuesta 
Opción #3 Obtener el determinante de A
Opción #4 obtener la matriz de cofactores
Opción #5 Obtener la matriz inversa
Conclusión
Como conclusión, realizar esta práctica fuebastante laborioso, más que nada al momento de acomodar los procesos que se necesitan para las opciones del menú así como también realizar las operaciones matemáticas en el orden correcto; en lo personal este programa me dio bastantes vueltas en la cabeza por el simple hecho de organizar bien las estructuras y verificar que no faltara algún otro detalle.
pág. 1

Otros materiales