Logo Studenta

Reporte Practica 4

¡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 #4
Profesor: Alejandro Enrique Dzul López
Índice
Introducción	2
Planteamiento del programa	3
Desarrollo	3
Resultados	4
Ejecución	15
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 el vector b
2 – Llenar la matriz A
3 – Obtener el vector resultante x, del sistema Ax+b=0
4 – Salir
Desarrollo
Para solucionar el problema usé como base el programa de la practica 3 en este programa, donde 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é CSSE 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 4 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 CSSE{
	private:
 double vectorIn[n];
		double vectorSo[n];
		double matriz[n][n];
		double inversaA[n][n];
		double traspuestaA[n][n];
		double cofactoresA[n][n];
		double adjuntaA[n][n];
		double determinanteA;
	public:
		CSSE();
		void inA();
 void inVector();
		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 getV(double vec[n]);
		void getA(double mat[n][n]);
		void calMatInv();
 void sol();
		void det();
};
int menu();
int main(){
	bool salir=false;
	double aux;
	int i,j;
	cout.setf(ios::fixed);
	cout.precision(pres);
	CSSE sys;
	while(!salir){
		system("CLS");
		sel = menu();
		switch (sel){
			case 1:
				sys.inVector();
			break;
			case 2:
				sys.inA();
			break;
			case 3:
				if(sys.ret_detA()!=0){
					sys.sol();
				}
				else{
					system("CLS");
					cout<<" El determinante es 0, el sistema no se puede resolver"<<endl;
					getch();
				}
			break;
			case 4:
 system("CLS");
				salir=true;
			break;
			default:
 system("CLS");
				cout<<"\n Ah, ah ,ah, esa no es la palabra mágica"<<endl;
 getch();
			break;
		}
	}
	return 0;
}
//	Función menú
int menu(){
	unsigned int seleccion;
	cout<<" 1) Llenar matriz V"<<endl;
	cout<<" 2) LLenar Matriz A "<<endl;
	cout<<" 3) Obtener el vector resultante x, del sistema Ax+b=0"<<endl;
	cout<<" 4) Salir"<<endl;
	cout<<endl<<" Escoja una opcion: ";
	cin>>seleccion;
	return seleccion;
}
CSSE::CSSE(){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			matriz[i][j]=0;
		}
		vectorIn[i]=0;
	}
}
void CSSE::inA(){
	int i,j;
	system("CLS");
	cout<<endl<<" Ingrese los valores de la matriz del sistema"<<endl;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			cout<<" Ingrese el valor a["<<i+1<<","<<j+1<<"]: ";
			cin>>matriz[i][j];
		}
		cout<<endl;
	}
	cout<<endl<<" La matriz A es: "<<endl;
	getA(matriz);
	getch();
	system("CLS");
}
void CSSE::inVector(){
	system("CLS");
	cout<<endl<<" Ingrese los valores del vector b"<<endl;
	int i;
	for (i=0;i<n;i++){
		cout<<" Ingrese el coeficiente b["<<i+1<<"]: ";
		cin>>vectorIn[i];
	}
	cout<<endl<<" El vector b es: "<<endl;
	getV(vectorIn);
	getch();
	system("CLS");
}
double CSSE::coefij(double m[n][n],int fila, int col){
	double aux = m[fila][col];
	return aux;
}
double CSSE::ret_detA(){
	det();
	return determinanteA;
}
double CSSE::ret_matInv(int fila, int col){
	double aux = inversaA[fila][col];
	return aux;
}
void CSSE::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;
	}
}
void CSSE::getV(double vec[n]){
	int i;
	cout<<endl;
	for(i=0;i<n;i++){
		if(vec[i]>0){
			cout<<"\t "<<vec[i]<<endl;
		}
		else{
			cout<<"\t"<<vec[i]<<endl;
		}
	}
}
double CSSE::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 CSSE::det(){
	int i;
	determinanteA = 0;
	double cof = 0;
	double coe = 0;
	for (i=0;i<n;i++){
		coe = coefij(matriz,0,i);
		cof = coffij(0, i);
		determinanteA += coe * cof;
	}	
}
void CSSE::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++){
				adjuntaA[j][i] = coffij(i,j);
				aux = adjuntaA[j][i];
				inversaA[j][i] = aux / determinanteA;
			}
		}
	}
	else{
		cout<<" El determinante es 0, no existe matriz inversa"<<endl;
	}
	if(sel == 6 && ret_detA()!=0){
		cout<<endl<<" La matriz inversa de A es: "<<endl;
		getA(inversaA);
		getch();
		system("CLS");
	}
}
void CSSE::sol(){
	int i,j;
	double aux;
	calMatInv();
	system("CLS");
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			aux += inversaA[i][j]*vectorIn[j];
		}
		vectorSo[i] = aux;
		aux = 0;
	}
	cout<<endl<<" La solucion al sistema de ecuaciones es: "<<endl;
	getV(vectorSo);
	getch();
	system("CLS");
}
Ejecución
Menú de opciones
Opción #1 Ingresar los valores del vector b
Opción #2 Ingresar los valores de la matriz A
Opción #3 Obtener el vector resultante
 pág. 2

Otros materiales