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

Pagina 2 di 2 PrimaPrima 12
Risultati da 21 a 29 di 29

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

  1. #21
    Bannato
    Data Registrazione
    Jan 2016
    Messaggi
    18.979

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

    Prova a lasciare il codice tre giorni sul balcone!

  2. #22
    61,861 L'avatar di fulviuz
    Data Registrazione
    Jan 2016
    Località
    Trasferito a Borgo Panigale
    Messaggi
    16.233

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

    Hai dimenticato di castare la

  3. #23
    Dott. Ing. Lup. Mann. L'avatar di LordOrion
    Data Registrazione
    Jan 2016
    Località
    Ducato di Massa E Carrara (caput mundi)
    Messaggi
    20.219
    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|

  4. #24
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.162

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

    Sono dichiarate in uno header file, perché ho spezzato il progetto in più file: due contengono routine per l'allocazione dinamica di oggetti, uno per la generazione di numeri casuali (non ancora inclusa nel progetto), una col main e poca altra roba.

    se vuoi ti mando tutto ma è tanta robba

    a me la sintassi col punto piace il fatto di dover mettere gli * mi piace, perché ho il controllo (mi costringo ad avere il controllo) di quello che sto facendo: non posso confondere puntatori e oggetti puntati.

    - - - Aggiornato - - -

    Cmq c'è qualcosa che riguarda il memory managemnt, credo, perché cambiando righe di codice che in teoria centrano na sega cambia quello che stampa

  5. #25
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.162

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

    per non saper nè leggere nè scrivere ho aggiunto in testa al file c con le procedure dell'albero anche tutti i prototipi in teoria inutile perchè sono nel .h
    ma non va un cazzo lo stesso

  6. #26

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

    formatta
    oppure esci e rientra

  7. #27
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.162

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

    Ok, ho capito il problema.

    Avevo messo nel progetto (uso Pelles C) il C delle routine dell'albero, ma non l'h relativo.
    il codice girava lo stesso perché come secondo errore tutte le strutture dati erano definite nel sorgente col main.

    Ho spostato le typedef struct nell'header delle routine dell'albero, le ho tolte dal main, ho aggiunto il .h al progetto.

    Sembra andare.



    Ma che cazzo di bug signori.

  8. #28
    Dott. Ing. Lup. Mann. L'avatar di LordOrion
    Data Registrazione
    Jan 2016
    Località
    Ducato di Massa E Carrara (caput mundi)
    Messaggi
    20.219
    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
    Ok, ho capito il problema.

    Avevo messo nel progetto (uso Pelles C) il C delle routine dell'albero, ma non l'h relativo.
    il codice girava lo stesso perché come secondo errore tutte le strutture dati erano definite nel sorgente col main.

    Ho spostato le typedef struct nell'header delle routine dell'albero, le ho tolte dal main, ho aggiunto il .h al progetto.

    Sembra andare.



    Ma che cazzo di bug signori.



    - - - Aggiornato - - -

    Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
    a me la sintassi col punto piace il fatto di dover mettere gli * mi piace, perché ho il controllo (mi costringo ad avere il controllo) di quello che sto facendo:
    Usa l'operatore frecca per l'amore di Iddio!
    Dalla prima Pagina del capitolo su i puntatori del Kernighan & Ritchie:

    USATE IL CAZZO DI OPERATORE FRECCIA!
    Chiaro?

    Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
    non posso confondere puntatori e oggetti puntati.
    E' esattamente quello che fai con la freccia: oltretutto e' anche piu' chiaro cosa e' un puntatore e cosa no.

    +
    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|

  9. #29

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

    ecco il problema era che usavi il pellet

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