Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2013, 14:20   #1
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию конечный автомат

Здравствуйте,помогите разобраться с алгоритмом.нужно построить конечный автомат из вещественных чисел с целой и/или дробной частью в 16-речной системе счисления.Например возможные числа:A01.BC 0101 .EEE и т.д
А действие:десятичное значение.
я построила диаграмму переходов и таблицу переходов,а как это действие реализовать?(помогите написать таблицу переходов с действиями).
Изображения
Тип файла: jpg SAM_4439.jpg (79.4 Кб, 116 просмотров)
fkty вне форума Ответить с цитированием
Старый 06.12.2013, 15:35   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
move(q0, [q|T]):- !, move(q1, T).
move(q1, _):-!.
move(q0, [H|T]):-
  is_digit(H), !, move(q0, T);
  is_alpha(H), !, move(q0, T);
  is_dot(H), !, move(q0, T).
Это по вашей диаграмме переходов, но это неправильная диаграмма.
Неправильная потому, что "....q" по ней корректное число, например.
rrrFer вне форума Ответить с цитированием
Старый 06.12.2013, 15:53   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

fkty, Условия не корректные. Вы писали на лекции., наверное спали. Вы хотите сейчас, что-бы мы разобрали Ваш, и без того - бред и перевели на свой?
Хорошо: Что обозначаю слова?
Бред
Сивой
Кобылы?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.12.2013, 18:22   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

дай угадаю.
Ему нужен автомат для распознавания целых и дробных шестнадцатеричных чисел.
Если есть автомат, правильный, то таблица строится элементарно (но она вобще и не нужна, т.к. графический вариант нагляднее и удобнее во всем).
rrrFer вне форума Ответить с цитированием
Старый 07.12.2013, 11:29   #5
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

вот точное задание(10 вариант)
Изображения
Тип файла: jpg SAM_4440.jpg (124.3 Кб, 118 просмотров)
Тип файла: jpg SAM_4441.jpg (129.3 Кб, 117 просмотров)
Тип файла: jpg SAM_4443.jpg (69.0 Кб, 114 просмотров)
Тип файла: jpg SAM_4444.jpg (69.7 Кб, 113 просмотров)
fkty вне форума Ответить с цитированием
Старый 17.12.2013, 17:06   #6
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию Re: конечный автомат

вот точная диаграмма переходов,но не получается доделать таблицу переходов с действиями....проблема с переводом дробной части в десятичное значение
Изображения
Тип файла: jpg SAM_4476.jpg (76.8 Кб, 147 просмотров)
fkty вне форума Ответить с цитированием
Старый 24.12.2013, 19:09   #7
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

в чем здесь ошибка?(рекурсия)
Код:
#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;
}
fkty вне форума Ответить с цитированием
Старый 25.12.2013, 12:59   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

почему вы решили что тут есть ошибка?
rrrFer вне форума Ответить с цитированием
Старый 25.12.2013, 13:13   #9
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

rrrFer,ошибка не в компиляции,а неправильно работает задача
fkty вне форума Ответить с цитированием
Старый 25.12.2013, 13:31   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

И еще раз:
Цитата:
почему вы решили что тут есть ошибка?
Вы что-ли не понимаете, что никто не будет компилировать и тестировать ваш код чтобы выяснить что значит "неправильно работает задача"?
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конечный автомат Rыся Помощь студентам 1 11.01.2013 10:56
Конечный автомат. Регулярная грамматика RocBoy-D Помощь студентам 1 26.10.2012 23:03
недетерминированный конечный автомат CodeNOT Общие вопросы C/C++ 0 21.02.2012 15:48
Конечный автомат maxon56 Помощь студентам 0 19.12.2011 19:32
Конечный автомат на Delphi Arkuz Общие вопросы Delphi 4 02.10.2008 23:50