Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] assegnazione valori casuali
Forum - C/C++ - [C] assegnazione valori casuali

Avatar
vincenzoflaminio (Normal User)
Newbie


Messaggi: 3
Iscritto: 03/06/2010

Segnala al moderatore
Postato alle 2:22
Giovedì, 03/06/2010
Salve, ho bisogno di aiuto e ho trovato grazie a Google questo sito che non conoscevo prima. Devo dare un esame di programmazione in C e ho un problemino :D .
Allora ecco la parte di codice interessata :
Codice sorgente - presumibilmente C/C++

  1. for (q=0;q<11;q++)
  2.       {
  3.           num=rand()%88;
  4.           if (array_giocatori[nc].campo=0) // verifico se il giocatore è stato già estratto (0=non estratto)
  5.           {
  6.           array_squadra[0].player[q]= num;
  7.           array_giocatori[nc].campo=1;  // assegno valore estratto
  8.           }                                          // non so come continuare


Vi spiego sto cercando di assegnare ad array_squadra gli indici dei giocatori prendendoli casualmente da uno degli 88.
Il problema è che devo evitare che giocatori vengano presi piu volte e utilizzati in diverse squadre. Allora avevo posto nella struct della squadra un CAMPO int che vale 0 / 1 per a seconda se è stato estratto o meno ma non so come scrivere la parte di codice. C'è uno spunto sopra ma qualcuno mi saprebbe dare una dritta?

Ultima modifica effettuata da vincenzoflaminio il 03/06/2010 alle 2:23
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 7:36
Giovedì, 03/06/2010
Potresti semplicemente creare un array di int dove inserisci il valore dell'indice che hai usato, poi fai un controllo prima di assegnare ad array_squadra: verifichi se scorrendo l'array degli indici trovi il numero casuale attuale, se sì, cerchi un altro valore casuale, altrimenti prosegui nel programma.

PS: Non ho ben capito a cosa servono 'array_giocatori' ed 'nc'; posta l'intero codice, altrimenti non si capisce molto bene il problema.


"Ditemi, sapete chi è... il ciaffo?"
"Questo essere trae origine da un arcaico lamer.
Tanto tempo fa, in una chat oscena oscena, il lamer f1192 si lamentava di non poter inserire le graffe, perché non aveva... IL CIAFFO"(L'uomo che sussurrava ai ciaffi)
PM Quote
Avatar
vincenzoflaminio (Normal User)
Newbie


Messaggi: 3
Iscritto: 03/06/2010

Segnala al moderatore
Postato alle 20:02
Giovedì, 03/06/2010
Testo quotato

Postato originariamente da gio97:

Potresti semplicemente creare un array di int dove inserisci il valore dell'indice che hai usato, poi fai un controllo prima di assegnare ad array_squadra: verifichi se scorrendo l'array degli indici trovi il numero casuale attuale, se sì, cerchi un altro valore casuale, altrimenti prosegui nel programma.

PS: Non ho ben capito a cosa servono 'array_giocatori' ed 'nc'; posta l'intero codice, altrimenti non si capisce molto bene il problema.


Grazie della risposta, quello che tu dici :"verifichi se scorrendo l'array degli indici trovi il numero casuale attuale, se sì, cerchi un altro valore casuale, altrimenti prosegui nel programma" come si scrive in codice?

Adesso posto l'intero codice in ongi caso array_giocatori è una struct che contiene i nomi , i congnomi e il valore di ogni giocatore e ne sono 88. Array_squadra è un array di 8 elementi cioè 8 squadre mentre NC è un numero casuale semplicemente.
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. struct _giocatore
  7. {
  8. char cognome[6];
  9. char nome[6];
  10. int valore;
  11. int campo;
  12. };
  13. typedef struct _giocatore Giocatore;
  14.  
  15. struct _squadra
  16. {
  17.    int player[11];
  18.        };
  19.        typedef struct _squadra Squadra;
  20. int main()
  21. {
  22.      srand(time(NULL));
  23.     Giocatore array_giocatori[88];
  24.    
  25.     Squadra array_squadra[8];
  26.     char alfabeto[]={'a','b','c','d','e','f'};
  27.     int lung_alfabeto=6;
  28.     int i,j,k,q,z,w;
  29.     int indice;
  30.     int n=88;
  31.     int nc,num;
  32.     int contatore=0;
  33.     int valoresquadra=0;
  34.  
  35.  for (i=0;i<88;i++)
  36.     {
  37.     array_giocatori[i].valore=rand()%11;
  38.   for (j=0;j<6;j++)
  39.     {
  40.            nc= rand()%lung_alfabeto;
  41.            stringacas[j]=alfabeto[nc];
  42.            array_giocatori[i].nome[j] = stringacas[j];
  43.                       }
  44.            }
  45.            
  46.  for (q=0;q<11;q++)
  47.       {
  48.           num=rand()%88;
  49.            array_squadra[0].player[q]= num;
  50.                  }
  51.                
  52. for (w=0;w<11;w++)
  53. {
  54. valoresquadra += array_giocatori[array_squadra[0].player[w]].valore;
  55. }
  56. for (z=0;z<11;z++){
  57.       printf("visualizza i valori della squadra 0 %d", array_squadra[0].player[z]);
  58.       }



Le finalità del programma sono queste: Devo creare 8 squadre da 11 giocatori, ogni giocatore avrà un nome un congnome ed un valore casuali. Il torneo viene simulato facendo scontrare due squadre alla volta. Ogni squadra vincitrice
si scontrerà con la squadra vincitrice di un’altra partita fino ad arrivare ad una singola
squadra vincitrice.

PM Quote
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Segnala al moderatore
Postato alle 9:02
Venerdì, 04/06/2010
Codice sorgente - presumibilmente C#

  1. void squadre(string sq[], string ap[])
  2. {
  3.     string y; //APPOGGIO STRING
  4.     for(i=0;i<10;i++)//CICLO PER NUMERO SQUADRE
  5.     {
  6.         do//CICLO PER LE SQUADRE DIVERSE
  7.         {
  8.             j=0+(rand()%10); //INDICE RANDOM
  9.             sq[i]=ap[j];
  10.             ap[j]=y;
  11.         }while (sq[i]==y);//--------
  12.     }//----------
  13. }


Rifletti su questo mio codice, ricorda che in ap ci sono le squadre e le assegno casualmente in un altro vettore con indice random, può esserti utile!! ciao!!


Computer Science
PM Quote
Avatar
vincenzoflaminio (Normal User)
Newbie


Messaggi: 3
Iscritto: 03/06/2010

Segnala al moderatore
Postato alle 14:05
Venerdì, 04/06/2010
Testo quotato

Postato originariamente da carmine:

Codice sorgente - presumibilmente C#

  1. void squadre(string sq[], string ap[])
  2. {
  3.     string y; //APPOGGIO STRING
  4.     for(i=0;i<10;i++)//CICLO PER NUMERO SQUADRE
  5.     {
  6.         do//CICLO PER LE SQUADRE DIVERSE
  7.         {
  8.             j=0+(rand()%10); //INDICE RANDOM
  9.             sq[i]=ap[j];
  10.             ap[j]=y;
  11.         }while (sq[i]==y);//--------
  12.     }//----------
  13. }


Rifletti su questo mio codice, ricorda che in ap ci sono le squadre e le assegno casualmente in un altro vettore con indice random, può esserti utile!! ciao!!



Ciao e grazie. Per quanto vedo da questo codice tu hai usato un indice random da 0-10 e l'hai assegnato alla squadra..ma quello che serve a me invece è assegnare 11 degli 88  giocatori (dell'array_giocatori[88]) in ogni squadra ed evitare che piu volte vengano assegnati stessi giocatori.

Codice sorgente - presumibilmente C/C++

  1. for (q=0;q<11;q++)
  2.       {
  3.           num=rand()%88;
  4.           array_squadra[0].player[q]= num;
  5.           array_giocatori[nc].campo=1;  // campo=1 per ricordarmi che è stato gia estratto


questo codice è funzionale ma mi manca la condizione per ripetere il ciclio se il giocatore è stato gia estratto quindi se mettessi una condizione del genere:
if (array_giocatori[nc].campo=0) // verifico se il giocatore è stato già estratto (0=non estratto)
se il giocatore non è estratto mi continua il codice sopra ma se è estratto qual'è il THEN come posso far ripartire il codice?

PM Quote