Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
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


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Samsung Galaxy Buds3 FE a meno di 95€ su...
Praticamente regalate: 135€ per le Squie...
Si rinnovano i coupon nascosti di settem...
Amazon sconta i componenti: occasioni d'...
Vibe coding: esplode la domanda di esper...
Ring Intercom su Amazon: citofono smart ...
Addio regie complicate: un'AI gestir&agr...
Xbox, nuovo aumento dei prezzi negli Sta...
Adesso ci si può laureare in stor...
Impact.com ridefinisce il performance ma...
Nintendo non considera le mod dannose pe...
Dreame inaugura il suo flagship store a ...
OpenAI e Jony Ive: in arrivo un disposit...
TikTok, secondo Trump l'accordo con Xi &...
HUAWEI, tutte le novità dell'even...
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: 09:07.


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