Sei sulla pagina 1di 24

Esercitazione 2 [ES2]

Laboratorio e Programmazione

mercoled 7 dicembre 11

Modalit di consegna

Svolgere ciascuno degli esercizi elencati, in linguaggio C. Commentare opportunamente il codice e inserire una sezione di commento iniziale nella forma: /* Nome Cognome Esercizio N Descrizione del programma */

Preparare un le .zip contenente una directory denominata "ES2_Cognome_Nome" all'interno della quale si trovino una directory per ciascun esercizio, a sua volta contente i le sorgenti (commentati), e un le di testo denominato "readme.txt" contenente una breve relazione che descriva il lavoro svolto, le scelte di implementazione, le osservazioni degne di nota e gli eventuali problemi incontrati. NON includere gli eseguibili! Inviare via email all'indirizzo luca.tomassetti@unife.it il le .zip mettendo come oggetto/subject "PROG. ES2" La consegna delle esercitazioni obbligatoria. La valutazione in trentesimi e far media con lesame scritto e orale degli appelli ufciali.

Consegna entro la scadenza: voto massimo 30/30. Consegna oltre la scadenza, [OR logico] senza la documentazione (readme.txt e commenti) richiesta o [OR logico] non nelle modalit richieste: voto massimo raggiungibile 24/30. Esercitazioni non consegnate o copiate faranno media con le altre con una valutazione pari a 0/30.

mercoled 7 dicembre 11

Modalit di svolgimento
Realizzare quanto richiesto da ciascun Usare funzioni, o librerie di funzioni
personali, strutture, puntatori, etc... esercizio nel modo che riterrete piu appropriato, con lobiettivo di rendere il codice snello, elegante ed efciente

mercoled 7 dicembre 11

Elenco esercizi
1. 2. 3. 4. 5. 6. 7. 8. 9. Istogramma (vettori) Shift e rotazione vettori Compattazione vettori Occorrenze (vettori) Intersezione tra vettori Vocali e consonanti Conversione da binario a decimale Nomi di persona (stringhe e vettori) Caratteri duplicati 10. Matrice NxN a spirale 11. Concorso di intelligenza 12. Limpiccato 13. Limpiccato bis 14. Lunghezza delle parole 15. Media e deviazione standard (aritmetica e pesata) 16. Ordinamento di vettori 17. Immagine bitmap 18. Calcolatrice

mercoled 7 dicembre 11

E1 - Istogramma

Scrivere un programma che riceve in ingresso una sequenza di N numeri interi.

Il valore N inserito dallutente. I numeri sono memorizzati in un vettore. Terminato linserimento della sequenza di numeri, il programma deve visualizzare una riga di asterischi per ogni numero inserito. Il numero di asterischi nella riga pari al valore del numero inserito.

Ad esempio, dato il vettore 9 4 6 il programma deve visualizzare: Elemento 1: 9 ********* Elemento 2: 4 **** Elemento 3: 6 ******

mercoled 7 dicembre 11

E2 - Shift e rotazione

Scrivere un programma che riceve in ingresso una sequenza di N numeri interi.

Il valore N inserito dallutente. I numeri sono memorizzati in un vettore. Il programma esegue le seguenti operazioni: 1. 2. 3. visualizza il vettore; viene presentato un menu di scelta: 0 - shift sx, 1 - shift dx, 2 - rotaz. sx, 3 - rotaz. dx, 9 - exit. per la scelta 0 [2], esegue uno spostamento (shift) [o rotazione] a sinistra di una posizione del contenuto del vettore. Pertanto ogni elemento del vettore deve assumere il valore dellelemento immediatamente successivo allinterno del vettore. Lelemento di indice N-1 deve assumere il valore zero [il valore dellelemento di indice 0]. Ad esempio dato il vettore: 1 10 15 18, il programma deve generare il vettore: 10 15 18 0. Il programma visualizza il vettore ottenuto e ripropone il menu di scelta; per la scelta 1 [3], esegue uno spostamento (shift) [o rotazione] a destra di una posizione del contenuto del vettore ottenuto nel passo precedente. Pertanto ogni elemento del vettore deve assumere il valore dellelemento immediatamente precedente allinterno del vettore. Lelemento di indice 0 deve assumere il valore zero [il valore dellelemento di indice N-1]. Ad esempio dato il vettore: 10 15 18 0, il programma deve generare il vettore: 0 10 15 18. Il programma visualizza il vettore ottenuto e ripropone il menu di scelta; termini quando si preme la scelta 9 oppure quando il vettore contiene solo elementi nulli.

4.

5.

mercoled 7 dicembre 11

E3 - Compattazione

