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

Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 20 di 29

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

  1. #1
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    per testare un programma che ho scritto, che dovrebbe implementare la struttura dati "albero di decisioni" in C (in C++ era più facile ma mi piace farmi male) ho messo nel main un codicillo che dovrebbe, ad apprendimento completato, stampare l'uscita dell'albero per gli ingressi che gli do io.

    Succede che l'uscita vale 0 per ogni scelta degli ingressi.
    Ma se mi faccio stampare l'albero vedo che a volte dovrebbe essere 0, a volte 1.

    Vedo per quale combinazione degli ingressi dovrebbe valere 1, ma niente.

    Controllo che segua i rami giusti dell'albero a seconda dell'ingresso: lo fa.

    Ma l'uscita è sbagliata.

    Disperato, vado nella routine che dovrebbe ricavare l'output dell'albero in funzione dell'input e, NELLA routine, mi faccio stampare l'output.


    E questo è giusto





    In pratica, sono nella seguente condizione (semplifico)


    main(){
    robba
    printf("%lf",calcolaOutput(parametri));
    }

    double calcolaOutput(parametri){
    robba
    return OutputNodoGiusto(parametri);
    }

    double OutputNodoGiusto(parametri){
    robba
    printf ("%lf",Output);
    return Output;
    }


    Dovrebbe stampare due volte la stessa cosa, no?




    No.


    Ultima modifica di Skywolf; 15-01-22 alle 18:53

  2. #2
    La Nonna L'avatar di Lux !
    Data Registrazione
    Jan 2016
    Messaggi
    76.865

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


  3. #3

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

    devi fare x alla meno milllllllllllllllle (cit.)

  4. #4
    Senior Member L'avatar di squallwii
    Data Registrazione
    Jan 2016
    Messaggi
    11.635

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

    Non è che passi per copia e non per reference?

    Per quello che ricordo di quella merda, se devi passare una struttura non passi lei ma il puntatore alla struttura.

  5. #5
    Min. della Prostituzione L'avatar di alastor
    Data Registrazione
    Jan 2016
    Messaggi
    15.604

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

    Citazione Originariamente Scritto da squallwii Visualizza Messaggio
    Non è che passi per copia e non per reference?

    Per quello che ricordo di quella merda, se devi passare una struttura non passi lei ma il puntatore alla struttura.
    grossomodo esto

    è un problema di variabile / riferimento a
    Ritenta, sarai più fortunato.

  6. #6
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    no, i parametri son tutti puntatori, punto uno.

    punto due, se passassi roba sbagliata, mi farebbe il calcolo sbagliato anche nella routine no?

    invece nella routine stampa una roba giusta. E poi è una sfilza di "return valore"

  7. #7
    Il Drago Dormiente L'avatar di Zhuge
    Data Registrazione
    Jan 2016
    Messaggi
    66.221
    Gamer IDs

    PSN ID: Zhuge1988 Steam ID: zhuge88

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

    Citazione Originariamente Scritto da Lux ! Visualizza Messaggio

    https://www.worldoftrucks.com/en/onl...e.php?id=92274
    Corsair iCue5000X RGB - Asus ROG-STRIX Z690 F-GAMING ARGB - Intel Core i7 12700K - Corsair iCue H150i Capellix RGB - 2X Corsair Dominator Platinum RGB DDR5 5600MHz 16GB - Samsung 980PRO M.2 1TB NVMe PCIe - PCS 1TBe SSD M.2 - Seagate Barracuda 2TB - Corsair 1000W RMx Series MOD. 80PLUS GOLD - Asus ROX-STRIX GEFORCE RTX3070Ti 8GB - Kit 4 ventole Corsair LL120 RGB LED - Windows 11 64bit

  8. #8
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    Citazione Originariamente Scritto da Zhuge Visualizza Messaggio
    ma COSA ridi pe' sto OLDUME

    AIUTAMI invece CAZZUOH

  9. #9
    Il Drago Dormiente L'avatar di Zhuge
    Data Registrazione
    Jan 2016
    Messaggi
    66.221
    Gamer IDs

    PSN ID: Zhuge1988 Steam ID: zhuge88

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

    Dilbert mi fa sempre riderissimo.

    https://www.worldoftrucks.com/en/onl...e.php?id=92274
    Corsair iCue5000X RGB - Asus ROG-STRIX Z690 F-GAMING ARGB - Intel Core i7 12700K - Corsair iCue H150i Capellix RGB - 2X Corsair Dominator Platinum RGB DDR5 5600MHz 16GB - Samsung 980PRO M.2 1TB NVMe PCIe - PCS 1TBe SSD M.2 - Seagate Barracuda 2TB - Corsair 1000W RMx Series MOD. 80PLUS GOLD - Asus ROX-STRIX GEFORCE RTX3070Ti 8GB - Kit 4 ventole Corsair LL120 RGB LED - Windows 11 64bit

  10. #10
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    sì ma è OLD

  11. #11
    Senior Member L'avatar di squallwii
    Data Registrazione
    Jan 2016
    Messaggi
    11.635

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

    Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
    no, i parametri son tutti puntatori, punto uno.

    punto due, se passassi roba sbagliata, mi farebbe il calcolo sbagliato anche nella routine no?

    invece nella routine stampa una roba giusta. E poi è una sfilza di "return valore"
    E allora niente, a sto punto debug e vedi subito il problema.
    Raccontato così sembra un problema di puntatori, se già li usi correttamente o metti il codice o usi debug e capisci subito quantomeno il livello dove tutto si perde

  12. #12
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    ma perché sembra un problema di puntatori?


    routine A dice: printeffami STOCAZZO(WHATEVVAH)

    routine STOCAZZO dice: ok, ti ritorno il valore di STACEPPA

    routine STACEPPA dice: ecco qua, ti ritorno il valore FOTTESEGA

    sono tutte dello stesso tipo, cioè potrei capire avessi definito una routine come double o int e l'altra come char, bool, allora magari fa casino nel cast di tipo.

    Ma routine A vuol stampare un double e chiama una routine double che chiama una routine double che ritorna un double. Tutto double.

    PORCOZZIO!!!

    - - - Aggiornato - - -

    Ho appena aggiunto una stampa dell'output anche nella routine intermedia (STOCAZZO) oltre che nella finale (STACEPPA), e il valore è lo stesso identico medesimo


  13. #13
    Senior Member L'avatar di squallwii
    Data Registrazione
    Jan 2016
    Messaggi
    11.635

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

    Sembra di puntatori perché se main passa una qualche cosa sotto, e la passa per copia, allora ciò che sta sotto mette gli 1 dove vuole, stampa gli 1, finisce e main non vede una sega di tutto ciò.

    Il che ovviamente è solo un'idea perché senza codice davanti, se uno mi dice che una funzione fa x, e sopra di sé nessuno vede nulla, io penso alle reference. Poi magari il problema è totalmente altrove.

    E vedendo il tuo ultimo edit sembra essere altro nella funzione intermedia.

    Cmq il discorso puntatori non riguarda il cast errato da double a int

  14. #14
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    sì ma io sto PRINTEFFANDO il RETURN VALUE delle funzioni.

    Fottesega se gli ho passato puntatori o valori no?

    La penultima riga di ogni funzione è OUT = qualcosa; (lo era: adesso, dopo questa istruzione ho aggiunto il printf)
    l'ultima riga è return OUT;

    e quello che fa il main è printeffare il valore di ritorno della funzione, precisamente così:
    printf("\n Output = %lf ",calculateOutput(&model, xx, 2));

    cosa c'entrano i puntatori?

  15. #15
    Senior Member L'avatar di squallwii
    Data Registrazione
    Jan 2016
    Messaggi
    11.635

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

    Nulla, se ritorni allora nulla

  16. #16
    Dott. Ing. Lup. Mann. L'avatar di LordOrion
    Data Registrazione
    Jan 2016
    Località
    Ducato di Massa E Carrara (caput mundi)
    Messaggi
    17.874
    Gamer IDs

    Gamertag: SSerponi76 PSN ID: SSerponi76 Steam ID: SSerponi76

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

    Citazione Originariamente Scritto da Skywolf Visualizza Messaggio
    per testare un programma che ho scritto, che dovrebbe implementare la struttura dati "albero di decisioni" in C (in C++ era più facile ma mi piace farmi male) ho messo nel main un codicillo che dovrebbe, ad apprendimento completato, stampare l'uscita dell'albero per gli ingressi che gli do io.

    Succede che l'uscita vale 0 per ogni scelta degli ingressi.
    Ma se mi faccio stampare l'albero vedo che a volte dovrebbe essere 0, a volte 1.

    Vedo per quale combinazione degli ingressi dovrebbe valere 1, ma niente.

    Controllo che segua i rami giusti dell'albero a seconda dell'ingresso: lo fa.

    Ma l'uscita è sbagliata.

    Disperato, vado nella routine che dovrebbe ricavare l'output dell'albero in funzione dell'input e, NELLA routine, mi faccio stampare l'output.


    E questo è giusto





    In pratica, sono nella seguente condizione (semplifico)


    main(){
    robba
    printf("%lf",calcolaOutput(parametri));
    }

    double calcolaOutput(parametri){
    robba
    return OutputNodoGiusto(parametri);
    }

    double OutputNodoGiusto(parametri){
    robba
    printf ("%lf",Output);
    return Output;
    }


    Dovrebbe stampare due volte la stessa cosa, no?




    No.


    Dacci il codice con l'esatta firma delle funzioni e la loro chiamata e la dichiarazione dei parametri che passi.
    Per capirci:

    Codice:
    int foo ( int pippo, double* pluto );
    {
      int cippa = ...
       /* robba; */
       retrurn cippa
    }
    
    void main ( void )
    {
       int param1;
       int risultato;
       double param2;
      
       risultato = foo( param1, &param2 );
    }
    Also, c'e' una forward declaration delle funzioni prima del main? Nell'ordine in cui le hai messe in C quel codice manco compila, o se compila potrebbe generare delle chiamate con firma scazzata.

    +
    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: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|

  17. #17
    Senior Member L'avatar di Given
    Data Registrazione
    Jan 2016
    Messaggi
    3.108
    Gamer IDs

    PSN ID: given1983 Steam ID: given1983

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

    Questa è la punizione per usare il C

  18. #18
    Senior Member L'avatar di pasquaz
    Data Registrazione
    Jan 2016
    Messaggi
    5.301

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

    sono sul cell e non ho tempo e voglia di leggere tutto approfonditamente.

    ma la tua disperazione mi ricorda un episodio che mi successe tempo fa:

    non sarà qualche double che fa strani scherzi?
    mi ricordo che un valore che avrebbe dovuto essere 3.0 in realtà era 3.0000000000001 con tutti i casini del caso.

  19. #19
    Dott. Ing. Lup. Mann. L'avatar di LordOrion
    Data Registrazione
    Jan 2016
    Località
    Ducato di Massa E Carrara (caput mundi)
    Messaggi
    17.874
    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 pasquaz Visualizza Messaggio
    sono sul cell e non ho tempo e voglia di leggere tutto approfonditamente.

    ma la tua disperazione mi ricorda un episodio che mi successe tempo fa:

    non sarà qualche double che fa strani scherzi?
    mi ricordo che un valore che avrebbe dovuto essere 3.0 in realtà era 3.0000000000001 con tutti i casini del caso.
    I casini del caso erano dovuti all'uso del == nei confronti?


    Inviato dal mio iPad utilizzando Tapatalk Pro

    +
    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: 980 Pro + 2x 970EVO Plus|HOTAS Warthog|TrackIR 5|

  20. #20
    Filastrocchiere di STOCAZ L'avatar di Skywolf
    Data Registrazione
    Jan 2016
    Messaggi
    7.068

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

    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;
    }

    Ultima modifica di Skywolf; 15-01-22 alle 21:05

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