[ Foro de C++ ]

ayuda corregir codigo c++

09-Mar-2014 06:13
Invitado (espia)
1 Respuestas

debo hacer un programa que me despeje un sistema de ecuaciones usando gauss o gauss y jordan.

tengo la mayoria del codigo pero me presenta errores, esta hecho en c++ devc. les agradezco me ayuden a corregirlo!!

gracias

 
#ifdef __MSDOS__	
#include <iostream.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#include <conio.h> 
#else 
#include <iostream> 
#include <cstdlib> 
#include <cstring> 
#include <cctype> 
#include <conio.h> 
using namespace std; 
#endif 
 
int main () 
{ 
 
int i, j, k, n; 
 
cout<<"ingrese el n/243mero de ecuaciones (n): "; 
cin>> n; 
cin.get(); 
float termino, **matriz = new float*[n]; 
char literal, *literales = new char [n+1]; 
for (i=0; i<n; i++) 
{ 
literales[i] ='0'; 
cout<< "ingrese el literal de la variable " <<(i+1) << ":"; 
do { 
literal =tolower (getch ()); 
} 
while (!isalpha (literal) strchr (literales, literal)); 
literales[i] = literal; 
cout<< literal <<endl; 
} 
for (i=0; i<n; i++) 
{ 
matriz[i] = new float[n+1]; 
for (j=0; j<n; j++) 
{ 
cout<< "ingrese el coeficiente de la variable" <<literales[j] << "de la ecuacion" <<(i+1)<< ":"; 
cin>> matriz [i] [j];	
} 
cout<< "ingrese la constante de la ecuacion"<< (i+1)<< ":"; 
cin>> matriz [i] [n]; 
 
} 
cout<< endl; 
for (i=0; i<n; i++) 
{ 
if (matriz[i] [i]==0.0) 
{ 
cerr << "error: division entre cero." << endl<< endl<<; 
system ("pause"); 
return EXIT_FAILURE; 
 
} 
for (k=0; k<n; k++) 
if (k!=i) 
{ 
termino = matriz[k] [i] / matriz[i] [i]; 
for (j=0; j<=n; j++) 
matriz[k] [j] -= termino * matriz[i] [j]; 
} 
} 
cout<< "solucion:" <<endl << endl; 
for (i=0; i<n; i++) 
{ 
termino = matriz[i] [n] / matriz [i] [i]; 
cout << literales[i] << "=" << termino << endl; 
} 
cout<< endl; 
system ("pause"); 
return EXIT_SUCCESS; 
}
 



09-Mar-2014 10:47
Nacho Cabanes (+31)

Da más detalles sobre los problemas que tienes. Yo veo que cosas que no me gustan y que son propensas a errores, pero aun así quizá tus problemas no sean esos.

Por ejemplo, líneas como

 
float termino, **matriz = new float*[n]; 
 


en las que mezclas variables simples y arrays, y además defines arrays como punteros, y además das valor a unas variables sí y a otras no, son una enorme fuente de problemas y resultarían muy fáciles de mejorar.

El hecho de que esas líneas sean poco legibles hace que se te puedan escapar errores como éste:

 
cin>> matriz [i] [n];
 


en el que el índice "n" está fuera del límite que has reservado para la matriz, así que el programa puede interrumpirse en este punto o comportarse erróneamente.

Hay otros detalles peligrosos, como que mezcles "cin >> ", "cin.get" y "getch" en un fragmento tan corto (y aun así termines con un "system("pause")").

Si intentas que tu código sea legible, te será mucho más fácil ver los errores a ti mismo. Si "lo compactas para escribir menos", perderás mucho más tiempo en buscar fallos que lo que habrías tardado en escribirlo de forma más clara.  ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)