Esercizio per casa numero 2
Vedi anche
DomandeHomework2aa0203,
SoluzioneHomework2aa0203,
RisultatiHomework2aa0203.
Obiettivi
Con questo esercizio cercherete di controllare se sapete:
- usare i vettori
- usare cicli e strutture di controllo un po' più complesse
Simple-Bucket-sort
Per ordinare gli elementi di un vettore di numeri è possibile usare l'algoritmo
bucket-sort, che è molto efficiente ma usa molta memoria.
(per saperne di più sul
bucket-sort vedete sul Deitel&Deitel).
Nel caso in cui si sappia quali sono il massimo ed il minimo valore che possono essere presenti nel vettore è possibile usare una versione molto semplificata dell'algoritmo
bucket-sort, che chiameremo
simple-bucket-sort.
- Supponiamo di avere un vettore che si chiama unsorted che contiene numeri interi diversi.
- Supponiamo inoltre che gli elementi di unsorted siano tutti compresi tra i due valori min e max, inclusi.
- Definiamo un vettore v che ha tanti elementi quanti quelli che intercorrono tra min e max compresi. Questo vettore serve ad indicare che il valore corrispondente è presente nel vettore da ordinare unsorted. Daremo valore 1 ad un elemento di v se in unsorted è presente il numero corrispondente.
- Esaminiamo tutti gli elementi di unsorted e settiamo a 1 i corrispondenti elementi di v.
- Per elencare i numeri di unsorted in ordine crescente basta scandire tutti gli elementi di v e stampare l'elemento corrispondente quando ci si trova un 1.
Compito da svolgere
Implementare un programma C che:
- Legge da input una successione di 20 interi diversi di valore compreso tra min = -84 e max = 531.
- Usa l'algoritmo simple-bucket-sort per ordinare gli elementi letti.
- Stampa le solite 6 righe che vi identificano:
<nome>
<cognome>
<giorno di nascita (2 cifre)>
<mese di nascita (2 cifre)>
<anno di nascita (4 cifre)>
<indirizzo email>
- Stampa gli elementi in ordine crescente.
Parte facoltativa
- realizzare il programma precedente in modo che tra i numeri in input possano esserci anche delle ripetizioni.
NOTA: chi vuol fare la versione facoltativa la sottometta
invece della versione standard.
Formato dell' input e dell'output
Input | Output |
<intero>
....
<intero>
....
<intero>
|
L'output e' formattato come segue.
Le prime 6 righe di stampa sono formattate come segue.
<nome>
<cognome>
<giorno di nascita (2 cifre)>
<mese di nascita (2 cifre)>
<anno di nascita (4 cifre)>
<indirizzo email>
Le rimanenti righe sono formattate come segue.
<valore minimo>
<valore>
...
...
<valore massimo>
|
Gestione degli errori
Anche per questo esercizio assumete che l'input sia corretto.
Prompt e messaggo
Anche per questo esercizio non scrivete prompt o messaggi
Esempio
Ecco un esempio per il programma dello studente Mario Rossi della Spigola
nato il 17.05.1723 ed email mrds@nessun.posto.it.
Testate il vostro programma almeno sull'esempio proposto
controllando che, per il dato input, l'output (a parte le prime 6 righe) sia ESATTAMENTE
quello riportato nell'esempio.
Input | Output |
56
31
49
17
-6
-18
0
90
531
-40
121
3
55
91
300
12
-23
-1
-34
-84
|
Mario
Rossi della Spigola
17
05
1723
mrds@nessun.posto.it
-84
-40
-34
-23
-18
-6
-1
0
3
12
17
31
49
55
56
90
91
121
300
531
|
Consegna
- Il testo del vostro programma va consegnato entro le ore 24 del 1° Novembre 2002.
- La consegna va effettuata esclusivamente con la pagina http://twiki.dsi.uniroma1.it/~andrea/consegna.html
- NON ASPETTATE L'ULTIMO MINUTO!!! Rischiate di sovraccaricare il server e di non poter consegnare.
- NON SARANNO ACCETTATI ESERCIZI CONSEGNATI VIA EMAIL
--
AndreaSterbini - 26 Oct 2002