Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
1

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

06.12.2013, 12:54. Просмотров 1259. Ответов 16
Метки нет (Все метки)

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

Конечный автомат. Построить транслитератор
Построить транслитеротор: кириллица->латиница, а также конечный автомат, осуществляющий обратную...

Построить конечный автомат
Помогите, пожалуйста, построить КА (конеч. автомат), у которого алфавит из двух букв "a, b" и у...

Построить детерминированный конечный автомат
Здравствуйте! Пытаюсь разобраться в детерминированных автоматах, буду весьма благодарен за...

Построить детерминированный конечный автомат
Построить детерминированный конечный автомат, распознающий язык L над алфавитом {a,b}, состоящий из...

Построить конечный детерминированный автомат
Привет всем помогите построить точнее нарисовать нетдетермениванный и детерменированный автомат по...

16
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
07.12.2013, 21:31  [ТС] 2
никто не сможет помочь?
0
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
17.12.2013, 17:02  [ТС] 3
вот диаграмма переходов,но не могу доделать таблицу переходов с действиями...проблема с переводом в десятичное значение дробной части
0
Миниатюры
Построить конечный автомат из вещественных чисел в 16-речной системе счисления  
fishec
122 / 121 / 62
Регистрация: 07.09.2013
Сообщений: 343
17.12.2013, 17:18 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
0
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
17.12.2013, 17:30  [ТС] 5
fishec, а почему в примере порядок увеличивается?у вас же он всегда 16
0
fishec
122 / 121 / 62
Регистрация: 07.09.2013
Сообщений: 343
17.12.2013, 17:46 6
fkty, в примере порядок делится на 16 каждый раз.
C++
1
poryadok/=16.0;
Эта запись означает
C++
1
poryadok=poryadok/16.0;
0
fkty
1 / 1 / 1
Регистрация: 06.01.2013
Сообщений: 266
17.12.2013, 18:19  [ТС] 7
а как тогда заполнится моя таблица?

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

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

Построить конечный автомат по таблице состояний
построить автомат. есть таблица состояний. 1 2 a 1,x1 1,x2 b ...

Построить конечный автомат для принтера
Задание заключается в следующем: Вспомните как задаются номера страниц при выводе на печать, если...

Не получается задание. Построить конечный автомат!
Построить конечный автомат


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru