Форум программистов, компьютерный форум CyberForum.ru

Построить детерминированный конечный распознаватель - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Анкета http://www.cyberforum.ru/cpp-beginners/thread319758.html
Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: • возраст; • пол; • образование (начальное, среднее, высшее). Вторая группа содержит собственно вопрос анкеты, ответ на который либо ДА, либо НЕТ. Составить программу, используя последовательные классы стандартной библиотеки шаблонов С++, которая: • обеспечивает начальный ввод...
C++ Начало Си++ Я понимаю что данные задачи очень просты, но помогите пожалуйста...Я просто совсем нечего не шарю.. Задача 1 Дан массив X из N целых чисел. Найти индекс максимального элемента в массиве Х. Задача 2 Дан массив А из N элементов. Переставить элементы массива A в обратном порядке. Задача 3 Дан массив А из N элементов и число X. Определить, имеются ли в массиве A два расположенных рядом значения... http://www.cyberforum.ru/cpp-beginners/thread319728.html
C++ Сумма элементов
Найти сумму элементов массива между первым и вторым отрицательным элементом. Преобразование. Преобразовать массив так чтобы сначала стояли элементы по модулю меньше единицы потом все остальные. Прошу помощи,заранее благодарен.
C++ Строки
В алфавитной строке удалить строчные буквы и удвоить заглавные Пожалуйста, помогите
C++ двумерные массивы http://www.cyberforum.ru/cpp-beginners/thread319718.html
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент Помогите, пожалуйста
C++ Геометрическая фигура Постановка задачи. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом ‘*’ или пробелом. Размер фигуры (n) определяется при вводе. Ниже приведены варианты: 1. Пустой параллелограмм. Основание n и высота n подробнее

Показать сообщение отдельно
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.06.2011, 06:11     Построить детерминированный конечный распознаватель
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <ctype.h>
 
enum states {
    NORMAL,
    SIGN,
    INTPART,
    FRACPART,
    END
};
 
struct stack {
    char v[100], *p;
};    
 
/* +65.372,-785.34,457.7# */
int main(void)
{
    const char *str = "+65.372,-785.34,457.7#", *p;
    enum states s;
    int c;
    
    struct stack stack;
    stack.p = stack.v;
    
    s = NORMAL;
    for (p = str; (c = (unsigned char) *p) != '\0'; p++)
        switch (s) {
        case NORMAL:
            if (c == '+' || c == '-') {
                *stack.p++ = c;
                s = SIGN;
            } else if (isdigit(c)) {
                p--;
                s = INTPART;
            } else if (c == '#')
                s = END;
            break;
        case SIGN:
            if (isdigit(c)) {
                p--;
                s = INTPART;
            } else {
                p--;
                stack.p = stack.v;
                s = NORMAL;
            }
            break;
        case INTPART:
            if (isdigit(c))
                *stack.p++ = c;
            else if (c == '.') {
                *stack.p++ = c;
                s = FRACPART;
            } else if (c == '#')
                s = END;
            else {
                p--;
                stack.p = stack.v;
                s = NORMAL;
            }
            break;
        case FRACPART:
            if (isdigit(c))
                *stack.p++ = c;
            else if (c == ',' || c == '#') {
                if (stack.p > stack.v) {
                    printf("%.*s\n", stack.p - stack.v, stack.v);
                    stack.p = stack.v;
                }
                s = (c == ',') ? NORMAL : END;
            } else {
                p--;
                stack.p = stack.v;
                s = NORMAL;
            }
            break;
        case END:
            break;
        }
    
    return 0;
}
Код
[guest@localhost tests]$ ./t
+65.372
-785.34
457.7
[guest@localhost tests]$
в случае ошибок идёт переход в нормальное состояние
 
Текущее время: 01:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru