|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2012
Messaggi: 326
|
[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; int successo=0; int numeroCarte, differenza; int matrice[BASE][BASE]; int dobreak = 0; /*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;!dobreak && 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]); dobreak = 1; break; } matrice[i][j] = differenza; } } /*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; } 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 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Sì, credo che il problema sia srand. Il fatto è che, giustamente, inizializzi il seed a time(NULL), però questa chiamata, siccome passa troppo poco tempo tra un'esecuzione della funzione "algoritmo" e un'altra, restituisce sempre lo stesso valore.
Per risolvere metti l'istruzione srand nel main, prima del ciclo for. Ultima modifica di wingman87 : 21-02-2013 alle 12:06. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2012
Messaggi: 326
|
Molto gentile wingman, ho risolto perfettamente nel tuo modo.
Grazie ancora! ![]() Altra cosa se non ti dispiace: io ho una struct definita in un altro file. Nel main ho una parte di programma che mi crea un prodotto secondo quella struct: Codice:
prodotto1.codice = 000; prodotto1.nome = "prodotto1"; prodotto1.desc = "descrizione"; prodotto1.costo = 30; prodotto1.sconto = 10; Ultima modifica di Eduadie : 21-02-2013 alle 13:05. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:46.