Dipartimento di Elettronica, Informazione e Bioingegneria

Dipartimento di Elettronica, Informazione e Bioingegneria
20133 Milano (Italia)
Piazza Leonardo da Vinci, 32
Tel. (+39) 02-2399.3400
Fax (+39) 02-2399.3411
Politecnico di Milano
Informatica ed Elementi di Informatica Medica
Luglio 28, 2016
Prof. Marco D. Santambrogio
Nome:
Cognome:
#Matricola:
Tema A
Tema B
Tema C
Esercizio 1 (20%)
Esercizio 2 (35%)
Esercizio 3 (45%)
Totale
Lo studente DEVE selezionare UNO tra i tre temi proposti e svolgere SOLO ed
UNICAMENTE gli esercizi del temi selezionato.
Il tempo previsto per il completamento della prova (Info) è di 2 ore. La prova è
superata con un minimo di 60 punti su 100. Gli orali sono obbligatori nella fascia
55-65. Una insufficienza viene considerata non grave, se non inferiore a 50 punti
su 100. E’ possibile portare all’esame libri, appunti, slide, ma questo materiale
potrà essere usato se e solo se verrà prima consegnata la prova di Elementi di
informatica medica. NON è possibile tenere acceso alcun dispositivo elettronico
(e.g. portatile, cellulare, calcolatrice, tablet, etc.). Gli studenti che verranno trovati
a copiare, a far copiare, o con dispositivi elettronici accessi verranno
automaticamente ESPULSI dalla prova.
La visione della prova e gli eventuali orali si terranno alle 2.30pm del 3
Agosto 2016 e il primo Settembre 2016 alle 10am presso la Sala Riunioni
del NECST Lab.
Tema d’esame A
Esercizio 1
Date due matrici di interi definite come segue:
#define DM1 14
#define DM2 3
int M1[DM1][DM1];
int M2[DM2][DM2];
Si supponga che M1 e M2 siano state popolate, si scriva in C la funzione che
ricevute in ingresso M1 ed M2, restituisce quante volte M2 è contenuta in M1.
Valgono anche le sovrapposizioni parziali.
Esercizio 2
Siano S1 ed S2 due sequenze di interi di lunghezze note (la lunghezza di S1 è pari
a 100, quella di S2 è pari a 10) in cui i singoli valori sono compresi tra 0 e 9.
Si scriva una funzione ricorsiva che, data la sequenza S1 ed S2, dica quante volte
S2 è contenuta in S1 senza ammettere sovrapposizioni.
NOTA: l’esercizio richiede solo la scrittura della funzione ricorsiva.
Esercizio 3
Il codice riportato rappresenta il listato di un programma che, data una matrice di
dimensione 10x7, chiede all’utente di definirne le effettive dimensione, richiede
quindi l’inserimento dei dati e poi ne mostra il contenuto.
Si dica, giustificando la risposta, quale è l’output a video di foo se m=n=2.
void foo (int*,int,int);
int main () {
int arr[10][7]={0},i,j,n,m;
[… inseriti m ed n coerenti con R e C popola arr]
foo(arr,n,m);
return 0;
}
void foo(int *punt,int n,int m) {
int i, j;
for(i=0;i<n;i++) {
printf("\n");
for(j=0;j<m;j++)
printf("%d",*(punt+(i*m)+j));
}
printf("\n");
}
Tema d’esame B
NOTA: Quando si richiede una funzione, non è detto che sia necessaria solo ed
unicamente una funzione. Potrebbe risultarvi comodo usarne anche altre.
Esercizio 1
Si scriva una funzione ricorsiva in C che, date due stringhe, verifica, restituendo 1,
0 altrimenti, che una sia la permutazione della seconda.
ESEMPIO1: S1: caab, S2: abac – Output 1
ESEMPIO1: S1: abab, S2: abaa – Output 0
Esercizio 2
Si esamini il seguente codice.
float foo(int n1, int n2){
int tmp1=0, tmp2=1, cont;
float n3=1, n4;
if(n2<0){
n2=-n2;
tmp1=1;
}
for(cont=0;cont<n2;cont++)
n3=n3*n1;
if(tmp1)
n3=1.0/n3;
n4=tmp2*n3;
return n4;
}
Si dica chiaramente quale è l’obiettivo della funzione foo.
Esercizio 3
Si scriva una funzione ricorsiva in C che ordina un array di interi attraverso il
seguente algoritmo:
• caso base: un array di 0 o 1 elemento è ordinato
• caso induttivo: dividere l'array in 2 metà, ordinarle tramite chiamate
ricorsive e poi farne la fusione ordinata
Tema d’esame C
NOTA: Quando si richiede una funzione, non è detto che sia necessaria solo ed
unicamente una funzione. Potrebbe risultarvi comodo usarne anche altre.
Esercizio 1
Data una matrice M1 di massimo MxN interi, si permetta all’utente di ridefinire le
dimensioni di M1 (RxC), con le necessarie verifiche.
Si scriva quindi una funzione in C che, dopo aver fatto inserire gli RxC numeri, ne
calcola la trasposta M2 di dimensione CxR.
Il prototipo della funzione e’: void trasposta (int *M1, int R, int C, int *M2);
Esercizio 2
Si consideri il seguente programma C e si indichi l'effetto della sua esecuzione,
motivando adeguatamente la risposta.
#include <stdio.h>
int main() {
float f; int i;
f=0.6;
for (i=1; i<10; i++)
f = f+0.6;
printf("\nIl numero 0.6*10 (f: %f) ", f);
if (f != 6.0) printf("non ");
printf("e' uguale a %f\n", 6.0);
return 0;
}
Esercizio 3
Si scriva una funzione ricorsiva in C che, data una matrice di N dimensioni di un
tipo di dato definito da voi, calcola il quantitativo di memoria che deve essere
allocato per contenere la matrice.