Esercitazione di laboratorio n. 4

Transcript

Esercitazione di laboratorio n. 4
POLITECNICO DI TORINO
CORSO DI LAUREA IN INGEGNERIA INFORMATICA/TELECOMUNICAZIONI
CORSO DI ALGORITMI E PROGRAMMAZIONE
Esercitazione di laboratorio n. 4
La corretta risoluzione del primo esercizio sarà oggetto di valutazione ai fini dell’attribuzione
del punteggio per i laboratori.
Esercizio n. 1: occorrenze di parole.
Si scriva un programma in grado di contare le occorrenze di ogni parola, appartenente a un insieme specificato, all’interno di un generico testo.
Più in dettaglio, l’elenco delle parole da ricercare è memorizzato in un file di testo, in ragione di
una parola per riga del file. La lunghezza delle singole parole è limitata a 20 caratteri, e inoltre il
numero totale di tali parole è indicato sulla prima riga del file stesso.
Le parole così specificate devono essere ricercate in un testo memorizzato in un secondo file. Il
numero di righe di questo file è indefinito, ma si può assumere che la lunghezza di ogni riga sia
al più pari a 100 caratteri.
Come output, il programma deve riportare su video l’elenco delle parole contenute nel primo
file, ciascuna seguita dal numero di occorrenze con cui compare nel testo contenuto nel secondo
file. Si noti che i due file devono essere letti una volta sola.
Si trascurino i possibili problemi derivanti dall’uso della punteggiatura (ovvero si considerino le
stringhe “parola”, “parola.”, “parola!”, etc., come diverse).
POSSIBILE VARIANTE
Si trattino le lettere maiuscole e quelle minuscole come equivalenti (ovvero, si considerino le
stringhe “parola”, “PAROLA”, “ParolA”, etc., come corrispondenti).
Esempio (valido per la variante)
Sia il file con l’elenco delle parole da ricercare il seguente:
4
edison
e’
genio
citazione
e il file con il testo il seguente:
il genio non e’ altro che una grande attitudine alla pazienza, Buffon
il Genio e’ la punta estrema della saggezza, Cocteau
il GENIO e’ 10% ispirazione e 90% sudore, Edison
Io un genio? Non diciamo sciocchezze..., Anonimo
NON occorre essere un GeNiO per risolvere questo esercizio, Nocco
Il programma deve dunque visualizzare il messaggio:
edison – 1 occorrenza/e
e’ – 3 occorrenza/e
genio – 4 occorrenza/e
citazione – 0 occorrenza/e
Esercizio n. 2: indice analitico.
Si completi il codice ottenuto dall’esercizio precedente in maniera tale che, oltre al numero di
occorrenze, il programma visualizzi anche le posizioni (intese come numero d’ordine all’interno
delle stringhe contenute nel testo, numerate progressivamente a partire da 1) in cui le parole
specificate dal primo file sono state rintracciate nel secondo file.
Si considerino due casi:
1. il programma limiti la visualizzazione di tali posizioni alle prime 10 occorrenze di ciascuna
parola (qualora una stringa venisse rintracciata più di 10 volte, il programma fornisca il
conteggio esatto delle occorrenze, ma riporti solo le prime 10 posizioni)
2. il programma visualizzi correttamente tutte le posizioni in cui ogni parola del primo file
appare nel secondo
Si noti che nel primo caso è sufficiente utilizzare, per ciascuna parola da rintracciare, un vettore
statico, il cui contenuto può essere generato durante la stessa fase di conteggio delle occorrenze. Nel
secondo caso, invece, a meno di ricorrere a qualche altra struttura dati, si deve utilizzare un vettore
dinamico, allocato e “riempito” solo dopo aver trovato il numero di occorrenze di ciascuna parola.
Esempio
Con riferimento all’esempio precedente, il programma deve generare a video le informazioni:
edison – 1 occorrenza/e – parola/e: 31
e’ – 3 occorrenza/e – parola/e: 4 16 25
genio – 4 occorrenza/e – parola/e: 2 15 24 43
citazione – 0 occorrenza/e
Esercizio n. 3: prodotto di matrici.
Due matrici di interi (m1 e m2) sono memorizzate in due file con formato identico:
• la prima riga del file contiene le dimensioni (numero di righe r e di colonne c) della matrice
• le r righe successive contengono i c valori che appartengono alla riga corrente della matrice
Si scriva un programma che:
• acquisisca dinamicamente le due matrici, verificando che le loro dimensioni permettano di
eseguire il prodotto m1 · m2
• calcoli la matrice prodotto (allocando dinamicamente anch’essa)
• memorizzi tale matrice in un terzo file, con formato simile a quello di ingresso
I nomi dei tre file siano passati al programma sulla riga di comando.
Esempio
Siano i due file di ingresso di contenuto seguente:
matrice 1
2
-1
4
3
5
0
0
2
matrice 2
3 4
0 -3 -1 -1
1 1 0 2
-1 2 4 3
Allora il file di uscita dovrà avere contenuto:
2 4
5 8
-2 -8
1 11
4 2