Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-01-2007, 12:31   #1
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
..genero 2 numeri casuali in rand poi per copiarli l'uno sull'altro come faccio???

ragazzi ho da fare questo tipo di esercizio...dato un mazzetto di carte napoletane ordinato generare 1 coppia di carte e scambiarle l'una con l'altra....

ho creato uan struct carta:

struct carta
{
int valore;
char seme[8];
};

//definizione mazzetto ordinato
struct carta mazzetto[]={
{1,"bastoni"},{2,"bastoni"},{3,"bastoni"},{4,"bastoni"},{5,"bastoni"},
{6,"bastoni"},{7,"bastoni"},{8,"bastoni"},{9,"bastoni"},{10,"bastoni"},
{1,"coppe"},{2,"coppe"},{3,"coppe"},{4,"coppe"},{5,"coppe"},
{6,"coppe"},{7,"coppe"},{8,"coppe"},{9,"coppe"},{10,"coppe"},
{1,"denari"},{2,"denari"},{3,"denari"},{4,"denari"},{5,"denari"},
{6,"denari"},{7,"denari"},{8,"denari"},{9,"denari"},{10,"denari"},
{1,"spade"},{2,"spade"},{3,"spade"},{4,"spade"},{5,"spade"},
{6,"spade"},{7,"spade"},{8,"spade"},{9,"spade"},{10,"spade"};}

ho estratto con la rand 2 carte casuali:

//generazione due carte a caso
for (i=1;i<=2;i++)

{
nc=rand()%41;
}
ora ho necessità di copiare nella posizione della prima carta la seconda e viceversa....insomma vojo stampare il mazzetto non più in modo ordinato ma con il cambio delle 2 carte generate a caso.... come posso fare???
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2007, 12:50   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
ora ho necessità di copiare nella posizione della prima carta la seconda e viceversa
Codice:
int idx1, idx2;
struct carta tmp;

srand ((unsigned int) time (NULL));

idx1 = rand () % 40;
idx2 = rand () % 40;

tmp = mazzetto[idx1];
mazzetto[idx1] = mazzetto[idx2];
mazzetto[idx2] = tmp;
Nota che:
a) Visto che hai 40 carte, gli indici vanno da 0 a 39 (per quello % 40 e non % 41).
b) Alla fine dell'array devi mettere ....{10,"spade"}};
c) L'operazione di modulo sul valore di rand() non offre una ottima pseudo-casualità (leggi <qui>).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2007, 12:50   #3
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
ti memorizzi i 2 "indici" delle carte da scambiare.
copi mazzetto[primoindice] in una temporanea.
incolli mazzetto[secondoindice] in mazzetto[primoindice] e incolli la temporanea in mazzetto[secondoindice]...

sono un cane nella sintassi del c/c++ ma... quando dichiari il mazzetto mi sembra che tu non debba mettere struct in quanto "carta" è già un """""tipo di dato"""" caratterizzato dalla struttura
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 11:02   #4
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
Quote:
Originariamente inviato da leox@mitoalfaromeo
ti memorizzi i 2 "indici" delle carte da scambiare.
copi mazzetto[primoindice] in una temporanea.
incolli mazzetto[secondoindice] in mazzetto[primoindice] e incolli la temporanea in mazzetto[secondoindice]...

sono un cane nella sintassi del c/c++ ma... quando dichiari il mazzetto mi sembra che tu non debba mettere struct in quanto "carta" è già un """""tipo di dato"""" caratterizzato dalla struttura

cioè tu dici così???

nc=rand()%40;
nc1=rand()%40;
swap=mazzetto[nc];
mazzetto[nc]=mazzetto[nc1];
mazzetto[nc1]=swap;

mi da un incompatibilità di types (swap=mazzetto[nc]...io swap l'ho dikiarato int...coem devo fare per eliminare questo errore??
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 11:06   #5
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
Quote:
Originariamente inviato da andbin
Codice:
int idx1, idx2;
struct carta tmp;

srand ((unsigned int) time (NULL));

idx1 = rand () % 40;
idx2 = rand () % 40;

tmp = mazzetto[idx1];
mazzetto[idx1] = mazzetto[idx2];
mazzetto[idx2] = tmp;
Nota che:
a) Visto che hai 40 carte, gli indici vanno da 0 a 39 (per quello % 40 e non % 41).
b) Alla fine dell'array devi mettere ....{10,"spade"}};
c) L'operazione di modulo sul valore di rand() non offre una ottima pseudo-casualità (leggi <qui>).


