Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    [c] problema numeri random

    Salve a tutti ragazzi, avrei un problema nel programma in c che ora vi riporto.
    Credo che il problema sia con la funzione srand() poichè in questo programma creato dovrei generare 5 basi di un triangolo di carte con numeri compresi tra 1 e 15, solo che queste 5 basi sono tutte uguali...Questo è il main del programma:

    codice:
    /*
    Algoritmo che controlla se da un array di 5 interi generati a caso è possibile costruitire un triangolo di carte.
    Il gioco richiede che ogni carta sia la differenza tra le due carte che le stanno immediatamente sotto, a sinistra e a destra.
    E' possibile utilizzare 15 carte.
    Inputs:
    Outputs:
    Costrutti Ripetitivi:
    Complessità di tempo:
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    #include "function.h"
    
    int algoritmo (int esecuzione);
    
    void main()
    {
        int i;
        int testMassimi = 5; //Test per la verifica dell'algoritmo
    
        for(i=0;i<testMassimi;i++)
        {
            if(algoritmo(i) == 1) //Esce se si ottiene un successo
            {break;}
        }
    }
    
    /*Algoritmo*/
    int algoritmo (int esecuzione)
    {
        /*Definizioni variabili*/
        int i,j, nuovo, risultato;
        int successo=0;
        int numeroCarte, differenza;
        int matrice[BASE][BASE];
    
        /*Conto le carte*/
        numeroCarte = contaCarte(BASE);
    
    
        for(i=0;i<BASE;i++)
        {
            for(j=0;j<BASE;j++)
            {
                matrice[i][j] = 0;
            }
        }
    
        /*
        //Valori immessi a mano per testare l'esempio del prof
        matrice[0][0] = 6;
        matrice[0][1] = 14;
        matrice[0][2] = 15;
        matrice[0][3] = 3;
        matrice[0][4] = 13;
        */
    
        /*Inserisco il primo valore nella matrice alla base, valore compreso tra 1 e 15*/
        srand(time(NULL));
        matrice[0][0] = (1 + (rand() % numeroCarte));
    
        /*Riempio la base della matrice con altri valori, passandoli per la funzione isPresent per verifare se sono già presenti*/
        for(j=1;j<BASE;j++)
        {
            nuovo = (1 + (rand() % numeroCarte));
            while (isPresent(matrice,nuovo) != 0)
            {
                nuovo = (1 + rand() % numeroCarte);
            }
            matrice[0][j] = nuovo;
        }
    
        /*
        for(i=0; i<BASE; i++)
        {
            for(j=0;j<BASE;j++)
            {
                if(matrice[i][j] != 0)
                printf("%3d", matrice[i][j]);
            }
            printf("\n");
        }
        */
    
        /*Calcola le carti successive dopo aver generato la base, terminandolo se si presenta una carta già presente (isPresent)*/
        for (i=1;i<BASE;i++)
        {
            for(j=0;j<BASE - i;j++)
            {
                differenza = abs(matrice[i-1][j] - matrice[i-1][j+1]);
                if(isPresent(matrice, differenza) != 0)
                {
                    printf("Esecuzione: %d; la Carta %d ottenuta dalle carte %d e %d e' gia' presente\n", esecuzione, differenza, matrice[i-1][j], matrice[i-1][j+1]);
                    break;
                }
                matrice[i][j] = differenza;
            }
            if(isPresent(matrice, differenza) != 0)
            break;
        }
    
        /*Se ho completato tutto(matrice triangolare inferiore) ho avuto successo*/
        if(matrice[BASE-1][0] != 0)
        {
            printf("Esecuzione: %d; le Carte generate sono tutte diverse tra loro ed e' possibile costruire il triangolo\n", esecuzione);
            successo = 1;
            stampaTriangolo(matrice);
        }
    
        return successo;
    }
    Dove potrebbe essere il problema? Mi genera 5 basi di numeri tutte uguali...
    Ho anche un altro file function.h, ma credo che il problema sia qui...con il seed della funzione srand o qualcosa del genere...qualcuno sa aiutarmi?
    Grazie

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Non va...mi genera sempre numeri uguali...sto impazzendo...

  4. #4
    Dove lo vedi che i numeri sono sempre uguali? Non è che li stai memorizzando nel posto sbagliato? Posta un esempio semplice e compilabile che riproduca il problema.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Risolto, grazie lo stesso!
    Bastava settare il seed nel main prima del for!
    Grazie!

  6. #6
    Originariamente inviato da Eduadie
    Risolto, grazie lo stesso!
    Bastava settare il seed nel main prima del for!
    E io che avevo detto?

    Originariamente inviato da ESSE-EFFE
    Prova a richiamare srand solo una volta, all'avvio del programma.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Originariamente inviato da ESSE-EFFE
    E io che avevo detto?
    eheheh scusami ho capito io male.
    Avevo capito all'inizio della function.
    Puoi aiutarmi anche in un altro post che ho aperto? E' ancora più semplice

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.