Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - shulneos

#1
Programación C/C++ / Problema al devolver objeto
28 Noviembre 2014, 20:09 PM
Buenas tardes chic@s,

Estoy implementando un motor de inferencia y tengo un pequeño problema que me lleva mosqueado un par de días, así que acudo a vosotros para ver si alguien más experimentado que yo en c++ me puede dar indicaciones de donde estoy fallando.

El problema empieza en este método:


bool MotorDeInferencia::aplicar(Regla* r, Asociacion* as){
    cout << "MotorDeInferencia::aplicar()"<<endl;


    bool aplicada =bh->aplicar(r, as);  //<---------


    cout << "as.t" << as->t << endl;
    cout <<"Retornando al primer consecuente de la regla: " << r->getId()<<endl;;
    cout << "Valor: " << as->valor << endl;
    return aplicada;

}


El caso es que el objeto bh contenido en la clase MotorDeInferencia llama a su método aplicar. (el parámetro r es una regla con la que construiremos el objeto as).
Hasta ahí todo bien.

El siguiente método es el llamado anteriormente por bh y es aquí donde se construye el objeto.


bool BaseDeHechos::aplicar(Regla* r, Asociacion* as){
    cout << "BaseDeHechos::aplicar()"<<endl;
    vector<Asociacion> consecuentes=r->getConsecuente();
    if(consecuentes.size()==2 &&(isContenido(consecuentes[0])
                             || isContenido(consecuentes[1])))
        return false;
    if(consecuentes.size()==2 && isNegacion(consecuentes[0])){
        *as=consecuentes[1];
        return true;
    }       
    as=&consecuentes[0];

/* cout << "consecuentes.size:"<<consecuentes.size()<<endl;
    cout << "as->t" << as->t << endl;
    cout << "as->valor: " << as->valor << endl;*/

    return true;   
   
}


Este método muestra los valores correctos por pantalla, pero una vez que salimos de este método al de MotorDeInferencia, los accesos al objeto "as" dan valores sin sentido.

No logro entender porque pierdo el objeto al devolverlo. Agradezco muchísimo la ayuda que me pudiesen dar, he probado a cambiar de todo, tanto como cambiar los acceso a los objetos mediante punteros o sin ellos, a devolver en el return contenido[0] (Que es el que me interesa en esa regla), y muchas más cosas.

Saludos.

#2
Java / Duda con patrones en ER
25 Octubre 2013, 20:45 PM
Hola amigos, estoy diseñando un programa que lee cadenas y devuelve true o false si las acepta o no. La condición para que acepte las cadenas es que contengan una o más palabras concatenadas definidas. Estas son las palabras "TGATCA","TTCGAA","GGCC" Y "GGTACC", (por si a alguien le interesa son cuatro enzimas de ADN).

Bien pues para ello hago uso de la clase Matcher de este modo.

public static void main(String[] args) throws IOException {
//Validacion con Afd.
Afd automata = new Afd("adn.jff");
System.out.println("Introduzca una o varias cadenas separadas"
+ " por coma para su validación: \n");
Scanner consola = new Scanner(System.in);
String linea = consola.nextLine();
String[] listaCadenas = linea.split(",");
System.out.println("********Validación con Afd.********\n");
for (String cadena : listaCadenas) {
System.out.println("La cadena (" + cadena + ") ¿Es válida? "
+ ValidacionADN.esValida(automata, cadena));
if (ValidacionADN.esValida(automata, cadena) == false) {
System.out.println("estado: " + automata.getEstadoActual()
+ ", símbolo: " + automata.getSimboloActual());

}
}
//Validación con Matcher.
System.out.println("********Validacion con Matcher********");


Pattern patEnzimas= Pattern.compile("[[GGCC]*|[GGTACC]*|[TTCGAA]*|[TGATCA]*]+"); // ESTA ES LA LÍNEA QUE TENGO MAL


for (String cadena: listaCadenas){
Matcher matEnzimas= patEnzimas.matcher(cadena);
System.out.println("¿Es válida la cadena ("+cadena+")?"+matEnzimas.matches());
}

}


Mi pregunta es ¿Qué patrón debo pasarle para que me devuelva true si la cadena de entrada es una composición de una o más cadenas descritas anteriormente?



#3
Programación C/C++ / Problema con índices
11 Agosto 2013, 22:49 PM
Hola amigos, estoy teniendo un problema al definir una función, este es el codigo:
typedef struct {int *v; int n;}ArrayRep;
typedef ArrayRep *ArrayAp;

// Crea y devuelve un subarray del array a comprendido
// entre los índices i y j.
// Req: 1<=i<=j<=ArrayTam(a)
Array ArrayCreaSubarray(Array a, int i, int j)
{     
       ArrayAp ap=a;
       ArrayAp a2=ArrayCrea(j-i+1);
       for (int x=0; x<j-i+1;x++)   a2->v[x]=ap->v[i+x-1];
       return a2;
}

El problema es que no crea el subarray desde el índice i al indice j sino que genera un array con los primeros i-j+1 elementos.
Por ejemplo:
Si el array a fuese: 1 2 3 4 5 6.
Los enteros i y j fuesen: 2 y 4.
El array correcto sería:2 3 4 sin embargo se crea el 1 2 3.

Espero que alguien me pueda ayudar.
#4
Programación C/C++ / Problema de compilación
8 Agosto 2013, 22:01 PM
Hola buenas estoy empezando en esto de la programación y en la carrera nos piden que definamos una estructura llamada Array, y posteriormente definamos unas funciones. El problema lo tengo a la hora de definir la función ya que me tira error de compilación en la linea donde se define la función. Este es el código.

// Crea y devuelve un array de tamaño n = lsup-linf+1
// con los números enteros comprendidos entre los límites
// linf y lsup, asignados al array de forma aleatoria entre los
// índices 1 y n. El array contendrá finalmente una
// permutación con los números enteros comprendidos entre
// dichos límites.
// Req: linf<=lsup
struct Array {int *v; int n;};

Array ArrayCreaAleatorio(int linf, int lsup;)
{
     Array a;
     a.n=lsup-linf+1;
     a.v=malloc(sizeof(Array)*a.n);
     for (int i=0; i<a.n;i++)
         a.v[i]=linf+i;
     for (int j=0;j<=a.n-2;j++)
     {
         int k=EnteroAleatorio(j+1,a.n-1);
         int aux=a.v[j];
         a.v[j]=a.v[k];
         a.v[k]=aux;
     }
     return a;      
}


Si alguien me puede decir donde la estoy jodiendo, le estaría muy agradecido.