Eduadie
21-02-2013, 11:29
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:
/*
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;
}
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
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:
/*
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;
}
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