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