APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2017

Documenti analoghi
APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO II.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2014

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2018

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO I.2015

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

File binari e file di testo

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III.2018, PARTE 2.

Primi passi Output formattato Le quattro operazioni. Programmazione 1. Lezione 2 Parte 2. Vincenzo Marra.

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

Laboratorio di Programmazione (Corso di Laurea in Informatica)

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Programmazione (Corso di Laurea in Informatica)

Esercizi su strutture dati

Implementazione di DFA in C

Architettura di Reti

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

Esercitazione 2. Espressioni booleane Il comando if-else

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

IDE DevC

csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione

Passare argomenti al programma

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

Titolo presentazione

Dati aggregati. Violetta Lonati

Progetto: Dama. 1 - Descrizione. 2 - Regole del gioco. Appello di febbraio 2003

Laboratorio di Programmazione (Corso di Laurea in Informatica)

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Esame Laboratorio di Programmazione

Fondamenti di Informatica T-1

Introduzione a Visual Studio 2005

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

Ingresso ed Uscita in C. Informatica 1 / 15

Classe Vettore (i) Creare una classe che consenta di gestire un vettore di N elementi reali (double), che preveda i seguenti metodi:

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Elementi di Informatica e Programmazione

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Lezione 3. Ing. Giuseppe Chiapparo - Università di Roma Tor Vergata Corso di ingegneria degli algoritmi (parte pratica) A.A.

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

Capitolo 10 - Strutture

Corso di Informatica

Laboratorio di Informatica L-A

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Stringhe e allocazione dinamica della memoria

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

IMPORTAZIONE PRESENZE DA RILEVATORI ELETTRONICI. tramite file tracciato

I puntatori Referencing e Dereferencing Tipi e Dichiarazioni Assegnazioni. Programmazione 1. Lezione 11. Vincenzo Marra.

Fondamenti di Informatica

Laboratorio con DERIVE

Informatica B Esercitazione 3

Streams e disk files

Cosa serve per cominciare?

Ingresso ed Uscita in C. Luca Abeni

Elementi di informatica

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore );

IL PRIMO PROGRAMMA IN C

12 Function Handles e Ricorsione in MATLAB

MANUALE UTENTE PROCEDURA PLANET WEB INTERPRISE (II edizione)

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Gestione dei File. Credits Prof. Campi

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

PROCEDURE E FUNZIONI

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Manuale di KSquares. Matt Williams Revisore: Eugene Trounev Traduzione della documentazione: Federico Zenith

Programmazione II Compitino (Vers. A)

Debugger. Marco Alberti Programmazione e Laboratorio, A.A

Esercitazione 11. Liste semplici

1 Massimo pari e dispari di una sequenza

Strategie di programmazione

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

14Ex-Cap11.qxd :20 Pagina Le macro

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

Matlab: Script e Funzioni

4. I moduli in Access 2000/2003

IMPORTAZIONE PRESENZE DA RILEVATORI ELETTRONICI E MODULO TIMBRATURE. Indice

LA RUOTA DELLA FORTUNA

Transcript:

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2016 2017 18.IX.2017 VINCENZO MARRA Indice Premessa 2 Esercizio 1 2 Lettura da file della cartella e dell estrazione, e prima versione di main. 2 Punti: 10. 2 Esercizio 2 3 Rilevazione dell ambo e del terno. 3 Punti: 9. 3 Esercizio 3 4 Rilevazione della tombola. 4 Punti: 6. 4 Esercizio 4 4 Programma completo. 4 Punti: 5. 5 Istruzioni per la consegna 6 Avvertenza. Il tema d esame richiede lo sviluppo di un singolo programma che permetta di eseguire dei semplici controlli sui dati memorizzati nei file allegati al testo d esame, che codificano sia le estrazioni che le cartelle usate nel gioco della tombola. Svilupperete delle funzioni ausiliarie nel risolvere gli esercizi. Integrerete poi tutte le funzioni ausiliarie in un unico programma finale, che sarà costituito da un solo file sorgente. (Il tema d esame richiede esplicitamente l implementazione di alcune funzioni ausiliarie. È comunque sempre ammissibile aggiungere altre funzioni ausiliarie qualora lo riteniate opportuno per una migliore implementazione della vostra soluzione.) Si raccomanda di leggere interamente il tema d esame con attenzione prima di cominciare a scrivere le soluzioni dei singoli esercizi, in modo da avere chiaro l obiettivo finale. Ciò si applica a maggior ragione alla Premessa. Ultima revisione: 16 settembre 2017. 1

