Esercitazioni C (macchine stati)
Transcript
Esercizio 1 #include <stdio.h> #include <stdlib.h> // generatore di sequenza 8-7-9-5 void delay(void); int main(int argc, char *argv[]) { int stato,uscita; // tabella transizione stati int Tab_stati[4][2]={ {0,1}, {1,2}, {2,3}, {3,0}}; // tabella uscite int Tab_uscite[4][2]={ {0,8}, {1,7}, {2,9}, {3,5}}; stato=0; // inizializzazione stati do { uscita=Tab_uscite[stato][1]; printf("%d ",uscita); stato=Tab_stati[stato][1]; delay(); } while(1); // ciclo infinito return 0; } void delay(void) { long int c; for(c=0;c<1e8;c++); } Esercizio 2 #include <stdio.h> #include <stdlib.h> #include <conio.h> // generatore di sequenza 8-7-9-5 : 5-9-7-8 U/D void delay(void); -1- F. Favata a.s. 2012/13 int main(int argc, char *argv[]) { int stato,uscita,col; char c; // tabella di transizione stati int Tab_stati[4][2]={ {0,1}, {1,2}, {2,3}, {3,0}}; // tabella delle uscite int Tab_uscite[4][3]={ {0,8,5}, {1,7,9}, {2,9,7}, {3,5,8}}; // inizializzazione dello stato in UP stato=0;col=1; do { uscita=Tab_uscite[stato][col]; printf("%d ",uscita); stato=Tab_stati[stato][1]; delay(); // se un tasto è premuto, leggilo if(kbhit()){ c=getch(); } // se il tasto è 'u' conteggio UP, // se il tasto è 'd' conteggio DOWN switch(c){ case 'u':col=1;break; case 'd':col=2;break; } } while(c!=' '); // se il tasto è lo spazio, si esce return 0; } void delay(void) { long int c; for(c=0;c<1e8;c++); } -2- F. Favata a.s. 2012/13 Esercizio 3 #include <stdio.h> #include <stdlib.h> #include <conio.h> // // // // semaforo con sequenze: diurno/no pedone -> V V+G R notturno/no pedone -> G lampeggiante diurn-notturno/pedone -> R fisso void delay(void); void calc_usc(void); int uscita; int main(int argc, char *argv[]) { int stato,col,dp; char c; // tabella di transizione stati int Tab_stati[3][4]={ {0,1,1,0}, {1,2,0,0}, {2,0,0,0}}; // tabella delle uscite int Tab_uscite[3][10]={{0,4,2,1}, {1,6,0,0}, {2,1,0,0}}; // inizializzazione dello stato in diurno-no pedone stato=0;col=1;dp=1; do { uscita=Tab_uscite[stato][col]; // printf("%d ",uscita); calc_usc(); stato=Tab_stati[stato][1]; delay(); // se un tasto è premuto, leggilo if(kbhit()){ c=getch(); } // se il tasto è '1' diurno-no pedone // se il tasto è '2' notturno-no pedone // se il tasto è '3' pedone (diurno o notturno) -3- F. Favata a.s. 2012/13 switch(c){ case '1':col=1;break; case '2':col=2;break; case '3':col=3;break; } } while(c!=' '); return 0; // se il tasto è lo spazio, si esce } void calc_usc(void) { switch(uscita) { case 1:printf("R\n");break; case 2:printf("G\n");break; case 4:printf("V\n");break; case 6:printf("V+G\n");break; } } void delay(void) { long int c; for(c=0;c<1e8;c++); } Esercizio 4 #include <stdio.h> #include <stdlib.h> // riconoscitore di sequenza 3-7-1 // in caso di successo la risposta è OK, in caso di errore NO int stato; // prima del main perchè variabile globale, vista anche da fine() void fine(void); int main(int argc, char *argv[]) { int col,U,E; char c; // tabella di transizione stati int Tab_stati[7][5]={ {0,1,4,4,4}, {1,5,2,5,5}, {2,6,6,3,6}, {3,0,0,0,0}, -4- F. Favata a.s. 2012/13 {4,5,5,5,5}, {5,6,6,6,6}, {6,0,0,0,0}}; // tabella delle uscite int Tab_uscite[7][3]={ {0,0,0}, {1,0,0}, {2,0,0}, {3,1,0}, {4,0,0}, {5,0,0}, {6,0,1}}; stato=0; // inizializzazione dello stato system("CLS"); printf("premi tre tasti numerici di seguito\n"); do { c=getch(); printf("%c acquisito\n",c); switch(c) { // conversione carattere in X1 e X0 case '3':col=1;break; case '7':col=2;break; case '1':col=3;break; default:col=4; } stato=Tab_stati[stato][col]; U=Tab_uscite[stato][1]; E=Tab_uscite[stato][2]; if (U==1) {printf("OK\n"); fine();} if (E==1) {printf("NO\n"); fine();} } while(c!=' '); return 0; // se premuto lo spazio, si esce } void fine(void) { system("PAUSE"); system("CLS"); stato=0; } -5- F. Favata a.s. 2012/13
Documenti analoghi
Il linguaggio C
• La prima riga è una direttiva al preprocessore che dice di includere le
funzioni per l’input/output della libreria standard prima di compilare il
programma.
• La funzione printf della libreria s...
Introduzione al corso - e-Lite
Modello di funzionamento
Programmazione grafica con libreria WinBGIm
La funzione printf(): printf(“stringa di formato”[, ...]) // la parte tra
int i=4;
printf(“ecco il valore della variabile i: %d\n”,i);
printf(“ecco il valore prodotto dall’operatore di addizione: %d\n”,i+5);
printf(“il valore della variabile i non e’ cambiato: %d\n”,i);
...
Data e Ora di sistema in C
funzione kbhit() che, non ricevendo parametri, restituisce un valore
VERO se è stato premuto un tasto e un valore FALSO in caso contrario.
Possiamo usare questa funzione come rilevatore di eventi,...