Scusate ragazzi... credo di conoscere già la risposta (che mi fa paura, spero non sia come penso io..), ma ho un problema...
Ho lasciato perdere l'ordinamento tanto la traccia non me lo chiede e il software alla fine funziona uguale.. il mio problema è questo:
La generazione, che prima avveniva nel main, ora avviene in una function chiamata appunto genera.
Nel main invece ho questo:
1. Esegui la function genera
2. Stampa "Giocatore 1: "
3. Copia l'array CB nell'array G1
4. Stampa l'array G1
5. Esegui la function genera
6. Stampa "Giocatore 2: "
7. Copia l'array CB nell'array G2
8. Stampa l'array G2
...ecc, fino alla stampa dell'array G5 (il quinto giocatore).
Però il risultato non è quello desiderato.
Tutte le cartelle sono uguali alla prima.
Praticamente è come se CB non venisse azzerato (viene azzerato all'inizio della function genera) ne sovrascritto da nuovi numeri... o meglio, è come se la function genera() non venisse eseguita.
Come mai? Il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int rnd ,pos_riga;
int CB[4][9],G1[4][9],G2[4][9],G3[4][9],G4[4][9],G5[4][9];
int massimo_per_riga() { // funzione che controlla se nella riga ci sono 5 valori , in caso positivo restituisce true , altrimenti false
int i, cont=0;
for (i=0; i<9; i++) {
if (CB[pos_riga][i] != 0) cont++;
}
if (cont == 5) return 1;
else return 0;
}
int pieno(int appoggio) { // Se ci sono due valori diversi da 0 nella colonna appoggio allora restituisce true alrimenti false
int i, cont=0;
for (i = 0; i<3; i++) {
if (CB[i][appoggio] != 0) cont++;
}
if (cont == 2) return 1;
else return 0;
}
int inserisci (int appoggio) {
int i;
int continuo=1;
if (pieno(appoggio)) // se nella colonna ci sono già due valori allora false diretto
return 0;
else {
for (i = 0; i<3; i++) { // controllo se esiste il valore nella colonna indicata da appoggio
if (CB[i][appoggio] == rnd)
return 0;
} // se finisce il for significa che non esiste il valore rnd nella colonna appoggio
while (continuo) { // va a prendere la posizione della riga in cui non c'è già un valore nella colonna
pos_riga = rand()%3; // la riga deve essere casuale , almeno così è dall' immagine che mi hai dato
if (CB[pos_riga][appoggio] == 0)
break;
}
if (!massimo_per_riga()) return 1;
else return 0;
}
}
int genera() {
int i, j, appoggio;
for (i=0; i<3; i++) {
for (j=0; j<9; j++) {
CB[i][j]=0;}}
srand(time(NULL));
for (i=0; i<15; i++) { // 15 sta per quanti numeri devono essere inseriti nella matrice
rnd = 1+(rand()%90); // genera da 1 a 90
appoggio = (rnd-1)/10; // indicherà la colonna
if (appoggio == 9) appoggio = 8; // se il numero è 90 deve stare nella colonna 8
if (!inserisci(appoggio)) i--; // se non è stato inserito ripeti il ciclo
else {
CB[pos_riga][appoggio] = rnd;
}
}
// stampa();
}
int main () {
int i,j;
genera();
printf("\nGiocatore 1:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G1[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G1[i][j] == 0) printf("\t"); else printf("%d\t",G1[i][j]); }}
genera();
printf("\nGiocatore 2:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G2[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G2[i][j] == 0) printf("\t"); else printf("%d\t",G2[i][j]); }}
genera();
printf("\nGiocatore 3:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G3[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G3[i][j] == 0) printf("\t"); else printf("%d\t",G3[i][j]); }}
genera();
printf("\nGiocatore 4:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G4[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G4[i][j] == 0) printf("\t"); else printf("%d\t",G4[i][j]); }}
genera();
printf("\nGiocatore 5:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G5[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G5[i][j] == 0) printf("\t"); else printf("%d\t",G5[i][j]); }}
getch();
return 0 ;
}
void stampa()
{
int i,j;
printf("\nCartella base:\n");
for (i=0; i<3; i++){
printf("\n\n");
for (j=0; j<9; j++){
if (CB[i][j] == 0) printf("\t");
else printf("%d\t",CB[i][j]);
}
}
}
Tutte a me capitano? Mi sembra una cosa così banale, dal punto di vista logico.. perchè in C non deve funzionarmi mai niente??