
Originariamente Scritto da
Skywolf
Adesso non stampo più la funzione.
Creo una variabile out, le assegno il valore di ritorno della funzione.
E stampo out.
Il risultato?
Non più 0.
46.
C'è qualcosa che non va, decisamente.
Eccovi il codice:
nel main (è troppo lungo e fottesegate) (tanto il punto non è se sia corretto quello che fa, il punto è che i valori dovrebbero essere uguali)
inputType xx[2];
double out;
for(i=0;i<3;i++){
printf("\n introduci x : ");scanf("%lf",&xx[0]);
printf("\n introduci y : ");scanf("%lf",&xx[1]);
out = calculateOutput(&model, xx, 2);
printf("\n Output = %lf",out);
}
le routine:
double calculateNodeOutput(Node *thisNode, double *input, unsigned int inputSize){
unsigned int i;
double out;
printf("\nCalculating output: %d %d %d %lf %lf",(*thisNode).depth,(*thisNode).isLeaf,(*(*this Node).parent).nextCondition.index,(*(*thisNode).pa rent).nextCondition.threshold,(*thisNode).nodeOutp ut);
out = (*thisNode).nodeOutput;
return out;
}
double calculateOutput(Tree *tree, double *input, unsigned int inputSize){
unsigned int i = 0;
Node *thisNode;
double out;
thisNode = &(*tree).root;
while((*thisNode).isLeaf == false){
i = (*thisNode).nextCondition.index;
if (i<0 || i>= inputSize){
fprintf(stderr,"\n Errore nel calcolo dell'output: indice di nodo pari a %d, massimo %d",i,inputSize);
exit(1);
}
if(input[i]<(*thisNode).nextCondition.threshold){
thisNode = (*thisNode).leftSon; /*printf("\nfollowing route left");*/}
else{
thisNode = (*thisNode).rightSon; /*printf("\nfollowing route right");*/}
}
out = (*thisNode).nodeOutput = calculateNodeOutput(thisNode, input, inputSize);
printf("\nCalculating output: %d %d %d %lf %lf",(*thisNode).depth,(*thisNode).isLeaf,(*(*this Node).parent).nextCondition.index,(*(*thisNode).pa rent).nextCondition.threshold,out);
return out;
}