|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
[C] Generare lettere casuali in array
Salve ho bisogno di sviluppare queste due parti di programma :
Ad ogni giocatore viene assegnato un numero casuale nell’intervallo [0,10]. In maniera casuale vengono create 8 squadre. Codice:
struct _giocatore { char cognome; char nome; int valore; } typedef struct _giocatore Giocatore; Giocatore array_giocatori[88]; */definisco un array di tipo GIOCATORE da 88 for (i=0;i<88;i++) { array_giocatori[i].valore=rand()%11 */ assegno un numero casuale da 1a10 } Inizialmente vengono considerati 88 giocatori identificati dal Cognome e Nome (anche solo lettere casuali). si puo fare cosi ?? : Codice:
struct _giocatore { char cognome; char nome; int valore; } typedef struct _giocatore Giocatore; Giocatore array_giocatori[88]; */definisco un array di tipo GIOCATORE da 88 char nomi[21]={a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z}; char cognomi[21]={a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z}; for (i=0;i<88;i++) { array_giocatori[i].nome=rand()%nomi array_giocatori[i].cognome=rand()%cognomi |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12816
|
Al volo:
se devi usare lettere (char), sappi che di fatto sono interi (compresi tra 65 e 90 per le lettere minuscole e maiuscole), per cui potresti fare in modo di estrarre un numero in quell'intervallo. Dai un'occhiata alla tavola ASCII. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
rand()%11 genera numeri da 0 a 10.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
secondo me per i nomi e i cognomi ti conviene creare due array che contengano una 50ina di nomi propri di persona ( reali) e lo stesso per i cognomi
e poi in modo casuale li accoppi. Se scegli le lettere in modo casuale ti escono nomi come djaskljdklas julktyujlkt che neppure nel villaggio piu sperduto della turchia riesci a trovare ![]() |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
se faccio cosi non posso scegliere la lunghezza del nome: Codice:
Giocatore array_giocatori[88]; for (i=0;i<88;i++) { array_giocatori[i].valore=(65+rand()%26); potrei farlo cosi?? (non so se è giusto) Codice:
void rand_name (*char array_giocatore.nome, int lunghezza_nome) { int i; char *pnome=array_giocatori.nome; for (i=0;i<lunghezza_nome;i++) { *pnome++=(65+rand()%26); } |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12816
|
Non ho ben capito se vuoi generare nomi e cognomi come sequenze di lettere casuali oppure usare una singola lettera...
Nel primo caso secondo me ti conviene fare come ha detto bobbytre, ti crei due array di nomi e cognomi e poi li mischi casualmente (estrai un indice per i nomi, ed un indice per i cognomi). Nel secondo caso è abbastanza semplice perché: Codice:
struct _giocatore { char cognome; char nome; int valore; } typedef struct _giocatore Giocatore; Giocatore array_giocatori[88]; */definisco un array di tipo GIOCATORE da 88 for (i=0;i<88;i++) { array_giocatori[i].valore=rand()%11 */ assegno un numero casuale da 1a10 array_giocatori[i].nome = 65+rand()%26; array_giocatori[i].cognome = 65+rand()%26; } La struct che hai dichiarato contiene dei char, quindi singoli caratteri, non stringhe. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Quote:
Si può tranquillamente fare Codice PHP:
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12816
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
una funzione random che si autoinzializza no ?
Codice PHP:
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
Si supponga di gestire un torneo di calcio tra 8 squadre. Inizialmente vengono considerati 88 giocatori identificati dal Cognome e Nome (anche solo lettere casuali). Ad ogni giocatore viene assegnato un numero casuale nell’intervallo [0,10]. In maniera casuale vengono create 8 squadre. Ti volevo chiedere quindi come devo sostituire il char nome e il char cognome nella struct per renderle stringhe? il resto è giusto? |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Codice PHP:
Codice PHP:
Ultima modifica di bobbytre : 25-02-2010 alle 21:39. |
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
![]() Allora hai usato due contatori "i" (per gli 88 giocatori) e "j" (per un nome da 16caratteri ) però non ho ben capito perchè usi un puntatore a una char , e il comando calloc cosa significa? |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
![]() meglio cosi: Codice PHP:
|
|
![]() |
![]() |
![]() |
#14 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
Ho provato ad usare due contatori in modo da definire quanti caratteri inserire che ne dite?? |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
memset serve per azzerare il contenuto del vettore. Puoi farlo anche tu manualmente.
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Quote:
questo: Codice PHP:
in questo: Codice PHP:
|
|
![]() |
![]() |
![]() |
#18 | |
Member
Iscritto dal: Jul 2006
Messaggi: 96
|
Quote:
il codice genera correttamente valori casuali : Codice:
#include <stdio.h> #include <stdlib.h> #include <time.h> struct _giocatore { char cognome[5]; char nome[5]; int valore; }; typedef struct _giocatore Giocatore; void visualizza_aI (int v[], int n) { int i; for (i=0;i<n;i++) printf("%4d", v[i]); } int main() { srand((unsigned int)time(0)); Giocatore array_giocatori[88]; int i; int j=0; for (i=0;i<88;i++) { array_giocatori[i].valore=rand()%11; while (j<5) { array_giocatori[i].nome[j] =rand()%26 + 65; j++; } } printf("visualizzo valore in giocatore [5] %d", array_giocatori[5].valore); printf("visualizza i caratteri %c\n ",array_giocatori[3].nome[5]); printf("visualizza i caratteri %c\n ", array_giocatori[3].nome[4]); system("PAUSE"); return 0; } } Ultima modifica di Vincenzoflaminio : 02-03-2010 alle 16:42. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:50.