...1... ...2... ...4...
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)); }
#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"); }