2 V. MARRA Premessa Nel gioco della tombola, il banco estrae in successione numeri casuali fra 1 e 90, senza rimpiazzamento, e i giocatori segnano sulle proprie cartelle i numeri estratti. Ciascuna cartella è composte da 3 righe, su ciascuna delle quali sono riportati cinque numeri compresi tra 1 e 90. Le combinazioni seguenti sono utilizzate in quasi tutte le versioni del gioco. Ambo. Si ottiene quando sono estratti due numeri sulla stessa riga di una cartella. Terno. Si ottiene quando sono estratti tre numeri sulla stessa riga di una cartella. Tombola. Si ottiene quando sono estratti tutti i numeri di una cartella. Al testo d esame sono allegati i file di dati cart1, cart2, estr1 e estr2, che userete per testare la vostra soluzione. Ecco la descrizione del loro formato. Ciascuno dei file cart1 e cart2 contiene una codifica di una cartella del gioco Ciascuna riga del file rappresenta una riga della cartella. Una cartella è composta da tre righe di 9 numeri interi ciascuna. Nel file, i valori 1 presenti su una riga indicano che la corrispondente casella della cartella è vuota. I numeri positivi fra 1 e 90 inclusi, invece, indicano il numero presente nelle corrispondenti caselle non vuote della cartella. Ciascuno dei file estr1 e estr2 contiene una codifica di una estrazione completa dei numeri fra 1 e 90. Il file è composto da una enumerazione di tutti i numeri interi fra 1 e 90, estremi inclusi, uno per riga. Così, se la prima riga riporta il numero 25, si intende che il primo numero estratto nel gioco sarà 25. E in generale, se la riga i-esima riporta il numero E i, si intende che l i-esimo numero estratto nel gioco sarà E i. Esercizio 1 Lettura da file della cartella e dell estrazione, e prima versione di main. Punti: 10. Scrivete una funzione main che implementi il menu seguente: 1. Leggi cartella. 2. Leggi estrazione. 3. Visualizza cartella. 4. Visualizza estrazione. 5. Esci. In ogni momento dell esecuzione del programma sono presenti in memoria una cartella corrente e un estrazione corrente, che sono state precedentemente lette da file come specificato sotto. La cartella corrente può però essere indefinita, se nulla è stato ancora letto, o se la lettura di una nuova cartella da file ha riscontrato errori. Idem per l estrazione. Se l utente digita una stringa che non corrisponde a un opzione esistente, il programma visualizza un messaggio d errore appropriato e torna al menu. Se l utente sceglie 5, il programma termina. Se l utente sceglie 1, il programma chiede all utente di specificare il nome di un file, apre il file in lettura, assume che il file contenga la codifica di una cartella (come,

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 18.IX.2017 3 Figura 1. Esempio di esecuzione (Esercizio 1). per esempio, nel caso del file cart1), e memorizza la cartella in un array di nome c e di tipo e dimensione appropriati. La cartella appena letta diviene la nuova cartella corrente. Se nell apertura del file si riscontra un errore, la lettura è interrotta con un messaggio d errore per l utente, la cartella corrente diviene indefinita, e si torna al menu. Se invece la lettura va a buon fine, i dati letti costituiscono la nuova cartella corrente, e si torna al menu. L eventuale cartella corrente precedente va persa. Se l utente sceglie 2, il programma chiede all utente di specificare il nome di un file, apre il file in lettura, assume che il file contenga la codifica di una estrazione completa dei numeri fra 1 e 90 (come, per esempio, nel caso del file estr1), e memorizza i valori estratti in un array di nome e, e di tipo e dimensione appropriati. Se nell apertura del file si riscontra un errore, la lettura è interrotta con un messaggio d errore per l utente, l estrazione corrente diviene indefinita, e si torna al menu. Se invece la lettura va a buon fine, i dati letti costituiscono la nuova estrazione corrente, e si torna al menu. L eventuale estrazione corrente precedente va persa. I file aperti dal programma devono essere chiusi al momento opportuno. Se l utente sceglie 3, il programma visualizza la cartella corrente tramite una funzione ausiliaria di nome int viscart(int c[][9]), oppure visualizza un messaggio appropriato se la cartella corrente è indefinita. Se l utente sceglie 4, il programma visualizza l estrazione corrente tramite una funzione ausiliaria di nome visestr e prototipo appropriato, oppure visualizza un messaggio appropriato se l estrazione corrente è indefinita. Si vedano le Fig. 1 e 2 per due esempi d esecuzione. La formattazione dei dati in questi esempi non è una specifica vincolante: cercate però di far sì che l output del vostro programma sul terminale sia ragionevolmente leggibile visualizzare un numero estratto per ciascuna riga, ad esempio, non è una gran scelta. Rilevazione dell ambo e del terno. Punti: 9. Esercizio 2

