Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A

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];
}