IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> "нормальный" вывод выражений
marwell
сообщение 27.02.2011 15:00
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


смысл в следующем: пользователем вводятся количество уравнений с тремя неизвестными x,y,z и коэффициенты.
надо добиться от программы "нормального" вывода выражений, т.е. например вместо 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". Не могу убрать этот знак плюс. Второй день разбираю, но не могу разобраться

Сообщение отредактировано: marwell - 27.02.2011 15:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
marwell
сообщение 27.02.2011 19:27
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


премного благодарен smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"