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

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

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2015, 15:18   #1
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 138
По умолчанию Доработка калякулятора в yacc/bison

Доброго времени суток, товарищи, всех с праздниками!
Сразу обмолвлюсь, что на СИ код я написал, и что за оказанную в дальнейшем помощь в долгу не останусь. Исходники есть, пришёл сюда не из-за любви к халяве, а из-за необходимости присоб@чить мой сишный код в программу синтаксического анализа bison, так как сам не справлюсь.
В какой теме писать не знаю, в какой-то степени моё задание относится к кроссплатформенному программированию.

В качестве ОС использую отечественный вариант ОС Linux - Altlinux. В качестве компилятора и программы синтаксического анализа gcc && bison соответственно.
Есть простенький калькулятор на bison. В качестве курсового проекта выбрал доработку калькулятора с добавлением туда решения обычного симплекс-метода, который я успешно, как мне кажется, реализовал на СИ.

Проблема, с которой я столкнулся заключается в том, что в исходном калькуляторе на вход подаётся либо одно число (если операция унарная), либо два. А как реализовать считывание динамической матрицы не знаю.
Сама матрица, которая подаётся в функцию решения симплекс метода, представляет собой динамическую матрицу типа doouble.

Первая строка в матрице - целевая функция. Предпоследний элемент в строке - знак стремления целевой функции (->min || ->max) в качестве кодов знаков стремления выступают 3 || 4 соответственно. Последний элемент - коэффициент без переменной или коэффициент перед переменной в степени 0, не знаю как правильно выразиться, не важно.
Остальные строки - это уже сама симплекс-матрица. Предпоследний элемент каждой строки - знак ограничения (= || <= || >=). В качестве кодов используются 0 || 1 || 2 соответственно. Последний элемент - свободный член.

Так как я ищу того человека, который мог бы мне помочь, то смысла выкладывать исходники нет, так как задание относительно непростое и понадобится описать прототипы нескольких функций. Вышлю тому человеку, который заинтересуется моим заданием.

Ну может разве что типовой пример калькулятор в yacc:
Код:
%{
#define	YYSTYPE	double
%}

%token DATA
%left '+' '-'
%left '*' '/'
%%

spisok :	/* ╞ЦАБ╝ */
  | spisok '\n'
  | spisok wyrag '\n' {printf("\t%g\n",$2);}
  ;
wyrag : DATA 		{ $$=$1; }
  | wyrag '+' wyrag	{ $$=$1+$3; }
  | wyrag '-' wyrag	{ $$=$1-$3; }
  | wyrag '*' wyrag	{ $$=$1*$3; }
  | wyrag '/' wyrag	{ $$=$1/$3; }
  | '(' wyrag ')'	{ $$=$2; }
  ;
%%

#include <stdio.h>
#include <ctype.h>

main()
{
	yyparse();
}

yyerror(s)
char *s;
{
	fprintf(stderr,"%s\n",s);
}

yylex()
{
	int c;
	
	do{
		c=getchar();
	}while(c==' ' || c=='\t');
	
	if(c==EOF)
		return 0;
	if(c=='.' || isdigit(c)){
		ungetc(c,stdin);
		scanf("%lf",&yylval);
		return DATA;
	}
	
	return c;
}

Последний раз редактировалось ivan.tiran; 07.01.2015 в 16:47.
ivan.tiran вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lex, Yacc и Delphi JavScr Помощь студентам 0 17.11.2013 21:25
Доработка RUSSTUDENT Помощь студентам 2 28.08.2010 19:55
Применение yacc Tane4ka Общие вопросы C/C++ 0 31.03.2010 21:38
Разбор кода программы на Bison+Flex Corol Помощь студентам 2 03.07.2009 09:57
Доработка программы калькулятора в генераторе программ YACC gumz Помощь студентам 2 28.12.2008 01:29