Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A - Corso per allievi GESTIONALI - Prof. C. SILVANO A. A. 2004/2005 -18 febbraio 2005 - RECUPERO 1 PARTE COGNOME: ________________ NOME: _______________ MATRICOLA: _____ Istruzioni: Scrivere solo sui fogli distribuiti negli spazi indicati - utilizzando il retro delle pagine in caso di necessità. Non separare questi fogli. È vietato portare all’esame libri, eserciziari, appunti e calcolatrici. Chiunque venga trovato in possesso di documentazione relativa al corso – anche se non strettamente attinente alle domande proposte – vedrà annullata la propria prova. Non è possibile lasciare l’aula conservando il tema della prova in corso. QUIZ: Barrare la risposta esatta per ciascuna delle seguenti domande: 1. Dato il seguente numero binario 101010 nella rappresentazione dei numeri interi relativi in modulo e segno, il corrispondente valore decimale risulta: a) +42 b) -10 c) -22 2. Data la seguente operazione binaria tra numeri interi con segno rappresentati in complemento a due su 8 bit: 0101 1101 + 1011 0001, il corrispondente risultato decimale risulta: risulta: a) overflow b) 14 c) 270 3. Dato il seguente programma in linguaggio C: #include <stdio.h> int f(char c, char* str) { int i; for (i=0;*str!='\0' && *str!=c;str++,i++) ; if (*str=='\0') return (-1); else return i; } int main() { char *a[]={"quare","id","faciam",""} ; int i; for (i=0;*a[i]!='\0';i++) printf ("%i; ",f('a',a[i])); } Indicare cosa viene stampato a video: a) 1; 2; 1; b) 2; -1; 1; c) 1; 1; 2; 4. L’espressione booleana: A B C + A B’ C’ + A B’ C + A B C’ è equivalente a: a) AB + BC b) A c) 1 5. Dato il seguente programma in linguaggio C: #include <stdio.h> main() { int x,y,z; for (x=0;x<=3;x=x+1) for (y=x;y>=2;y=y-2) printf("y/2= %d \n",y/2); for (z=y*2;z>=0;z=z-1) printf("z/2= %d \n",z/2); } Indicare cosa viene stampato a video: a)y/2= 1 y/2= 1 z/2= 1 z/2= 0 z/2= 0 b)y/2= y/2= y/2= z/2= z/2= 1 1 1 0 0 c)y/2= y/2= z/2= z/2= 1 1 1 0 ESERCIZIO 1 Data la seguente funzione f: f(A, B, C, D, E) = A B’ C’ D’ E +A B + A’ B C + A’ B C’ + A + AB’ + B’ C’ + B’ C Utilizzando le proprietà e i teoremi dell’algebra Booleana, semplificare l’espressione di f, indicando le singole operazioni svolte e il nome oppure l’espressione della proprietà o del teorema utilizzato (ad esempio, “Proprietà Associativa” oppure “(A B) C = A (B C)”): Espressione trasformata Teorema utilizzato A B’ C’ D’ E +A B + A’ B C+A’ B C’+ A+AB’+B’ C’+B’ C Pr. Assorbimento A + A’ B C + A’ B C’ + B’ C’ + B’ C Pr. Distrib. A + A’ B (C + C’) + B’ (C’ + C) Pr. Inverso A + A’ B 1 + B’ 1 El Nullo A + A’ B Pr. Assorbimento + B’ A + A B + A’ B + B’ Pr. Distrib. A + B (A + A’ ) + B’ Pr. Inv. A + B 1 + B’ El. Nullo A + B + B’ Pr. Inv A + 1 El. Nullo 1 ESERCIZIO 2 Dato il seguente programma in linguaggio C: #include <stdio.h> int f(int n) { int i; for (i=2;i<n && ((n%i)!=0);i++) ; if (i>=n) return 1; else return 0; } int main() { int i; for (i=1;i<10;i++) printf ("%s\n",f(i)?"vero":"falso"); } Indicare cosa viene stampato a video: vero vero vero falso vero falso vero falso falso ESERCIZIO 3 Scrivere una funzione in linguaggio C che, ricevuto in ingresso un array di interi X , la sua dimensione DIM e un numero intero K restituisca un array Y di dimensione (DIM +1 ) i cui elementi siano così ottenuti: - i primi DIM elementi di Y corrispondono ai resti della divisione intera dei corrispondenti DIM elementi di X per K - l’ultimo elemento del vettore Y contiene il numero intero corrispondente al numero di occorrenze del valore K nei DIM elementi del vettore X. Esempio: Se X={1,6,3,5,3,4,11,13} e K = 3 allora Y={1,0,0,2,0,1,2,1,2} Scrivere anche il prototipo della funzione ed un esempio di main in cui tale funzione viene chiamata e in cui il vettore Y così ottenuto viene stampato a video. #include <stdio.h> int funz(int X[], int Y[], int DIM, int k); int main() { int i; int A[8]={1,6,3,5,3,4,11,13}; int B[9]; funz(A,B,8,3); for (i=0; i<9; i++) printf("%d\n",B[i]); return 0; } int funz(int X[], int Y[], int DIM, int k){ int i; int count=0; for(i=0;i<DIM;i++) { Y[i]=X[i]%k; if (X[i] == k) count++; } Y[DIM] = count; return 0; } ESERCIZIO 4 Disegnare il diagramma di flusso (Flow Chart) del seguente frammento di programma in linguaggio C: for (i=0;i<N;i++) {if (X[i] == Y[i]) Y[i]=X[i]+ 2; else Y[i] 0; for (j=0;j<M;j++) A[j]=B[j]; }