Войти

Показать полную графическую версию : [решено] Паскаль - Форма вывода вещественных переменных


vlad309523
29-05-2011, 11:38
Здравствуйте!
Надо:
Делаю программу для расчета корней квадратного уравнения и нужна помощь:
Данные выводятся так:
Корни уравнения: 1.0000 и -2.5000
А надо так:
Корни уравнения: 1 и -2.5
Переменные real.
type
xm=array[1..2] of real;
var
x: xm
begin
x[1]:=1;
x[2]:=2;
writeln('Корни уравнения: ',x[1]:0:4,' и ',x[2]:0:4)
end.
Надеюсь на Вашу помощь. Заранее спасибо.

Решение:
type
xm=array[1..2] of real;
txm=array[1..2] of string;
sm=array[1..2] of integer;
var
x: xm; tx: txm; s: sm;
n: integer;
procedure xn;
begin
str(x[n]:0:4,tx[n]);
s[n]:=3-length(tx[n])+pos('0',tx[n])
end;
procedure xn;
begin
str(x[n]:0:4,tx[n]);
tx[n]:=copy(tx[n],pos('.',tx[n])+1,4);
s[n]:=3-length(tx[n])+pos('0',tx[n]);
if s[n]<0 then s[n]:=4
end;
procedure xn;
begin
str(x[n]:0:4,tx[n]);
tx[n]:=copy(tx[n],pos('.',tx[n])+1,4);
s[n]:=3-length(tx[n])+pos('0000',tx[n]);
if s[n]<0 then
begin
s[n]:=3-length(tx[n])+pos('000',tx[n]);
if (s[n]<0) or (s[n]<>1) then
begin
s[n]:=3-length(tx[n])+pos('00',tx[n]);
if (s[n]<0) or (s[n]<>2) then
begin
s[n]:=3-length(tx[n])+pos('0',tx[n]);
if (s[n]<0) or (s[n]<>3) then s[n]:=4
end
end
end
end;
procedure xn;
begin
str(x[n]:0:4,tx[n]);
tx[n]:=copy(tx[n],pos('.',tx[n])+1,4);
if tx[n]='0000' then
s[n]:=0 else
begin
tx[n]:=copy(tx[n],2,3);
if tx[n]='000' then
s[n]:=1 else
begin
tx[n]:=copy(tx[n],2,2);
if tx[n]='00' then
s[n]:=2 else
begin
tx[n]:=copy(tx[n],2,1);
if tx[n]='0' then
s[n]:=3 else
s[n]:=4
end
end
end
end
begin
x[1]:=1;
x[2]:=2;
n:=1; xn;
n:=2; xn;
writeln('Корни уравнения: ',x[1]:0:s[1],' и ',x[2]:0:s[2])
end.

Всем спасибо за помощь.

opel431
29-05-2011, 12:13
А надо так: »
Можно перевести число в строку с форматированием (округление до десятых)

var a:real;
s:string;
..........
str(a:0:1,s);
outtextXY(20,20,s);

vlad309523
29-05-2011, 12:24
opel431, Error: Identifier not found OUTTEXTXY

opel431
29-05-2011, 12:34
Error: Identifier not found OUTTEXTXY »
Да ведь я, вам дал просто пример вывода результата в графическом режиме, а у вас вывод через writeln

vlad309523
29-05-2011, 12:43
opel431, вывел в текстовом - те же 1.0000

opel431
29-05-2011, 13:02
вывел в текстовом - те же 1.0000 »
В целом:
если нужно просто вывести число, то
WriteLn(r:n:m)
где r (real), n - общее количество знаков в строке, включая десятичную точку, m - количество знаков после запятой (дробная часть),
а если нужна именно строка, то через STR.
var
R:real;
S:string;
...
Str(R:n:m,S);

vlad309523
29-05-2011, 18:45
Все! :) Проблему решил при помощи процедуры
procedure xn;
begin
str(x[n]:0:4,tx[n]);
tx[n]:=copy(tx[n],pos('.',tx[n])+1,4);
if tx[n]='0000' then
s[n]:=0 else
begin
tx[n]:=copy(tx[n],2,3);
if tx[n]='000' then
s[n]:=1 else
begin
tx[n]:=copy(tx[n],2,2);
if tx[n]='00' then
s[n]:=2 else
begin
tx[n]:=copy(tx[n],2,1);
if tx[n]='0' then
s[n]:=3 else
s[n]:=4
end
end
end
end
Код залил в шапку.




© OSzone.net 2001-2012