Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 2 febbraio 2017
Esercizio 1 (15 punti)Un file contiene un elenco di persone disponibili a giocare in squadre di diversi sport. Per ogni persona è indicato l’elenco degli sport praticati e, per ciascuno di essi, un valore intero compreso tra 1 e 10 che rappresenta l’abilità del giocatore in tale sport. Il
formato del file può essere dedotto dall’esempio a lato.
Si osservi che:
i nomi e i cognomi delle persone e i nomi degli sport sono sempre scritti in una sola parola;
non sono presenti spazi prima delle virgole, dei due punti e del punto alla fine di ogni riga.
Non è noto il numero totale di persone, ma è noto che per ogni singolo sport nel file non sono presenti più di 100 potenziali giocatori.
Scopo dell’esercizio è costituire una squadra di N giocatori per un determinato sport, scegliendo i migliori dall’elenco.
Si scriva un programma in linguaggio C che riceva sulla riga di comando il nome di un file come sopra descritto, il nome di uno sport e il numero N di giocatori richiesti per la squadra. Il programma deve stampare sul monitor l’elenco degli N giocatori migliori (cognome e nome) per lo sport indicato, in un ordine qualsiasi.
NOTE:
qualora il numero di giocatori disponibili presenti nel file sia inferiore a N, il programma visualizzerà tutti quelli disponibili e riporterà il numero di quelli mancanti
in caso di parità nel valore degli ultimi giocatori da inserire in squadra potrà essere scelto un giocatore qualsiasi
se si intende usare una funzione di ordinamento di un vettore di strutture, la si assuma già disponibile (sarà sufficiente scriverne il prototipo; la funzione completa potrà essere scritta in seguito e portata all’orale)
Si vedano gli esempi a lato, relativi al file sopra riportato.
Esercizio 2 (15 punti)
Il “gioco del quindici” consiste in una griglia di 4 x 4 spazi in cui si muovono 15 tessere quadrate numerate (v. foto a lato). Le tessere possono essere mosse, una alla volta, in orizzontale o in verticale, soltanto se adiacenti alla posizione vuota della griglia. Scopo del gioco è trovare la sequenza di mosse per portare la disposizione delle tessere da una posizione iniziale ad una finale.
Poiché gli identificatori (numeri) delle tessere sono univoci e nella griglia è presente una sola posizione vuota, ogni mossa può semplicemente essere indicata con il numero della tessera da spostare.
Un file di testo contiene una configurazione iniziale delle tessere e una sequenza di mosse, nel formato che può essere dedotto dall’esempio a lato.
Si scriva un programma in linguaggio C che legga dalla riga di comando un file siffatto e stampi la disposizione delle tessere al termine dell’esecuzione delle mosse.
Il programma deve anche segnalare un errore se incontra una mossa non valida (es. un valore non compreso tra 1 e 15, oppure il valore di una tessera non adiacente alla posizione vuota).
Esempio (riferito al file di ingresso sopra riportato):
> quindici mosse.dat 5 1 2 11 7 4 12 13 15 - 10 6 9 3 8 14
PierPaolo, Bianchi, 3 sport: tennis 8, pallavolo 4, nuoto 6.
Giuseppe, DellaLibera, 2 sport: nuoto 3, golf 10.
Lucia, Verdi, 2 sport: nuoto 8, tennis 10.
Mario, Rossi, 4 sport: pallavolo 5, ciclismo 9, tennis 9, curling 6.
Luigi, DelTorre, 1 sport: nuoto 9.
Esempi:
> crea_squadra giocatori.txt tennis 2 Verdi Lucia
Rossi Mario
> crea_squadra giocatori.txt nuoto 5 DelTorre Luigi
Verdi Lucia Bianchi PierPaolo DellaLibera Giuseppe
NUMERO GIOCATORI MANCANTI: 1
> crea_squadra giocatori.txt rugby 15 NUMERO GIOCATORI MANCANTI: 15
5 1 12 2 7 4 - 11 15 10 8 13 9 3 14 6
12 2 11 13 6 14 8 10