|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2009
Messaggi: 7
|
Progetto in C (con riferimento all'ansi C)
Buongiorno a tutti .........
Dovrei fare il seguente progetto, ma avrei bisogno di aiuto x capire che struttura dati potrei utilizzare ........ congurazione inizialmente vuota (0[3],0[5]) In questo progetto si chiede di risolvere il problema dei contenitori nel caso generale. Si deve gestire una sequenza di n contenitori in ordine non decrescente di capacita c1 <c2 < cn inizialmente vuoti. Denotiamo con (k1; k2; : : : ; kn) la congurazione dei livelli d'acqua nei contenitori, dove 0 < ki < ci per ogni i = 1; : : : ; n. Sulla struttura dati che memorizza la sequenza devono essere denite le seguenti operazioni: - crea contenitori(n; c) Dato un intero n ed un vettore c = (c1; c2; : : : ; cn) di interi positivi, inizializza una sequenza di n contenitori inizialmente vuoti aventi capacita c1; c2; : : : ; cn. Ad esempio, crea sequenza(3; [2; 3; 6]) inizializzera la congurazione (0[2],0[3],0[6]). Se esiste gia una sequenza di contenitori, la cancella e ne crea una nuova. - riempi(i) Il contenitore i viene riempito no all'orlo: il suo livello passa da ki a ci. Ad esempio, riempi(2) sulla congurazione (0[2],2[3],0[6]) porta alla congurazione (0[2],3[3],0[6]). L'operazione non e valida se il contenitore i è gia pieno. 1 - svuota(i) Il contenitore i viene svuotato completamente: il suo livello passa da ki a 0. Ad esempio, svuota(2) sulla congurazione (0[2],2[3],0[6]) porta alla congurazione (0[2],0[3],0[6]). L'operazione non e valida se il contenitore i e gia vuoto. - travasa(i; j) L'acqua del contenitore i viene versata nel contenitore j no al completo riempimento di j o al completo svuotamento di i: se ki + kj < cj allora ki diventa 0 e kj diventa kj + ki, altrimenti ki diventa ki - (cj - kj) e kj diventa cj . Ad esempio, data la congurazione (0[2],3[3],2[6]), travasa(2; 1) porta alla congurazione (2[2],1[3],2[6]) mentre travasa(2; 3) porta alla congu- razione (0[2],0[3],5[6]) L'operazione non e valida se i è gia vuoto o se j e gia pieno. - visualizza() Visualizza la congurazione attuale. - livelli(k) restituisce tutti i contenitori che nella congurazione attuale hanno livello uguale a k. Se nessun contenitore ha livello k, non stampa nulla. Ad esempio, livelli(2) chiamato sulla congurazione (2[2],2[3],0[6]) restituisce 1, 2. - mosse(d) Stampa tutte le congurazioni direttamente raggiungibili eseguendo d operazioni dalla congu- razione attuale. Ad esempio, dalla congurazione (2[3],0[5]) con una mossa si possono raggiun- gere le congurazioni (3[3],0[5]) con riempi(1), (2[3],5[5]) con riempi(2), (0[3],0[5]) con svuota(1) e (0[3],2[5]) con travasa(1; 2). - cammino minimo(k) Stampa la piu corta sequenza di operazioni che porta dalla congurazione iniziale ad una con- gurazione contenente il valore k come livello di almeno un contenitore. Se non esiste nessuna congurazione raggiungibile che contiene il valore k, allora stampa ERRORE!. Ad esempio, John e Zeus hanno seguito la piu corta sequenza di operazioni che porta ad una congurazione conte- nente un 4: (0[3],0[5]), (0[3],5[5]), (3[3],2[5]), (0[3],2[5]), (2[3],0[5]), (2[3],5[5]), (3[3],4[5]). - contenenti(k; h) Stampa le congurazioni raggiungibili che contengono contemporaneamente i livelli k e h, pre- senti in un ordine qualunque. Se non esistono congurazioni soddisfacenti la condizione, stampa NON PRESENTI!. Si noti che le operazioni richieste sono liberamente implementabili; in particolare, non vanno necessaria- mente intese come prototipi di funzioni. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Beh, come struttura dati direi che un semplice array ti calza a pennello.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Nov 2009
Messaggi: 7
|
Si ma dovrei fare 1 array di puntatori però .......
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2007
Città: Cassano M.go (Va)
Messaggi: 631
|
6 riuscito a risolvere il problema?? xkè lo sto facendo pure io ma mi sono bloccato sulle funzioni cammino_minimo e mosse!!
Le altre le ho fatte usando semplicemente un array dinamico....
__________________
PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2007
Città: Cassano M.go (Va)
Messaggi: 631
|
Eh si....
![]()
__________________
PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:07.