Esercitazioni C (macchine stati)

Transcript

Esercitazioni C (macchine stati)
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

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...

Dettagli

Introduzione al corso - e-Lite

Introduzione al corso - e-Lite Modello di funzionamento Programmazione grafica con libreria WinBGIm

Dettagli

La funzione printf(): printf(“stringa di formato”[, ...]) // la parte tra

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); ...

Dettagli

Data e Ora di sistema in C

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,...

Dettagli