ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI VARIABILE BOLOGNA 7 9 PIOGGIA...

Documenti analoghi
#include <stdio.h> #include <stdlib.h> #define L 20 void Proc(char [], int); int N=L; main () { char *s; int i;

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

Lab 09 Gestione file di testo

Esercizio 1. Esercizio 1 - Soluzione

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche. ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) P = {

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche

accesso * leggiaccessi(char * nomefile, int * dim);

/* Esempio di contenuto del file di testo: */ PaoloBellavista marzo.dat PaolaMello aprile.dat FedericoChesani marzo.dat CarloGiannelli marzo.

1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)

Esercizi di preparazione alla I Prova Intermedia di Fondamenti di Informatica L-A a.a. 2002/2003 Prof. Paola Mello, Prof.

Esercizio 1 - Soluzione

Esempio di Prova Scritta

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

Fondamenti di Informatica T-1 Esercitazione 1. Grammatiche Complemento a 2 Analisi Record di attivazione

1. realizzare una funzione int estraimulte(file *fmutui, FILE *fpagamenti, Mutuo *dest, int dim)

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Esempio di Prova Scritta

Fondamenti di Informatica T-1

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

Compito B. list consolidate(list l1, list l2);

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista

Fondamenti di Informatica T-1

Esercizio sintesi (1) Esercizio sintesi (1)

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 2A di Mercoledì 13 Gennaio 2010 tempo a disposizione 2h30'

Compito A. list unify(list a, list b); list clean(list a);

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

1. Realizzare una funzione int trovaevasori(file * fcatasto, FILE * ftasse, Lotto * dest, int dim)

$ PROVA INTERMEDIA 20 Aprile 2017

Il compito del 11 novembre 2004

Opinione calcolamedia( ) Opinione inverti( )

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 5A di Giovedì 9 Luglio 2015 tempo a disposizione 2h

Fondamenti di Informatica 1 - Compito A

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 3A di Giovedì 9 Febbraio 2012 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h

int ninv; /* numero di inventario */

Esercizio 1 (15 punti)

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 2A di Giovedì 26 Gennaio 2017 tempo a disposizione 2h

Ricerca binaria ricorsiva!

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 1A di Giovedì 14 Gennaio 2016 tempo a disposizione 2h

Esercitazione di Reti degli elaboratori

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

PROVA SCRITTA DEL MODULO DI

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Lab 9 Strutture e programmi su più file

PROVA SCRITTA DI FONDAMENTI DI INFORMATICA L A 4 DICEMBRE 2003 Prof. Michela Milano COMPITO A

Informatica 1. Prova di recupero 21 Settembre 2001

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

1. Realizzare una funzione int trovaevasori(file * fcomune, FILE * ftasse, Recapito * dest, int dim)

Esercizio 1: media di numeri reali (uso funzioni e struct)

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 3A di Giovedì 16 Febbraio 2017 tempo a disposizione 2h

Esercizio 1. Esercizio - 1

Lab 10 Gestione file di testo

- matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1A di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2018/2019 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2019 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 1A di Giovedì 12 Gennaio 2017 tempo a disposizione 2h

Lab 15 Gestione file di testo

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 1A di Giovedì 9 Gennaio 2014 tempo a disposizione 2h

Esercizio 1 Conta degli elementi distinti (file esercizio1.c e leggi.h/leggi.c - 15 punti)

Fondamenti di Informatica T 1, 2009/2010 Modulo 2 Prova d Esame 3a di Giovedì 11 Febbraio 2010 tempo a disposizione 2h30'

Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:

a = 6; b = 7; c = a b; [ ] il risultato è indefinito [ ] c = 12 [ ] c = 13 [X] c = 14 a = 8; b = 9; c = a b;

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 4A di Giovedì 13 Giugno 2013 tempo a disposizione 2h

ESERCIZIO Grammatiche 1

Fondamenti di Informatica 2

Lab 09 Strutture e programmi su più file

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 5A di Giovedì 12 Luglio 2018 tempo a disposizione 2h

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

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 3A di Mercoledì 16 Febbraio 2011 tempo a disposizione 2h

Esercizio 1 (17 punti)

Fondamenti di Informatica T-1, 2018/2019 Modulo 2. Prova d Esame 1A di Giovedì 10 Gennaio 2019 tempo a disposizione 2h

Esercizio 1: parole nel testo

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 2A di Mercoledì 2 Febbraio 2011 tempo a disposizione 2h

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 1A di Giovedì 11 Gennaio 2018 tempo a disposizione 2h

Fondamenti di Informatica

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizio 1 (15 punti)

Aritmetica dei puntatori

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Lab 13 Strutture e programmi su più file

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Lab 16 Gestione file binari"

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 2A di Giovedì 25 Gennaio 2018 tempo a disposizione 2h

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

File di testo e file binari Soluzione 1 (2)

Fondamenti di Informatica 2

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 4A di Giovedì 14 Giugno 2018 tempo a disposizione 2h

Transcript:

Fondamenti di Informatica L-A (A.A. 2002/2003) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista Prova d Esame di Lunedì 08/01/2003 durata 2h:30m COMPITO A ESERCIZIO 1 (10 punti) È dato un file di testo meteo.txt che contiene i dati relativi alle condizioni atmosferiche registrate nelle città campione durante il giorno 25/12/2002. Più precisamente, ogni riga contiene, nell'ordine: nome città (non più di 20 caratteri senza spazi), uno e un solo spazio di separazione; temperatura minima in gradi centigradi (numero intero), uno e un solo spazio di separazione; temperatura massima in gradi centigradi (numero intero), uno e un solo spazio di separazione; descrizione (non più di 12 caratteri senza spazi), terminatore di riga. Ad esempio, meteo.txt: ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI 10 14 VARIABILE BOLOGNA 7 9 PIOGGIA... Si scriva una procedura che riceva come parametro di ingresso un file di testo F di strutture prelievo contenenti i dati meteo e restituisca come parametro di uscita un vettore Vett contenente le strutture di F relative ai prelievi effettuati nelle città con temperature (minime e massime) comprese tra i valori MIN e MAX, ed il loro numero N. (4 punti) void find(file * F, prelievo Vett[], int MIN, int MAX, int *N); Si scriva inoltre un programma C che inserisca in un vettore V1 (supposto di dimensione massima DIM 100) tutti i prelievi contenuti nel file meteo.txt effettuati in città con temperature comprese tra i 7 e i 10 gradi centigradi utilizzando la procedura find() precedentemente definita. Il programma deve inoltre stampare a terminale gli elementi di V1 relativi alle città senza precipitazioni (né neve né pioggia). (6 punti) ESERCIZIO 2 (5 punti) Si scriva una funzione ricorsiva g() che data in ingresso una lista di interi ed un numero num, restituisca in uscita una nuova lista contenente esclusivamente gli elementi maggiori di num, decrementati di un valore uguale a num. Ad esempio, se invocata con l=[11,0,7,8,3,-2,15] e num=7, la funzione g() deve restituire la lista [4,1,8]. Si supponga di possedere il tipo di dato astratto list e le sue operazioni PRIMITIVE definite durante il corso (che quindi possono NON essere riportate nella soluzione). ESERCIZIO 3 (7 punti) Dato il programma sorgente C seguente, si indichino i valori stampati a tempo di esecuzione, motivando la risposta data. Indicare inoltre quali sono i blocchi in cui è visibile la variabile M, sempre motivando la risposta. #include <stdio.h> #define N 7 #define FALSE 0 #define TRUE 1 typedef int vettore[n]; void b(vettore,int,int); 1

