WTF (C coding inside)(sì dai lullatemi, la fitta sassaiola di STOCAZZO)(PD^infinito)

Risultati da 1 a 20 di 29

Discussione: WTF (C coding inside)(sì dai lullatemi, la fitta sassaiola di STOCAZZO)(PD^infinito)

Visualizzazione Elencata

Messaggio precedente Messaggio precedente   Nuovo messaggio Nuovo messaggio
  1. #21
    Dott. Ing. Lup. Mann. L'avatar di LordOrion
    Data Registrazione
    Jan 2016
    Località
    Ducato di Massa E Carrara (caput mundi)
    Messaggi
    21.013
    Gamer IDs

    Gamertag: SSerponi76 PSN ID: SSerponi76 Steam ID: SSerponi76

    Re: WTF (C coding inside)(sì dai lullatemi, la fitta sassaiola di STOCAZZO)(PD^infini

    Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
    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;
    }

    Innanzitutto, evita di usare la sintassi (*p).x per accedere ai campi di una struttura tramite il puntatore, e' un pugno in un occhio.
    Usa l'operatore freccia che e' piu' leggibile e si puo' usare in cascata senza usare ventordicimila parentesi e asterischi:

    Codice:
    (*thisNode).isLeaf   // NO (bellamerdah)
    thisNode->isLeaf  // Si
    
    (*(*thisNode).parent).nextCondition.index ... // NO!
    thisNode->parent->nextCondition.index ... // Si
    Torno a chiedere, calculateNodeOutput e calculateOutput sono dichiarate prima del main?
    Se non e' cosi' c'e' il rischio che all'atto della chiamata nel main, per il compilatore calculateOutput abbia firma

    Codice:
    int calculateOutput( void )
    Cosa che spiegherebbe perche' stampando direttamente il valore ritornato dalla printf senza passare dalla variabile ti stampa zero:
    In pratica prende solo una parte del valore ritornato dallo stack (int e' piu' piccolo di un double) e poi lo passa alla printf.

    Se ho ragione ti basta dichiarare le due routine prima del main o mettere prima il prototipo (forward declaration) es:

    Codice:
    double calculateNodeOutput( Node *thisNode, double *input, unsigned int inputSize );
    double calculateOutput ( Tree *tree, double *input, unsigned int inputSize );
    
    int main ( void ) {
       /* robba */
    }

    Mi piacerebbe (se possibile) vedere tutto il codice... magari piemmami.
    Ultima modifica di LordOrion; 15-01-22 alle 22:56

    +
    22.437 Messaggi dillà...
    Il mio blog: Notti a (Video)Giocare <- (100% ADS FREE!!)
    CPU: i7-11700K@5GHz|GPU: RTX-4070 Super Trinity |RAM: 64GB DDR4@3200MHz|SSD: 970EVO Plus + 2x 980 Pro|HOTAS Warthog|TrackIR 5|

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Chi Siamo
Forum ufficiale della rivista
The Games Machine
Seguici su