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

Построить конечный автомат из вещественных чисел в 16-речной системе счисления - C++

Восстановить пароль Регистрация
 
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
06.12.2013, 12:54     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #1
Здравствуйте,помогите разобраться с алгоритмом.нужно построить конечный автомат из вещественных чисел с целой и/или дробной частью в 16-речной системе счисления.Например возможные числа:A01.BC 0101 .EEE и т.д
А действие:десятичное значение.
я построила диаграмму переходов и таблицу переходов,а как это действие реализовать?(помогите написать таблицу переходов с действиями).
Миниатюры
Построить конечный автомат из вещественных чисел в 16-речной системе счисления  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 12:54     Построить конечный автомат из вещественных чисел в 16-речной системе счисления
Посмотрите здесь:

C++ Конечный автомат для строк
C++ Конечный автомат
Конечный автомат. Лабиринт (поиск в глубину) C++
Конечный автомат C++
Детерминированный конечный автомат C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
07.12.2013, 21:31  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #2
никто не сможет помочь?
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 17:02  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #3
вот диаграмма переходов,но не могу доделать таблицу переходов с действиями...проблема с переводом в десятичное значение дробной части
Миниатюры
Построить конечный автомат из вещественных чисел в 16-речной системе счисления  
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 17:18     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #4
Для дробной части что-то такое.
C++
1
2
3
4
5
6
7
float poryadok=1.0;
float result=0.0;
Цикл для каждой очередной цифры x дробного числа
{
poryadok/=16.0;
result+=x*poryadok;
}
Например число 0.123(в 16-чной) равно 1/16 + 2/256 + 3/4096
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 17:30  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #5
fishec, а почему в примере порядок увеличивается?у вас же он всегда 16
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 17:46     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #6
fkty, в примере порядок делится на 16 каждый раз.
C++
1
poryadok/=16.0;
Эта запись означает
C++
1
poryadok=poryadok/16.0;
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 18:19  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #7
а как тогда заполнится моя таблица?

Добавлено через 17 минут
и как еще написать функцию на корректность ввода,с цифрами понятно,а с буквами?
C++
1
2
3
4
int is_digit(char c)
{
  return '0'<=c && c <='9';
}
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 18:22     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #8
C++
1
2
3
4
bool is_letter(char c)
{
  return 'A'<=c && c <='F';
}
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 18:23  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #9
но там же может быть как цифра,так и буква....и как программа поймет,что А это 10,В это 11...
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 18:34     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #10
Нужно перевести символ (char C) в число n . Если это цифра, то число равно n=C-'0';
Если это буква, то n=C-'A'+10;
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 18:42  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #11
так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int is_digit(char c)
{
  return '0'<=c && c <='9';
}
 
int digit (char c)
{ return int (c-'0');
}
 
bool is_letter(char c)
{
  return 'A'<=c && c <='F';
}
 
bool letter (char c)
{
return bool (c-'A'+10);
}
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 18:44     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool is_digit(char c)
{
  return '0'<=c && c <='9';
}
 
int digit (char c)
{ return c-'0';
}
 
bool is_letter(char c)
{
  return 'A'<=c && c <='F';
}
 
int letter (char c)
{
return c-'A'+10;
}
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 18:46  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #13
спасибо,а как все же будет моя таблица выглядеть?
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.12.2013, 18:55     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #14
Я сомневаюсь в правильности автомата. Число может начинаться с точки? Вроде .12ABC ?

Добавлено через 1 минуту
Кроме того в состояниях q2 q3 q4 происходит одно и то же
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 18:57  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #15
да,число может начинаться с точки,оно же вещественное,например .EEE и такие тоже могут быть F.
сама диаграмма правильная
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
17.12.2013, 19:52  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #16
fishec,может так?
Миниатюры
Построить конечный автомат из вещественных чисел в 16-речной системе счисления  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 19:11     Построить конечный автомат из вещественных чисел в 16-речной системе счисления
Еще ссылки по теме:

C++ Конечный автомат. Построить транслитератор
C++ Конечный автомат

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
24.12.2013, 19:11  [ТС]     Построить конечный автомат из вещественных чисел в 16-речной системе счисления #17
в чем здесь ошибка?(рекурсия)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
char ch;//входной символ
float n,n1,result;
int k;
 
void q0();
void q1();
void q2();
void q3();
void q4();
void q5();
void error();
 
int is_digit(char c)
{
  return '0'<=c && c <='9';
}
 
int digit (char c)
{ return (c-'0');
}
 
int is_letter(char c)
{
  return 'A'<=c && c <='F';
}
 
int letter (char c)
{
return c-'A'+10;
}
 
void error()
{
    printf("Error!\n");
    return;
}
 
void q0()
{
    if ((is_digit(ch)) || (is_letter(ch)))
    {
        n=digit(ch);
        ch=getchar();
        q1();
    }
    else
        if (ch== '.')
        {
            ch=getchar();
            q2();
        }
        else
        {
            error();
            return;
        }
}
 
void q1()
{
    if (is_digit(ch))
    {
        n=n*16+digit(ch);
        ch=getchar();
        q1();
    }
    else
        if  (is_letter(ch))
        {
            n=n*16+letter(ch);
            ch=getchar();
            q1();
        }
        else
            if (ch=='.')
            {
                ch=getchar();
                q3();
            }
            else
                if (ch=='/n')
                {
                    result=n;
                    q5();
                }
                else
                {
                    error();
                    return;
                }
 
}
 
void q2()
{
    if ((is_digit(ch)) || (is_letter(ch)))
    {
        k/=16;
        n+=n*k;
        ch=getchar();
        q4();
    }
    else
    {
        error();
        return;
    }
 
}
 
void q3()
{
    if ((is_digit(ch)) || (is_letter(ch)))
    {
        k/=16;
        n1+=n*k;
        ch=getchar();
        q3();
    }
    else
        if (ch=='/n')
        {
            n+=n1;
            result=n;
            q5();
        }
        else
        {
            error();
            return;
        }
 
}
 
void q4()
{
    if ((is_digit(ch)) || (is_letter(ch)))
    {
        k/=16;
        n+=n*k;
        ch=getchar();
        q4();
    }
    else
        if (ch=='/n')
        {
            result=n;
            q5();
        }
        else
        {
            error();
            return;
        }
}
 
void q5()
{
    return;
}
 
void main()
{
    k=1;
    result=0;
    n1=0;
    n=0;
    ch=getchar();//указание на первый символ
    q0();
    printf("result=%d",result);
    getch();
    return;
}
Yandex
Объявления
24.12.2013, 19:11     Построить конечный автомат из вещественных чисел в 16-речной системе счисления
Ответ Создать тему
Опции темы

Текущее время: 10:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru