C/Visual C - Problema de programa C

   
Vista:

Problema de programa C

Publicado por Hernando (1 intervención) el 14/10/2007 23:55:53
Bueno Compañero me pidieron un programa en C del metodo simplex y pues con unos cuates y la ayuda de un programa que el maestro nos paso para basarnos lo hizimos, el problema esta en que da muchos errores de declaracion que no sabesmos por que, segun nosotros esta bien declarado. les dejo el codigo haber si me echan la mano por fa se agradeceria mucho
#include <stdlib.h>
#include <stdio.h>
int main ( ) {
unsigned n,e,*x;
float *c,**a,*h,*v;
unsigned int i,j,bi,bj;
printf ("Num. var.: ");
scanf ("%u",&n);
printf ("Num. inec.: ");
scanf ("%u",&e);
c = calloc ( n+1, sizeof( float));
a = calloc ( e+1, sizeof( float*));
x = calloc ( e+1, sizeof( unsigned));
h = calloc ( n+1, sizeof( float));
v = calloc ( e+1, sizeof( float));
for ( i=0;i<n;i++) {
printf("Coef. x(%u) en la ec. del Maximo:",i+1);
scanf ("%f",&c[i]);
}
for(j=0;j<e;j++){
a[j] = calloc ( n+1, sizeof(float));
for(i=0;i<n;i++){
printf ("Coef. x(%u) en la %u ec.:",i+1,j+1);
scanf ("%f",&a[j][i]);
}
printf ("Term.Indep. de la %u ec.:",j+1);
scanf ("%f",&a[j][n]);
printf ("Subindice de variable aux. de la inecuacion h(i)");
scanf ("%u",&x[j]);
x[j]--;
}
for(i=0;i<=n;i++){
a[e][i]=-c[i];
for(j=0;j<e;j++){
a[e][i]+=a[j][i]*c[x[j]];
}
}
for(i=0;i<n;i++){
printf ("c(%u)= %7.2f\n", i+1,c[i]);
}
bi=1;
for(i=0;i<n;i++){
if ( a[e][i]< a[e][bi] ) bi=i;
}
if ( a[e][bi]>=0 ) break;
bj=1;
for(j=0;j<e;j++){
if ( a[j][n]*a[bj][bi] < a[bj][n]*a[j][bi] ) bj=j;
}
printf ("+");
for(i=0;i<n+2;i++) printf ("--------");
printf ("+\n");
for(j=0;j<e;j++){
printf ("| x%u | %7.2f | ",x[j]+1,a[j][n] );
for(i=0;i<n;i++){
if ((i==bi)&&(j==bj)) {
printf ("%7.2f*",a[j][i] );
}
else {
printf ("%7.2f ",a[j][i] );
}
}
printf("|\n");
}
printf ("+");
for(i=0;i<n+2;i++) printf ("--------");
printf ("+\n");
printf (" | %7.2f | ",a[e][n] );
for(i=0;i<n;i++){
printf ("%7.2f ",a[e][i] );
}
printf("|\n\n");
for(i=0;i<=n;i++){
h[i]=a[bj][i];
}
for(j=0;j<=e;j++){
v[j]=a[j][bi];
}
for(i=0;i<=n;i++){
for(j=0;j<=e;j++){
a[j][i] -= h[i]*v[j]/h[bi];
}
}
for(i=0;i<=n;i++){
a[bj][i]=h[i]/v[bj];
}
x[bj]= bi;
}
printf ("+");
for(i=0;i<n+2;i++) printf ("--------");
printf ("+\n");
for(j=0;j<e;j++){
printf ("| x%u | %7.2f | ",x[j]+1,a[j][n] );
for(i=0;i<n;i++){
printf ("%7.2f ",a[j][i] );
}
printf("|\n");
}
printf ("+");
for(i=0;i<n+2;i++) printf ("--------");
printf ("+\n");
printf (" | %7.2f | ",a[e][n] );
for(i=0;i<n;i++){
printf ("%7.2f ",a[e][i] );
}
printf("|\n\n");
printf ("\nSolucion:\n");
for(j=0;j<e;j++){
printf ("x%u=%7.2f\n",x[j]+1,a[j][n]);
}
for(j=0;j<=e;j++) free(a[j]);
free(c);
free(a);
free(x);
free(h);
free(v);
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema de programa C

Publicado por leo (3 intervenciones) el 15/10/2007 06:39:07
he hecho una vista gorda, y no he encontrado errores en el uso de punteros, ni nada de eso..
puede que el scanf te este tirando errores
prueba
int temp;

(...)

scanf ("%f", &temp);
c[i] = temp;

en vez de ..

scanf ("%f",&c[i]);

por ahi esta interpretando mal, algo como (&c)[i]

Si tienes banderas de compilacion exigentes, puede molestar el tema de que no castees el retorno de calloc, que devuelve void* al tipo de puntero al que estas asignando.
unsigned n,e la verdad no me acuerdo si por defecto son char o int, eso puede molestar en el scanf(%u,&n)

no encuentro mas nada por ahora, jeje
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar