Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit Rechenprogramm (https://www.delphipraxis.net/171133-problem-mit-rechenprogramm.html)

Davidlocke13 22. Okt 2012 12:21

Problem mit Rechenprogramm
 
Morgen habe ein Problem mit folgendem Programm
Code:
program Ohmschenwiderstand;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  Spannung,Widerstand: real;

begin
  try
    { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

  begin
      writeln ('Ohmschenwiderstand berechnen');
      writeln ('Geben Sie den Wert fuer die Spannung U ein');
      readln (Spannung);
      writeln ('Geben Sie den Wert fuer den Widerstand R ein');
      readln (Widerstand);
      writeln ('Die Stromstaerke I betraegt');
      writeln (Spannung/Widerstand);
      writeln('OHM');
      readln;
  end;
end.
Ich bekomme immer nur ein Ergebnis was so aussieht: 1.00000000000E+0000

Wo ist mein Fehler ?

LG David

himitsu 22. Okt 2012 12:29

AW: Problem mit Rechenprogramm
 
Dein Fehler ist, daß du Delphi die Formatierung deiner Zahl überlassen hast und das hat sich halt für die Darstellung als Exponentialzahl entschieden. (also zeige soviel wie möglich)

Ich glaub in der OH sollte drinsteht, wie man beim Delphi-Referenz durchsuchenWrite/Delphi-Referenz durchsuchenWriteLn die Zahlen formatiert und ansonsten gibt es noch Delphi-Referenz durchsuchenFloatToStr, Delphi-Referenz durchsuchenFormatFloat, Delphi-Referenz durchsuchenFormat, uvm.



PS: Was ist an "Hier Code einfügen" so schwer zu verstehen? Oder anders gesagt, warum ist dein Code hinter dem Schutzblock und nicht darin? :zwinker:

Ich würde dir aber noch eine kleine Erweiterung empfehlen.
Delphi-Quellcode:
  try
    // Hier deinen Code einfügen
  except
    on E: Exception do
    begin
      WriteLn(E.ClassName, ': ', E.Message);
      WriteLn('Weiter mit [Enter] ...');
      ReadLn;
    end;
  end;
Denn ohne Debugger oder wenn man das Program nicht direkt von einer Konsole (CMD) aufruft, sieht man die Fehlermeldung nicht (so schnell kann keiner Gucken, wie das Fenster wieder weg ist)
In einem VCL-Programm, z.B. in einer Button-Klick-Methode, hat Delphi auch soeinen Code automatisch drumrumgemacht und zeigt die Meldung dann als MessageBox an.

Davidlocke13 22. Okt 2012 12:33

AW: Problem mit Rechenprogramm
 
So berichtigt steht schon drin ist mir gerade auch aufgefallen ;-)

Davidlocke13 22. Okt 2012 12:35

AW: Problem mit Rechenprogramm
 
Allerdings habe ich ihm doch gesagt das es real sein soll !

himitsu 22. Okt 2012 12:42

AW: Problem mit Rechenprogramm
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1187897)
Allerdings habe ich ihm doch gesagt das es real sein soll !

Jupp, du hast ein Real eine Fließkommazahl und was hat Delphi gemacht?
Es hat den Wert als Fließkommazahl dargestellt, nur eben mit einem Exponenten.
Woher sollte es auch wissen, daß du diese Darstellungsform nicht magst? :wink:

Wie gesagt, siehe die genannten Konvertierungsfunktionen und/oder mal die Beschreibung von Delphi-Referenz durchsuchenSystem.Write durchlesen. (Delphi-Referenz durchsuchenWriteLn und da zum Delphi-Referenz durchsuchenWrite durchklicken)


PS: 1.00000000000E+0000 = 1,00000000000 * 10^+0000 = 1 * 10^0 = 1 * 1 = 1

^ = hoch = Exponent von 10

Davidlocke13 22. Okt 2012 12:57

AW: Problem mit Rechenprogramm
 
Begreife ich nicht :pale:

Bummi 22. Okt 2012 13:04

AW: Problem mit Rechenprogramm
 
Delphi-Quellcode:
      writeln (Spannung/Widerstand :2 :10,' OHM');

Davidlocke13 22. Okt 2012 13:08

AW: Problem mit Rechenprogramm
 
Ok danke ! :-)

himitsu 22. Okt 2012 13:11

AW: Problem mit Rechenprogramm
 
Die Zahl, welche Delphi ausgibt, ist eine
Delphi-Quellcode:
1
(1,0 mal (10 hoch +0))

Die Zahl 123,45 wäre 1.2345e+2 und eine 0,00123 wäre 1.23e-3 .

http://docwiki.embarcadero.com/Libra...e/System.Write
Zitat:

...
Ein Schreibparameter kann auch die Angabe der Feldbreite und der Anzahl von Dezimalstellen enthalten.
...
Variable [: MinBreite [: DezStellen ] ]
...
[ ] = das da drin ist alternativ und kann weggelassen werden ... bzw. in deinem Fall mußt du es hinzufügen.

z.B.
Delphi-Quellcode:
(Spannung/Widerstand):8:2
Oder eben du nutzt andere Funktionen (welche oben schon genannt wurden), um diese Fließkommazahl selbst in einen String umzuwandeln, so wie es dir gefällt, und gibst dann diesen String an das WriteLn weiter.

Delphi-Quellcode:
WriteLn(Format('%n', [Spannung/Widerstand]), ' OHM'); // ohne Stellenangabe
WriteLn(Format('%8.2n', [Spannung/Widerstand]), ' OHM'); // mit Stellenangabe, also den gleichen 8 und 2 aus dem oberen Beispiel

WriteLn(Format('%.2n', [Spannung/Widerstand]), ' OHM'); // oder einfach nur 2 Nachkommastellen
WriteLn(Format('%.2n OHM', [Spannung/Widerstand]));
Genauer Beschreibungen stehen ebenfalls in der OH (Links siehe ein paar Beiträge weiter oben) und vorallem was das N in %n bedeutet wird da erklärt. (Delphi-Referenz durchsuchenFormat)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz