Esercizio
●
Una sorgente di informazione può produrre 8
diversi simboli con probabilità diverse, e
presenta una entropia effettiva di 2.4
bit/simbolo. Quale è il numero medio di byte
necessari per contenere un messaggio di 1000
simboli consecutivi generato da questa
sorgente?
–
Sol. In media un simbolo è rappresentabile con 2.4
binit il che significa che 1000 simboli occuperanno
in media 2400 binit pari a 2400/8=300 bytes.
Esercizio
●
Una moneta viene lanciata 1000 volte. Su 1000
lanci, per 600 volte esce croce. Quale è la
ridondanza presente nella moneta?
–
Sol: assumendo la frequenza come misura della
probabilità dei due simboli (T e C) abbiamo:
●
●
●
●
pT=0.4 e pC=0.6;
H=-pT·log2pT -pC·log2pC = -0.4 ·log20.4 -0.6·log20.6= 0.529
+ 0.442 = 0.971 bit/simb
HMAX = log22 = 1 bit/simb
R = 1-H/HMAX = 1-0.971 = 0.029
Esercizio
●
Un dado genera i simboli da 1 a 6. Un dado
truccato presenta una entropia effettiva di 2.16
bit. Quale è la quantità media di byte
necessaria per memorizzare il risultato di 100
lanci?
–
Sol: il numero medio di binit per rappresentare un
messaggio di M simboli è Nb=M · H; se M=100
lanci allora Nb=100 · H = 100 · 2.16=216 binit
–
216 binit=216/8=27 bytes
Esercizio
●
Un canale di trasmissione può trasmettere
54Kbit al secondo. Quale sarà il tempo minimo
di trasmissione di un file di 1 megabyte che
presenta entropia effettiva di 4 bit? Il file è
equivalente ad una sorgente dove ogni simbolo
corrisponde ad un byte.
–
Sol: il file costituisce un messaggio di M=220
simboli. Ogni simbolo occupa in media 4 binit per
cui in totale avremo Nb=M·H=4·220 binit
–
se la velocità di trasmissione è vt= 54 Kbit/s
allora t=Nb/vt=4·220/54000=77.672 s
Esercizio
●
Un Ospedale decide di trasformare in formato digitale
l’archivio radiografico. Per questo scopo viene
utilizzato uno scanner da 600 dpi e 48 bpp. Di quanto
spazio di memoria ci sarà bisogno considerando che
la dimensione di una radiografia è circa di 11 x 11
pollici.
–
Dimensioni radiografia:
●
orizzontale: 11·600 pixel
●
verticale: 11·600 pixel
●
numero pixel per radiografia:(11·600)2 =43,560,000 pixel
●
ogni pixel occupa 48/8=6 bytes
●
occupazione radiografia=43,560,000·6=261,360,000 bytes
Esercizio
●
Un laboratorio fotografico deve digitalizzare una
collezione di 100 fotografie a colori di
dimensioni A4 (8x11 pollici), ed ha a
disposizione, per memorizzare le immagini, un
disco da 10 gigabyte. Quale è la risoluzione
massima che si potrà utilizzare, in termini di
dpi, se si sceglie una profondità di 24 bbp?
Calcolare il risultato e spiegare il procedimento.
Esercizio
●
Soluzione
–
Detta r la risoluzione (uguale in verticale e in
orizzontale) in dpi si ha:
●
●
●
●
●
occupazione foto: 8·r·11·r pixel=88·r2 pixel
ogni pixel occupa 24/8=3 bytes
occupazione foto in bytes=88·r2·3 bytes=264 · r2 bytes
100 foto occuperanno 26400 · r2 bytes
tale valore deve essere inferiore a 10Gb:
–
–
26400·r2<10·230 da cui
r < (10·230/26400)1/2=637.746 dpi
Esercizio
●
Viene utilizzato uno scanner da 200 dpi e 24
bpp. Usando questo scanner vengono
digitalizzate 10 fotografie di 10x15 centimetri
che vengono memorizzate senza
compressione. Quanto spazio di memoria
occuperanno le foto? Calcolare il risultato e
spiegare il procedimento. (1 pollice = 2,54 cm)
Esercizio
●
Soluzione
–
occupazione foto in pixel: 10 · 15/2.542
pixel=930,001,860 pixel
–
ogni pixel occupa 24/8=3 bytes
–
occupazione foto in bytes=930,001,860 · 3
bytes=2,790,005,580 bytes
–
10 foto occuperanno 27,900,055,800 = 26.608 Mb
·
2002
Esercizio
●
Con uno scanner da 300 dpi e 24 bpp vengono
digitalizzate 11 lastre fotografiche ciascuna
delle dimensioni di 6x4 pollici. Le immagini
digitali ottenute vengono poi memorizzate con
compressione jpeg 1:15. Quanto spazio di
memoria occuperanno le immagini? Calcolare il
risultato e spiegare il procedimento.
Esercizio
●
Soluzione
–
occupazione foto in pixel: 6 · 300 · 4 · 300 pixel =
2,160,000 pixel
–
ogni pixel occupa 24/8=3 bytes
–
occupazione foto in bytes=2,160,000 · 3
bytes=6,480,000 bytes
–
compressione: 6,480,000/15=432,000 bytes
–
11 foto occuperanno 11 · 432,000=4,752,000 bytes
Esercizio

