теперь печатается результат от той переменной, которая в allowed_variable
parent
fc2e46a654
commit
4990c0b6a3
|
@ -142,7 +142,7 @@ void free_polynomial(Polynomial *p) {
|
|||
}
|
||||
|
||||
// Печать полинома
|
||||
void print_polynomial(Polynomial *p) {
|
||||
void print_polynomial(Polynomial *p, char letter) {
|
||||
if (p->size == 0) {
|
||||
printf("0\n");
|
||||
return;
|
||||
|
@ -165,7 +165,7 @@ void print_polynomial(Polynomial *p) {
|
|||
|
||||
// Печать переменной
|
||||
if (term.exponent > 0) {
|
||||
printf("x");
|
||||
printf("%c", letter);
|
||||
// Печать степени только если она больше 1
|
||||
if (term.exponent > 1) {
|
||||
printf("^%d", term.exponent);
|
||||
|
|
|
@ -25,7 +25,7 @@ void free_polynomial(Polynomial *p);
|
|||
// Копирование полинома
|
||||
// Polynomial copy_poly(Polynomial *p);
|
||||
// Печать полинома
|
||||
void print_polynomial(Polynomial *p);
|
||||
void print_polynomial(Polynomial *p, char letter);
|
||||
// Возвращает копию полинома
|
||||
Polynomial copy_poly(Polynomial *p);
|
||||
// Например есть полином x+1 и терм (2,1)=2x, значит в полиноме есть
|
||||
|
|
|
@ -33,7 +33,7 @@ void test6() {
|
|||
|
||||
printf("EXPECTED:\n-60x^4+30x^1+10\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&res);
|
||||
print_polynomial(&res, 'x');
|
||||
|
||||
free_polynomial(&p1);
|
||||
free_polynomial(&p2);
|
||||
|
@ -55,7 +55,7 @@ void test5() {
|
|||
|
||||
printf("EXPECTED:\n-7776x^20+19440x^17+6480x^16-19440x^14-12960x^13-2160x^12+9720x^11+9720x^10+3240x^9-2070x^8-3240x^7-1620x^6-117x^5+375x^4+270x^3+90x^2+15x^1+1\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&res);
|
||||
print_polynomial(&res, 'x');
|
||||
|
||||
free_polynomial(&p);
|
||||
free_polynomial(&res);
|
||||
|
@ -79,7 +79,7 @@ void test4() {
|
|||
|
||||
printf("EXPECTED:\n-18x^8-12x^6+9x^5+63x^4+6x^3+2x^2-30x^1-10\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&res);
|
||||
print_polynomial(&res, 'x');
|
||||
|
||||
free_polynomial(&p1);
|
||||
free_polynomial(&p2);
|
||||
|
@ -107,7 +107,7 @@ void test3() {
|
|||
|
||||
printf("EXPECTED:\n-9x^4-2x^2+8x^1+21\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&res);
|
||||
print_polynomial(&res, 'x');
|
||||
|
||||
free_polynomial(&p1);
|
||||
free_polynomial(&p2);
|
||||
|
@ -131,7 +131,7 @@ void test2() {
|
|||
|
||||
printf("EXPECTED:\n-3x^4+2x^2+3x^1-9\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&res);
|
||||
print_polynomial(&res, 'x');
|
||||
|
||||
free_polynomial(&p1);
|
||||
free_polynomial(&p2);
|
||||
|
@ -154,8 +154,8 @@ void test1() {
|
|||
|
||||
printf("EXPECTED:\n+3x^2+2x^1-1\n-2x^3+4x^2-5\n");
|
||||
printf("OUTPUT:\n");
|
||||
print_polynomial(&poly1);
|
||||
print_polynomial(&poly2);
|
||||
print_polynomial(&poly1, 'x');
|
||||
print_polynomial(&poly2, 'x');
|
||||
|
||||
free_polynomial(&poly1);
|
||||
free_polynomial(&poly2);
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include "polynomials.tab.h"
|
||||
|
||||
extern FILE *yyin;
|
||||
|
||||
// Глобальная переменная для хранения разрешенной переменной
|
||||
char allowed_variable = 0;
|
||||
%}
|
||||
|
||||
%%
|
||||
|
@ -11,11 +14,23 @@ extern FILE *yyin;
|
|||
add_term(&yylval.poly, atoi(yytext), 0);
|
||||
return NUMBER;
|
||||
}
|
||||
"x" {
|
||||
|
||||
[a-zA-Z] {
|
||||
// Если переменная еще не задана, запоминаем первую встреченную
|
||||
if (allowed_variable == 0) {
|
||||
allowed_variable = yytext[0];
|
||||
}
|
||||
// Проверяем, что текущая переменная совпадает с разрешенной
|
||||
else if (yytext[0] != allowed_variable) {
|
||||
fprintf(stderr, "Error: Only variable '%c' is allowed in this expression\n", allowed_variable);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
init_polynomial(&yylval.poly);
|
||||
add_term(&yylval.poly, 1, 1);
|
||||
return VARIABLE;
|
||||
}
|
||||
|
||||
[-+*^()] { return yytext[0]; }
|
||||
[ \t] ;
|
||||
\n { return 0; }
|
||||
|
|
|
@ -8,6 +8,7 @@ int yylex();
|
|||
|
||||
// Объявляем внешнюю переменную для файла
|
||||
extern FILE *yyin;
|
||||
extern char allowed_variable;
|
||||
%}
|
||||
|
||||
%union {
|
||||
|
@ -27,7 +28,7 @@ input:
|
|||
| input expr {
|
||||
printf("Result: ");
|
||||
sort_polynomial(&$2);
|
||||
print_polynomial(&$2);
|
||||
print_polynomial(&$2, allowed_variable);
|
||||
free_polynomial(&$2);
|
||||
}
|
||||
;
|
||||
|
|
Loading…
Reference in New Issue