main () { int i; vettore a; for (i = 0; i < N; i++){ a[i]=i/2.0f; if (a[i]-a[0]) a[i]=i; b(a, N/2, N-1); for (i = N-1; i >= 0; --i) printf ("%d\n", a[i]); void b(vettore v, int iniz, int fine) { int I; float temp, M=0.0f; for (I = iniz; I < fine; I++){ if (v[i] < v[i+1]){ temp = v[i]-1; v[i] = v[i+1]; v[i+1] = temp+1; Esercizio 4 (6 punti) Si consideri la seguente funzione F: int G(double x){ if (x>0) {x-=2; return G(x)/2; else return 1; Si scriva il risultato della funzione quando invocata come G(6) e si disegnino i corrispondenti record di attivazione. Esercizio 5 (2 punti) Si consideri la grammatica G con scopo S e simboli terminali { ciao,,, (, ), printf S::= A A::= ) printf C A B::= ciao C B C::= A ( B Si dica se la stringa printf( ciao ) è sintatticamente corretta rispetto a tale grammatica e se ne mostri la derivazione left most. Esercizio 6 (2 punti) Un elaboratore rappresenta i numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica e determinarne il risultato, traslandolo poi in decimale per la verifica: 111-92 2

Fondamenti di Informatica L-A (A.A. 2002/2003) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista Prova d Esame di Lunedì 08/01/2003 durata 2h:30m COMPITO B ESERCIZIO 1 (10 punti) È dato un file di testo canzoni.txt che contiene i dati relativi alla playlist musicale relativa alla colonna sonora di un film. Più precisamente, ogni riga contiene, nell'ordine: nome cantante (non più di 12 caratteri senza spazi), uno e un solo spazio di separazione; titolo (non più di 15 caratteri senza spazi), uno e un solo spazio di separazione; durata in secondi (numero intero positivo), uno e un solo spazio di separazione; genere (non più di 12 caratteri senza spazi), terminatore di riga. Ad esempio, canzoni.txt: PORTISHEAD COWBOYS 278 DRUM&BASE NIRVANA LITHIUM 256 ROCK GERSHWIN SUMMERTIME 290 JAZZ EMINEM KIM 377 P DIOHEAD CREEP 267 ROCK... Si scriva una procedura che riceva come parametro di ingresso un file di testo F di strutture brano contenenti i dati sulle canzoni e restituisca come parametro di uscita un vettore Vett contenente le strutture di F relative ai brani la cui durata sia compresa nell intervallo definito da MIN e MAX, ed il loro numero N. (4 punti) void play(file * F, brano Vett[], int MIN, int MAX, int *N); Si scriva inoltre un programma C che inserisca in un vettore V1 (supposto di dimensione massima DIM 100) tutti i brani contenuti nel file canzoni.txt di durata compresa tra 260 e 300 secondi utilizzando la procedura play() definita al punto precedente. Il programma deve inoltre stampare a terminale tutti gli elementi di V1 relativi al genere ROCK (6 punti). ESERCIZIO 2 (5 punti) Si scriva una funzione ricorsiva f(list l, int num) che data in ingresso una lista di interi e un numero num, restituisca in uscita una nuova lista non contenente gli elementi di valore uguale a num e avente gli altri elementi con i valori cambiati di segno. Ad esempio, se invocata con l=[0,7,3,-2,7,1] e num=7, la funzione f() deve restituire [0,-3,2,-1]. Si supponga di possedere il tipo di dato astratto list e le sue operazioni PRIMITIVE definite durante il corso (che quindi possono NON essere riportate nella soluzione). ESERCIZIO 3 (7 punti) Dato il programma sorgente C seguente, si indichino i valori stampati a tempo di esecuzione, motivando la risposta data. Indicare inoltre quali sono i blocchi in cui è visibile la variabile M, sempre motivando la risposta. #include <stdio.h> #define N 7 #define FALSE 0 #define TRUE 1 typedef int vettore[n]; void b(int,int,vettore); 3

main () { int i; vettore a; for (i = 0; i < N; i++){ a[i]=i*2.0f; if (!(a[i]-a[0])) a[i]=i; b(0, N-1, a); for (i = N-1; i >= 0; i-=1) printf ("%d, ", a[i]); void b(int iniz, int fine,vettore v) { int I; float temp,m; for (I = iniz; I < fine; I++){ if (v[i] < v[i+1]){ temp = v[i]--; v[i] = v[i+1]; v[i+1] = temp++; Esercizio 4 (6 punti) Si consideri la seguente funzione F: int F(float y){ if (y>0) {y-=3; return F(y)/2; else return 8; Si scriva il risultato della funzione quando invocata come F(9.0) e si disegnino i corrispondenti record di attivazione. Esercizio 5 (2 punti) Si consideri la grammatica G con scopo S e simboli terminali { piede, dente, in, occhio, testa, per S::= A A::= piede occhio C dente B::= A C dente C::= A per B Si dica se la stringa occhio per occhio dente per dente è sintatticamente corretta rispetto a tale grammatica e se ne mostri la derivazione left most. Esercizio 6 (2 punti) Un elaboratore rappresenta i numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica e determinarne il risultato, traslandolo poi in decimale per la verifica: 19+100 4

SOLUZIONE COMPITO A ESERCIZIO 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM 100 typedef struct {char citta[21]; int min; int max; char descr[13]; prelievo; void find(file * F, prelievo Vett[], int MIN, int MAX, int *N) { prelievo in; *N=0; while (fscanf(f,"%s %d %d %s\n", in.citta, &in.min, &in.max, in.descr)!= EOF) { if ( (in.min>=min) && (in.max<=max) ) { Vett[*N]=in; *N= *N+1; main() { prelievo V1[DIM]; int Num, i=0; FILE* f; if ((f=fopen("c:\\meteo.txt", "r"))==null) { printf("il file non esiste!"); exit(1); find(f, V1, 7, 10, &Num); for (i=0; i<num; i++) if( (strcmp(v1[i].descr,"pioggia")!=0) && (strcmp(v1[i].descr,"neve")!=0) ) printf("%s %d %d %s\n", V1[i].citta, V1[i].min, V1[i].max, V1[i].descr); fclose(f); /* La funzione int strcmp(char* s1,char* s2) restituisce 0 se e solo se le stringhe s1 e s2 sono identiche */ ESERCIZIO 2 list g(list l, int num) { if empty(l) return emptylist(); else if ( (head(l)>num) ) return cons(head(l)-num, g(tail(l), num)); else return g(tail(l), num); ESERCIZIO 3 Il programma stampa: 3 6 5 4 2 0 0 (con tutti i numeri su righe differenti) 5

Infatti il vettore a viene inizializzato con il seguente contenuto: {0,0,2,3,4,5,6. Successivamente viene invocata la procedura b alla quale si passa per riferimento il vettore a. In particolare, la procedura b attraverso un ciclo (for) scambia la posizione del valore 3 nel vettore. Alla fine del ciclo il valore 3 sarà posizionato come ultimo elemento, e gli altri elementi scaleranno ordinatamente di una posizione. Infine il vettore viene stampato al contrario. La variabile M è una variabile locale alla funzione b, perciò il suo campo di visibilità è limitato alla sola funzione b. ESERCIZIO 4 La funzione restituisce il valore 0. 0 x = 6.0 0 x = 4.0 0 x = 2.0 x = 0.0 1 Esercizio 5 La stringa è sintatticamente corretta. Derivazione left most: S -> A -> printf C -> printf( B -> printf( B -> printf( ciao C -> printf( ciao A -> printf( ciao A -> printf( ciao ) Esercizio 6 111-> 0 1101111-92-> 1 1011100 Tra i moduli dei numeri si esegue una sottrazione: 1101111-1011100 ---------- 0010011 che vale 19 in base dieci. 6

SOLUZIONE COMPITO B ESERCIZIO 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM 100 typedef struct {char cantante[13]; char titolo[16]; int durata; char genere[13]; brano; void play(file * F, brano Vett[], int MIN, int MAX, int *N) { brano in; *N=0; while (fscanf(f,"%s %s %d %s\n", in.cantante, in.titolo, &in.durata, in.genere)!= EOF) { if ( (in.durata>=min) && (in.durata<=max) ) { Vett[*N]=in; *N= *N+1; main() { brano V1[DIM]; int Num, i=0; FILE* f; if ((f=fopen("c:\\canzoni.txt", "r"))==null) { printf("il file non esiste!"); exit(1); play(f, V1, 260, 300, &Num); for (i=0; i<num; i++) if( (strcmp(v1[i].genere,"rock")==0) ) printf("%s %s %d %s\n", V1[i].cantante, V1[i].titolo, V1[i].durata, V1[i].genere); fclose(f); /* La funzione int strcmp(char* s1,char* s2) restituisce 0 se e solo se le stringhe s1 e s2 sono identiche */ ESERCIZIO 2 list f(list l, int num) { if empty(l) return emptylist(); else if(head(l)==num) return f(tail(l), num); else return cons(-head(l), f(tail(l), num)); ESERCIZIO 3 Il programma stampa: 0, 12, 10, 8, 6, 4, 2, Infatti il vettore v viene inizializzato con il seguente contenuto: {0,2,4,6,8,10,12. Successivamente viene 7

invocata la procedura b alla quale si passa come parametro il vettore a. In particolare, la procedura b attraverso un ciclo (for) scambia la posizione del primo elemento del vettore (0) con i successivi elementi. Alla fine del ciclo, lo 0 sarà posizionato nell ultima posizione del vettore.poi il vettore viene stampato al contrario. La variabile M è una variabile locale alla funzione b, perciò il suo campo di visibilità è limitato alla sola funzione. ESERCIZIO 4 La funzione restituisce il valore 1. 1 y = 9.0 2 y = 6.0 4 y = 3.0 8 y = 0.0 Esercizio 5 La stringa è sintatticamente corretta. Derivazione left most: S -> A -> occhio C -> occhio per B -> occhio per AC -> occhio per occhio C C -> occhio per occhio A C -> -> occhio per occhio dente C -> occhio per occhio dente per B -> occhio per occhio dente per dente Esercizio 6 19-> 0 0010011 100-> 0 1100100 Tra i moduli dei numeri si esegue una somma: 0010011 + 1100100 ---------- 1110111 che vale 119 in base dieci. 8