Scrivere l'output del seguente programma, prestando
attenzione agli indici e ai limiti dell'array e ignorando le
istruzioni di stampa illegali (se ci sono). Supporre
disattivato il controllo sul valore degli indici degli array.
int main(void){
int a[4][4];
int *p,*q;
int i,j,k=8,s=1;
for(i=0; i<16; i++)
a[0][i] = --k * (s=-s);
for(i=0; i < 2; i++){
for(j=1; j < 7;j++)
printf("%5d",a[i][j]);
printf("\n");
}
...
Esercizio
...
}
p = &a[1][1];
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
a[*p-1][p[2]]);
*(p+*(p+5)));
*(&p[3]+p[3]-**a));
a[&p[4]-a[2]][2]);
*(&p[3]+--*p));
*(&a[0][0]-*(p-3)));
Esercizio
-7
-3
1
5
6
2
-2
-6
-5
-1
3
7
4
0
-4
-8
6
2
-5
-1
4
0
-3
1
Contenuto della
matrice
2
-2
-1
3
for(i=0; i < 2; i++){
for(j=1; j < 7; j++)
printf("%5d",a[i][j]);
printf("\n");
}
Esercizio
-7
-3
1
5
6
2
-2
-6
-5
-1
3
7
4
0
-4
-8
Contenuto della
matrice
-3
1
??
-1
-2
1
p = &a[1][1];
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
printf(" %d\n",
a[*p-1][p[2]]);
*(p+*(p+5)));
*(&p[3]+p[3]-**a));
a[&p[4]-a[2]][2]);
*(&p[3]+--*p));
*(&a[0][0]-*(p-3)));
Esercizio
Nel gioco del Sudoku le caselle di uno schema di 9 righe
8
6
5
e 9 colonne devono essere riempite con i numeri da 1 a 9 9
3
4
in modo tale che un numero compaia una sola volta per
7
1
9
ogni riga, per ogni colonna e in ciascuno dei 9 quadrati 3
3
9
per 3 in cui può essere suddiviso lo schema (vedi figura).
Ad esempio, considerando lo schema della figura, nella
2
5
7
casella in seconda riga e ottava colonna potrà essere posto
6
o il numero 1 o il numero 6 o il numero 8 in quanto i
6
8
2
numeri 9, 3 e 4 compaiono sulla stessa riga, i numeri 2 e
7 compaiono sulla stessa colonna e il numero 5 compare 3
4
nello stesso quadrato della cella in questione.
9
7
6
Scrivere una funzione C che ricevuti come parametri:
• una matrice 9 x 9 di interi contente uno schema parzialmente riempito (la casella vuota è
rappresentata dal numero 0);
• le coordinate r (riga) e c (colonna) di una casella;
• un numero x candidato ad occupare la casella di coordinate r e c
restituisca un valore di verità falso/vero (0/1) che indichi se il numero x può occupare la
casella di coordinate r e c.
Scrivere inoltre un main di prova della funzione.
sudoku
int main(void){
int a[N][N];
int n,m,r,c,x;
leggimatricedafile("datiB.txt",a,&n,&m);
printf("matrice:\n");
stampamatrice(a,n,m);
printf("Introduci le coordinate:");
scanf("%d%d",&r,&c);
for (x=1; x<=N; x++)
if (sudokuCheck(a,n,r,c,x))
printf("%d ammissibile\n",x);
else
printf("%d non ammissibile\n",x);
}
sudoku
int sudokuCheck( int A[N][N], int n,
int r, int c, int x){
int k, ammissibile;
ammissibile = A[r][c] == 0;
for (k=0; k<n && ammissibile; k++)
ammissibile = A[r][k] != x &&
A[k][c] != x;
ammissibile = ammissibile &&
quadratoAmmissibile(A,S,r/S*S,c/S*S,x);
return ammissibile;
}
sudoku
int quadratoAmmissibile( int A[N][N], int n,
int r, int c, int x){
int i,j, ammissibile;
ammissibile = 1;
for (i=0; i<n && ammissibile; i++)
for (j=0; j<n && ammissibile; j++)
ammissibile = A[r+i][c+j] != x;
}
return ammissibile;
LIFE
●
Scrivere un programma che simuli una zona di
spazio popolata da cellule (asterischi) che
evolvono di generazione in generazione
secondo le seguenti regole di nascita, morte e
sopravvivenza:
–
Nascita di una cellula: spazio vuoto circondata da 3
cellule
–
Morte di una cellula: se circondata da meno di 2 o
più di 3 cellule
–
Sopravvivenza di una cellula: se circondata da 2 o
3 cellule
Scarica

Esercizio