Problema probabilità valori matrice

marcococ

Nuovo Utente
Salve , ho inizializzato le celle di una matrice con dei valori , ed in base a questi , ogni cella rappresenta un oggetto e un pericolo....
questo è il modo con il quale ho inizializzato la matrice di celle......
La cosa che non capisco è perchè quando vado a stampare la matrice la prima riga e la prima colonna hanno sempre gli stessi valori e sono uguali ...ad esempio :

[1,4] [1,4] [1,4] [1,4] [1,4]
[1,4] [1,5] [1,6] [2,5] [3,5]
[1,4] [1,6] [3,5] [1,5] [2,6]
[1,4] [2,5] [1,5] [2,4] [3,6]
[1,4] [3,5] [2,6] [3,6] [3,4]

così inizializzo la matrice ....
C:
//inizializzo Tipo_pericolo
for ( int i = 0; i < lato; i++) {
for ( int j= 0; j <lato; j++) {

int  prob1= rand()%101;
if (prob1<ness_per) {
scacchiera[i*lato+j].pericolo=nessun_pericolo;
} else if (ness_per<=prob1&&prob1<=ness_per+trapp) {
scacchiera[i*lato+j].pericolo=trappola;
} else if(prob1>=ness_per+trapp){
scacchiera[i*lato+j].pericolo=alieno;
}
}}

//inizializzo Tipo_oggetto


for ( i = 0; i < lato; i++) {
for ( j= 0; j <lato; j++) {
int prob2 =rand()%101;
if (prob2<no_obj) {
scacchiera[i*lato+j].oggetto=nessun_oggetto;
} else if (no_obj<=prob2&&prob2<no_obj+medik) {
scacchiera[i*lato+j].oggetto=medikit;
} else if (no_obj+medik<=prob2&&prob2<no_obj+medik +pozio)
scacchiera[i*lato+j].oggetto=pozione;
else if (no_obj+medik+pozio<=prob2&&prob2<no_obj+medik+pozio+mater)
scacchiera[i*lato+j].oggetto=materiale;
else if (no_obj+medik+pozio+mater<=prob2)
scacchiera[i*lato+j].oggetto=colpi_lanciarazzi;
}
}
 

Andretti60

Utente Èlite
3,257
2,144
Hardware Utente
Devi mostrare anche il codice che stampa la scacchiera.

Nel codice che hai postato c'e' un potenziale pericolo (che comunque non ha nella a che fare con il problema che hai), ossia hai una serie di istruzioni if/else if senza una clausola finale else. Se nessuna delle condizione viene soddisfatta ti ritrovi con variabili non inizializzate. E' un errore molto comune.
 
  • Mi piace
Reactions: marcococ

marcococ

Nuovo Utente
questo è il codice che stampa la scacchiera
C:
void stampa_scacchiera(){
    if(scacchiera == NULL){

    printf("Devi ancora creare la scacchiera!...\n ");
    printf("\n ");}


      printf("\n\n\n\n" );
      int l, p ;
      for ( l = 0; l < lato ; l++) {
      for (p=0; p<lato ; p++) {
      if ((scacchiera+l*p)->pericolo==nessun_pericolo) {
      printf(" [1" );
      } else if ((scacchiera+l*p)->pericolo==alieno) {
      printf(" [2" );
      } else if((scacchiera+l*p)->pericolo==trappola) {
      printf(" [3" );
      }///////////////////////////////////////////////////
      if((scacchiera+l*p)->oggetto==nessun_oggetto) {
      printf(",4]" );
      } else if ((scacchiera+l*p)->oggetto==medikit) {
      printf(",5]" );
      } else if((scacchiera+l*p)->oggetto==pozione) {
      printf(",6]" );
      }
      else if ((scacchiera+l*p)->oggetto==materiale) {
      printf(",7]" );
      } else if((scacchiera+l*p)->oggetto==colpi_lanciarazzi) {
      printf(",8]" );
      }
      }
      printf("\n" );
      }


printf("\t\t\t \n\nLegenda :\n\n");
printf("\nNessun pericolo=1\nAlieno=2\nTrappola=3\nNessun Oggetto=4\nMedikit=5\nPozione=6\nMateriale=7\nColpi lanciarazzi=8\n\n\n\n"  );
}
L'eventuale problema che dici tu non l'ho riscontrato dato che nel momento in cui stampo la scacchiera ogni cella della matrice viene stampata , in caso contrario ci sarebbero dei "buchi" e alcune celle non verrebbero stampate....Non riesco a risolvere il problema che la prima riga e la prima colonna sono uguali .....
 

marcococ

Nuovo Utente
si avevi ragione , l'errore era nell'uso del puntatore grazie.....ora l'unico inconveniente che ho è che quando magari inizializzo la probabilità di un oggetto a 0 , c'è sempre la possibilità che questo sia in una cella ....ci dev'essere qualche problema nell'algoritmo di inizializzazione degli oggetti e dei pericoli....
 

Entra

oppure Accedi utilizzando