Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-06-2010, 08:32   #1
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
[C] Efficienza Algoritmo

Salve, sto cercando un modo per scrivere il seguente codice in meno righe.
Devo stilare un tabellone (stile Mondiali ) a 8 squadre e devo fare scontrare le squadre finchè non otterò una squadra vincitrice.
Ora il problema sta qua:
Codice:
if ( (valoresquadra[0]* numerocasuale) > (valoresquadra[1]* numerocasuale) )
{
     printf("valoresquadra prima di giocare 0 = %d  e 1=%d \n",valoresquadra[0],valoresquadra[1]);
     printf("ha vinto la squadra 0 \n");
          
     if ((valoresquadra[2]* numerocasuale) > (valoresquadra[3]* numerocasuale) )
     {
                            printf("valoresquadra prima di giocare 2 = %d  e 3=%d \n",valoresquadra[2],valoresquadra[3]);
                            printf("ha vinto la squadra 0 e poi la 2 \n");
                                                         
                                   if ((valoresquadra[4]* numerocasuale) > (valoresquadra[5]* numerocasuale) )
                            {
                            printf("valoresquadra prima di giocare 4 = %d  e 5=%d \n",valoresquadra[4],valoresquadra[5]);
                            printf("ha vinto la squadra 0 , poi la 2, poi la 4 \n");
                                
                                 if ((valoresquadra[6]* numerocasuale) > (valoresquadra[7]* numerocasuale) )
                                  {
                                    printf("valoresquadra prima di giocare 6 = %d  e 7=%d \n",valoresquadra[6],valoresquadra[7]);
                                    printf("ha vinto la squadra 0 , poi la 2, poi la 4, poi la 6 \n");    
                                    }
                                    else
                                    {
                                        printf("valoresquadra prima di giocare 6 = %d  e 7=%d \n",valoresquadra[6],valoresquadra[7]);
                                        printf("ha vinto la squadra 0 , poi la 2, poi la 4, poi la 7 \n");
                                            
                                        }
                                        
                            }
                            else 
                            {
                                 printf("valoresquadra prima di giocare 4 = %d  e 5=%d \n",valoresquadra[4],valoresquadra[5]);
                                 printf("ha vinto la squadra 0 , poi la 2, poi la 5");
                                 
                                 }
                                 }
                                 
                            else {
                                 printf("valoresquadra prima di giocare 2 = %d  e 3=%d \n",valoresquadra[2],valoresquadra[3]);
                                 printf("ha vinto la squadra 0 e poi la 3");}
                                  }
