SOLUZIONE 15-07-99 (C)
Questionario cartaceo
- 123 in base 7 è 1 × 49 + 2 × 7 + 3 × 1 =
66.
66 = 7 × 9 + 3 × 1
e quindi in base 9 è
73 .
...1...
...2...
...4...
-
- Utilizzando la periferica tastiera ed un editor (programma per
scrivere semplici file testo) viene creato sul disco rigido un file che contiene il
testo del programma. (Notare che CodeWarrior offre anche un tale
editor.)
- Utilizzando un compilatore viene controllato che il programma sia
sintatticamente corretto e poi viene compilato, cioè tradotto
in un programma in linguaggio macchina (il testo di tale programma
sarà messo in un file sul disco rigido).
CodeWarrior offre la funzionalità per compilare.
- Tale programma viene eseguito, e per fare ciò
viene trasferito nella memoria centrale.
CodeWarrior offre la funzionalità per eseguire.
-
typedef struct ALB *ALBERO;
struct ALB { float ELEM;
ALBERO SINISTRO;
ALBERO DESTRO; } ;
BOOL APPARTIENE(ALBERO a, float e)
/*questa funzione controlla se e appartiene all'albero a,
cioe' se si trova in un nodo */
{
if(a == NULL) return FALSE;
else if(a-> ELEM == e) return TRUE;
else return(APPARTIENE(a->SINISTRO,e) || APPARTIENE(a->DESTRO,e));
}
Parte laboratorio
#include <stdio.h>
typedef int BOOL;
#define TRUE 1
#define FALSE 0
/*gli elementi del tipo IMMAGINE rappresentano delle immagine a colori
in modo digitale, ogni elemento della matrice rappresenta un colore
secondo un opportuno meccanismo di codifica */
#define H 5
#define L 7 /*altezza e larghezza delle immagini*/
typedef int IMMAGINE[H][L];
BOOL bande_or(IMMAGINE i);
BOOL righine_ver(IMMAGINE i);
BOOL quadrettini(IMMAGINE i);
/* sottoprogramma che controlla se un'immagine e' a bande orizzontali */
/* per esempio quella che segue lo e'
3 3 3 3 3 3 3
3 3 3 3 3 3 3
4 4 4 4 4 4 4
2 2 2 2 2 2 2
2 2 2 2 2 2 2
mentre quest'altra non lo e'
3 3 3 3 3 3 3
3 3 3 0 3 3 3
4 4 4 4 4 4 4
2 2 2 2 2 2 2
2 2 2 2 2 2 2
*/
BOOL bande_or(IMMAGINE i)
/*basta controllare che gli elementi di ogni riga siano uguali tra loro*/
{
int x,y, xcol;
for (x=0 ; x<H ; x++)
{
xcol = i[x][0];
for ( y=1 ; y<L ; y++ )
if ( xcol != i[x][y] ) return FALSE;
}
return TRUE;
}
/* sottoprogramma che controlla se un'immagine e' a righine verticali */
/* per esempio quella che segue lo e'
3 4 3 4 3 4 3
3 4 3 4 3 4 3
3 4 3 4 3 4 3
3 4 3 4 3 4 3
3 4 3 4 3 4 3
mentre quest'altra non lo e'
3 4 3 3 3 4 3
3 4 3 3 3 4 3
3 4 3 3 3 4 3
3 4 3 3 3 4 3
3 4 3 3 3 4 3
*/
BOOL righine_ver(IMMAGINE i)
/*basta controllare che tutte le colonne pari siano del colore di i[0][0]
e tutte quelle dispari siano del colore di i[0][1]*/
{
int x,y, col1, col2;
col1 = i[0][0];
col2 = i[0][1];
for (y=0 ; y<L ; y++)
if ( y%2 == 0 )
for ( x=0 ; x<H ; x++ ) { if ( col1 != i[x][y] ) return FALSE; }
else
for ( x=0 ; x<H ; x++ ) { if ( col2 != i[x][y] ) return FALSE; }
return TRUE;
}
/* sottoprogramma che controlla se un'immagine e' a quadretti */
/* per esempio quella che segue lo e'
3 0 3 0 3 0 3
0 3 0 3 0 3 0
3 0 3 0 3 0 3
0 3 0 3 0 3 0
3 0 3 0 3 0 3
mentre quest'altra non lo e'
3 3 0 0 0 0 0
3 3 0 0 0 0 0
0 0 3 3 3 3 3
0 0 3 3 3 3 3
0 0 3 3 3 3 3
*/
BOOL quadrettini(IMMAGINE i)
/*basta controllare che tutti gli eleemnti la cui somma degli indici e'
pari siano del colore di i[0][0] e tutti quelli la cui somma degli
indici e' dispari siano del colore di i[0][1]*/
{
int x,y, col1, col2;
col1 = i[0][0];
col2 = i[0][1];
for (x=0 ; x<H ; x++)
for ( y=1 ; y<L ; y++ )
if ( (x+y)%2 == 0 )
{
if ( col1 != i[x][y] ) return FALSE;
}
else
if ( col2 != i[x][y] ) return FALSE;
return TRUE;
}
main()
{
/* testare adeguatamente le procedure definite sopra*/
/* evitare di definire un sottoprogramma per leggere una matrice */
IMMAGINE
i0 = {{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}},
i1 = {{1,1,1,1,1,1,1},
{1,1,1,1,1,1,1},
{1,1,1,1,1,1,1},
{2,2,2,2,2,2,2},
{1,1,1,1,1,1,1}},
i2 = {{1,1,3,4,1,1,1},
{1,1,3,4,1,1,1},
{1,1,3,4,1,1,1},
{1,1,3,4,1,1,1},
{1,1,3,4,1,1,1}},
i3 = {{1,0,1,0,1,0,1},
{1,0,1,0,1,0,1},
{1,0,1,0,1,0,1},
{1,0,1,0,1,0,1},
{1,0,1,0,1,0,1}},
i4 = {{1,0,1,0,1,0,1},
{0,1,0,1,0,1,0},
{1,0,1,0,1,0,1},
{0,1,0,1,0,1,0},
{1,0,1,0,1,0,1}};
printf("\nl'immagine tutti zero \n");
if (!bande_or(i0)) printf("non "); printf("e' a bande orizzontali\n");
if (!righine_ver(i0)) printf("non "); printf("e' a righine verticali\n");
if (!quadrettini(i0)) printf("non "); printf("e' a quadrettini\n");
printf("\nla prima immagine\n");
if (!bande_or(i1)) printf("non "); printf("e' a bande orizzontali\n");
if (!righine_ver(i1)) printf("non "); printf("e' a righine verticali\n");
if (!quadrettini(i1)) printf("non "); printf("e' a quadrettini\n");
printf("\nla seconda immagine\n");
if (!bande_or(i2)) printf("non "); printf("e' a bande orizzontali\n");
if (!righine_ver(i2)) printf("non "); printf("e' a righine verticali\n");
if (!quadrettini(i2)) printf("non "); printf("e' a quadrettini\n");
printf("\nla terza immagine\n");
if (!bande_or(i3)) printf("non "); printf("e' a bande orizzontali\n");
if (!righine_ver(i3)) printf("non "); printf("e' a righine verticali\n");
if (!quadrettini(i3)) printf("non "); printf("e' a quadrettini\n");
printf("\nla quarta immagine\n");
if (!bande_or(i4)) printf("non "); printf("e' a bande orizzontali\n");
if (!righine_ver(i4)) printf("non "); printf("e' a righine verticali\n");
if (!quadrettini(i4)) printf("non "); printf("e' a quadrettini\n");
}