Question 1
Question 2
typedef pixel colonne[256]; int altitude(colonne t) { int premmax=0,dernmax=0,i; for(i=1;i<128;i++) { if(t[i]>t[premmax]) premmax=dernmax=i; else if(t[i]==t[premmax])dernmax=i; } return((premmax+dernmax)/2); //division entière }
int nbs=0,nbc=0; //nombre de sommets et nb de creux int i,actu,prec,encav; altitude actuelle, précédente et encore avant prec=encav=ligne_de_crete[0]; for(i=1;i<256;i++) { actu=ligne_de_crete[i]; if(actu!=prec) { if(encav>prec &&actu>prec) nbc++; //c'est un creux else if(encav<prec && actu<prec) nbs++ //c'est un sommet encav=prec;prec=actu; } }
Question 3
a) La mesure de l'avance du tapis serait très difficile à réaliser par scrutation, car il faut à tout moment, pendant l'acquisition de l'image, regarder le port d'entrée, ce qui ralentirait grandement l'aquisition, qui nécessite pourtant un gros débit. Une programmation par interruption est bien plus adaptée à ce cas : l'acquisition n'est que rarement interrompue, et de plus pas longtemps car il suffit de mémoriser un état tout ou rien.
b) On suppose utiliser Turbo C sous Dos
#define port 0x379 #define masque 0x10 /* 00010000 binaire */ void main(void) { int prec=masque,actu,compteur=0; do { actu=inportb(port)&masque; if(actu && !prec)compteur++; prec=actu; } while(!kbhit()); printf("le compteur vaut : %d \n",compteur); }
Pour retourner au sujet de cet examen, cliquez ici. Pour retourner au sommaire des sujets d'examen, cliquez là.
Patrick TRAU, ULP - IPST mars 02