теперь печатается результат от той переменной, которая в 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) {
|
if (p->size == 0) {
|
||||||
printf("0\n");
|
printf("0\n");
|
||||||
return;
|
return;
|
||||||
|
@ -165,7 +165,7 @@ void print_polynomial(Polynomial *p) {
|
||||||
|
|
||||||
// Печать переменной
|
// Печать переменной
|
||||||
if (term.exponent > 0) {
|
if (term.exponent > 0) {
|
||||||
printf("x");
|
printf("%c", letter);
|
||||||
// Печать степени только если она больше 1
|
// Печать степени только если она больше 1
|
||||||
if (term.exponent > 1) {
|
if (term.exponent > 1) {
|
||||||
printf("^%d", term.exponent);
|
printf("^%d", term.exponent);
|
||||||
|
|
|
@ -25,7 +25,7 @@ void free_polynomial(Polynomial *p);
|
||||||
// Копирование полинома
|
// Копирование полинома
|
||||||
// Polynomial copy_poly(Polynomial *p);
|
// Polynomial copy_poly(Polynomial *p);
|
||||||
// Печать полинома
|
// Печать полинома
|
||||||
void print_polynomial(Polynomial *p);
|
void print_polynomial(Polynomial *p, char letter);
|
||||||
// Возвращает копию полинома
|
// Возвращает копию полинома
|
||||||
Polynomial copy_poly(Polynomial *p);
|
Polynomial copy_poly(Polynomial *p);
|
||||||
// Например есть полином x+1 и терм (2,1)=2x, значит в полиноме есть
|
// Например есть полином x+1 и терм (2,1)=2x, значит в полиноме есть
|
||||||
|
|
|
@ -33,7 +33,7 @@ void test6() {
|
||||||
|
|
||||||
printf("EXPECTED:\n-60x^4+30x^1+10\n");
|
printf("EXPECTED:\n-60x^4+30x^1+10\n");
|
||||||
printf("OUTPUT:\n");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&res);
|
print_polynomial(&res, 'x');
|
||||||
|
|
||||||
free_polynomial(&p1);
|
free_polynomial(&p1);
|
||||||
free_polynomial(&p2);
|
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("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");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&res);
|
print_polynomial(&res, 'x');
|
||||||
|
|
||||||
free_polynomial(&p);
|
free_polynomial(&p);
|
||||||
free_polynomial(&res);
|
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("EXPECTED:\n-18x^8-12x^6+9x^5+63x^4+6x^3+2x^2-30x^1-10\n");
|
||||||
printf("OUTPUT:\n");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&res);
|
print_polynomial(&res, 'x');
|
||||||
|
|
||||||
free_polynomial(&p1);
|
free_polynomial(&p1);
|
||||||
free_polynomial(&p2);
|
free_polynomial(&p2);
|
||||||
|
@ -107,7 +107,7 @@ void test3() {
|
||||||
|
|
||||||
printf("EXPECTED:\n-9x^4-2x^2+8x^1+21\n");
|
printf("EXPECTED:\n-9x^4-2x^2+8x^1+21\n");
|
||||||
printf("OUTPUT:\n");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&res);
|
print_polynomial(&res, 'x');
|
||||||
|
|
||||||
free_polynomial(&p1);
|
free_polynomial(&p1);
|
||||||
free_polynomial(&p2);
|
free_polynomial(&p2);
|
||||||
|
@ -131,7 +131,7 @@ void test2() {
|
||||||
|
|
||||||
printf("EXPECTED:\n-3x^4+2x^2+3x^1-9\n");
|
printf("EXPECTED:\n-3x^4+2x^2+3x^1-9\n");
|
||||||
printf("OUTPUT:\n");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&res);
|
print_polynomial(&res, 'x');
|
||||||
|
|
||||||
free_polynomial(&p1);
|
free_polynomial(&p1);
|
||||||
free_polynomial(&p2);
|
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("EXPECTED:\n+3x^2+2x^1-1\n-2x^3+4x^2-5\n");
|
||||||
printf("OUTPUT:\n");
|
printf("OUTPUT:\n");
|
||||||
print_polynomial(&poly1);
|
print_polynomial(&poly1, 'x');
|
||||||
print_polynomial(&poly2);
|
print_polynomial(&poly2, 'x');
|
||||||
|
|
||||||
free_polynomial(&poly1);
|
free_polynomial(&poly1);
|
||||||
free_polynomial(&poly2);
|
free_polynomial(&poly2);
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
#include "polynomials.tab.h"
|
#include "polynomials.tab.h"
|
||||||
|
|
||||||
extern FILE *yyin;
|
extern FILE *yyin;
|
||||||
|
|
||||||
|
// Глобальная переменная для хранения разрешенной переменной
|
||||||
|
char allowed_variable = 0;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
@ -11,11 +14,23 @@ extern FILE *yyin;
|
||||||
add_term(&yylval.poly, atoi(yytext), 0);
|
add_term(&yylval.poly, atoi(yytext), 0);
|
||||||
return NUMBER;
|
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);
|
init_polynomial(&yylval.poly);
|
||||||
add_term(&yylval.poly, 1, 1);
|
add_term(&yylval.poly, 1, 1);
|
||||||
return VARIABLE;
|
return VARIABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
[-+*^()] { return yytext[0]; }
|
[-+*^()] { return yytext[0]; }
|
||||||
[ \t] ;
|
[ \t] ;
|
||||||
\n { return 0; }
|
\n { return 0; }
|
||||||
|
|
|
@ -8,6 +8,7 @@ int yylex();
|
||||||
|
|
||||||
// Объявляем внешнюю переменную для файла
|
// Объявляем внешнюю переменную для файла
|
||||||
extern FILE *yyin;
|
extern FILE *yyin;
|
||||||
|
extern char allowed_variable;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%union {
|
%union {
|
||||||
|
@ -27,7 +28,7 @@ input:
|
||||||
| input expr {
|
| input expr {
|
||||||
printf("Result: ");
|
printf("Result: ");
|
||||||
sort_polynomial(&$2);
|
sort_polynomial(&$2);
|
||||||
print_polynomial(&$2);
|
print_polynomial(&$2, allowed_variable);
|
||||||
free_polynomial(&$2);
|
free_polynomial(&$2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue