Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Паскаль - Форма вывода вещественных переменных (http://forum.oszone.net/showthread.php?t=207780)

vlad309523 29-05-2011 11:38 1684461

Паскаль - Форма вывода вещественных переменных
 
Здравствуйте!
Надо:
Делаю программу для расчета корней квадратного уравнения и нужна помощь:
Данные выводятся так:
Код:

Корни уравнения: 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 1684476

Цитата:

Цитата vlad309523
А надо так: »

Можно перевести число в строку с форматированием (округление до десятых)

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

vlad309523 29-05-2011 12:24 1684481

opel431, Error: Identifier not found OUTTEXTXY

opel431 29-05-2011 12:34 1684484

Цитата:

Цитата vlad309523
Error: Identifier not found OUTTEXTXY »

Да ведь я, вам дал просто пример вывода результата в графическом режиме, а у вас вывод через writeln

vlad309523 29-05-2011 12:43 1684490

opel431, вывел в текстовом - те же 1.0000

opel431 29-05-2011 13:02 1684495

Цитата:

Цитата vlad309523
вывел в текстовом - те же 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 1684659

Все! :) Проблему решил при помощи процедуры
Код:

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

Код залил в шапку.


Время: 20:09.

Время: 20:09.
© OSzone.net 2001-