else {
         printf("valoresquadra prima di giocare 0 = %d  e 1=%d \n",valoresquadra[0],valoresquadra[1]);
    printf("ha vinto la squadra 1 \n");
Questo è solo una parte di ciò che devo valutare perchè ad ogni ELSE io devo far riscontrare tutte le squadre nuovamente (Ogni squadra vincitrice
si scontrerà con la squadra vincitrice di un’altra partita fino ad arrivare ad una singola squadra vincitrice) . C'è modo di evitare tutte queste righe di codice?
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2010, 11:43   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Innanzitutto, se moltiplichi ogni valore per "numerocasuale" e poi confronti, è lo stesso che confrontare i valori originali non moltiplicati.
Cioè, se hai:
Codice:
k·x < k·y
dove k è costante, ti basta dire:
Codice:
x < y
per esprimere lo stesso concetto.

Poi magari puoi ricorrere a roba di questo tipo:

http://it.wikipedia.org/wiki/Albero_del_torneo

__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2010, 02:23   #3
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Innanzitutto, se moltiplichi ogni valore per "numerocasuale" e poi confronti, è lo stesso che confrontare i valori originali non moltiplicati.

Poi magari puoi ricorrere a roba di questo tipo:

http://it.wikipedia.org/wiki/Albero_del_torneo

Grazie della risposta. Si infatti devo mettere al posto di numerocasuale --> rand()%2 mentre purtroppo il tuo suggerimento preso da wiki credo non vada bene :
io devo aggiungere una riga di codice che mi riporti il conteggio delle vittorie fatte da una squadra
Codice:
if ( (valoresquadra[0]* rand()%2) > (valoresquadra[1]* rand()%2) )
{
     printf("valoresquadra prima di giocare 0 = %d  e 1=%d \n",valoresquadra[0],valoresquadra[1]);
     printf("ha vinto la squadra 0 \n");
punteggiosquadra[0]++;
punteggiosquadra[1]=0;
questo perchè il testo dell'esercizio chiede:
Una partita viene vinta da una squadra secondo la seguente regola
· la somma dei pesi di una squadra moltiplicata per un numero casuale
nell’intervallo [0, 1] è maggiore della corrispondente operazione sull’altra
squadra
· il processo si ripete finché non si ottiene un vincitore
Simulare 100 volte il torneo e ritornare l’elenco completo delle squadre in ordine decrescente di vincite
Sarò costretto a fare un infinità di nidificazioni di IF
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2010, 10:57   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
No, non accetto che si possa fare un codice con decine di if annidati.

Fammi capire meglio: con che criterio una squadra sfida l'altra? Cioè, è sempre vero che inizialmente la prima squadra sfida la seconda, e poi la terza sfida la quarta, etc..., e poi si ripete così per i vincitori?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2010, 02:17   #5
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
No, non accetto che si possa fare un codice con decine di if annidati.

Fammi capire meglio: con che criterio una squadra sfida l'altra? Cioè, è sempre vero che inizialmente la prima squadra sfida la seconda, e poi la terza sfida la quarta, etc..., e poi si ripete così per i vincitori?
Effettivamente è molto scocciante scrivere tutte queste righe di IF...
Allora il testo per il criterio di vittoria te l'ho riportato :
la somma dei pesi di una squadra moltiplicata per un numero casuale
nell’intervallo [0, 1] è maggiore della corrispondente operazione sull’altra
squadra
· il processo si ripete finché non si ottiene un vincitore

Per pesi di una squadra si intende il valore dei singoli giocatori sommato, che ho poi inserito in valoresquadra [] un array di 8 come le squadre.
Ma il problema non si presenta qui , il problema sta qua :
-ritornare l’elenco completo delle squadre in ordine decrescente di vincite-
Questo vuol dire che io devo ad ogni scontro tra squadre che avviene per 2 alla volta devo segnarmi in una variabile il numero delle vittorie effettuate dalla stessa.
Quindi non è un semplice ottavi di finale (sarebbero soltanto 4 incontri da disputare) io devo valutare ogni caso. Ti faccio un esempio
Se la prima faccio scontrare SQUADRA 0 vs SQUADRA 1 e vince la 1
aumento il valore di
Codice:
punteggiosquadra[0]++;
punteggiosquadra[1]=0;
se invece dovessere vincere l'altra squadra faccio un ELSE con i valori assegnati al contrario. Intanto le partite continuano nello stesso IF(nidifico) quindi Squadra 2 e Squadra 3 si scontrano . Gli scontri continunao nello stesso IF perchè devo sempre differenziarli i casi .. perchè era successo prima che la Squadra 0 avesse vinto e quindi avrebbe giocato un'altra partita ma se avesse vinto la Squadra 1 si sarebbe avuto un altro tabellone DAL TESTO ORIGINALE "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"

Spero di essere stato chiaro e grazie mille per l'interessamento
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 13-06-2010, 12:19   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Ok, quindi la situazione è che tu in un'array hai sommato i valori di tutti i giocatori di ogni squadra e li hai salvati nelle corrispondenti posizioni di indici [0 ... 7].

Io quello che cercavo di capire nell'ultimo post è proprio il come scegliere gli scontri da fare: ovvero, se il criterio è "squadra0 contro squadra1", poi "squadra2 contro squadra3", etc..., o se ci fossero particolari disposizioni a riguardo.

Da quanto ho capito, gli scontri diretti sono ad eliminazione, quindi la squadra che perde uno scontro non avrà modo di procedere oltre?

Darò per assunto questo punto, e ti propongo quindi di fare una cosa del tipo: conserva un'array di interi, che saranno corrispondenti ai punteggi finali delle squadre. Poi prepara un'array di struct in cui ogni posizione conterrà almeno due informazioni: il numero della squadra (quindi l'indice in cui recuperare il punteggio nel primo array) ed il suo valore. Partendo da quest'array, che inizialmente avrà 8 elementi, ti basterà fare un ciclo nel quale prendi a due a due le squadre, le fai scontrare tra di loro, e ricopi la vincitrice nella prima metà dell'array, nella posizione corrispondente all'indice dello scontro appena effettuato, e ne incrementerai il punteggio di conseguenza. Alla fine così avrai un array di dimensione dimezzata, e potrai andare avanti così finché non resterà un'unica squadra.

Ti faccio un esempio di ciò che intendo in pseudocodice:
Codice:
struct _squadra_s {
    int numero;
    int valore;
};

typedef struct _squadra_s Squadra;
#define N_SQUADRE 8

int main()
{
    unsigned int dimensione = N_SQUADRE;
    Squadra squadre[N_SQUADRE] = { ... }; /* qui riempi l'array iniziale con le squadre */
    int punteggi[N_SQUADRE] = { 0 }; /* array dei punteggi */

    while (dimensione != 1) {
        for (int i = 0; i < dimensione; i += 2) {
            Squadra vincitore;
            Squadra s1 = squadre[i + 0];
            Squadra s2 = squadre[i + 1];

            /* fai scontrare s1 ed s2 e trova il vincitore */
            vincitore = (...vince squadra1...) ? s1 : s2;
            squadre[i / 2] = vincitore;
            ++(punteggi[vincitore.numero]);
        }

        dimensione = (dimensione / 2);
    }

    /* et cetera */

    return 0;
}
Infine avrai un'array di punteggi, che potrai usare per calcolare le squadre vincitrici in ordine decrescente.
Se non ho capito male i requisiti, una cosa del genere potrebbe bastare.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 03:39   #7
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Sei stato veramente di grande aiuto, non ci sarei mai arrivato da solo ...
solo una cosa non ho capito in che modo stampo i valori in ordine decrescente
Questo è quanto ho scritto
Codice:
struct _squadra
{
   int player[11]; /* sono gli 11 giocatori della squadra
 int   valore[8];  /* il punteggio della squadra
 int   numero[8];  /* per indicare l'indice della squadra
       };
       typedef struct _squadra Squadra;

typedef struct _squdra Squadra

int main()
{

Squadra arraysquadre[8] = {0,1,2,3,4,5,6,7};
int dimensione = 8;
int numvittoriesquadra[8]={0};
int q=0;

/* Inserisco gli indici delle squadre nel array squadra
for (i=0;i<8;i++)
{
array_squadra.numero[i]=q;
q++;
}



while (dimensione != 1) {
        for (i = 0; i < dimensione; i += 2) {
            Squadra vincitore;
            Squadra s1 = array_squadra[i + 0];
            Squadra s2 = array_squadra[i + 1];
      
 if ((s1.valore[0]* rand()%2 ) > (s2.valore[1]* rand()%2)
{
vincitore = s1;
numvittoriesquadra[vincitore.numero]++ ;
}
else
{
vincitore = s2;
numvittoriesquadra[vincitore.numero]++ ;
array_squadra[i/2]=vincitore;
}

}

dimensione  = (dimensione / 2);

}
In aggiunta mi segnala un errore sulle righe in rosso :
array subscript is not an integer
C'è qualche problema con vincitore.numero infatti se lo cambi con un valore numerico passa tranquillamente al compilatore
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 09:35   #8
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:05.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 13:38   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Vincenzoflaminio Guarda i messaggi
solo una cosa non ho capito in che modo stampo i valori in ordine decrescente
Ti basterebbe anche un qualsiasi algoritmo di ordinamento: ottieni l'array ordinato in maniera crescente, stamperai al contrario e il gioco è fatto.
Quote:
Originariamente inviato da Vincenzoflaminio Guarda i messaggi
In aggiunta mi segnala un errore sulle righe in rosso :
array subscript is not an integer
C'è qualche problema con vincitore.numero infatti se lo cambi con un valore numerico passa tranquillamente al compilatore
Per forza, li hai dichiarati come array! Perché? Un intero basta.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 13:43   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Vincenzoflaminio Guarda i messaggi
Codice:
Squadra arraysquadre[8] = {0,1,2,3,4,5,6,7};
Scusa, ma ti compila sta cosa?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 19:08   #11
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Scusa, ma ti compila sta cosa?
Si...passa anche se ora che mi fai notare andrebbe inizializzato in questo modo:
Codice:
Squadra arraysquadre[8] = {{50,0}{30,1} etc. ...  }
ma io il primo dei due valori (INT VALORE) non lo devo inizializzare perchè non lo conosco ancora all'iniziio del programma ma è il risultato di questa operazione:
Codice:
for (w=0;w<8;w++)
{
    for (r=0;r<11;r++)
    {
    array_squadra[w].valore += array_giocatori[array_squadra[w].player[r]].valore;
}
Quindi credo che devo lasciare soltanto Squadra arraysquadre[8] senza dichiarare nulla giusto?


rеpne scasb anche quello tuo andrebbe bene infatti la ricorsione è un argomento di studio che ho incontrato , però tu non hai usato dei tipi Strutturati si possono passare valori di questo tipo :
Codice:
squadra.valore
all'interno di Function e Procedure?
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
Old 14-06-2010, 20:11   #12
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Guarda, non so che compilatore stai usando, ma dovrebbe darti decine di errori.
Attiva tutti i warning e dagli ascolto.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2010, 00:05   #13
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Guarda, non so che compilatore stai usando, ma dovrebbe darti decine di errori.
Attiva tutti i warning e dagli ascolto.
Uso Dev c++ e funziona alla grande beh devo ringraziare te che mi hai indirizzato sei stato gentilissimo
Ecco com'è l'output del .exe :
Mi trovo solo in difficoltà con i numeri delle squadre perchè io al momento ho usato il contatore "i" come numero squadra che visualizzo a schermo e quindi al secondo ciclo il numero squadra riparte da 0 ...


Ultima modifica di Vincenzoflaminio : 15-06-2010 alle 00:12.
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
La missione robotica LINK per salvare il...
Potrebbe essere stato lanciato l'ultimo ...
PamStealer, il malware per Mac che prima...
NAVEE EXO S Pro, il robot esoscheletro p...
Samsung Galaxy A57 5G a 399€ con 256 GB:...
Volevano collegare delle aragoste vive a...
La crisi dei PC è peggiore del pr...
Alibaba pronta a vietare Claude Code ai ...
Sovranità sui dati: Cloud Firewal...
FiberCop porterà la fibra Gigabit...
Data center in Lombardia: 20 progetti sc...
Tutti i modi in cui la scommessa di Orac...
Kioxia e SanDisk sbandierano i numeri de...
iPhone 18 Pro potrebbe usare modem Qualc...
Basta 'AI slop': Godot vieta ufficialmen...
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: 19:21.


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