Esercizio 1 (15 punti)

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercizio 1 (15 punti)"

Transcript

1 Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da una decina d anni si svolge una gara ciclistica di tandem su pista. Ogni coppia di concorrenti pedala esattamente per un ora e vince la coppia che percorre più chilometri. I dati storici dei risultati sono memorizzati in un file il cui formato può essere dedotto dall esempio riportato nel riquadro a lato. Si osservi che: i nomi dei ciclisti sono sempre scritti in una sola parola in cui gli spazi sono rappresentati da underscore il primo numero di ogni riga rappresenta i chilometri percorsi e il secondo l anno i ciclisti possono essere accoppiati in modo diverso in ogni edizione il numero massimo di ciclisti presente nel file è 500, il numero di risultati registrati è invece ignoto Si vuole premiare il ciclista che ha percorso più chilometri in totale, considerando tutte le edizioni registrate nel file. Si scriva una funzione in linguaggio C che riceva come argomenti il puntatore a un file come sopra descritto (già aperto in lettura) e restituisca in un apposita struttura il nome del ciclista da premiare e il numero totale di chilometri percorsi. Si assuma che non si verifichino mai casi di parità. Relativamente all esempio di cui sopra, il programma dovrà restituire Ugo_Tiz Federico_Verdi Mario_Bianchi Alberto_Della_Rosa Ugo_Tiz Ugo_Tiz Pier_Paolo_Rittel Francesco_Di_Qua Luigi_Di_Qui Mario_Bianchi Paolo_Gialli Pier_Paolo_Rittel Alberto_Della_Rosa Mario_Bianchi Luigi_Di_Qui Pier_Paolo_Rittel Ugo_Tiz

2 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXDIM 500 struct ciclista char nome[32]; double chilometri; ; struct ciclista cerca_vincitore (FILE *fpin); void aggiorna_elenco_ciclisti (struct ciclista ciclisti[], int *p_nciclisti, char nome[], double chilometri); int cerca_ciclista (struct ciclista ciclisti[], int dim, char nome[]); int cerca_max_chilometri (struct ciclista ciclisti[], int dim); int main (int argc, char *argv[]) FILE *fpin; struct ciclista vincitore; if (argc!= 2) printf ("USO: cerca_vincitore <file ingresso>\n"); if ((fpin = fopen (argv[1], "r")) == NULL) printf ("errore apertura file di ingresso\n"); vincitore = cerca_vincitore (fpin); printf ("%s %lg\n", vincitore.nome, vincitore.chilometri); fclose (fpin); return EXIT_SUCCESS; struct ciclista cerca_vincitore (FILE *fpin) struct ciclista ciclisti[maxdim]; int nciclisti = 0, indice, anno; char riga[128], nome1[64], nome2[64]; double chilometri; while (fscanf (fpin, "%s %s %lf %d", nome1, nome2, &chilometri, &anno)!= EOF) aggiorna_elenco_ciclisti (ciclisti, &nciclisti, nome1, chilometri); aggiorna_elenco_ciclisti (ciclisti, &nciclisti, nome2, chilometri); indice = cerca_max_chilometri (ciclisti, nciclisti); return ciclisti[indice];

3 void aggiorna_elenco_ciclisti (struct ciclista ciclisti[], int *p_nciclisti, char nome[], double chilometri) int indice; indice = cerca_ciclista (ciclisti, *p_nciclisti, nome); if (indice == -1) /* inserisci il nuovo ciclista */ strcpy (ciclisti[*p_nciclisti].nome, nome); ciclisti[*p_nciclisti].chilometri = chilometri; (*p_nciclisti)++; else /* inserisci aggiorna i chilomatri */ ciclisti[indice].chilometri += chilometri; int cerca_ciclista (struct ciclista ciclisti[], int dim, char nome[]) int i = 0; while (i < dim) if (strcmp (ciclisti[i].nome, nome) == 0) return i; i++; return -1; int cerca_max_chilometri (struct ciclista ciclisti[], int dim) int i, imax; /* assumiamo che il vettore non sia vuoto */ imax = 0; for (i = 1; i < dim; i++) if (ciclisti[i].chilometri > ciclisti[imax].chilometri) imax = i; return imax;

