Q-bart, серйозно нормально працює?, ну добре.
Давайте спершу нормально його розмітимо і я його відкоментую
▼Прихований текст
program secret;
var
z, a1, b1, c1, m, n: string;
a, b, c, i: integer;
begin
z:=' '; //Навіщо?
m := 'x'; //Прикольна ідея давати рядку, який буде містити х назву m (мабуть, щоб вороги не здогадались)
n := 'y'; //Те саме.
read(a, b, c); //Читаємо а, б, с, окей
//а тут починається щось, чого я не розумію, для чого це?
//ми перетворюємо число в рядок, після того відчикрижуємо його знак
//і залишається у нас беззнаковий (такий собі модуль числа члена, причому рядковий)
str(a, a1);
if (a1[1]='-') or (a1[1]='+') then delete(a1, 1,1);
str(b, b1);
if (b1[1]='-') or (b1[1]='+') then delete(b1, 1,1);
str(c, c1);
if (c1[1]='-') or (c1[1]='+') then delete(c1, 1,1);
if a1 = '0' then a1 := ''; //як перший член 0 змінюємо його на нічого, гаразд
if b1 = '0' then //ну тут я Вашу криптозбочену логіту почав трохи розуміти
begin
b1 := '';
m := '';
end;
if c1 = '0' then
begin
c1 := '';
n := '';
end;
//і тут починається... (нагадує викладача в інституті - "забудьте все чому вас навчали в школі")
//вбиваємо одинички, додаєм знаки які позабирали напочатку (нагадує 2-х робітників СРСР,
//один викопує яму, інший тут-же закопує, обидав молодці, обидва план виконують)
if b1 = '1' then b1 := '';
if c1 = '1' then c1 := '';
if a<0 then a1:='-'+a1;
if b<0 then b1:='-'+b1;
if c<0 then c1:='+'+c1;
if c>0 then c1:='-'+c1;
if b>0 then b1:='+'+b1;
z := a1 + b1 + m + c1 + n; //тут се збираємо докупи
if z[1]='+' then delete(z, 1,1); //і наостанок вбиваємо знак на самому початку
writeln(z); //Виводимо.
end.
Як би зробив я.
після отримання від користувача а, б, ц, в вас вже є цілочисленні значення із знаком? навіщо купа зайвих перетворень у текст?
▼Прихований текст
//отримали, працюйте зразу
read(a, b, c);
//працюємо з першим членом
if (a > 0) then //якщо а > 0
begin
str(a, a1); //перетворюємо
end
else //інакше
if (a = 0) then //якщо а = 0
begin
a1 := ''; //нічого не записуємо, ні знаку, ні цифри
end
else //якщо все вищезведене не підійшло (a < 0) то
begin
//можна зробити так str() сам підставить знак
//str(a, a1); //перетворюємо
//a1 := a1 + 'x'; //додаємо х
//але для наглядності покажу як чипляти знак, за допомогою функції модуль, або абсолютна величина (Abc())
str( abc(a) , a1);
a1 := '-' + a1; //і знову ж таки додаємо знак
end;
//тепер так само з другим членом, все точно так само, тільки це другий член і в нього є додаткові умови
if (b > 1) then //якщо b > 0
begin
str(b, b1); //перетворюємо
b1 := '+' + b1 + 'x'; //додаємо x
end
else //інакше
if (b = 1) then //якщо b = 1
begin
b1 := '+x'; //просто x
end
else
if (b = 0) then //якщо b = 0
begin
b1 := ''; //нічого не записуємо, ні знаку, ні символу
end
else //інакше
if (b = -1) then //якщо b = -1
begin
b1 := '-x'; //додаємо -x
end
else //якщо все вищезведене не підійшло (b <- 1) то
begin
//але для наглядності покажу як чипляти знак, за допомогою функції модуль
str( abc(b) , b1);
b1 :='-' + b1 + 'x'; //і знову ж таки додаємо знак і символ
end;
//і на закуску третій член, точно такий самий як і другий
if (c > 1) then //якщо c > 0
begin
str(c, c1); //перетворюємо
c1 := '+' + c1 + 'y'; //додаємо y
end
else //інакше
if (c = 1) then //якщо c = 1
begin
c1 := '+y'; //просто c
end
else
if (c = 0) then //якщо c = 0
begin
c1 := ''; //нічого не записуємо, ні знаку, ні символу
end
else //інакше
if (c = -1) then //якщо c = -1
begin
c1 := '-y'; //додаємо -y
end
else //якщо все вищезведене не підійшло (c <- 1) то
begin
//але для наглядності покажу як чипляти знак, за допомогою функції модуль
str( abc(c) , c1);
c1 :='-' + c1 + 'y'; //і знову ж таки додаємо знак і символ
end;
як бачите другий і третій члени асболютно однакові,
змінюються тільки назва, тому їх можна зліпити у цикл з двома ітераціями, але мені лінь то робити
тепер оброблюємо кінець, просто зливаючи члени вкупу, "але є одне але, скорочено АЄОА", поглянемо ще раз в завдання і бачимо там:
"крім випадку, коли всі коефіцієнти дорівнюють нулю, тоді тричлен складається з однієї цифри 0"
так і пишемо
if (a = 0) and (b = 0) and (c = 0) then z := '0'
else z := a1 + b1 + c1;
// тут виводимо z...
п.с. я її не тестував, тому можуть бути незначні помилки