Dipartimento di Elettronica, Informazione e Bioingegneria

Download Report

Transcript 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 3, 2014
Prof. Marco D. Santambrogio
Nome
Cognome
Tema A
Tema B
Tema C
Esercizio 1 (35%)
Esercizio 2 (35%)
Esercizio 3 (30%)
Totale
Lo studente DEVE selezionare UNO tra i tre temi proposti e svolgere SOLO ed
UNICAMENTE gli esercizi del temi selezionato, consegnando UN SOLO foglio
protocollo! Il tempo previsto per il completamento della prova (Info + Elementi
di medica) è di 3 e 15’ ore: Elementi di medica 75 minuti, a seguire 2 ore per
Informatica.
La prova di informatica è 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 so 100.
E’ possibile portare all’esame libri, appunti, slide. 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.
Gli eventuali orali dei compiti per la parte di INFO si terranno dalle
9.00am del 15 Luglio presso la sala seminari del DEIB.
Tema d’esame A
Esercizio 1
Scrivere una funzione C che prenda in ingresso un numero decimale X ed un
numero decimale K e stampi a video la rappresentazione di X in base K.
Si scriva anche un main che permetta di testare la funzione.
Esercizio 2
Si scriva in C una funzione che presi in ingresso due parametri (un array A e un
numero intero n (la dimensione dell’array)), stampa a video, per ogni numero
dell’array, la lista dei sui divisori primi. NOTA: la funzione per l’identificazione
della primalità di un numero, DEVE essere una funzione ricorsiva.
Esempio:
Input: A: 3, 10, 15; n: 3
Output:
Dato: 3
Divisori primi: 3
Dato: 10
Divisori primi: 2, 5
Dato: 15
Divisori primi: 3, 5
Esercizio 3
Si realizzi in C una funzione che dato un array A di numeri interi positivi ed una
variabile intera X restituisce al chiamante la lista delle posizione in cui si trova la
variabile X nell’array A.
Esempio:
Input: A: 3, 2, 1, 0, 0, 1, 0; X: 0
Output: 3, 4, 6
Tema d’esame B
Esercizio 1
Si consideri la condizione, scritta in C, in cui x e y siano due variabili int:
!( (x>2) && !(y>7) ) || ( !(y>7) || (x<1) )
1. Si scriva l’espressione booleana associata alla condizione descritta ottenuta
dalla prima formula sostituendo la variabile A con x>2, la variabile B con y>7, la
variabile C con x<1. Se ne dimostri il valore di verità associato, tramite la
compilazione della corrispondente tabella di verità.
2. Si risponda, giustificando bene le risposte, alle seguenti domande:
a) L’espressione è vera o falsa quando x=0 e y=9?
b) Se y>7, per quali valori di x l’espressione è vera?
Esercizio 2
Un metodo per calcolare il valore approssimato della radice quadrata di un
numero reale non negativo z, detto metodo babilonese, utilizza la seguente
relazione ricorsiva:
"
1
z
$ x(n) = (x(n −1) +
)
2
x(n −1)
#
$
x(0) = 1
%
Dove n è un intero positivo arbitrario, mentre x(n) rappresenta
un'approssimazione della radice quadrata del numero z. Per esempio, se z è pari
a 2 e n è pari a 3 il valore di x(n) ottenuto applicando la formula indicata sopra è
1.4142.
Si scriva una funzione ricorsiva sqrt1(z,n) che restituisce un'approssimazione
della radice quadrata di z.
Esercizio 3
Cosa fa il codice presente nel listato allegato?
Cosa viene stampato a video?
#include<stdio.h>
#define dim 5
void foo (int*,int,int);
int main () {
int arr[dim][dim]={0},i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
arr[i][j]=(3*2)%(i*j);
foo(arr,2,3);
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 C
Esercizio 1
Calcolo del determinante di una matice M di NxN interi (ogni elemento è indicato
come mi,j). Per calcolare il determinate si usi lo sviluppo di Laplace. Si procede
scegliendo una riga, la i-esima, tramite la formula:
n
det(M ) = ∑ mi, j Ci, j
j=1
dove Ci,j è il complemento algebrico della coppia (i,j), cioè Ci,j è data da (-1)i+j
per il determinante (minore) di ordine n-1 ottenuto dalla matrice M eliminando la
riga i-esima e la colonna j-esima.
Si scriva quindi una funzione in C che calcoli il determinante di una matrice M di
NxN interi secondi lo sviluppo di Laplace.
Esercizio 2
Data una matrice Matrix di massimo MxN interi, si permetta all’utente di
ridefinire le dimensioni di Matrix (RxC), con le necessarie verifiche.
Si scriva quindi una funzione in C che, dopo aver fatto inserire gli RxC numeri, ne
calcola la trasposta MatrixTrasposta di dimensione CxR.
Il prototipo della funzione è:
void trasposta (int * Matrix, int R, int C, int * MatrixTrasposta);
Esercizio 3
Data una matrice M di RxC interi, si scriva una funzione in C che, dopo aver fatto
inserire gli RxC numeri, ne calcola la trasposta MT di dimensione CxR.
Supponenedo che R sia uguale a C, si scriva una funzione in C che, dopo aver
fatto inserire gli RxR numeri, ne calcola la trasposta, salvandola sempre su M.
Cosa cambia a livello di “algoritmo”, sempre che vi siano delle modifiche, rispetto
al primo esercizio? NOTA: La risposta DEVE essere ben motivata e supportata