4 Esercizio 2 (15 punti) Un file di testo contiene i dati di una matrice bidimensionale che rappresenta una zona rettangolare di un territorio. Ogni elemento della matrice descrive una porzione quadrata di superficie (pari ad un numero di metri quadrati scritto nell intestazione del file) mediante due numeri interi: la quota e un codice che indica il tipo di terreno (es. lago, roccia, bosco, mare, ecc.). Il formato del file può essere dedotto dall esempio a lato dove, nella parte matriciale, ogni coppia di numeri rappresenta rispettivamente la quota in metri s.l.m. e il codice del tipo di terreno di una porzione quadrata di superficie. Le informazioni di intestazione compaiono sempre tutte e nello stesso ordine. Le coordinate sono sempre 90/102 90/102 95/101 95/101 95/101 97/ /101 93/102 91/102 92/102 95/101 97/901 99/ /101 99/102 91/102 92/102 95/101 97/901 99/ / / / /901 98/901 97/901 96/901 95/901 espresse in gradi Nord ed Est. La risoluzione è sempre espressa in metri quadrati (numero intero). Le dimensioni della matrice sono sempre riportate come numero di righe seguito dal numero di colonne (nell esempio: 4 righe da 7 colonne). La dimensione massima della matrice è 20x20. Un secondo file contiene le corrispondenze codice tipo di terreno. Un esempio è riportato nel riquadro più sotto. Si osservi che i tipi di terreno sono sempre espressi con una sola parola. Tutti i codici presenti nella matrice sono presenti anche nel file dei codici (cioè non possono esserci codici sconosciuti). Il numero massimo di codici è 100. Si scriva un programma in linguaggio C che riceva sulla linea di comando i nomi di due file come sopra descritti e per ogni tipo di terreno generi un file di testo con le seguenti caratteristiche: nome: il tipo di terreno estensione:.dat contenuto: analogo al file di ingresso che descrive il territorio, ma contenente soltanto la quota nei punti in cui è presente il tipo di terreno a cui si riferisce il file e un trattino ('-') negli altri punti 102 bosco 201 roccia 101 prato 301 lago 302 fiume 303 mare 901 abitato Per esempio, relativamente agli esempi sopra riportati, il programma dovrà generare sette file, dei quali abitato.dat, bosco.dat e mare.dat sono riportati nei riquadri sottostanti. Suggerimento: si memorizzino i dati letti dal primo file in una matrice di struct e si scandiscano le righe del secondo file una alla volta per generare i file di uscita (senza memorizzare tali righe in una tabella) file abitato.dat file bosco.dat file fiume.dat

5 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXRIGHE 20 #define MAXCOLONNE 20 #define ESTENSIONE ".dat" struct porzione_quadrata int quota; int codice; ; struct coordinate double nord; double est; ; struct territorio struct coordinate c; int risoluzione; int nrighe; int ncolonne; struct porzione_quadrata porzione[maxrighe][maxcolonne]; ; void carica_territorio (struct territorio *p_t, FILE *fp); void crea_file_territorio (FILE *fpt, FILE *fpc); void crea_file_singolo_terreno (struct territorio t, int codice, FILE *fp); int main (int argc, char *argv[]) FILE *fpt, *fpc; if (argc!= 3) printf ("USO: territorio <file territorio> <file codici>\n"); if ((fpt = fopen (argv[1], "r")) == NULL) printf ("errore apertura file territorio\n"); if ((fpc = fopen (argv[2], "r")) == NULL) printf ("errore apertura file codici\n"); crea_file_territorio (fpt, fpc); fclose (fpt); fclose (fpc); return EXIT_SUCCESS;

