esercizio programmazione linguaggio C

Messaggioda alemaddi » 28/08/2015, 15:53

Ciao a tutti!
Ho provato a svolgere un esempio di tema d'esame ma ho avuto difficoltà già solo a capire il testo.
Ve lo riporto sperando che qualcuno di voi abbia la pazienza di leggerlo e darmi qualche consiglio. Grazie!

"Gestire l'arrivo ad un porto di N navi(la quantità N deve essere definita tramite la direttiva #define). Le dimensioni dei moli sono in metri.
Le dimensioni sono riportate in un file, da linea di comando come primo argomento, con N righe. Ogni riga è di questo tipo: <molo> <metri>, in cui molo e metri sono due numeri interi.
Si chiede di gestire l'arrivo della navi in porto, farle attraccare al molo più adatto. La nave e la dimensione sono inserite da tastiera fino al ricevimento della stringa QUIT o finchè tutti i moli non sono occupati.
Non possono attraccare al porto navi più piccole del molo ma navi più grandi. Le navi vanno allocate su un molo libero o con lunghezza con minore differenza rispetto alla nave.
Segnalare se il molo può ospitare una nave e se tutti i moli sono occupati mandare un messaggio e terminare"

:shock: :shock:
alemaddi
Junior Member
Junior Member
 
Messaggio: 77 di 286
Iscritto il: 11/01/2015, 13:36

Re: esercizio programmazione linguaggio C

Messaggioda Sherlock.h » 28/08/2015, 20:51

La traccia sicuramente non è molto chiara, ennesima conferma della moda di dare esercizi ed esempi legati a situazioni che ricordino vagamente il mondo reale.

Attenendoci a considerazioni più tecniche si tratta di implementare a mio avviso (ma non escludo un mio errore, magari legato anche a una cattiva interpretazione della traccia) un algoritmo che ricorda vagamente quello "Best fit" (tanto per rendere l'idea: in qualche modo simile a quelli usati dai sistemi operativi per la gestione della memoria prima dell'introduzione della paginazione).

Per ogni "nave" in input dovrai scegliere di volta in volta qual è il molo in cui vai a sprecare meno slot possibili, e dopo aver inserito una nuova nave all'interno del molo, dovrai sottrarre alla "lunghezza" del molo quella relativa alla nave.

Per cercare di essere più chiaro, ti fornisco un esempio decisamente banale (ribadisco che le mie considerazioni sono personali, e che potrei star prendendo una sonora cantonata)

Supponiamo che abbia la possibilità di piazzare una nave in 3 moli differenti: uno di lunghezza 2, l'altro di lunghezza 5, e l'ultimo di lunghezza 7.

Se arriva una nave di lunghezza 5, in quello da 2 non può andare, ma a prescindere ovviamente la piazzi in 5, poiché non corri rischi di lasciare slot vuoti, occupando in modo ottimale gli slot.
Ipotizziamo ad esempio che si decida di far attraccare la stessa nave di lunghezza 5 al molo di lunghezza 7.
Dopo aver piazzato lì la suddetta nave, al molo in questione sarà possibile far attraccare solo navi di lunghezza 1 o 2.

E se d'ora in poi arriveranno solo navi di lunghezza pari a 3 o superiore non ci sarà più molto da fare...

Altro esempio:
Se invece la stessa nave da 5, poteva essere parcheggiata solo in un molo da 6 o da 7? Beh, blocco 6. Sprechi meno "slot".
Avatar utente
Sherlock.h
New Member
New Member
 
Messaggio: 22 di 64
Iscritto il: 11/05/2014, 15:42

Re: esercizio programmazione linguaggio C

Messaggioda alemaddi » 29/08/2015, 10:34

Grazie per la risposta!
Purtroppo non studio nè informatica nè ingegneria informatica quindi mi sembra arabo..
Proverò a lavorarci anche grazie alle tue idee!
alemaddi
Junior Member
Junior Member
 
Messaggio: 79 di 286
Iscritto il: 11/01/2015, 13:36

Re: esercizio programmazione linguaggio C

Messaggioda apatriarca » 29/08/2015, 18:26

Che cosa studi? Il testo è in effetti poco chiaro e denota, a mio parere, una mancanza di rispetto verso gli studenti che devono affrontare l'esame. E' vero che le specifiche dei clienti non sono mai molto chiare, ma non è certo una problematica davanti alla quale dovrebbero trovarsi studenti al loro primo esame di informatica. Scrivere un testo in modo chiaro e preciso non richiede poi tanto tempo. Credo inoltre che un esempio di input e output sia fondamentale per eliminare possibili ambiguità.

Dalla descrizione del problema capisco le seguenti cose:

1. C'è una costante N che rappresenta il numero di moli all'interno del porto. Questa costante va definita all'inizio del sorgente con una direttiva #define. Ad esempio:
Codice:
#define N 10

Sfortunatamente non è chiaro quale valore si debba scrivere nella soluzione al problema.

2. I moli sono descritti all'interno di un file il cui nome viene passato come primo argomento al programma (sarà quindi in argv[1] se vengono usati i nomi "standard" per gli argomenti del main). Questo file avrà N righe e in ogni riga ci sono due valori interi. Il primo identifica il molo e il secondo rappresenta la dimensione del molo. Il tuo programma andrà quindi chiamato da linea di comando con una istruzione tipo:
Codice:
nome_programma file.txt

dove file.txt avrà (per esempio) il seguente contenuto:
Codice:
1 100
2 30
3 75
4 68
5 130
6 15
7 34
8 93
9 72
10 84

All'inizio del main dovrai quindi aprire questo file di testo e memorizzare i valori in un qualche arrray di lunghezza N.

3. Le navi vengono invece inserite da tastiera. Ogni nave è descritta da due valori interi: il numero identificativo e la sua dimensione. L'elenco delle navi terminerà con l'inserimento da tastiera della parola QUIT o finché tutti i moli saranno segnati come occupati. Un esempio di input potrebbe quindi essere:
Codice:
125 40
12 34
14 100
QUIT


4. A questo punto la frase "Non possono attraccare al porto navi più piccole del molo ma navi più grandi." sembrerebbe indicare che una nave di dimensione 50 può attraccare in un molo di dimensione 15 ma non in un molo di dimensione 75. Va un po' contro quella che è la mia intuizione, ma così sembra dire il testo.

5. Ogni nuova nave letta da tastiera dovrai indicare il molo in cui farla attraccare. Questo molo va scelto in base al criterio precedente e alla differenza tra la lunghezza della nave e quella del molo. Tra tutti i moli liberi devi cioè scegliere quello la cui lunghezza sia più vicina alla lunghezza della nave. Se non ci sono moli adatti ad una nave immagino tu debba indicare un messaggio di errore. Se tutti i moli sono occupati devi invece scrivere un messaggio e terminare.

Spero di aver messo un po' più di chiarezza, anche se il testo è poco chiaro e potrei aver frainteso qualcosa. L'interpretazione di @Sherlock.h è in effetti diversa.
apatriarca
Moderatore
Moderatore
 
Messaggio: 3920 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: esercizio programmazione linguaggio C

Messaggioda Sherlock.h » 30/08/2015, 09:19

In effetti ha totalmente ragione Apatriarca... :oops:
La traccia già è quel che è, ed è evidente che io l'abbia letta anche con eccessiva sufficienza.
Forse mi sono fatto guidare dalla mia idea sul come risolvere il problema già durante la lettura, o semplicemente ho considerato lo scenario che, in tutta onestà, continuo a reputare più intuitivo, fatto sta che non ho prestato la necessaria attenzione a queste due righe che sono assolutamente necessarie al fine di una corretta interpretazione della traccia:
Non possono attraccare al porto navi più piccole del molo ma navi più grandi. Le navi vanno allocate su un molo libero o con lunghezza con minore differenza rispetto alla nave.


Beh, ringrazio Apatriarca per essere intervenuto e mi scuso con alemaddi per il grave errore :oops:
Avatar utente
Sherlock.h
New Member
New Member
 
Messaggio: 23 di 64
Iscritto il: 11/05/2014, 15:42

Re: esercizio programmazione linguaggio C

Messaggioda alemaddi » 30/08/2015, 19:16

Ma nessun problema Sherlock.h! :)
Grazie mille Apatriarca! Ora è un po' più chiaro!
Studio ingegneria ambientale, questo è un esame del primo anno ma è uno degli ultimi che devo dare..
alemaddi
Junior Member
Junior Member
 
Messaggio: 80 di 286
Iscritto il: 11/01/2015, 13:36


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite