Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda a validar!!!

Estas en el tema de Ayuda a validar!!! en el foro de C/C++ en Foros del Web. LA VERDAD ES QUE NECESITO VALIDAR ESTE PROGRAMA DEL METODO DE GAUSS-SEIDEL PARA QUE AL INICIAR CUANDO PIDE EL NUMERO DE ECUACIONES SI YO INTRODUZCO ...
  #1 (permalink)  
Antiguo 21/10/2009, 00:40
 
Fecha de Ingreso: octubre-2009
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 0
Ayuda a validar!!!

LA VERDAD ES QUE NECESITO VALIDAR ESTE PROGRAMA DEL METODO DE GAUSS-SEIDEL PARA QUE AL INICIAR CUANDO PIDE EL NUMERO DE ECUACIONES SI YO INTRODUZCO UN SIGNO DE "+",UN SIGNO DE "-" O UN "." SIN NIGUN DIGITO NO LOS ACEPTE O UN ENTERO CON UN DECIMAL.

PERO DESPUES DE ESE PASO SI TIENE QUE RECONOCER EL "+" ,"-" ,"." YA QUE EMPEZAMOS A INTRODUCIR VALORES DE LAS ECUACIONES.
ESTE ES EL CODIGO SI ME PODRIAN HACER EL FAVOR DE DECIRME QUE CAMBIARLE

O COMO HACER PARA EL PROGRAMA HAGA LO QUE PIDO. SI TIENEN ALGUNA DUDA AVISENME GRACIAS!!!

CODIGO:

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>


float captura(void)
{
char cad[10];
float Valor;
int b,p;
do
{
b=1;
p=0;
gets(cad);
if(strlen(cad) == 0)
{
cout<<"escriba algun valor\n\n";
b=0;
}

for(int i=0; i<strlen(cad) ; i++)
{
if(cad[i]=='.') p++;
if( !(cad[i]=='.' && p<2) && !(cad[i]=='+' && i==0) && !(cad[i]=='-' && i==0) && cad[i]!='1'&& cad[i]!='2' &&cad[i]!='3' &&cad[i]!='4' &&cad[i]!='5'&&cad[i]!='6' &&cad[i]!='7'&&cad[i]!='8' &&cad[i]!='9' && cad[i]!='0' )
{
cout<<"\nLa secuencia no es un numero...!!Intentelo de nuevo!!\n\n";
b=0;
break;
}
}
} while (b==0);
Valor = atof(cad);
return Valor;
}

float Mocha(float num,int nc) //mocha un numero a n cifras significativas
{
float valor=0;
char aux[20];
for(int i=0;i<20;i++)
aux[i]='a';
char cajon[20];
for(i=0;i<20;i++)
cajon[i]='a';
int p,cont,B;
gcvt(num,20,aux);

p=B=0;
cont = 0;
for(i = 0;i<strlen(aux);i++)
{
if(p!=0) //2da ya encontado
if(aux[i]!='0') B=1; //busca hasta que ya no haya ceros
if(B==1) cont++; //3ro va contando las n cifras
cajon[i]=aux[i]; //copea sin importar
if(cont >= nc)break; //4to ya se coperaon todas detiene
if(aux[i]=='.') p++; //1ro encuntra punto

}
cajon[i+1]='\0';
valor = atof(cajon);
return valor;
}
class E
{
private:
int n;
float **SE;
float *X,*Xp;
float *Era,Es;
int n_c;
public:
void G_S();
void ES();
int ERA(void);
int Dominante();
void cambiaE(int,int);
void CSE();
void BSE();
void ISE();

};

void E::G_S()
{
float dividendo=0;
X=new float[n]; //inicializando 0
for(int i=0;i<n;i++)
X[i]=0;
Xp=new float[n];
for(i=0;i<n;i++)
Xp[i]=0;
Era=new float[n];
for(i=0;i<n;i++)
Era[i]=100;
ES();
do
{
for(i=0;i<n;i++)
{
dividendo=0;
for(int j=0;j<n;j++)
if(j!=i)
dividendo = dividendo -X[j]*SE[i][j];
dividendo = dividendo + SE[i][n];
Xp[i]=X[i];
X[i]=dividendo/SE[i][i];
X[i] = Mocha(X[i],n_c);
cout<<endl<<"X"<<i+1<<" = "<<X[i];
}
}while(ERA() && !kbhit()); //no ha quedado
cout<<endl<<"Se ha aproximado los valores a...."<<endl<<endl;

for(i=0;i<n;i++)
{
cout<<endl<<"X"<<i+1<<" = "<<X[i];
}

cout<<"\n\nFin del programa...";
getch();
getch();
if(X) delete X;
if(Xp) delete Xp;
if(Era) delete Era;
}

int E::ERA()
{
int p=0;
for(int i=0;i<n;i++)
{
Era[i] = fabs( (X[i]- Xp[i]) / X[i] )*100;
cout<<endl<<"Era"<<i+1<<" = "<<Era[i];
}

for(i=0;i<n;i++)
if(Era[i]<Es) p++;

if(p==n) return 0; //ya quedo
else return 1;
}


void E::ES()
{
cout<<"¨Cual es el numero de cifras significativas ?";
n_c = captura();
Es = 0.5 * pow(10,2-n_c);
}

void E::cambiaE(int i,int i1)//la fila i ala i1 y la i1 ala i
{
float *vec;
vec = new float[n+1];
for(int j=0;j<=n;j++)
vec[j]=SE[i][j];

for(j=0;j<=n;j++)
SE[i][j]=SE[i1][j];

for(j=0;j<=n;j++)
SE[i1][j]=vec[j];

if(vec) delete vec;
}

void E::BSE()
{
for(int i=0;i<n;i++) //borra
{
if(SE[i]) delete SE[i];
}
if(SE) delete SE;
}

void E::CSE()
{
cout<<"¨Cual es el numero de ecuaciones ?";
n = captura();
*SE=new float[n];
for(int i=0;i<n;i++)
SE[i]= new float[n+1];

for(i=0;i<n;i++)
{
cout<<endl<<"Ecuacion "<<i+1<<endl<<endl;

for(int j=0;j<=n;j++)
{
if(j==n)
{
cout<<"Resultado de la Ecuacion "<<i+1<<" = ";
SE[i][j] = captura();
}
else
{
cout<<"coeficiente X"<<j+1<<" = ";
SE[i][j] = captura();
}
}
}
cout<<"Ecuacion Capturada";
ISE();
}
void E::ISE()
{
cout<<endl;
for(int i=0;i<n;i++)
{ //imprime
cout<<endl;
for(int j=0;j<=n;j++)
{
if(j==n) cout<<" = "<<SE[i][j];
else
if(SE[i][j]<0)
cout<<" "<<SE[i][j]<<"X"<<j+1;
else
cout<<" +"<<SE[i][j]<<"X"<<j+1;
}
}
cout<<endl;
getch();
}

int E::Dominante()
{
float val=0;
int b=0;

for(int j=0;j<n;j++)
for(int i=0;i<n;i++)
{
val=0;
for(int m=0;m<n;m++)
if(j!=m)
val = val+fabs(SE[i][m]);

if( fabs(SE[i][j]) > val)
{
cambiaE(i,j);
b=0;
break;
}
else
{
b++;
if(b == n)
{
cout<<"El sistema no puede acomodarse..";
return 1;
}
}

}
cout<<"Sistema Diagonalmete Dominante";
ISE();
return 0;
}


int main()
{
int a;
E sistema;
do
{
clrscr();
sistema.CSE();
a = sistema.Dominante();
if(a==1) // no se pudo acomodar
{
cout<<"\n\ningrese otro sistema..";
getch();
sistema.BSE();
}
}while(a==1);
sistema.G_S();
sistema.BSE();
return 0;
}
  #2 (permalink)  
Antiguo 23/10/2009, 11:00
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Ayuda a validar!!!

con isdigit compruebas si es un numero el que se esta ingresando

bienvenido al foro
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.