6 void crea_file_territorio (FILE *fpt, FILE *fpc) int codice; char tipo_terreno[32], nome_file[32]; FILE *fp; struct territorio t; carica_territorio (&t, fpt); while (fscanf (fpc, "%d %s", &codice, tipo_terreno)!= EOF) strcpy (nome_file, tipo_terreno); strcat (nome_file, ESTENSIONE); if ((fp = fopen (nome_file, "w")) == NULL) printf ("errore apertura file %s\n", nome_file); crea_file_singolo_terreno (t, codice, fp); fclose (fp); void crea_file_singolo_terreno (struct territorio t, int codice, FILE *fp) int i, j; fprintf (fp, "coordinate_gps: %lg N %lg E\n", t.c.nord, t.c.est); fprintf (fp, "risoluzione: %d\n", t.risoluzione); fprintf (fp, "dimensioni: %d %d\n", t.nrighe, t.ncolonne); for (i = 0; i < t.nrighe; i++) for (j = 0; j < t.ncolonne; j++) if (t.porzione[i][j].codice == codice) fprintf (fp, "%5d", t.porzione[i][j].quota); else fprintf (fp, " -"); fprintf (fp, "\n"); void carica_territorio (struct territorio *p_t, FILE *fp) int i, j; fscanf (fp, "%*s %lf %*s %lf %*s", &(*p_t).c.nord, &(*p_t).c.est); fscanf (fp, "%*s %d\n", &(*p_t).risoluzione); fscanf (fp, "%*s %d %d\n", &(*p_t).nrighe, &(*p_t).ncolonne); for (i = 0; i < (*p_t).nrighe; i++) for (j = 0; j < (*p_t).ncolonne; j++) fscanf (fp, "%d%*c%d", &(*p_t).porzione[i][j].quota, &(*p_t).porzione[i][j].codice);

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione

Dettagli

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

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Lab 10 Gestione file di testo

Lab 10 Gestione file di testo Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 10 Gestione file di testo Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome

Dettagli

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comuni di I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

I files in C. A cura del prof. Ghezzi

I files in C. A cura del prof. Ghezzi I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files

Dettagli

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

1 (6) 2 (7) 3 (7) 4 (7) 5 (6) CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B anno accademico 010-011 Prof. Danilo ARDAGNA Seconda Prova in Itinere 7.06.011 Durata 1h 30 Valutazioni 1 (6) (7) 3 (7) 4 (7)

Dettagli

Uso avanzato dei puntatori Allocazione dinamica della memoria

Uso avanzato dei puntatori Allocazione dinamica della memoria Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo un vettore allocato dinamicamente Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero

Dettagli

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi. Stringhe. Stringhe Ricerca binaria Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)

Dettagli

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi [email protected] Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)

Dettagli

File e puntatori a file

File e puntatori a file File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizio 1 Liste: calcolo perimetro di un poligono Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 12 Esercitazione: 28 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo perimetro di

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Gestione dei File in MATLAB Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 Gestione dei file in MATLAB OUTLINE Caratteristiche

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

File binari e file di testo

File binari e file di testo I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file

Dettagli

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi [email protected] Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

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 VI.2015 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.VI.2015 VINCENZO MARRA Indice Esercizio 1 1 Definizione dei tipi P e T, e calcolo dell area.

Dettagli

Esercitazione 12. Esercizi di Ricapitolazione

Esercitazione 12. Esercizi di Ricapitolazione Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,

Dettagli

Linguaggio C La libreria standard

Linguaggio C La libreria standard FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C La libreria standard 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture. Unità Didattica 5 Linguaggio C Stringhe. Accesso a file ASCII. Strutture. 1 Stringhe Una stringa è una sequenza di caratteri (es: ciao, sd!n29dnqa ); In C non esiste una variabile di tipo stringa; Una

Dettagli

Esercizio 1: Puntatori impiegati che sono manager

Esercizio 1: Puntatori impiegati che sono manager Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 10 Esercitazione: 25 gennaio 2006 Esercizi di riepilogo Problema: Esercizio 1: Puntatori impiegati che sono manager Si

Dettagli

Linguaggio C: i file

Linguaggio C: i file Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa

Dettagli

ESERCIZIO 1 ESERCIZIO 2

ESERCIZIO 1 ESERCIZIO 2 ESERCIZIO 1 Scrivere una funzione che data una stringa A calcoli la sua lunghezza. int lunghezza(char A[]); Scrivere una funzione che date due stringhe A e B copi il contenuto di A in B e restituisca il

Dettagli

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C CORSO DI LABORATORIO DI INFORMATICA CORSO DI LAUREA IN SDM ANNO ACCADEMICO 2011-2012 Docente: R. Sparvoli Esercitazioni: R. Sparvoli, F. Palma OTTAVA ESPERIENZA DI LABORATORIO L elaborazione dei files

Dettagli

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

Esercitazione 6. Array

Esercitazione 6. Array Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione

Dettagli

1. Esercizio tipo per prova pratica

1. Esercizio tipo per prova pratica 1. Esercizio tipo per prova pratica Testo: Si realizzi un programma nel linguaggio C che, data una sequenza di 10 interi da standard input, facendo uso di una funzione di nome media1, stampi tutti i valori

Dettagli

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego [email protected] http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli