Oppure

Loading
03/06/10 0:22
vincenzoflaminio
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 :
for (q=0;q<11;q++)
      {
          num=rand()%88;
          if (array_giocatori[nc].campo=0) // verifico se il giocatore è stato già estratto (0=non estratto)
          {
          array_squadra[0].player[q]= num; 
          array_giocatori[nc].campo=1;  // assegno valore estratto
          }                                          // 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 03/06/10 0:23
aaa
03/06/10 5:36
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.
aaa
03/06/10 18:02
vincenzoflaminio
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.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


struct _giocatore 
{
char cognome[6];
char nome[6];
int valore;
int campo;
};
typedef struct _giocatore Giocatore;

struct _squadra
{
   int player[11];
       };
       typedef struct _squadra Squadra;
int main()
{
     srand(time(NULL));
    Giocatore array_giocatori[88];
    
    Squadra array_squadra[8];
    char alfabeto[]={'a','b','c','d','e','f'};
    int lung_alfabeto=6;
    int i,j,k,q,z,w;
    int indice;
    int n=88;
    int nc,num;
    int contatore=0;
    int valoresquadra=0;
 
 for (i=0;i<88;i++)
    {
    array_giocatori[i].valore=rand()%11;
  for (j=0;j<6;j++)
    {
           nc= rand()%lung_alfabeto;
           stringacas[j]=alfabeto[nc];
           array_giocatori[i].nome[j] = stringacas[j];
                      }
           }
            
 for (q=0;q<11;q++)
      {
          num=rand()%88;
           array_squadra[0].player[q]= num;
                 }
               
for (w=0;w<11;w++)
{
valoresquadra += array_giocatori[array_squadra[0].player[w]].valore;
}
for (z=0;z<11;z++){
      printf("visualizza i valori della squadra 0 %d", array_squadra[0].player[z]);
      }

          


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.
aaa
04/06/10 7:02
carmine
void squadre(string sq[], string ap[])
{
    string y; //APPOGGIO STRING
    for(i=0;i<10;i++)//CICLO PER NUMERO SQUADRE
    {
        do//CICLO PER LE SQUADRE DIVERSE
        {
            j=0+(rand()%10); //INDICE RANDOM
            sq[i]=ap[j];
            ap[j]=y;
        }while (sq[i]==y);//--------
    }//----------
}

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!!
aaa
04/06/10 12:05
vincenzoflaminio
Postato originariamente da carmine:

void squadre(string sq[], string ap[])
{
    string y; //APPOGGIO STRING
    for(i=0;i<10;i++)//CICLO PER NUMERO SQUADRE
    {
        do//CICLO PER LE SQUADRE DIVERSE
        {
            j=0+(rand()%10); //INDICE RANDOM
            sq[i]=ap[j];
            ap[j]=y;
        }while (sq[i]==y);//--------
    }//----------
}

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.

for (q=0;q<11;q++) 
      { 
          num=rand()%88; 
          array_squadra[0].player[q]= num; 
          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?
aaa