Funzione genera pv

di il
17 risposte

Funzione genera pv

Buongiorno a tutti,
Sono nuovo in questo forum e sono ancora inesperto con la programmazione.

Mi servirebbe aiuto nel scrivere una funzione che genera dei punti vita per ogni carta che compone un mazzo. Questi punti vita devono essere casuali e compresi tra un range di 8. Però 1/3 delle carte del mazzo, quelle più in cima, deve avere 1-2 pv, mentre l'altro 1/3 deve avere 3-5 pv, e infine l'ultimo 1/3, che sta in fondo al mazzo deve avere 6-8 pv. Infine la funzione deve stampare a schermo i punti vita di ogni carta.

Nel resto del programma ho il numero delle carte che compongono il mazzo, che è letto da tastiera. Ho una funzione che inserisce le carte nel mazzo, e una struct Carta, che ha appunto il campo pv.

Scusatemi se la spiegazione non è molto chiara.

17 Risposte

  • Re: Funzione genera pv

    Ciao, da quello che ho capito tutto si riduce all'implementazione di una funzione
    int random(int min, int max)
    che restituisce un numero casuale compreso tra min e max.
    Riesci a farlo?
  • Re: Funzione genera pv

    Nippolo ha scritto:


    Ciao, da quello che ho capito tutto si riduce all'implementazione di una funzione
    int random(int min, int max)
    che restituisce un numero casuale compreso tra min e max.
    Riesci a farlo?
    Si, il problema non è il generare numeri random, bensì come fare ad assegnare all' 1/3 delle carte, quelle più in cima al mazzo punti vita compresi tra 1-2, all'altro 1/3 delle carte pv tra 3-5, e l'ultimo 1/3 che sarebbe il fondo del mazzo tra 6-8 pv.
  • Re: Funzione genera pv

    Banalmente si potrebbe fare qualcosa del genere:
    for(unsigned int i = 0; i < dim_mazzo; ++i)
    {
        if(i < dim_mazzo / 3)
        {
            mazzo[i].pv = random(1, 2);
        }
        else if(i < dim_mazzo / 3 * 2)
        {
            mazzo[i].pv = random(3, 5);
        }
        else
        {
            mazzo[i].pv = random(6, 8);
        }
    }
  • Re: Funzione genera pv

    Nippolo ha scritto:


    Banalmente si potrebbe fare qualcosa del genere:
    for(unsigned int i = 0; i < dim_mazzo; ++i)
    {
        if(i < dim_mazzo / 3)
        {
            mazzo[i].pv = random(1, 2);
        }
        else if(i < dim_mazzo / 3 * 2)
        {
            mazzo[i].pv = random(3, 5);
        }
        else
        {
            mazzo[i].pv = random(6, 8);
        }
    }
    Intanto grazie mille per la disponibilità. Avevo già pensato a una cosa del genere. L'unico problema è che avendo il numero di carte nel mazzo in una funzione, e dovendo generare i pv in un'altra funzione ancora, non so come poter passare il numero di carte letto dallo scanf
  • Re: Funzione genera pv

    Nippolo ha scritto:


    Banalmente si potrebbe fare qualcosa del genere:
    for(unsigned int i = 0; i < dim_mazzo; ++i)
    {
        if(i < dim_mazzo / 3)
        {
            mazzo[i].pv = random(1, 2);
        }
        else if(i < dim_mazzo / 3 * 2)
        {
            mazzo[i].pv = random(3, 5);
        }
        else
        {
            mazzo[i].pv = random(6, 8);
        }
    }
    
    mazzo[i] 
    
    cosa sarebbe?
  • Re: Funzione genera pv

    La carta i-esima del mazzo
  • Re: Funzione genera pv

    Pucenzo ha scritto:


    Nippolo ha scritto:


    Banalmente si potrebbe fare qualcosa del genere:
    for(unsigned int i = 0; i < dim_mazzo; ++i)
    {
        if(i < dim_mazzo / 3)
        {
            mazzo[i].pv = random(1, 2);
        }
        else if(i < dim_mazzo / 3 * 2)
        {
            mazzo[i].pv = random(3, 5);
        }
        else
        {
            mazzo[i].pv = random(6, 8);
        }
    }
    Intanto grazie mille per la disponibilità. Avevo già pensato a una cosa del genere. L'unico problema è che avendo il numero di carte nel mazzo in una funzione, e dovendo generare i pv in un'altra funzione ancora, non so come poter passare il numero di carte letto dallo scanf
    @oregon sapresti aiutarmi anche in questo per favore?
  • Re: Funzione genera pv

    Un valore numerico lo passi ad una funzione come argomento, non vedo il problema. Ma forse non ho xanten
  • Re: Funzione genera pv

    oregon ha scritto:


    Un valore numerico lo passi ad una funzione come argomento, non vedo il problema. Ma forse non ho xanten
    Lo ho passato per riferimento con un puntatore.
  • Re: Funzione genera pv

    Non capisco il problema. Mostra il codice e facci capire
  • Re: Funzione genera pv

    oregon ha scritto:


    Non capisco il problema. Mostra il codice e facci capire
    
    
    int main () {
    printf("Inserisci il numero di carte del mazzo\n\n");
    scanf("%hd", &n_carte_mazzo);
    genera_pv (&n_carte_mazzo);		//passaggio numero carte
    }
    
    void genera_pv (int *nPt) {
      struct Carta* pCarta = (struct Carta*)(malloc(4 * sizeof(unsigned int)));
      int dim_mazzo = *nPt;
    
    
      for(unsigned int i = 1; i <= dim_mazzo; i++)
      {
        if (i < dim_mazzo / 3)
        {
          pCarta[i].pv = rand () % (2) + 1;
        printf("I punti vita della carta %d sono %d\n", i, pCarta[i].pv);
        }
        else if(i < dim_mazzo / 3 * 2)
        {
          pCarta[i].pv = rand () % (3) + 3;
        printf("I punti vita della carta %d sono %d\n", i, pCarta[i].pv);
        }
        else
        {
          pCarta[i].pv = rand () % (3) + 6;
          printf("I punti vita della carta %d sono %d\n", i, pCarta[i].pv);
        }
      }
      free(pCarta);
    }
    
    Il programma è molto lungo, quindi pubblico solo la parte che mi interessa.
  • Re: Funzione genera pv

    Ora mi è sorto un altro problema. Finita la stampa mi dice:
    
    malloc(): corrupted top size
    Annullato (core dump creato)
    
  • Re: Funzione genera pv

    Intanto perché passi la variabile per puntatore?
    
    genera_pv (n_carte_mazzo);		//passaggio numero carte
    
    
    void genera_pv (int dim_mazzo ) {
    
    In secondo luogo perché allochi in memoria solo 4 Carte? E perché alla fine fai la free come se tutto questo codice fosse inutile?

    Il problema di memoria segnalato è causato da errori nell'uso di malloc/free ma bisognerebbe vedere tutto il codice.
  • Re: Funzione genera pv

    oregon ha scritto:


    Intanto perché passi la variabile per puntatore?
    
    genera_pv (n_carte_mazzo);		//passaggio numero carte
    
    
    void genera_pv (int dim_mazzo ) {
    
    In secondo luogo perché allochi in memoria solo 4 Carte? E perché alla fine fai la free come se tutto questo codice fosse inutile?

    Il problema di memoria segnalato è causato da errori nell'uso di malloc/free ma bisognerebbe vedere tutto il codice.

    Scusami ma il 4 mi sono dimenticato di sostituirlo con dim_mazzo, in questo modo non mi da problemi. Dopodiché scusa la domanda banale, ma la free dove la dovrei mettere?

    Comunque grazie mille per l'aiuti che mi sta dando.
Devi accedere o registrarti per scrivere nel forum
17 risposte