C/Visual C - Cual es el error - Solo tigres en C

 
Vista:

Cual es el error - Solo tigres en C

Publicado por Joseph (18 intervenciones) el 13/05/2006 22:13:19
Hola gentita del foro tengo un problema tengo un programa en C, que cuando lo compilo en borland C++ 5.0 o turbo C++, esos antiguitos no hay error ninguno, pero cuando lo compilo en visual C++, me dan algunos errores, quisiera saber si me pueden arreglar este error, o como podria hacer una DLL en borland C++ 5.0 (no la version builder), con los pasos para realizarla, por favor mandenmelo a mi correo.

El programa es para leer una funcion, le damos un valor y nos la resuelva.
ahi les va, pero por favor haber si la pueden hacer, como les dije convertirla a una DLL en borland C++ 5.0 ó tratar de arreglarla para que funque en visual c++. y si me dan una explicada con la sentencia "union".

#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
float evalua(char *i, float xpar, float ypar);
float evaluax(char *i, float xpar);
traducecad(char *s,char *d);

traduce(char *s, char *sd, char *d);

static union bifronte {
char *sp;
float *f;
};
static float x,y;
float valor(i)
union bifronte i;
{
switch (*(i.sp-1)) {
case 0: return *i.f;
case 1: return x;
case 2: return y;
case 16: return valor(i.sp+2)+valor(i.sp+*i.sp);
case 17: return valor(i.sp+2)-valor(i.sp+*i.sp);
case 18: return -valor(i.sp+1);
case 19: return valor(i.sp+2)*valor(i.sp+*i.sp);
case 20: return valor(i.sp+2)/valor(i.sp+*i.sp);
case 21: return pow(valor(i.sp+2),valor(i.sp+*i.sp));
case 22: return log(valor(i.sp+1));
case 23: return sin(valor(i.sp+1));
case 24: return cos(valor(i.sp+1));
case 25: return tan(valor(i.sp+1));
case 26: return asin(valor(i.sp+1));
case 27: return acos(valor(i.sp+1));
case 28: return atan(valor(i.sp+1));
case 29: return exp(valor(i.sp+1));
case 30: return fabs(valor(i.sp+1));
case 31: return sinh(valor(i.sp+1));
case 32: return cosh(valor(i.sp+1));
case 33: return log10(valor(i.sp+1));

default: printf("Bug!\n"); exit(1);
}
}
float evalua(char *i, float xpar, float ypar)
{
x=xpar; y=ypar;
return valor(i+2);
}
float evaluax(char *i,float xpar)
{
x=xpar; xpar=valor(i+2);
return xpar;
}
float evaluay(char *i,float ypar)
{
y=ypar; return valor(i+2);
}
static sub(char *s, char *sd, char *d, char *i)
{
char temp;
union bifronte id;
if(traduce(s,i,d+2)) return 1;
(*(d+1))++; temp=*(d+*(d+1));
if(traduce(i+1,sd,d+*(d+1)+1)) return 1;
*(d-1)=*(d+1)+1+*(d+(*(d+1)));
*(d+*(d+1))=temp; (*(d+1))++;
if((*(d+2)==0)&&(*(d+*(d+1))==0))
{*(d-1)=5; id.sp=d+1; *id.f=valor(d+1); *d=0;};
return 0;
}
traducecad(char *s,char *d)
{
char *sd;

for(sd=s;*sd!=0;sd++) {};
return traduce(s,sd,d+1);
}
signo(char c)
{
return ((c=='+')||(c=='-')||(c=='*')||(c=='/'));
}
traduce(char *s, char *sd, char *d)
{
int maxpar,terpar,pars,j;
char *i,trans;
union bifronte id;
#define CUANFUNC 12
char func[CUANFUNC][7]=

{"log","sin","cos","tan","asin","acos","atan","exp","fabs","sinh","cosh","log10"};

terpar=1; pars=0; maxpar=0;
for(i=s;i<(sd-pars);i++) {
if(*i=='(') pars++; else
{
if(terpar) {maxpar=pars; terpar=0;};
if(*i==')') {pars--; if(pars<maxpar) maxpar=pars; if(pars<0) return 1;};
}
};
s=s+maxpar; sd=sd-maxpar;
if(sd==(s+1)) { if(*s=='x')
{*d=1; *(d-1)=1; return 0; };
if(*s=='y') {*d=2; *(d-1)=1; return 0; };
};
pars=0;
for(i=sd-1;(i>=s) && ((*i!='+')||(pars!=0));i--) {
if(*i=='(') pars++; else if(*i==')') pars--; };
if(i>=s) {
*d=16; return sub(s,sd,d,i);
};
pars=0;
for(i=sd-1;(i>s) && ((*i!='-')||(pars!=0)||signo(*(i-1)));i--) {
if(*i=='(') pars++; else if(*i==')') pars--; };
if(i>s) {
*d=17; return sub(s,sd,d,i);
};
if(*s=='-') {
if(traduce(s+1,sd,d+1)) return 1;
*(d-1)=(*d)+1; *d=18;
return 0;
};
pars=0;
for(i=sd-1;(i>=s) && ((*i!='*')||(pars!=0));i--) {
if(*i=='(') pars++; else if(*i==')') pars--; };
if(i>=s) {
*d=19; return sub(s,sd,d,i);
};
pars=0;
for(i=sd-1;(i>=s) && ((*i!='/')||(pars!=0));i--) {
if(*i=='(') pars++; else if(*i==')') pars--; };
if(i>=s) {
*d=20; return sub(s,sd,d,i);
};
pars=0;
for(i=sd-1;(i>=s) && ((*i!='^')||(pars!=0));i--) {
if(*i=='(') pars++; else if(*i==')') pars--; };
if(i>=s) {
*d=21; return sub(s,sd,d,i);
};
if(isdigit(*s)||(*s=='.')) {
*d=0; *(d-1)=5;
id.sp=d+1; trans=*sd; *sd=0; *id.f=atof(s); *sd=trans;
return 0;};
for(i=s;(i<sd)&&(*i!='(');i++) {};
if(i==sd) return 1;
*i=0;
for(j=0;(j<=CUANFUNC)&&strcmp(s,func[j]);j++) {};
if(j>CUANFUNC) return 1;
*i='(';
if(traduce(i,sd,d+1)) return 1;
*(d-1)=(*d)+1; *d=22+j;
return 0;
}
main()
{
char entr[255],s[255];
float f;
do{
printf("\n ingrese funcion :");
scanf("%s",entr); if(traducecad(entr,s)) exit(1);
printf("\n ingrese un numero:");
scanf("%f",&f);
printf("%f",evalua(s,f,0));
printf("\n otra funcion (s/n):");
} while(getch()=='s');
}
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