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;
}
#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


0