Scrivere un programma che genera N numeri interi pseudo-casuali nellintervallo (0, N) e li memorizza in un vettore. Il numero N viene inserito dallutente ed minore di 50. Il programma deve generare un secondo vettore che compatta i numeri contenuti nel primo vettore. In particolare:

ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta nel secondo vettore; ogni numero uguale a zero presente nel primo vettore non deve comparire nel secondo vettore. Il programma deve visualizzare il contenuto del secondo vettore. Ad esempio, si supponga N=8 e si consideri la sequenza di numeri 1 7 3 0 8 3 6 0. Il programma deve visualizzare 1 7 3 8 6.

mercoled 7 dicembre 11

E4 - Occorrenze

Scrivere un programma che genera N numeri interi pseudo-casuali nellintervallo (0, N) e li memorizza in un vettore. Il numero N viene inserito dallutente ed minore di 50. Il programma deve visualizzare, per ogni cifra contenuta nel vettore, il numero di occorrenze. Ad esempio, si supponga N=7 e si consideri la sequenza di numeri 1 6 5 6 2 5 5. Il programma deve visualizzare: numero 1 occorrenze 1 numero 6 occorrenze 2 numero 5 occorrenze 3 numero 2 occorrenze 1 Suggerimento. Per ogni numero presente nel vettore, il numero di occorrenze deve essere visualizzato una sola volta (ad esempio per i numeri 6 e 5). Utilizzare un vettore di supporto per poter tenere traccia dei numeri nel vettore per cui sono gi state calcolate le occorrenze.

mercoled 7 dicembre 11

E5 - Intersezione Array

Siano dati due vettori di interi generati in modo pseudo-casuale nellintervallo (10, 50). La lunghezza dei due vettori inserita dallutente da tastiera. I due vettori possono avere lunghezze diverse, ma possono contenere al massimo 50 numeri. Si scriva un programma per generare un terzo vettore che contiene lintersezione tra due vettori. Tale vettore deve quindi contenere i numeri presenti in entrambi i vettori dati. Ad esempio, si assuma che siano stati inseriti i due vettori: 10 16 15 20 25 12 20 18 16 Il programma deve generare e visualizzare la sequenza 16 20.

mercoled 7 dicembre 11

E6 - Vocali e Consonanti

Scrivere un programma che legga una frase introdotta da tastiera. La frase terminata dallintroduzione del carattere di invio. La frase contiene sia caratteri maiuscoli che caratteri minuscoli, e complessivamente al pi 100 caratteri. Il programma dovr stampare su schermo le seguenti informazioni:


mercoled 7 dicembre 11

per ognuna delle lettere dellalfabeto, il numero di volte che la lettera compare nella stringa il numero di consonanti presenti nella stringa il numero di vocali presenti nella stringa.

E7 - Conversione 2-10

Scrivere un programma che legga da tastiera un numero binario puro sotto forma di una stringa di caratteri (0 o 1) lunga al massimo 24 bit. Il programma deve:

controllare che la stringa inserita sia corretta, vale a dire composta solo da caratteri 0 e 1; convertire il numero binario inserito nellequivalente valore decimale; stampare sul video il valore decimale; calcolare la divisione (intera) per 2 del numero binario inserito, stampare sul video il valore binario della divisione, convertire nel valore decimale e stamparlo sul video.

mercoled 7 dicembre 11

E8 - Nomi...

Un programma legge dallutente una serie di nomi di persona. Linserimento termina quando lutente immette il nome fasullo *. Il programma dovr stampare:

quanti nomi sono stati inseriti; qual il nome che, nellordine alfabetico, verrebbe per primo; qual il nome pi lungo, e di quanti caratteri composto.

mercoled 7 dicembre 11

E9 - Caratteri duplicati

Data una stringa A letta da tastiera, si realizzi un programma che calcoli una seconda stringa B ottenuta dalla prima cancellando tutti i caratteri che compaiono pi di una volta.


mercoled 7 dicembre 11

La stringa risultante deve dunque contenere i caratteri della prima stringa, nello stesso ordine, ma senza ripetizioni. Esempio: PROGRAMMAZIONE E LABORATORIO diviene PROGAMZIE LBT.

E10 - Spirale
Si scriva un programma che, data una
matrice quadrata N x N, stampi gli elementi di tale matrice secondo un ordinamento a spirale, partendo dalla cornice pi esterna e procedendo verso linterno. per riga.

Inizializzare la matrice con interi sequenziali


mercoled 7 dicembre 11

E11 - Concorso?

In un concorso di intelligenza, N giudici esprimono il loro giudizio su K candidati. Il giudizio un valore numerico tra 0 e 5. Si scriva un programma per determinare il candidato pi intelligente, ed il giudice pi severo.

Il numero dei giudici (N) e dei candidati (K) vengono scelti dallutente inserendoli da tastiera. Il giudizio viene generato in modo pseudo-casuale. Il programma deve stampare i giudizi di ciascun giudice per ciascun candidato e individuare quale candidato ha ottenuto il giudizio totale maggiore e quale giudice ha espresso i giudizi totali minori.

