Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2008, 15:30   #1
elect
Senior Member
 
L'Avatar di elect
 
Iscritto dal: Dec 2003
Città: Hamburg/Torino
Messaggi: 2757
[C] Esercitazione ostica

Allora l'esercizio in questione è questo


Una società sportiva deve organizzare un programma di allenamento per il potenziamento delle
prestazioni fisiche dei propri atleti. Il programma prevede 4 fasi di allenamento e per ogni fase è
disponibile un certo numero di esercizi, ognuno dei quali caratterizzato da un determinato
dispendio energetico.
Le informazione relative agli esercizi possibili, al dispendio energetico loro associato (numero
minore o uguale a 500) ed alle fasi in cui sono impiegabili sono memorizzate sul file. Sul file per
ogni esercizio è riportata una riga, che contiene il nome dell’ esercizio (senza spazio), il dispendio
energetico associato e l’ elenco delle fasi in cui l’esercizio può essere impiegato (numeri di 1 a 4).
Esempio di file di ingresso:

addominali_alti 200 1 2
addominali_bassi 500 1 2
glutei 250 1 3
adduttori 350 1 3 4
bicipiti 200 1 2
quadricipiti 150 2 4
trapezi 300 2
dorsali 350 3 4
pettorali 300 2 3
abduttori 200 2 3
tricipiti 100 1 3 4
deltoidi 200 1 3
femorali 400 2 3 4

Scrivere un programma in C, che legge da tastiera il valore di N (numero di esercizi massimo in
ogni fase) e K (dispendio massimo di calorie in ogni fase) e che sia in grado di determinare per
ciascuna fase l’esercizio/gli esercizi da svolgere in modo tale da avvicinarsi il più possibile al
dispendio energetico massimo fissato, senza superarlo. Alla fine il programma deve stampare sul
schermo, per ognuna fase, la lista degli esercizi ed il dispendio energetico loro associato.

Esempio di soluzione (N=3, K=800)

Fase 1
addominali_alti 200
addominali_bassi 500
tricipiti 100
Fase 2
bicipiti 200
abduttori 200
femorali 400
Fase 3
glutei 250
adduttori 350
deltoidi 200
Fase 4
quadricipiti 150
trapezi 300
dorsali 350

Osservazione: lo stesso esercizio non può essere svolto in più di una fase.



Ovviamente non voglio che me lo svolgiate, ma vorrei solo un'idea di che struttura dati utilizzereste voi, anche pensando al fatto che debba utilizzare la recursione
elect è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 16:58   #2
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
una struttura possibile è questa

struct esercizio {
char *nome_esercizio;
int dispendio_energetico;
int *fasi;
};
typedef struct esercizio esercizio;

l'esercizio in sè è piuttosto banale, se non sai da che parte cominciare conviene che ti sfogli un manuale di c (linguaggio c kernighan&ritchie) perchè per risoverlo avrai bisogno di conoscere un minimo la libreria standard del c, definire altre strutture dati (bastano liste) e funzioni varie.
inoltre prima di postare una domanda inizia a farlo e se quello che hai fatto non funziona, lo posti e si cerca di aiutarti.
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:03   #3
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
Quote:
Originariamente inviato da elect Guarda i messaggi
anche pensando al fatto che debba utilizzare la recursione
questo problema può essere risolto in maniera iterativa...quindi prima ti conviene cercare di risolverlo in maniera iterativa (- elegante ma + semplice) poi una volta che funziona potrai provare anche a definire una maniera ricorsiva di risolverlo.

PS: la struct esercizio non influenza il fatto che la soluzione sia ricorsiva o meno..
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:04   #4
elect
Senior Member
 
L'Avatar di elect
 
Iscritto dal: Dec 2003
Città: Hamburg/Torino
Messaggi: 2757
Allora, si era pensato ad una lista di liste oppure ad un albero,

Nell'albero con sentinella, la cosa difficile è costruirlo, deve essere profondo N, poi la determinazione del cammino più pesante è facile

Stessa cosa per la lista, bisognerebbe creare una recursiva che mi crei tutte le possibili liste di N elementi su un tot di elementi in totale
elect è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:10   #5
elect
Senior Member
 
L'Avatar di elect
 
Iscritto dal: Dec 2003
Città: Hamburg/Torino
Messaggi: 2757
Quote:
Originariamente inviato da ramarromarrone Guarda i messaggi
una struttura possibile è questa

struct esercizio {
char *nome_esercizio;
int dispendio_energetico;
int *fasi;
};
typedef struct esercizio esercizio;

Anche qui c'eran diverse idee, un vettore di dimensione 4 per le fasi? O un campo per ogni fase messo a 1 se esiste o 0 se è vuoto?

Poi, ad esempio se trovo la combinazione migliore della fase 1 e questa include gli addominali_alti devo eliminarli da tutte le altre possibili ricerche per la combinazione migliore delle altre fasi..


