Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
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: 12819
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: 12819
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: 12819
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


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Amazon si inventa gli sconti al check-ou...
NVIDIA H20 torna in Cina? Non è d...
Addio fatica col tagliaerba: i robot sma...
Arm: ricavi di nuovo oltre il miliardo d...
Viaggi a 200 km/h sotto Nashville? Ecco ...
Gran ritorno con doppio sconto: 25,99€ p...
Huawei punta sull'accumulo energetico gr...
HyperOS 3 di Xiaomi: arriva con Android ...
Amazfit sempre più scontati: scen...
Norme e IA migliorano la postura di sicu...
Robot aspirapolvere Narwal ai minimi sto...
Incentivi per l'acquisto di auto elettri...
Radeon, stuttering con il ray tracing ne...
Kena Mobile finalmente ci siamo: eSIM in...
100.000 GPU NVIDIA in Norvegia: OpenAI a...
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: 13:00.


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