mercoled 7 dicembre 11

E12 - Impiccato

Si realizzi un programma che permetta di giocare al gioco dellimpiccato. Il gioco si svolge tra due giocatori: il primo giocatore inserisce la parola segreta da indovinare, mentre il secondo la deve indovinare. Il secondo giocatore conosce la lunghezza della parola segreta, e ad ogni tentativo specica una lettera (si considerino le lettere maiuscole equivalenti alle minuscole): se tale lettera compare nella parola, il programma indica in quali posizioni, altrimenti il tentativo considerato un errore. Il gioco termina quando il secondo giocatore ha indovinato tutte le lettere della parola (ed in tal caso egli vince) oppure quando ha totalizzato 10 errori (nel qual caso perde). Esempio: Giocatore 1, immetti la parola segreta: Esame Giocatore 2, indovina! La parola e: _ _ _ _ _ Tentativo? e Indovinato! La parola e: E _ _ _ E Tentativo? o Errore! La parola e: E _ _ _ E Tentativo? a Indovinato! La parola e: E _ A _ E ...e cos via.

mercoled 7 dicembre 11

E13 - Impiccato bis


Si realizzi nuovamente un programma che Il programma deve autonomanente
scegliere una parola da far indovinare al giocatore da un insieme predenito di parole presenti in un le di testo [parole.txt]. permetta di giocare al gioco dellimpiccato.

mercoled 7 dicembre 11

E14 - Lunghezza parole



Si scriva un programma in grado di analizzare il contenuto di un le di testo e di calcolare la distribuzione di frequenza della lunghezza delle varie parole in esso contenute. Per le nalit del presente programma, si denisce parola una sequenza di caratteri alfanumerici. Il programma riceve sulla linea di comando il nome del le da analizzare e produce in uscita una tabella con le frequenze, espresse in valore assoluto (non in percentuale).

mercoled 7 dicembre 11

E14 - ...

Esempio: Si supponga che il le diario.txt contenga il seguente testo: Cera una volta... "Un Re", diranno i miei piccoli lettori. No, cera una volta un pezzo di legno! e che il programma (denominato freqlett.c) venga invocato con il seguente comando: freqlett diario.txt Il programma dovr produrre in uscita: Frequenza delle lunghezze delle parole Parole lunghe 1 caratteri: 3 Parole lunghe 2 caratteri: 5 Parole lunghe 3 caratteri: 4 Parole lunghe 4 caratteri: 1 Parole lunghe 5 caratteri: 4 Parole lunghe 7 caratteri: 3 Infatti le parole di 1 carattere sono C i c, quelle di 2 caratteri sono Un Re No un di, quelle di 3 caratteri sono era una era una, quelle di 4 caratteri sono miei, quelle di 5 caratteri sono volta volta pezzo legno e quelle di 7 caratteri sono diranno piccoli lettori.

mercoled 7 dicembre 11

E14 - ...
sfruttando il lavoro svolto per lesercizio

sugli istogrammi, visualizzare anche listogramma delle frequenze, sia in valore assoluto, sia in percentuale

mercoled 7 dicembre 11

E15 - Media e devst


Si scriva un programma che legga da un le di dati [dati.txt] i valori dei voti ottenuti e dei crediti del corrispondente esame Si calcoli la media aritmetica e quella pesata (sui crediti) e le corrispondenti deviazioni standard. Il le di dati contiene in ogni riga una stringa con il nome dellesame, un intero con il voto, un char per leventuale lode [L] e un intero con il numero di crediti. Ciascun valore separato da un tab [\t]
Programmazione e Laboratorio 30 Basi di Dati e Laboratorio 30 Fisica 28 6 ... L 12 12

mercoled 7 dicembre 11

E16 - Ordinamento

Scrivere un programma che inizializzi un vettore di dimensione N specicata dallutente con numeri reali pseudo-casuali generati nellintervallo (-1, 1)


mercoled 7 dicembre 11

Visualizzare il vettore Ordinare e stampare a video il vettore in ordine crescente [Vasc] Ordinare e stampare a video il vettore in ordine decrescente [Vdesc] !!

E17 - Immagine
Scrivere un programma che generi
unimmagine rettangolare di dimensioni 2NxN, con N specicato dallutente (N<200) con il contenuto mostrato in gura. richiesta

Generare un le .bmp con limmagine


red: (255,0,0) green: (0,255,0) blue: (0,0,255) white: (255,255,255)
mercoled 7 dicembre 11

E18 - Calcolatrice
Scrivere un programma che realizzi una

semplice calcolatrice con le 4 operazioni di base (+-*/).

Suggerimento: utilizzare il costrutto case.

mercoled 7 dicembre 11