Академический Документы
Профессиональный Документы
Культура Документы
AÑO 2011
Trabajo Práctico Nº 2
GRUPO: ANIQ18
ALUMNOS:
Melisa Betsabe Garzon. LU: 306932
noelia del carmen vera. LU: 306523
David Dionisio Varas Santander. LU: 305495
FECHA DE PRESENTACIÓN: 29/03/11
GUÍA DE TRABAJO PRÁCTICO Nº 18
Página 1
Facultad de Ingeniería. Universidad Nacional de Salta.
PROBLEMA 1
/* TRABAJO PRÁCTICO 2 */
/* Sistemas lineales. Método de Gauss Básico*/
#include \"U:\\ANQLib\\anqlib.h\"
#include \"U:\\errores.h\"
#include <math.h>
//DECLARACIÓN DE PROTOTIPOS DE FUNCIONES
//FUNCIONES QUE SE DEBEN MODIFICAR EN CADA TP
int Obtener_Datos(void);
int Aplicar_Metodo(void);
void MuestraResultados_en_Ventana(int error);
int Salida_en_Archivo(int error);
//declaración de variables globales
double a[100][101],x[100];
int n;
int main()
{
int error;
//Obtener los datos del problema
error=Obtener_Datos();
//Efectuar Cálculos
if(error==ERROR_OK) error=Aplicar_Metodo();
//Salida de resultados en archivo
if(error==ERROR_OK) error=Salida_en_Archivo(error);
//Mensajes en ventana
MuestraResultados_en_Ventana(error);
system(\"PAUSE\");
return error;
}
int Obtener_Datos()
{
int i,j,error;
char buffer_lectura[5000];//buffer para almacenar los datos del archivo
//Lectura de datos desde un archivo
error=LeeDatos_de_Archivo(\"sistema.txt\",buffer_lectura);
if(error) return ERROR_LECTURA_ARCHIVO;
//Obtener el número n
error=leeEntero(buffer_lectura,&n);
if(error) return ERROR_SINTAXIS;
//Obtener los coeficientes del sistema
for(i=1; i<=n; i++)
{
for(j=1; j<=n+1; j++)
{
error=leeDouble(buffer_lectura,&a[i][j]);
if(error) return ERROR_SINTAXIS;
}//j
}//i
Página 2
Facultad de Ingeniería. Universidad Nacional de Salta.
return ERROR_OK;
}
void MuestraResultados_en_Ventana(int error)
{
if(error!=ERROR_OK)
{//Verificar si se produjeron errores
if(error==ERROR_LECTURA_ARCHIVO) printf(\"No se puede abrir el archivo de datos.\\r\\n\");
if(error==ERROR_ESCRITURA_ARCHIVO) printf(\"No se puede abrir el archivo de salida.\\r\\n\");
if(error==ERROR_SINTAXIS) printf(\"Error de sintaxis en los datos.\\r\\n\");
if(error==ERROR_PIVOTE_PCERO) printf(\"Error. Pivote próximo a cero.\\r\\n\");
}
else{//mensaje de ejecución satisfactoria
printf(\"Ejecución sin errores\\r\\n\");
}
}
int Salida_en_Archivo(int error)
{
int i;
char buff_numero[100],buffer_salida[5000];
//escribir en el buffer el vector x
lstrcpy(buffer_salida,\"Solución\\r\\n\\r\\n\");
for(i=1; i<=n; i++)
{
lstrcat(buffer_salida,\"x[\");
ConvertirEntero_a_Texto(i,buff_numero); lstrcat(buffer_salida,buff_numero);
lstrcat(buffer_salida,\"]= \");
ConvertirDouble_a_Texto(x[i],6,buff_numero); lstrcat(buffer_salida,buff_numero);
lstrcat(buffer_salida,\"\\r\\n\");
}//for i
//escribir buffer_salida en archivo de salida
error=EscribeResultados_en_Archivo(\"salida.txt\",buffer_salida);
if(error) return ERROR_ESCRITURA_ARCHIVO;
return error;
}
int Aplicar_Metodo()
{
int i,j,k;
double m,s;
//Triangulación
for(k=1; k<=n; k++)
{
if(fabs(a[k][k]) <= 1.0e-8) return ERROR_PIVOTE_PCERO;
for(i=k+1; i<=n; i++)
{
m=a[i][k]/a[k][k];
for(j=k+1; j<=n+1; j++)
{
a[i][j]-=m*a[k][j];
}
Página 3
Facultad de Ingeniería. Universidad Nacional de Salta.
}//for i
}//for k
//Sustitución regresiva
for(i=n; i>=1; i--)
{
s=0.0;
for(j=i+1; j<=n; j++) s+=a[i][j]*x[j];
x[i]=(a[i][n+1]-s)/a[i][i];
}//for i
return ERROR_OK;
}
Página 4
Facultad de Ingeniería. Universidad Nacional de Salta.
PROBLEMA 2
SOLUCION:
PROBLEMA 3
SOLUCION:
x[1]= 1.000000
x[2]= 1.000000
x[3]= 1.000000
x[4]= 1.000000
x[5]= 1.000000
x[6]= 1.000000
Página 5
Facultad de Ingeniería. Universidad Nacional de Salta.
PROBLEMA 4
PROBLEMA ORIGINAL: A|b - T(1)
Página 6