Un'altra struttura era quella di di non avere copie per ogni singolo esercizio (come può essere ad es per addominali_alti nell'1 e nel 2) ma fare delle liste per ogni fase utilizzando dentro ogni struct 4 puntatori, uno per fase (ad es addominali_alti avrà puntatori per la fase 1 e 2 mentre 3 e 4 saranno inizializzati a NULL
elect è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:11   #6
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
visto che ti piacciono le cose complicate allora perchè ,anzichè tenerti in memoria strutture dati così pesanti, non crei volta per volta uno stack(alto N) in cui provi tutte le combinazioni possibili per soddisfare la richiesta? risparmi un sacco di memoria!
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:12   #7
elect
Senior Member
 
L'Avatar di elect
 
Iscritto dal: Dec 2003
Città: Hamburg/Torino
Messaggi: 2757
Quote:
Originariamente inviato da ramarromarrone Guarda i messaggi
visto che ti piacciono le cose complicate allora perchè ,anzichè tenerti in memoria strutture dati così pesanti, non crei volta per volta uno stack(alto N) in cui provi tutte le combinazioni possibili per soddisfare la richiesta? risparmi un sacco di memoria!
Non hai capito non è che mi piacciono, è che devo far così
elect è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:16   #8
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
Quote:
Originariamente inviato da elect Guarda i messaggi
Anche qui c'eran diverse idee, un vettore di dimensione 4 per le fasi? O un campo per ogni fase messo a 1 se esiste o 0 se è vuoto?
un puntatore a intero è la cosa migliore...se un certo esercizio compare in 3 fasi farai
fasi = realloc(fasi, 3 * sizeof(int)); e lo riempi..

Quote:
Poi, ad esempio se trovo la combinazione migliore della fase 1 e questa include gli addominali_alti devo eliminarli da tutte le altre possibili ricerche per la combinazione migliore delle altre fasi..
questo non ho capito cosa vuoi dire...

Quote:
Un'altra struttura era quella di di non avere copie per ogni singolo esercizio (come può essere ad es per addominali_alti nell'1 e nel 2) ma fare delle liste per ogni fase utilizzando dentro ogni struct 4 puntatori, uno per fase (ad es addominali_alti avrà puntatori per la fase 1 e 2 mentre 3 e 4 saranno inizializzati a NULL
non ti serve fare liste per ogni fase...ogni volta controlli se l'esercizio può essere incluso nella fase corrente...così non avrai duplicati o strutture superflue..
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:18   #9
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
Quote:
Originariamente inviato da elect Guarda i messaggi
Non hai capito non è che mi piacciono, è che devo far così
viene + semplice con uno stack che non alberi o liste di liste secondo me..
poi boh dovete un pò vedere voi come preferite i miei sono solo consigli di come lo farei io
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:20   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Se e' un esercizio di programmazione fallo pure in modo iterativo esaurendo tutte le possibili combinazioni.
Se invece e' un erecizio di ricerca operativa o di ottimizzazione dovresti risolverlo con il Knapsack problem, che per casi come questo, ovvero quelli binari (prendo ciascun esericizio 0 o 1 volta), ha una soluzione ottima.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:28   #11
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
ha una soluzione ottima.
non è che sia proprio vero eh...
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:38   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ramarromarrone Guarda i messaggi
non è che sia proprio vero eh...
Trova la soluzione ottima in tempo polinomiale.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 17:59   #13
ramarromarrone
Senior Member
 
Iscritto dal: Jun 2007
Messaggi: 497
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Trova la soluzione ottima in tempo polinomiale.
è un problema di natura NP-completa non sempre fornisce una soluzione ottima

cmq basta off topic sennò gli facciamo + casino che altro
ramarromarrone è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 18:06   #14
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ramarromarrone Guarda i messaggi
è un problema di natura NP-completa non sempre fornisce una soluzione ottima

cmq basta off topic sennò gli facciamo + casino che altro
No scusa, NP-completa non significa che non si trovi la risposta ottima, che si riesce a trovare invece quasi sempre.
Significa solo che non e' dimostrabile che si possa trovare la soluzione algoritmicamente migliore di tutte per raggiungere la risposta.

In questo caso il risultato ottimo si trova sempre. E' sufficiente provare tutte le combinazioni, che si trovano comunque in tempo finito.

Ok, basta OT.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Uber ha trovato il partner per i robotax...
Sony pronta a dire addio al marchio PSN:...
ARCTIC Senza AI 370: il PC 'sotto la scr...
Corsair 3200D, il mid-tower sotto i 100€...
Esiste un SSD NVMe M.2 2280 da 16 TB, ma...
Speciale LEGO in sconto su Amazon: set d...
Il citofono si evolve: ecco le novit&agr...
MindsEye cambia rotta: Build A Rocket Bo...
Offerte Amazon in tempo reale: i miglior...
Ecco come potrebbe apparire Project Heli...
Carl Pei immagina un futuro senza app: g...
Google lancia il "vibe design"...
NVIDIA non ha intenzione, almeno per ora...
Recensione Realme 16 Pro+ 5G: la fascia ...
FBI, ammesso l'acquisto di dati privati:...
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: 14:50.


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