Błędne wyniki przy zastosowaniu zmiennych real.

0

Dlaczego, gdy ustawię typy zmiennych na real a później każę programowi pomnożyć liczby zapisane w tych zmiennych, program pokazuje wynik z przecinkiem przesuniętym o jedno miejsce w lewo w stosunku do prawidłowego wyniku?

0

Pokaż kod.

0
program cisnhydr;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
var
  d:real;
  h:real;

CONST
G=10;

begin
    writeln('Podaj gestosc substancji (kg/m3)');
    readln(d);
    writeln('Podaj wysokosc slupa substancji (m)');
    readln(h);
    writeln('Cisnienie hydrostatyczne wynosi (Pa) ',d*G*h);
end.

dodanie znacznika <code class="delphi"> - @furious programming

0

http://ideone.com/Dl4ARn
2310 = 60
Nie rozumiem z czym masz problem, może nie wiesz czym jest notacja naukowa?

0

Odpalam program wpisuję po pierwszym pytaniu 1 po drugim 1 i dostaje wynik 1.00000000000000E+001. Przecież 1110=10 a nie 1!

0

Więc na 100% nie wiesz czym jest notacja naukowa, weź przeczytaj.

0

Dobra rozumiem że zapis 1.00000000000000E+001 oznacza 10. Ale co zrobić żeby wyświetlało normalnie 10?

0

linka ci podałem w pierwszym poście, obejrzałeś?

0

Ale ja pytam co zrobić żeby wyświetlało wyniki normalnie zapisane a nie notacją naukową.

0

To jednak nie obejrzałeś kodu z linka, który podał @_13th_Dragon.

0

@ghost25 - możesz skorzystać ze składniowego formatowania liczb:

WriteLn('Cisnienie hydrostatyczne (Pa): ', (d * h * G):2:0);

Możesz też użyć funkcji FloatToStr:

WriteLn('Cisnienie hydrostatyczne (Pa): ', FloatToStr(d * h * G));

Możesz użyć też funkcji FloatToStrF:

WriteLn('Cisnienie hydrostatyczne (Pa): ', FloatToStrF(d * h * G, ffFixed, 1, 5));

A możesz też skorzystać z ogólnej funkcji do formatowania łańcuchów - Format:

WriteLn('Cisnienie hydrostatyczne (Pa): ', Format('%-1.3f', [d * h * G]));

Opcji jest jeszcze więcej, więc masz w czym wybierać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1