надо добиться от программы "нормального" вывода выражений, т.е. например вместо 0*x+1*y+-2*z=2 вывело y-2z=2.
вот мой последний (наверное, не лучший, но какой смог) вариант:
function Rus(mes: string):string;
var i: integer;
begin
for i:=1 to length(mes) do
case mes [i] of
'А'..'п': mes[i]:=chr(Ord (mes [i])-64);
'р'..'я': mes[i]:=chr(ord (mes[i])-16);
end;
rus:=mes;
end;
procedure vivod(a:real; j:integer; f:boolean);
begin
case j of
1: if a<>0 then begin
if a>0 then begin
if a=1 then write('x')
else write(a:5:2,'x'); end
else begin
if a=-1 then write('-x')
else write(a:5:2,'x'); end;
f:=false;
end
else f:=true;
2: if a<>0 then begin
if f=true then begin
if a>0 then begin
if a=1 then write('y')
else write(a:5:2,'y'); end
else if a=-1 then write('-y')
else write(a:5:2,'y'); end
else if a>0 then begin
if a=1 then write('+y')
else write('+',a:5:2,'y'); end
else if a=-1 then write('-y')
else write(a:5:2,'y');
f:=false;
end
else f:=true;
3: if a<>0 then begin
if f=true then begin
if a>0 then begin
if a=1 then write('z')
else write(a:5:2,'z'); end
else if a=-1 then write('-z')
else write(a:5:2,'z'); end
else if a>0 then begin
if a=1 then write('+z')
else write('+',a:5:2,'z'); end
else if a=-1 then write('-z')
else write(a:5:2,'z');
f:=false;
end
else f:=true;
4: write(a:5:2);
end;
end;
var n,i,j:integer;
m: array [1..100,1..4] of real;
f: boolean;
begin
writeln('a1x+b1y+c1z = d1');
writeln('a2x+b2y+c2z = d2');
writeln('...');
writeln('_________________');
writeln(rus('Введите количество уравнений: '));
readln(n);
for i:=1 to n do begin
j:=1;
while j<=4 do begin
write(rus('Введите а'),i,' = ');
readln(m[i,j]);
Inc(j);
write(rus('Введите b'),i,' = ');
readln(m[i,j]);
Inc(j);
write(rus('Введите с'),i,' = ');
readln(m[i,j]);
Inc(j);
write(rus('Введите d'),i,' = ');
readln(m[i,j]);
Inc(j);
end;
end;
write(rus('Нажмите Enter для вывода уравнений-->'));
readln;
for i:=1 to n do begin
j:=1;
f:=false;
while j<=4 do begin
vivod(m[i,j],j,f);
inc(j);
vivod(m[i,j],j,f);
inc(j);
vivod(m[i,j],j,f);
write('=');
inc(j);
vivod(m[i,j],j,f);
inc(j);
writeln;
end;
end;
readln;
end.
вроде бы дает желаемый результат, но только при первом коэффициенте при x, равном 0, выводит "+y+z=1". Не могу убрать этот знак плюс. Второй день разбираю, но не могу разобраться