Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
La flessibilità di configurazione è il punto di forza di questo 2-in-1, che ripropone in un form factor alternativo tutta la tipica qualità dei prodotti Lenovo della famiglia ThinkPad. Qualità costruttiva ai vertici, ottima dotazione hardware ma costo che si presenta molto elevato.
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-02-2010, 23:17   #1
Vincenzoflaminio
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 }
Adesso dovrei fare lo stesso con i nomi e i cognomi :
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
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 23:23   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
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.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2010, 08:46   #3
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2010, 19:38   #4
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
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
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 02:07   #5
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
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.
Giusto!
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);
  }
}
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 11:00   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
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;
}
Cmq se non vado errato prima di usare rand() dovresti inizializzare il seme con srand(..).

La struct che hai dichiarato contiene dei char, quindi singoli caratteri, non stringhe.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 11:09   #7
Rsk
Senior Member
 
L'Avatar di Rsk
 
Iscritto dal: Dec 2006
Messaggi: 314
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
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.
Non è necessario consultare la tavola ascii.
Si può tranquillamente fare
Codice PHP:
int main()
{
    
srand(time(NULL));
    
printf("%c ",'A'+rand()%('Z'-'A'));
    return 
0;

__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB
Rsk è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 11:40   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12816
Quote:
Originariamente inviato da Rsk Guarda i messaggi
Non è necessario consultare la tavola ascii.
Si può tranquillamente fare
Codice PHP:
int main()
{
    
srand(time(NULL));
    
printf("%c ",'A'+rand()%('Z'-'A'));
    return 
0;

Si esatto si può fare benissimo così, anche se lascerei modulo 26...
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 15:38   #9
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
una funzione random che si autoinzializza no ?

Codice PHP:
int random(int max)
{
    static 
int init 0;
    if (!
init)
    {
        
init 1;
        
srand(time(0));
    }
    return 
rand() % max;

bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 21:17   #10
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da WarDuck Guarda i messaggi

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;
}
Cmq se non vado errato prima di usare rand() dovresti inizializzare il seme con srand(..).

La struct che hai dichiarato contiene dei char, quindi singoli caratteri, non stringhe.
Va benissimo anche lettere casuali, l'esercizio cosi mi chiede:
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?
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 21:36   #11
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Codice PHP:
struct _giocatore 
{
char *cognome;
char *nome;
int valore;

Codice PHP:
array_giocatori[i].nome calloc(17,sizeof(char));
array_giocatori[i].cognomecalloc(17,sizeof(char));

for(
int j=0;j<16;j++)
{
    
array_giocatori[i].nome[j] = 65+rand()%26;
    
array_giocatori[i].cognome[j] = 65+rand()%26;



Ultima modifica di bobbytre : 25-02-2010 alle 21:39.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 22:40   #12
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da bobbytre Guarda i messaggi
Codice PHP:
struct _giocatore 
{
char *cognome;
char *nome;
int valore;

Codice PHP:
array_giocatori[i].nome calloc(17,sizeof(char));
array_giocatori[i].cognomecalloc(17,sizeof(char));

for(
int j=0;j<16;j++)
{
    
array_giocatori[i].nome[j] = 65+rand()%26;
    
array_giocatori[i].cognome[j] = 65+rand()%26;


Gentilissimo come sempre bobbytre
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?
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2010, 22:50   #13
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da Vincenzoflaminio Guarda i messaggi
Gentilissimo come sempre bobbytre
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?
calloc alloca dinamicamente la memoria e la inizializza a zero , ma forse ancora ti puo risultare complicato, non lo avevo calcolato

meglio cosi:
Codice PHP:
struct _giocatore
{
char cognome[17];
char nome[17];
int valore;


// ...

memset(array_giocatori[i].nome,0,sizeof(array_giocatori[i].nome));
memset(array_giocatori[i].cognome,0,sizeof(array_giocatori[i].cognome));

for(
int j=0;j<16;j++)
{
    
array_giocatori[i].nome[j] = 65+rand()%26;
    
array_giocatori[i].cognome[j] = 65+rand()%26;


bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2010, 20:01   #14
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da WarDuck Guarda i messaggi

Codice:
struct _giocatore 
{
char cognome[5];
char nome[5];
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 (1-10)
    int j=0;
    for (j=0;j<5;j++);   
    array_giocatori[i].nome[j] = 65+rand()%26;
    array_giocatori[i].cognome[j] = 65+rand()%26;
    
   }
Cmq se non vado errato prima di usare rand() dovresti inizializzare il seme con srand(..).

La struct che hai dichiarato contiene dei char, quindi singoli caratteri, non stringhe.
Ho visto che le stringhe sono array di char 1D, quindi ho dichiarato char array da 5 nella struct. Cerco di avvicinarmi a questo codice perchè non voglio andare oltre quello che ho studiato. Bobbytre anche memset non lo conosco...
Ho provato ad usare due contatori in modo da definire quanti caratteri inserire che ne dite??
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2010, 20:07   #15
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2010, 20:18   #16
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da cionci Guarda i messaggi
memset serve per azzerare il contenuto del vettore. Puoi farlo anche tu manualmente.
Se aggiungiamo il memset per azzerare l'array, la parte di codice che ho postato sopra è giusta?
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2010, 23:44   #17
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da Vincenzoflaminio Guarda i messaggi
Se aggiungiamo il memset per azzerare l'array, la parte di codice che ho postato sopra è giusta?
no ! non è giusto il codice

questo:
Codice PHP:
array_giocatori[i].valore=rand()%11 */ assegno un numero casuale (1-10
non fa quello che ti aspetti !

in questo:
Codice PHP:
for (i=0;i<88;i++)

    
array_giocatori[i].valore=rand()%11 */ assegno un numero casuale (1-10)
    
int j=0;
    for (
j=0;j<5;j++);   
    
array_giocatori[i].nome[j] = 65+rand()%26;
    
array_giocatori[i].cognome[j] = 65+rand()%26;
    
   } 
il secondo for gira a vuoto e i nomi non vengono generati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2010, 15:22   #18
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da bobbytre Guarda i messaggi
no ! non è giusto il codice

questo:
Codice PHP:
array_giocatori[i].valore=rand()%11 */ assegno un numero casuale (1-10
non fa quello che ti aspetti !
Ho appena provato in DEV c++
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 ... sono riuscito a risolvere anche il problema della generazione delle lettere casuali con un while , l'unico stranezza e che se stampo dei caratteri a caso di un array mi escono anche caratteri come APICI " o lettere maiuscole

Ultima modifica di Vincenzoflaminio : 02-03-2010 alle 16:42.
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Cooler Master MasterFrame 600: modularit...
Questi case sembrano GPU RTX 50 e costan...
Elgato Facecam 4K: ecco la nuova webcam ...
Stampa 3D senza sprechi e senza rifiuti?...
OPPO Find X9 Pro potrebbe battere ogni r...
Le nuove Sony WH-1000XM6 ora disponibili...
ChatGPT Agent come un essere umano: l'AI...
Samsung rivaluta la fabbrica per il pack...
'La potenza di 16 core, nel palmo della ...
Windows 10 compie 10 anni, ma il cambiam...
Un altro Pixel 6a ha preso fuoco: la pro...
NVIDIA, ritorno in Cina in grande stile?...
Tutti contro Windows Recall: un altro se...
PlayStation FlexStrike: il sogno di un f...
WhatsApp sorprende tutti: ecco la nuova ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v