Implementação de autômato
Olá, pessoal.
Segue abaixo o código para implementação do autômato que fizemos em sala de aula para reconhecimento dos números em algarismos romanos de 1 a 39. Para o trabalho proposto, basta alterar o código para que o programa imprima na tela o número em algarismos arábicos.
Exemplo: se o usuário digitar “xxvii”, o programa deve imprimir “27”.
#include <stdio.h>
#include <string.h>
int main(void)
{
/* I V X */
int S[11][3] = {{ 1, 5, 8}, \
{ 2, 4, 7}, \
{ 3, -1, -1}, \
{-1, -1, -1}, \
{-1, -1, -1}, \
{ 6, -1, -1}, \
{ 2, -1, -1}, \
{-1, -1, -1}, \
{ 1, 5, 9}, \
{ 1, 5, 10}, \
{ 1, 5, -1}};
char texto[100], c;
int estado, pos, entrada;
printf("Digite o texto: ");
fgets(texto, 100, stdin);
texto[strlen(texto) - 1] = 0;
estado = 0;
pos = 0;
while ((c = texto[pos]) != 0)
{
if (c == 'i')
entrada = 0;
else if (c == 'v')
entrada = 1;
else if (c == 'x')
entrada = 2;
else
{
printf("Caractere invalido: %c\n", c);
return 1;
}
estado = S[estado][entrada];
if (estado == -1)
{
printf("Erro na coluna %d.\n", pos);
return 2;
}
pos++;
}
if (estado != 0)
printf("Texto OK!\n");
else
printf("Texto invalido!\n");
return 0;
}
Leave a Reply