теперь печатается результат от той переменной, которая в allowed_variable

master
serr 2025-05-12 21:08:24 +03:00
parent fc2e46a654
commit 4990c0b6a3
6 changed files with 29 additions and 13 deletions

View File

@ -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);

View File

@ -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, значит в полиноме есть

View File

@ -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);

View File

@ -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; }

View File

@ -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);
}
;

View File

@ -1 +1 @@
((3*x^2 - 2*x + 1) * (x^3 - 4*x) + (5*x^4 - x^2)^2) - (x + 1)^5
((3*x^2 - 2*x + 1) * (x^3 - 4*x) + (5*x^4 - x^2)^2) - (x + 1)^4