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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2010, 18:37   #1
Erafiil
 
Регистрация: 29.09.2010
Сообщений: 6
Сообщение ДКА с явной таблицей состояний вывести на консоль все комментарии С++ вида /* комментарий */

Здравствуйте.
написал код ДКА по задаче
"С помощью ДКА с явной таблицей состояний вывести на консоль все комментарии С++ вида /* комментарий */ из входного файла (вместе с символами "/* */")."
Код:
#include <stdio.h>

enum State 
{
	init, text1, text, end1, end, other
};

bool isText(char symbol)
{
	return ((symbol >= '0' && symbol <= '9') || (symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z') || symbol == '\n' || symbol == '\t' || symbol == ' ' || symbol == '|' || symbol == '&');
}

int main()
{
	FILE *iFile = fopen("input.txt", "r");
	char symbol = 0;
	char buffer = 0;
	int state = init;
	while(!feof(iFile))
	{	


		if (!state)
		{
			symbol = fgetc(iFile);
			state = other;
		}

		switch(state)
		{
		case text1:
			if (symbol == '*')
			{
				state = text;
				printf("%c%c", buffer, symbol);
				symbol = fgetc(iFile);
			}
			else
				state = other;
			break;

		case text:
			if (isText(symbol) || symbol == '/')
			{
				printf("%c", symbol);
				symbol = fgetc(iFile);
			}

			else
			{
				if (symbol == '*')
				{
					state = end;
					buffer = symbol;
					symbol = fgetc(iFile);
				}

				else
					state = other;
			}
			break;

		case end:
			if (symbol == '/')
			{
				printf("%c%c\n", buffer, symbol);
				symbol = fgetc(iFile);
				state = other;
			}

			else
			{
				printf("%c", buffer);
				state = text;
				symbol = fgetc(iFile);
			}
			break;

		case other:
			if (symbol == '/')
			{
				state = text1;
				buffer = symbol;
				symbol = fgetc(iFile);
			}

			else
				symbol = fgetc(iFile);
			break;
		}
	}
	printf("\n");
}
препод говорит работает првильно,но код неудовлетворяет условию.нужно было черех таблицу ДКА работать(в файле нужно ее прописать)
что нужно сделать,чтобы исправить?
желательно код напишите)

Последний раз редактировалось Stilet; 24.12.2010 в 20:46.
Erafiil вне форума Ответить с цитированием
Старый 24.12.2010, 20:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Звиняйте за нубство ДКА, это что? Дворец Культуры Астаны?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2010, 21:04   #3
Erafiil
 
Регистрация: 29.09.2010
Сообщений: 6
По умолчанию

Детерминированный Конечный Автомат
Erafiil вне форума Ответить с цитированием
Старый 24.12.2010, 21:05   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Erafiil Посмотреть сообщение
препод говорит работает првильно,но код неудовлетворяет условию.нужно было черех таблицу ДКА работать(в файле нужно ее прописать)
что нужно сделать,чтобы исправить?
желательно код напишите)
А в чем проблема? Делаете эту таблицу и пихаете в файл. Строки таблицы - исходные состояния, столбцы - символы входного алфавита, элемент таблицы i,j - номер состояния, в которое переходит КА при встрече символа j, если он находится в i-ом состоянии.

Цитата:
Сообщение от Stilet
Звиняйте за нубство ДКА, это что? Дворец Культуры Астаны?
Детерминированный конечный автомат.
still_alive вне форума Ответить с цитированием
Старый 24.12.2010, 21:15   #5
Erafiil
 
Регистрация: 29.09.2010
Сообщений: 6
По умолчанию

проблема вся в том,что я не могу реализовать все это
Erafiil вне форума Ответить с цитированием
Старый 24.12.2010, 21:27   #6
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Erafiil Посмотреть сообщение
проблема вся в том,что я не могу реализовать все это
Я не понимаю такой формулировки. Либо вы говорите, что конкретно не получается, либо тот код написан не вами. И где код, в котором вы пытались это реализовать, но не смогли?
still_alive вне форума Ответить с цитированием
Старый 24.12.2010, 21:45   #7
Erafiil
 
Регистрация: 29.09.2010
Сообщений: 6
По умолчанию

конкретно не получается.код писал я
Erafiil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программa на fasm. Нужно вывести консоль Devil21RUS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.12.2010 23:08
Ввести натуральное число N . Вывести треугольник, содержащий N строк вида Arei15 Помощь студентам 2 31.10.2009 23:41
Удалить из строки все группы букв вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 5 27.11.2008 12:48
Удалить из строки все группы вида abcd Григорийpnz Паскаль, Turbo Pascal, PascalABC.NET 8 18.11.2008 19:40