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

Your email address will not be published. Required fields are marked *

*