PROVA SCRITTA DEL MODULO DI

Documenti analoghi
PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

ESERCIZIO 1 (5 punti) Convertire in binario il valore, espresso in decimale, Si usi la rappresentazione in virgola fissa.

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

PROVA SCRITTA DEL CORSO DI. Dedurre la funzione semplificata dall osservazione della tabella o con le leggi dell algebra booleana.

Lab 09 Gestione file di testo

Fondamenti di Informatica 2

Fondamenti di Informatica 2

Esercizio 1. Esercizio 1 - Soluzione

Fondamenti di Informatica 2

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

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

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

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

Esercizi. Filtraggio

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

Fondamenti di Informatica 2

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Esercitazione 11. Liste semplici

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

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 17/2/2009

Fondamenti di Informatica T-1 Modulo 2

Stampi su file output.txt il voto massimo ed il corrispondente numero di occorrenze. Ad esempio:

Fondamenti di Informatica II

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

Definizione Allocazione di variabili e vettori Le liste

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

int ninv; /* numero di inventario */

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

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Lab 12 Allocazione dinamica della memoria

Esame di Informatica Generale 9 CFU 19 Aprile 2011 Professori: Carulli, Fiorino, Mazzei

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

Gestione dei file in C

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

PRIMA PROVA INTERMEDIA DEL MODULO DI

Fondamenti di Informatica T-1 Modulo 2

1. Esercizio tipo per prova pratica

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Esercitazioni di Informatica (CIV)

Sommario ELEMENTI DI INFORMATICA. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

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

Strutture Dati Dinamiche

Esempio di costruzione di una classe: un dizionario

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

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

C: panoramica. Violetta Lonati

ESERCIZIO (Domanda) Supponiamo che sia int X = 1; la chiamata di funzione fprintf(file,"%d", X);

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello dell 8 Febbraio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Aritmetica dei puntatori

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 12 Dicembre 2008 Compito A

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 8 Febbraio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Fondamenti di Informatica T. Linguaggio C: i puntatori

Introduzione al linguaggio C Primi programmi

Introduzione al linguaggio C Puntatori

Lab 16 Gestione file binari"

Array k-dimensionali

Esercizi su strutture dati

Matricola Nome Cognome Aula Fila (dalla cattedra) Posto (dalla porta)

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

NB: sono richieste almeno 4 risposte esatte per la correzione delle domande aperte

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

Linguaggio C: Array Valeria Cardellini

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

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 1A di Martedì 13 Gennaio 2015 tempo a disposizione 2h

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

file fisico file logico

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

Lezione 13: Strutture dati dinamiche

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

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

Opinione calcolamedia( ) Opinione inverti( )

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizi di programmazione in linguaggio C English Dictionary

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

Esercitazione di Reti degli elaboratori

CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Informatica B Allievi Meccanici con cognome da Cl a L Recupero della I prova intermedia 26/02/01 Prof. Elisabetta Di Nitto. Cognome Nome Matricola

Laboratorio di Informatica I

Lab 10 Gestione file di testo

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

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

Costanti e Variabili

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

Cosa serve per cominciare?

ESERCIZIO 1. AZ111 milano 12:34 23 AZ222 buenos-aires 12: BA333 toronto 4:15 20 KM444 madrid 10:12 100

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008

Esercizio 1: Puntatori impiegati che sono manager

Esercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli

Transcript:

PROVA SCRITTA DEL MODULO DI MOTIVARE IN MANIERA CHIARA LE SOLUZIONI PROPOSTE A CIASCUNO DEGLI ESERCIZI SVOLTI ESERCIZIO 1 (4 punti) (1) (2 punti) Scrivere la tabella di verità degli operatori OR e AND. (2) (2 punti) Quanti bit occorrono per rappresentare almeno 256 livelli di grigio in un immagine? ESERCIZIO 2 (4 punti) (1) (3 punti) Descrivere in modo chiaro e sintetico l architettura di un moderno calcolatore elettronico. (2) (1 punto) Se ogni parola di memoria è di 32 bit e il numero di parole complessivo è pari a 1024, di quanti Kbyte complessivi è composta la memoria? ESERCIZIO 3 (25 punti) (5 punti) Nel laboratorio del Prof. Marcialis è stato acquistato un nuovo dispositivo per la lettura dell elettroencefalogramma (EEG) in grado di leggere il segnale prodotto dal funzionamento del cervello e tradurlo i tre segnali di intensità elettrica, catturati attraverso tre elettrodi posti in tre punti differenti della testa: uno in fronte e due in corrispondenza dei lobi parietali sinistro e destro. Maggiore è l intensità, maggiore è l attività neuronale nella regione dove è posto l elettrodo. Il dispositivo cattura il segnale ad una certa frequenza di campionamento (numero di campioni al secondo, espresso in Hz). Ciascuna di queste misure è rappresentata da tre valori reali, compresi tra 0 e 100, una per canale (parietale destro, frontale, parietale sinistro), e vengono scritte in una riga del file dati.txt. La sequenza di misure è preceduta da due interi indicanti la frequenza di campionamento in Hz e dalla durata dell acquisizione in secondi. In altre parole, il file è composto da una riga indicante appunto la coppia di valori di cui sopra ed N righe di terne di reali, tenendo conto della frequenza di campionamento specificata sopra e della durata del campionamento. In base alla lettura dell EEG per la durata di un certo periodo di lezione, voi ed i ricercatori del laboratorio dovete mettere assieme un programma che rilevi il livello di attenzione del soggetto durante una lezione del Prof. Marcialis in base ai seguenti criteri: a) Se tutti e tre i valori catturati in un dato istante sono strettamente maggiori della corrispondente media aritmetica calcolata sull intera sequenza (una media per canale), il livello di attenzione è elevato; b) Se tutti e tre i valori catturati in un dato istante sono minori o uguali alla corrispondente media calcolata come sopra, il livello di attenzione è scarso; c) In tutti gli altri casi, il livello di attenzione è normale. Il programma dovrà stampare a video la frequenza di campionamento, la durata del campionamento e se il livello di attenzione durante il periodo di lezione è stato prevalentemente elevato, normale o scarso, in base a quante volte ciascuna di queste tre tipologie sarà occorsa durante l elaborazione del segnale. Esempio. Se il file dati.txt fosse costituito dai seguenti valori: 1 3 64.2 11.7 90.0 80.0 61.5 95.0 40.0 91.8 40.0 Il valore 1 sarebbe la frequenza di campionamento, pari ad 1 campione al secondo (1 Hz) e 3 sarebbe il numero di secondi di acquisizione del segnale EEG. Infatti il numero di righe (campioni) presenti nel file è 3, perché per tre secondi di osservazione alla frequenza data il dispositivo cattura tre terne di misure. Per ogni riga abbiamo: prima misura acquisita dall elettrodo posto sul lobo parietale destro, seconda misura acquisita dall elettrodo posto sul lobo frontale, terza misura acquisita dall elettrodo posto sul lobo parietale sinistro.

Le corrispondenti medie per canale, una volta calcolate, sarebbero pari a: 61.4 55.0 75.0 Così che la valutazione del livello di attenzione per ciascuna delle tre misure sarebbe: normale (la prima riga presenta il secondo canale inferiore alla corrispondente media) elevato (tutte e tre i valori della seconda riga sono sopra la corrispondente media) normale (la terza riga presenta il secondo canale superiore alla corrispondente media) Poiché lo stato normale è il più frequente si stamperà a video: Il livello di attenzione durante la misurazione è stato prevalentemente normale. Frequenza: 1 Hz. Durata: 3 secondi. Decidete di scrivere il programma in C, e di memorizzare ciascuno dei canali come vettore dinamico parte di una struttura dati, chiamata DatiEEG, contenente i tre vettori di reali chiamati frontale, sinistro, destro. Nella stessa struttura aggiungete due slot che contengano anche i valori di frequenza di campionamento e di tempo di acquisizione, chiamati rispettivamente f e t. Il tipo è dunque definito come segue: typedef struct float *destro, *frontale, *sinistro; int f, t; DatiEEG; Decidete poi di scrivere le seguenti funzioni: 1) (4 punti) leggieeg(nomefile): riceve in ingresso il nome del file dove sono memorizzati i dati EEG nel formato spiegato in precedenza e restituisce il puntatore alla variabile strutturata di tipo DatiEEG popolata in base alla lettura del file. Si ricordi che la totalità di righe presenti nel file dipende dal tempo impiegato ad acquisirli e dalla frequenza di campionamento; 2) (4 punti) estraicampione(d,i): restituisce un vettore dinamico di tre float contenenti la componente i di ciascuno dei tre slot destro, frontale e sinistro della variabile d di tipo DatiEEG. I canali sono mappati nelle componenti 0 (destro), 1 (frontale) e 2 (sinistro) del vettore; 3) (2 punti) calcolamedia(v,n): riceve in ingresso un vettore v di reali e dimensione N e restituisce la corrispondente media aritmetica; 4) (5 punti) calcolastato(misura,media): riceve in ingresso due vettori di float di tre valori. misura è relativo ad una misura EEG relativa ai tre canali, media alle tre medie su ciascun canale precedentemente calcolate e restituisce una stringa che può essere pari a normale, scarso, elevato, in funzione dei criteri a-c definiti nel testo; 5) (5 punti) trovapiufrequente(lista): riceve in ingresso una lista concatenata di stringhe e restituisce la stringa più frequente. La lista concatenata è definita come segue: typedef struct elemento char *stringa; struct elemento *successivo; lstringhe; Si supponga siano state già definite le funzioni di supporto CONS, HEAD, TAIL, ISEMPTY.

Soluzione dell esercizio 1. 1) V. dispense del corso. 2) Per rappresentare un numero di livelli di grigio pari a 256=2 8 occorrono appunto 8 bit. Soluzione dell esercizio 2. 1) V. dispense del corso. 2) Poiché 32 bit sono pari a 4 byte, il numero complessivo di byte è 4096 pari a 4Kbyte. Soluzione dell esercizio 3. /* Programma per lettura ed elaborazione del segnale EEG */ #include <stdio.h> #include <stdlib.h> typedef struct float *sinistro, *frontale, *destro; int f, t; DatiEEG; typedef struct elemento char* stringa; struct elemento *successivo; lstringhe; /* Funzioni per la gestione della lista concatenata */ lstringhe* CONS(lStringhe *l, char *s) lstringhe*n=(lstringhe*)malloc(sizeof(lstringhe)); n->stringa=s; n->successivo=l; return n; char* HEAD(lStringhe *l) return l->stringa; lstringhe *TAIL(lStringhe *l) return l->successivo; int ISEMPTY(lStringhe *l) return l==null;

/* Funzioni per l'implementazione del programma */ DatiEEG* leggieeg(char* nomefile) FILE *f; int i, N; DatiEEG *d; float fr, sin, des; f=fopen(nomefile, "r"); d=(datieeg*)malloc(sizeof(datieeg)); fscanf(f,"%d %d", &d->f, &d->t); N=d->f*d->t; d->frontale=(float*)malloc(sizeof(float)*n); d->destro=(float*)malloc(sizeof(float)*n); d->sinistro=(float*)malloc(sizeof(float)*n); for(i=0; i<n; i++) fscanf(f,"%f %f %f", &des, &fr, &sin); d->frontale[i]=fr; d->sinistro[i]=sin; d->destro[i]=des; fclose(f); return d; float* estraicampione(datieeg d, int i) float *v=(float*)malloc(sizeof(float)*3); v[0]=d.destro[i]; v[1]=d.frontale[i]; v[2]=d.sinistro[i]; return v; float calcolamedia(float* v, int N) int i; float media; for (i=0, media=0.0; i<n; i++) media=media+v[i]; return media/n;

char* calcolastato(float* misura, float* media) int i, s; for(i=0, s=0; i<3; i++) s=s+(misura[i]>media[i]); if (s==3) return "elevato"; else if (s>0) return "normale"; return "scarso"; int codifica(char *stringa) if (!strcmp(stringa,"scarso")) return 0; else if(!strcmp(stringa,"elevato")) return 2; return 1; char* trovapiufrequente(lstringhe *l) char *s; int c, bestc; int f[3]=0,0,0; bestc=1; while(!isempty(l)) s=head(l); c=codifica(s); f[c]++; if(f[c]>f[bestc]) bestc=c; l=tail(l); switch(bestc) case 0: return "scarso"; case 2: return "elevato"; return "normale";

int main() DatiEEG *d; lstringhe *stati=null; char *stato; float *misura; float medie[3]; int i,n; /*Lettura dei dati*/ d=leggieeg("dati.txt"); /*Calcolo delle tre medie, una per canale*/ N=d->f*d->t; medie[0]=calcolamedia(d->destro,n); medie[1]=calcolamedia(d->frontale,n); medie[2]=calcolamedia(d->sinistro,n); /*Associazione dello stato a ciascuna misura*/ for(i=0; i<n; i++) misura=estraicampione(*d, i); stato=calcolastato(misura, medie); stati=cons(stati,stato); free(misura); /*Calcolo dello stato più frequente e stampa del risultato a video*/ stato=trovapiufrequente(stati); printf("il livello di attenzione durante la misurazione e\' stato prevalentemente %s.\n", stato); printf("frequenza: %d Hz. Durata: %d secondi",d->f, d->t); /*Deallocazione della memoria-manca funzione di deallocazione della lista*/ free(d->sinistro); free(d->destro); free(d->frontale); free(d); free(stati); return 0;