[c] Creazione di una tabella

di il
4 risposte

[c] Creazione di una tabella

Avrei bisogno di un aiuto.
So che non è forse il modo migliore quello utilizzato da me, avrei bisogno di creare una tabella automatica a seconda del numero digitato dall'utente (max 5) che mi generi una tabella di tutte le combinazioni possibili (esempio specifico è quello delle combinazioni di una schedina, quindi con 3 elementi).
Sono arrivato ad un codice che immettendo 1 o 2 funziona perfettamente ma appena inserisco 3 il codice mi va in loop e non capisco il perchè. Tramite il debug ho notato che mettendo 3 e arrivato all'ultima riga da creare la variabile k che è uguale a combinazioni / pow(3,i+1) diventa 0 e credo che sia questo il motivo del loop ma non capisco perchè...a me sembra tutto giusto.

La funzione che permette tutto questo è la seguente:

void genera_tabella(int tabella_schedina[][SIZE_C], int combinazioni, int numeropartite)
{
    int i, j, fine, k;
    for(i=0;i<numeropartite;i++)
    {
        fine = 0;
        j=0;
        k = combinazioni / pow(3, i+1);
        while(j < combinazioni)
        {
            fine += k;
            while(j < fine)
            {
                tabella_schedina[i][j] = 1;
                j++;
            }
            fine += k;
            while(j < fine)
            {
                tabella_schedina[i][j] = 0;
                j++;
            }
            fine += k;
            while(j<fine)
            {
                tabella_schedina[i][j] = 2;
                j++;
            }
        }
    }
}
Ripeto so che forse non è il metodo giusto però al momento a me interessa riuscirci e dopo migliorarlo
Se volete qualche altra parte di codice chiedete pure.

Grazie!

4 Risposte

  • Re: [c] Creazione di una tabella

    Ciao Eduadie, secondo me k è uguale a zero perchè l'hai dichiarata int invece che in virgola mobile. Quando inserisci il numero 3, k diventa 3/(3)^1=1 poi 3/(3)^2=0.5 però dichiarando k come int risulta zero e basta, l'ultimo loop risulta 3/(3)^3=0.11111 di conseguenza il valore di k risulta zero. Prova a stampare a video il valore di k subito dopo
    
    
     k = combinazioni / pow(3, i+1);
    
    


    per verificare il valore effettivo di k.

    Poi ti consiglio di inizializzare le variabili a zero cosi sei sicuro che non contengono valori strani.
  • Re: [c] Creazione di una tabella

    Dichiarandola come float, risulta tutto corretto.
    Ma non mi spiego una cosa.
    Io ho che combinazioni mi è uguale a 3^numeropartite (nel caso di 3 partite io ho che combinazioni è uguale a 27) quindi arrivato al punto in cui mi andava in loop non dovrebbe essere 3 / 3^3 ma 27 / 3^3.
    Dov'è che mi perdo o sbaglio? o.O

    PS Sembra che il codice non sia stato scritto da me xD, invece l'ho scritto interamente io perciò non capisco xD
  • Re: [c] Creazione di una tabella

    Si hai ragione ho sbagliato io. Nel codice non c'e il valore di combinazioni quindi avevo capito che erano 3 leggendo il post scusami! La funzione pow riceve 2 variabili di tipo double e restituisce 1 valore double quindi dichiarando k come int non funzionava bene. Adesso modificando k come float ti funzionava correttamente.
  • Re: [c] Creazione di una tabella

    Perfetto.
    Ora mi è tutto più chiaro.
    Sei stato gentilissimo grazie
Devi accedere o registrarti per scrivere nel forum
4 risposte