a parte questi errori....che già avev notato io...così com ho impostato io lo struct non va bene??? nn riesco a salvare in una variabile d'appoggio(swap)
"mazzetto[nc]" perkè mi da incompatibilità di type...coem devo impostare swap?int??
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 11:07   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
io swap l'ho dikiarato int...coem devo fare per eliminare questo errore??
Leggere il mio esempio sopra??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 11:09   #7
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
Quote:
Originariamente inviato da andbin
Leggere il mio esempio sopra??
ti kiedevo se l'unico modo era fare come hai fatto tu o cmq anke come ho fatto io ma con le ddovute correzioni..ecco tutto...ti ripeto ho solo un probl per la variabile d'appoggio...
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 11:21   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
ho solo un probl per la variabile d'appoggio...
La variabile di appoggio la devi per forza dichiarare di tipo struct carta (se vuoi spostare l'intera struttura ... nulla ti vieta di spostare i singoli campi in qualunque altro modo).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 12:32   #9
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
Quote:
Originariamente inviato da andbin
La variabile di appoggio la devi per forza dichiarare di tipo struct carta (se vuoi spostare l'intera struttura ... nulla ti vieta di spostare i singoli campi in qualunque altro modo).
grazie ...risolto questo problema...

ora vedo ke capita anke ke mi generi casualmente 2 carte uguali...come poso evitare ke succeda questo???con un if???

bhe ora...dato ke devo stampare il mazzo di carte miskiato...(io prima tramite ciclo for ho impostato il numero di miskiate ke vojo fare...ad ogni miskiata ovviamente corrisponde lo scambio di 2 carte...)....come faccio???
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 12:48   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
ora vedo ke capita anke ke mi generi casualmente 2 carte uguali...come poso evitare ke succeda questo???con un if???

bhe ora...dato ke devo stampare il mazzo di carte miskiato...(io prima tramite ciclo for ho impostato il numero di miskiate ke vojo fare...ad ogni miskiata ovviamente corrisponde lo scambio di 2 carte...)....come faccio???
La soluzione più semplice (che non è il massimo ...) è la seguente:
Codice:
idx1 = rand () % 40;
do {
    idx2 = rand () % 40;
} while (idx2 == idx1);
In pratica si ripete la generazione del secondo numero se è uguale al primo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 12:53   #11
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
Quote:
Originariamente inviato da andbin
La soluzione più semplice (che non è il massimo ...) è la seguente:
Codice:
idx1 = rand () % 40;
do {
    idx2 = rand () % 40;
} while (idx2 == idx1);
In pratica si ripete la generazione del secondo numero se è uguale al primo.
ho risolto con un semplice if...
{
nc=rand()%40;
nc1=rand()%40;
if (nc!=nc1)
{...qui poi faccio l'operazione di swap}

ora ovviamente devo stampare il mazzetto miskiato.....tramite for immagino...ma come???

p.s. in ogni caso grzie per la gentile cortesia e l'attenzione ke mi stai dedicando...
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 13:10   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Un'altra soluzione per mischiare le carte e non avere problemi di indici doppi, è la seguente (mi baso sulla tua struttura del mazzo):
Codice:
....

int rand_int (int min, int max)
{
    double d;

    d = rand () / (RAND_MAX+1.0);
    return ((int) (d * (max-min+1))) + min;
}

...

    int i, idx1, idx2;
    struct carta tmp;

    srand ((unsigned int) time (NULL));

    for (i = 0; i < 39; i++)
    {
        idx1 = i;
        idx2 = rand_int (i+1, 39);

        tmp = mazzetto[idx1];
        mazzetto[idx1] = mazzetto[idx2];
        mazzetto[idx2] = tmp;
    }
rand_int è una funzioncina che ho fatto io (che uso sempre in questi casi) e che permette sia di estrarre un valore entro certi limiti (compresi) specifici, sia di ottenere una ottima pseudo-casualità.

L'algoritmo di mescolamento è semplice: la prima carta la scambio con una delle altre 39, la seconda la scambio con una delle altre 38, e così via.
In questo modo nessuna carta sarà più al suo "posto" originale.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 13:31   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
ora ovviamente devo stampare il mazzetto miskiato.....tramite for immagino...ma come???
Con un semplice for:
Codice:
for (i = 0; i < 40; i++)
{
    printf ("%d di %s\n", mazzetto[i].valore, mazzetto[i].seme);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 14:38   #14
Piojolopez2406
Senior Member
 
L'Avatar di Piojolopez2406
 
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
ho finito il programma....
permettimi di correggerti ma nel for di cui sopra i parametri il parametro ke cvaria non è "i", ma "nc",quindi for(nc=0;nc<40;nc++) e ovviamente la printf mi dovrà scrivere questi 2 valori...mazzetto[nc].valore,mazzetto[nc].seme tutto nel ciclo for così da generarmi il mazzetto miskiato...
di seguito metterò tutto il programma, così se a qyualcuno in futuro potrà serivire lo trova qui...


#include<stdio.h>
#include<stdlib.h>
#include <time.h>

int main()
{
int j,n,nc,nc1,i;

struct carta //crea una struct di tipo carta
{
int valore;
char seme[8];
};
struct carta swap;/* di tipo carta riferita alla variabile swap (N.B. se la var. swap la si inizializzasse di tipo intovviamente questa genererebbe un errore durante l'assegnazione dello swap nella riga 43 perche le 2 variabili a quel punto risulterebbero di diverso tipo*/
//definizione mazzetto ordinato
struct carta mazzetto[]={
{1,"bastoni"},{2,"bastoni"},{3,"bastoni"},{4,"bastoni"},{5,"bastoni"},
{6,"bastoni"},{7,"bastoni"},{8,"bastoni"},{9,"bastoni"},{10,"bastoni"},
{1,"coppe"},{2,"coppe"},{3,"coppe"},{4,"coppe"},{5,"coppe"},
{6,"coppe"},{7,"coppe"},{8,"coppe"},{9,"coppe"},{10,"coppe"},
{1,"denari"},{2,"denari"},{3,"denari"},{4,"denari"},{5,"denari"},
{6,"denari"},{7,"denari"},{8,"denari"},{9,"denari"},{10,"denari"},
{1,"spade"},{2,"spade"},{3,"spade"},{4,"spade"},{5,"spade"},
{6,"spade"},{7,"spade"},{8,"spade"},{9,"spade"},{10,"spade"}
};
//stampa mazzetto ordinato
for (i=0;i<40;i++)
{printf ("%d di %s\n",mazzetto[i].valore,mazzetto[i].seme);};
//immettere il numero di smazzate che si vuole fare
printf("\nscrivere quante smazzate si vogliono fare: ");
scanf("%d",&n);
printf("\n");
//la srand ci genererà parametri casuali tramite la funzione rand sempre diversi, esa è legata all'orario
srand(time(NULL));
//ciclo for che effettua il numero di smazzate (N.B. ad una smazzata corrisponde uno scambio tra 2 carte)
for (j=0;j<=n-1;j++)
{
nc=rand()%40;//generazione primo numero casuale
nc1=rand()%40;//generazione secondo numero casuale
//costrutto if che farà in modo danon generare due indici casuali uguali
if (nc!=nc1)
{ //effettua lo scambio usando una variabile d'appoggio swap
swap=mazzetto[nc];
mazzetto[nc]=mazzetto[nc1];
mazzetto[nc1]=swap;
//stampa scambi avvenuti
printf("gli scambi avvenuti sono: %d di %s con %d di %s\n",
mazzetto[nc].valore,mazzetto[nc].seme,mazzetto[nc1].valore,mazzetto[nc1].seme);
}
}
printf("\n\nil mazzetto dopo aver effettuato %d smazzate e':\n\n",n);
//ciclo for che mi stamperà il mazzetto di 40 carte dopo aver effettuato un numero da noi deciso di smazzate
for (nc=0;nc<40;nc++)
printf("%d di %s\n",mazzetto[nc].valore,mazzetto[nc].seme);
}
__________________
O'Napule dint'o'core..........
-MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3
-IPhone 3GS 16 GB
-Ipad wifi+3g 64gb
Piojolopez2406 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 15:09   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Piojolopez2406
permettimi di correggerti ma nel for di cui sopra i parametri il parametro ke cvaria non è "i", ma "nc",quindi for(nc=0;nc<40;nc++)
E cosa cambia???
Io ho fatto solo degli esempi di codice .... poi le variabil chiamale come ti pare.

Quote:
Originariamente inviato da Piojolopez2406
di seguito metterò tutto il programma, così se a qyualcuno in futuro potrà serivire lo trova qui...
Allora inizia a postare il codice dentro il tag CODE, a scrivere il codice in modo chiaro e ben indentato (4 spazi per la indentazione), a mettere /* */ invece di //, a mettere il return alla fine del main.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2007, 19:36   #16
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
Oppure ti estrai gli indici da scambiare in questo modo:
Codice:
idx1 = rand() % 40;
idx2 = rand() % 39;

if(idx2 >= idx1) idx2++;
In questo modo i due indici non saranno mai uguali...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Zigbee 4.0 è qui: più sic...
La trasformazione agentica di Windows pa...
Crollo del 29% nelle vendite dirette: Ub...
Black Friday anticipato su Amazon: NARWA...
Disastro WhatsApp: esposti 3,5 miliardi ...
Hatsune Miku per tutti: ASUS ROG present...
La Definitive Edition di Tomb Raider sba...
Sicurezza PC: Microsoft punta sui chip d...
Gemini 3 Pro disponibile ora: è i...
Super sconti robot aspirapolvere: ECOVAC...
DOOM: The Dark Ages si espande con Ripat...
EA SPORTS annuncia il futuro della serie...
Tutte le TV già in offerta defini...
Meta non ha un monopolio nel settore dei...
L'amministrazione Trump presta 1 miliard...
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:08.


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