4 V. MARRA Figura 2. Esempio di esecuzione (Esercizio 1). Scrivete una funzione di prototipo int ambo(int c[][9], int e[]) che restituisca l indice (fra 1 e 90) del primo numero estratto dall array estrazione e che permette alla cartella c di realizzare un ambo, oppure -1 se alla fine dell estrazione la cartella non ha realizzato un ambo. 1 Testate la vostra implementazione con una chiamata ad hoc dal main, che eliminerete prima della consegna. Scrivete poi una funzione di prototipo int terno(int c[][9], int e[]) che si comporti esattamente come la funzione ambo appena descritta, eccetto per il fatto che rileva il verificarsi di un terno invece che di un ambo. Testate anche questa implementazione come nel caso di ambo. Rilevazione della tombola. Punti: 6. Esercizio 3 Scrivete una funzione di nome tombola e di prototipo appropriato che restituisca l indice (fra 1 e 90) del primo numero estratto dall array estrazione e in argomento che permette alla cartella c in argomento di realizzare una tombola, oppure -1 se alla fine dell estrazione la cartella non ha realizzato una tombola. Per implementare questa funzione scrivete la funzione ausiliaria int contiene(int c[][9], int n) che restituisce 1 se la cartella c contiene il numero n, e 0 altrimenti. Programma completo. Esercizio 4 1 Il che significa che c è un errore nei dati, perché al termine dell estrazione tutti i numeri di una qualunque cartella devono essere stati estratti. L unica cosa che è richiesta, ai fini dell esame, per gestire questa situazione, è che la funzione ambo restituisca -1. Considerazioni analoghe valgono per le funzioni terno e tombola, v. oltre.

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 18.IX.2017 5 Punti: 5. Ampliate la funzione main dell Esercizio 1 di modo che il menu presentato all utente sia: 1. Leggi cartella. 2. Leggi estrazione. 3. Visualizza cartella. 4. Visualizza estrazione. 5. Ambo? 6. Terno? 7. Tombola? 8. Esci. Le nuove voci di menu 5, 6 e 7 visualizzano l indice restituito dalle funzioni ambo, terno e tombola, rispettivamente, sviluppate negli esercizi precedenti, che andranno eseguite con la cartella e l estrazione corrente in argomento; oppure visualizzano un messaggio d errore appropriato se il valore restituito è -1, o se una fra la cartella e l estrazione corrente è indefinita. Si vedano le Fig. 3 e 4 per qualche esempio d esecuzione.

6 V. MARRA Figura 3. Esempio di esecuzione (Esercizio 4, cartella cart1, estrazione estr2). Istruzioni per la consegna Funzioni da consegnare (in un unico file sorgente). main viscart visestr ambo terno tombola contiene Tutte le eventuali altre funzioni ausiliarie che abbiate scritto. Sito per la consegna: https://upload.mat.unimi.it Autenticarsi con le proprie credenziali di posta elettronica d ateneo.

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 18.IX.2017 7 Figura 4. Esempio di esecuzione (Esercizio 4, cartella cart2, estrazione estr1). Consegnare solo il codice sorgente (file *.c), non l eseguibile. (V. Marra) Dipartimento di Matematica Federigo Enriques, Università degli Studi di Milano, via Cesare Saldini, 50, I-20133 Milano E-mail address: vincenzo.marra@unimi.it