Problema inizializzazione probabilità oggetti

di il
4 risposte

Problema inizializzazione probabilità oggetti

Salve , devo inizializzare degli oggetti con dei valori che equivarrebero alla probabilità di trovarli in una cella della matrice creata ....
questo è il codice..

printf("Ai fini della difficoltà del gioco dovrai inserire 3 probabilità la cui somma dovrà fare 100..... \n\n" );
do {
printf("\t Probabilità di trovare in una data cella una'TRAPPOLA':" );
scanf("%d", &trapp);
printf("\t Probabilità di trovare in una data cella un 'ALIENO' :" );
scanf("%d", &alie );
printf("\t Probabilità di trovare in una data cella 'NESSUN PERICOLO':");
scanf("%d", &ness_per );


if (ness_per +trapp+alie !=100) {
printf(" \n Ricorda la somma delle probabilità deve essere 100 \n\n " );
}
}
while( ness_per +trapp+alie !=100);

printf("\t\nOra dovrai inserire 5 probabilità legate al ritrovamento o meno degli oggetti....." );
do {
printf("\n\n\t Probabilità di trovare in una data cella 'POZIONE':" );
scanf("%d", &pozio);
printf("\t Probabilità di trovare in una data cella un 'MEDIKIT' :" );
scanf("%d", &medik );
printf("\t Probabilità di trovare in una data cella 'MATERIALE':" );
scanf("%d", &mater);
printf("\t Probabilità di trovare in una data cella un 'COLPI LANCIARAZZI' :" );
scanf("%d", &colpilancia );
printf("\t Probabilità di trovare in una data cella 'NESSUN OGGETTO':" );
scanf("%d", &no_obj );


if (no_obj+pozio+medik+colpilancia+mater !=100) {
printf("Ricorda la somma delle probabilità deve essere 100\n\n" );
}


} while(no_obj+pozio+medik+colpilancia+mater !=100);

//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;
}
}}
sleep(1);

//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;
printf("%d\n",prob2);
} 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;
}
}
incontro però un problema ...quando inizializzo i "tipo_oggetto" ed assegno le probabilità ad esempio...
probabilità di incotrare medikit=50 e probabilità di incontrare colpilancia=50 ,stampando la scacchiera noto che non tutte le celle sono con medikit o colpilancia ma alcune sono state inizializzate con nessuno oggetto ....ma non riesco a capire come....

4 Risposte

  • Re: Problema inizializzazione probabilità oggetti

    Quasi impossibile darti una risposta senza compilare ef eseguire passo passo il codice nella parte sospetta.
    Bisognerebbe avere TUTTO il codice compilabile o il progetto
  • Re: Problema inizializzazione probabilità oggetti

    Ti passo sia la parta di codice di inizializzazione delle probabilità sia la parte di codice di stampa .....fondamentalmente serve controllare questi...
    void crea_scacchiera () {
    
    reset();
    
    srand((unsigned int)time(0));
    
    printf("Immettere la lunghezza n di un lato della scacchiera: " );
    scanf("%d", &lato );
    
    mappa=lato*lato ;
    
    scacchiera=malloc(lato*lato*sizeof(struct Cella));
    printf("Grandezza Mappa => %d (%dX%d)\n\n",mappa,lato,lato);
    
    printf("Ai fini della difficoltà del gioco dovrai inserire 3 probabilità la cui somma dovrà fare 100..... \n\n" );
    do {
    printf("\t Probabilità di trovare in una data cella una'TRAPPOLA':" );
    scanf("%d", &trapp);
    printf("\t Probabilità di trovare in una data cella un 'ALIENO' :" );
    scanf("%d", &alie );
    printf("\t Probabilità di trovare in una data cella 'NESSUN PERICOLO':");
    scanf("%d", &ness_per );
    
    
    if (ness_per +trapp+alie !=100) {
    printf(" \n Ricorda la somma delle probabilità deve essere 100 \n\n " );
    }
    }
    while( ness_per +trapp+alie !=100);
    
    printf("\t\nOra dovrai inserire 5 probabilità legate al ritrovamento o meno degli oggetti....." );
    do {
    printf("\n\n\t Probabilità di trovare in una data cella 'POZIONE':" );
    scanf("%d", &pozio);
    printf("\t Probabilità di trovare in una data cella un 'MEDIKIT' :" );
    scanf("%d", &medik );
    printf("\t Probabilità di trovare in una data cella 'MATERIALE':" );
    scanf("%d", &mater);
    printf("\t Probabilità di trovare in una data cella un 'COLPI LANCIARAZZI' :" );
    scanf("%d", &colpilancia );
    printf("\t Probabilità di trovare in una data cella 'NESSUN OGGETTO':" );
    scanf("%d", &no_obj );
    
    
    if (no_obj+pozio+medik+colpilancia+mater !=100) {
    printf("Ricorda la somma delle probabilità deve essere 100\n\n" );
    }
    
    
    } while(no_obj+pozio+medik+colpilancia+mater !=100);
    
    //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;
    }
    }}
    sleep(1);
    
    //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;
    printf("%d\n",prob2);
    } 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;
    }
    }
    sleep(1);
    
     Ciccio.x=rand()%lato;
     sleep(1);
     Ciccio.y=rand()%lato;
     sleep(1);
     Ninja.x=rand()%lato;
     sleep(1);
     Ninja.y=rand()%lato;
     sleep(1);
    
     printf("Ciccio.x=%d\n", Ciccio.x );
     printf("Ciccio.y=%d\n", Ciccio.y );
     printf("Ninja.x=%d\n", Ninja.x );
     printf("Ninja.y=%d\n", Ninja.y);
    
    
    printf("\n\n\nOk......la mappa è stata creata\n\n\n");
    
    
    }
    
    
    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*lato+p].pericolo==nessun_pericolo) {
          printf(" [1" );
        } else if (scacchiera[l*lato+p].pericolo==alieno) {
          printf(" [2" );
        } else if(scacchiera[l*lato+p].pericolo) {
          printf(" [3" );
          }///////////////////////////////////////////////////
          if(scacchiera[l*lato+p].oggetto==nessun_oggetto) {
          printf(",4]" );
        } else if(scacchiera[l*lato+p].oggetto==medikit) {
          printf(",5]" );
        } else if(scacchiera[l*lato+p].oggetto==pozione) {
          printf(",6]" );
          }
          else if(scacchiera[l*lato+p].oggetto==materiale) {
          printf(",7]" );
        } else if(scacchiera[l*lato+p].oggetto) {
          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"  );
    }
    
  • Re: Problema inizializzazione probabilità oggetti

    Ti ripeto. E' impossibile compilare quel codice perché mancano troppe parti che possono essere responsabili dei problemi e non si possono inventare.

    Finché non darai indicazioni utili non potrò impiegare tempo per risponderti. Mi dispiace.
  • Re: Problema inizializzazione probabilità oggetti

    cocc999 ha scritto:


    Salve , devo inizializzare degli oggetti con dei valori che equivarrebero alla probabilità di trovarli in una cella della matrice creata ....
    questo è il codice..
    
    printf("Ai fini della difficoltà del gioco dovrai inserire 3 probabilità la cui somma dovrà fare 100..... \n\n" );
    do {
    printf("\t Probabilità di trovare in una data cella una'TRAPPOLA':" );
    scanf("%d", &trapp);
    printf("\t Probabilità di trovare in una data cella un 'ALIENO' :" );
    scanf("%d", &alie );
    printf("\t Probabilità di trovare in una data cella 'NESSUN PERICOLO':");
    scanf("%d", &ness_per );
    
    
    if (ness_per +trapp+alie !=100) {
    printf(" \n Ricorda la somma delle probabilità deve essere 100 \n\n " );
    }
    }
    while( ness_per +trapp+alie !=100);
    
    printf("\t\nOra dovrai inserire 5 probabilità legate al ritrovamento o meno degli oggetti....." );
    do {
    printf("\n\n\t Probabilità di trovare in una data cella 'POZIONE':" );
    scanf("%d", &pozio);
    printf("\t Probabilità di trovare in una data cella un 'MEDIKIT' :" );
    scanf("%d", &medik );
    printf("\t Probabilità di trovare in una data cella 'MATERIALE':" );
    scanf("%d", &mater);
    printf("\t Probabilità di trovare in una data cella un 'COLPI LANCIARAZZI' :" );
    scanf("%d", &colpilancia );
    printf("\t Probabilità di trovare in una data cella 'NESSUN OGGETTO':" );
    scanf("%d", &no_obj );
    
    
    if (no_obj+pozio+medik+colpilancia+mater !=100) {
    printf("Ricorda la somma delle probabilità deve essere 100\n\n" );
    }
    
    
    } while(no_obj+pozio+medik+colpilancia+mater !=100);
    
    //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;
    }
    }}
    sleep(1);
    
    //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;
    printf("%d\n",prob2);
    } 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;
    }
    }
    incontro però un problema ...quando inizializzo i "tipo_oggetto" ed assegno le probabilità ad esempio...
    probabilità di incotrare medikit=50 e probabilità di incontrare colpilancia=50 ,stampando la scacchiera noto che non tutte le celle sono con medikit o colpilancia ma alcune sono state inizializzate con nessuno oggetto ....ma non riesco a capire come....
    Perché se prob2 = 50 non passi da nessuno degli if. È un errore grave non prevedere l'else finale sempre e comunque.

    Inoltre non hai bisogno che la somma delle probabilità faccia 100, pensaci bene
Devi accedere o registrarti per scrivere nel forum
4 risposte