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

problemas al compilar este programa

Estas en el tema de problemas al compilar este programa en el foro de C/C++ en Foros del Web. Hola, llevo varios días tratando de compilar este programa y ya no sé si falla por la cabecera, el cuerpo o la llamada a la ...
  #1 (permalink)  
Antiguo 09/03/2007, 06:07
 
Fecha de Ingreso: marzo-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta problemas al compilar este programa

Hola, llevo varios días tratando de compilar este programa y ya no sé si falla por la cabecera, el cuerpo o la llamada a la función
y el cuerpo de la funcion es:

bool probar (THipotesis &hipotesis, TLista &lista,bool &obs_requeridas, Tipo_Observacion *observaciones_requeridas, FILE *f_bch)
{
ofstream fichin1;
char regla[200];
bool res=true;
bool encontrado=false;
Tipo_Observacion *aux;
Tipo_Observacion *nueva;
int digitos_regla;
int i=0;
int comp;
int j=0; //para indicar de que al menos ha cogido una regla concluyente
char num_regla[4];
char c;
fichin1.open("inferencia.txt",ios::app);
fichin1<<"probar(hipotesis, observaciones -> prueba, observaciones_requeridas)"<<endl<<endl;

if (observaciones_requeridas!=NULL)
{
aux = lista.observaciones;
while ((aux!=NULL) && (!encontrado))
{
comp = strcmp (observaciones_requeridas->atributo, aux->atributo);
if (comp==0)
{
comp = strcmp (observaciones_requeridas->concepto, aux->concepto);
if (comp==0)
{
comp = strcmp (observaciones_requeridas->valor, aux->valor);
if (comp==0)
{
encontrado=true;
fichin1 <<"prueba = VERDADERO"<<endl<<endl;
fichin1.close();
return true;
}
else
{
encontrado=true;
fichin1 <<"prueba = FALSO"<<endl<<endl;
fichin1.close();
return false;
}
}
}
aux=aux->siguiente;
}
if (aux==NULL)
{
cout << "ERROR: Excepción grave en la funcion probar\n"<<endl;
exit(1);
}
}
else //prueba = desconocido
{
fichin1 << "Reglas que concluyen sobre "<<hipotesis.atributo<<" ("<<hipotesis.concepto<<") = "<<hipotesis.valor<<": "<<endl<<endl;
while ((!feof(f_bch))) // para coger todas las reglas que concluyen
{
while ((!feof(f_bch)) && (res))
{
res = formato_inicio_bc (f_bch, 'h', num_regla, digitos_regla);
i=0;
c = getc(f_bch);
c = tolower(c);
while ((!feof(f_bch)) && (i!=hipotesis.longatributo) && c(!='\n'))
{
if ((hipotesis.atributo[i]==c) && (i<hipotesis.longatributo))
{
i++;
c = getc(f_bch);
c = tolower(c);
}
else
{
i=0;
c = getc(f_bch);
c = tolower(c);
}
}
if (i==hipotesis.longatributo) //busco el concepto
{
i=0;
while (!feof(f_bch) && (i!=hipotesis.longconcepto) && c(!='\n'))
{
if ((hipotesis.atributo[i]==c) && (i<hipotesis.longconcepto))
{
i++;
c = getc(f_bch);
c = tolower(c);
}
else
{
i=0;
c = getc(f_bch);
c = tolower(c);
}
}
if (i==hipotesis.longconcepto) //busco el valor
{
i=0;
while (!feof(f_bch) && (i!=hipotesis.longvalor) && c(!='\n'))
{
if ((hipotesis.atributo[i]==c) && (i<hipotesis.longvalor))
{
i++;
c = getc(f_bch);
c = tolower(c);
}
else
{
i=0;
c = getc(f_bch);
c = tolower(c);
}
}
if (i==hipotesis.longvalor)
{
j++;
rewind(f_bch); //ponemos al principio el puntero
//buscamos la regla
i=0;
c = getc(f_bch);
c = tolower(c);
while (i!=digitos_regla)
{
if ((num_regla[i]==c) && (i<digitos_regla))
{
i++;
c = getc(f_bch);
c = tolower(c);
}
else
{
i=0;
c = getc(f_bch);
c = tolower(c);
}
}
i=0;
while (c!='\n')
{
regla[i]=c;
c = getc(f_bch);
c = tolower(c);
i++;
regla[i]='\0';
}
fichin1 <<"H"<<num_regla<<regla<<endl<<endl;
rewind(f_bch);
i=0;
c = getc(f_bch);
c = tolower(c);
while (i!=digitos_regla)
{
if ((num_regla[i]==c) && (i<digitos_regla))
{
i++;
c = getc(f_bch);
c = tolower(c);
}
else
{
i=0;
c = getc(f_bch);
c = tolower(c);
}
}
c='^';
while (c=='^')
{
nueva = new Tipo_Observacion;
c = getc(f_bch);
c = tolower(c);
while ((c==' '))
{
c = getc(f_bch);;
c = tolower(c);
}
i = 0;
while ((c!=' ') && (c!='('))
{
nueva->atributo[i]=c;
i++;
c = getc(f_bch);
c = tolower(c);
nueva->atributo[i]= '\0';
}
while ((c==' ') && (c!='('))
{
c = getc(f_bch);
c = tolower(c);
}
i = 0;
while ((c!=')') && (c!=' '))
{
nueva->concepto[i]=c;
hipotesis.longconcepto++;
i++;
c = getc(f_bch);
c = tolower(c);
nueva->concepto[i]= '\0';
}

if ((c==')') || (c==' '))
{
if (c==' ')
{
while ((c==' '))
{
c = getc(f_bch);
c = tolower(c);
}
}
if (c==')')
{
c = getc(f_bch);
c = tolower(c);
while ((c==' ') || (c=='='))
{
c = getc(f_bch);
c = tolower(c);
}
i=0;
while ((c!=' ') && (c!='-') && (c!='^'))
{
nueva->valor[i]=c;
i++;
c = getc(f_bch);
c = tolower(c);
nueva->valor[i]= '\0';
}
//buscamos si hay mas atributos en el antecedente
while ((c!='^') && (c!='-'))
{
c = getc(f_bch);
c = tolower(c);
}
nueva->siguiente=NULL;
if (observaciones_requeridas=NULL)
{
observaciones_requeridas = nueva;
}
else
{
aux=observaciones_requeridas;
while (aux->siguiente!=NULL)
{
aux=aux->siguiente;
}
aux->siguiente = nueva;
}
}
}
}
}
}
}
}
}
if ((feof(f_bch)) && (j==0))
{
cout << "ERROR: No se estan metiendo las reglas en la BC Heuristica de manera correcta\n"<<endl;
obs_requeridas = false;
fichin1.close();
remove("inferencia.txt");
return false;
}
else //ha cogido reglas y prueba = desconocido
{
rewind(f_bch); //ponemos al principio el puntero
fichin1 <<"prueba = DESCONOCIDO"<<endl<<endl;
fichin1.close();
obs_requeridas = true;
return false;
}
}
}

