Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2008, 14: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, 15: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 16: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, 17: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


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Atari rilancia Intellivision Sprint e fa...
Leapmotor lancia in Italia il SUV elettr...
QNAP punta sempre più in alto con...
Scandalo ibride plug-in: consumano come ...
L'intelligenza artificiale fa sempre pi&...
Oracle dal punto di vista dell’Europa: l...
James Dyson Award 2025: dall'accessibili...
Xiaomi: gli smartphone con display poste...
Final Fantasy 7 Remake Part 3 offrir&agr...
Chery presenta Omoda 4, da benzina a ele...
TSMC alza i prezzi: Qualcomm e MediaTek ...
Una Offline Room per aiutare gli student...
Partnership EOLO-Qualcomm: connettivit&a...
Fanatec senza freni: ufficiali il nuovo ...
Instagram, arriva la classificazione PG-...
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: 16:10.


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