Espero que alguien me pudiera ayudar, gracias!
  #2 (permalink)  
Antiguo 09/03/2007, 06:07
 
Fecha de Ingreso: marzo-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: problemas al compilar este programa

los errores que me da son estos:

In function `bool probar(THipotesis&, TLista&, bool&, Tipo_Observacion*, FILE*)':
123 syntax error before `!=' token
131 syntax error before `else'
141 `!=' token
At global scope:
156 syntax error before `if'
164 ISO C++ forbids declaration of `c' with no type
164 `f_bch' was not declared in this scope
165 ISO C++ forbids declaration of `c' with no type
165 redefinition of `int c'
164 `int c' previously defined here
166 syntax error before `}' token
--- estos errores se repiten muchas veces

la cabecera de la funcion es:

bool probar (THipotesis &hipotesis, TLista &lista,bool &obs_requeridas, Tipo_Observacion *observaciones_requeridas, FILE *f_bch);

la llamada a la funcion la hago así:
res = probar (hipotesis, lista, obs_requeridas, observaciones_requeridas, f_bch);

los tipos usados son:
struct THipotesis {
char concepto[10];
int longconcepto;
char atributo[20];
int longatributo;
char valor[30];
int longvalor;
};
struct Tipo_Observacion {
/* Lista Observaciones */
char concepto[10];
char atributo[20];
char valor[30];
Tipo_Observacion *siguiente;
};
struct TLista
{
Tipo_Observacion *observaciones; // Puntero al primer elemento de la lista de observaciones
THipotesis *conj_hipotesis; // Puntero al primer elemento de la lista de hipotesis
};
  #3 (permalink)  
Antiguo 09/03/2007, 07:09
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: problemas al compilar este programa

Hay que poner un poco, mas, de esfuerzo:

while ((!feof(f_bch)) && (i!=hipotesis.longatributo) && c(!='\n'))

while ((!feof(f_bch)) && (i!=hipotesis.longatributo) && (c!='\n'))

Lo mismo:
while (!feof(f_bch) && (i!=hipotesis.longconcepto) && c(!='\n'))

while (!feof(f_bch) && (i!=hipotesis.longconcepto) && (c!='\n'))

Supongo que habras hecho copy/paste
while (!feof(f_bch) && (i!=hipotesis.longvalor) && c(!='\n'))

while (!feof(f_bch) && (i!=hipotesis.longvalor) && (c!='\n'))


Esos son los errores que tengo, no se que IDE usas pero con Visual Studio te lleva a la linea del error y lo hubieras visto en 30'', ademas de la llamada a formato_inicio_bc que obviamente no tengo. Ojo con probar que no siempre devuelve un valor en todos los casos y mas ojo con digitos_regla que lo usas sin haberlo inicializado (ambos warnings de VC++).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 11/03/2007, 15:27
 
Fecha de Ingreso: marzo-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: problemas al compilar este programa

gracias!, la verdad que no sé si hubiese encontrado el error porque el devc++ me estaba volviendo loco, quizá tenga que instalar el que dices.
  #5 (permalink)  
Antiguo 12/03/2007, 16:27
 
Fecha de Ingreso: marzo-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: problemas al compilar este programa

Siguiendo a la linea de este código, a la hora de ejecutar el programa se me queda colgado por un problema de punteros, dentro de esta funcion probar estoy usando el puntero observaciones_requeridas, y cuando saco por pantalla sus atributos, pro ejemplo:

cout<<observaciones_requeridas->concepto;

me saca el valor correspondiente...

Pero cuando hago esto mismo en la función llamante:

Tipo_Observacion *observaciones_requeridas = NULL;
.....

while (obs_requeridas)
{
res = probar (hipotesis, lista, obs_requeridas, observaciones_requeridas, f_bch, paso);
cout<<observaciones_requeridas->concepto;
if (res) //prueba = verdadero
{
return;
//refinar (hipotesis, lista, f_bcj, paso);
}
else
{
if (obs_requeridas)
adquirir (lista, observaciones_requeridas, f_bca, paso);
}
}

Se me peta el programa, tendría que inicializar, reservar memoria de alguna forma?, no sé donde puede estar el problema.
  #6 (permalink)  
Antiguo 12/03/2007, 16:32
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: problemas al compilar este programa

Comproba la direccion de observaciones_requeridas, TIENE que ser 0 ya que la inicializas a ese valor y la pasas como puntero, con lo cual en probar es una variable local, para poder modificar esta variable tenes que usar un doble puntero o una referencia.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 12/03/2007, 16:40
 
Fecha de Ingreso: marzo-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: problemas al compilar este programa

Según tu respuesta entiendo, que después de probar, observaciones_requeridas sigue siendo NULL (o '0' como tú dices), ¿no? y que para poder modificar esta variable y tenga almacenado lo que quiero necesito referenciarla o hacer uso de un doble puntero, pero lo de referenciarlo no me queda muy claro y lo de doble puntero no sé a que te refieres exactamente porque nunca los he llegado a usar.

Gracias por tu paciencia.
  #8 (permalink)  
Antiguo 12/03/2007, 16:59
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: problemas al compilar este programa

Exacto y te lo voy a dar con un ejemplo muy simple:

Código:
#include <stdio.h>

void prueba(int *num)
{
  int *x = new int;
  *x = 33;
  num = x;
}

void prueba2(int **num)
{
  int *x = new int;
  *x = 33;
  *num = x;
}

void prueba3(int *&num)
{
  int *x = new int;
  *x = 66;
  num = x;
}

void main()
{
  int *num = 0;
  //como lo estas haciendo
  printf("0x%X\r\n", num);
  prueba(num);
  printf("0x%X\r\n", num);

  //doble puntero
  prueba2(&num);
  printf("0x%X\r\n", num);
  printf("%d\r\n", *num);

  //referencia a puntero
  prueba3(num);
  printf("0x%X\r\n", num);
  printf("%d\r\n", *num);
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 04:22.