Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Temperatur Umrechner (https://www.delphipraxis.net/140582-temperatur-umrechner.html)

jens106 21. Sep 2009 16:21


Temperatur Umrechner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bastle mir gerade einen (wie der Titel des Threads schon sagt) Temperatur Umrechner. Ich komme soweit auch gan gut klar. Um euch mal eben zu zeigen wie das ganze bei mir aus sieht habe ich ein Bild mit hochgelade.

Aber aus Irgend einem Grund bekomme ich einen fehler.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ComboBox2: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var zahl, ergebnis : integer;
begin
   zahl :=StrToInt(Edit1.text);

   // Kontrolle auf neue Edit Box

   if ComboBox1.text='C° (Celsius)' then
      begin
         if ComboBox2.text='K (Kelvin)' then
            begin
               ergebnis:=zahl+273;
               Edit1.Text:= IntToStr(ergebnis);
            end
         else
            begin
            end
       end
   else
      begin
      end

   // Kontrolle auf neue Edit Box

   if ComboBox1.text='C° (Celsius)' then     // hier kommt immer der Fehler
      begin
         if ComboBox2.text='K (Kelvin)' then
            begin
               ergebnis:=zahl+273;
               Edit1.Text:= IntToStr(ergebnis);
            end
         else
            begin
            end
       end
   else
      begin
      end


end;

end.
ich hoffe ihr könnt mir helfen


gruß jens106

Teekeks 21. Sep 2009 16:22

Re: Temperatur Umrechner
 
Wie heißt denn der Fehler?

jens106 21. Sep 2009 16:25

Re: Temperatur Umrechner
 
[Error] Unit1.pas(57): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

DeddyH 21. Sep 2009 16:27

Re: Temperatur Umrechner
 
Da fehlt ja auch ein Semikolon am Ende der Zeile vorher.

Teekeks 21. Sep 2009 16:28

Re: Temperatur Umrechner
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ComboBox2: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var zahl, ergebnis : integer;
begin
   zahl :=StrToInt(Edit1.text);

   // Kontrolle auf neue Edit Box

   if ComboBox1.text='C° (Celsius)' then
      begin
         if ComboBox2.text='K (Kelvin)' then
            begin
               ergebnis:=zahl+273;
               Edit1.Text:= IntToStr(ergebnis);
            end
         else
            begin
            end; //hier fehlte ein semicolon...
       end
   else
      begin
      end; //hier fehlte ein semicolon...

   // Kontrolle auf neue Edit Box

   if ComboBox1.text='C° (Celsius)' then     // hier kommt immer der Fehler
      begin
         if ComboBox2.text='K (Kelvin)' then
            begin
               ergebnis:=zahl+273;
               Edit1.Text:= IntToStr(ergebnis);
            end
         else
            begin
            end; //hier fehlte ein semicolon...
       end
   else
      begin
      end; //hier fehlte ein semicolon...


end;

end.

jens106 21. Sep 2009 16:30

Re: Temperatur Umrechner
 
jo danke dir.

aber wieso brauche ich da eins wenn ich nirgend anders eins gestzt habe?

DeddyH 21. Sep 2009 16:32

Re: Temperatur Umrechner
 
*Puh*, die Semikolonregeln von Pascal sind nicht ganz einfach zu erklären. Als Ansatz: überall dort, wo kein else folgt, sicherheitshalber ein Semikolon setzen, das sollte dann passen.

Teekeks 21. Sep 2009 16:33

Re: Temperatur Umrechner
 
genau nach dem verfahren mach ich das auch... ^^

jens106 21. Sep 2009 16:34

Re: Temperatur Umrechner
 
alles klar danke euch

himitsu 21. Sep 2009 16:52

Re: Temperatur Umrechner
 
Statt ComboBox1.Text empfehle ich dir mal einen Blick auf ComboBox1.ItemIndex zu werfen.

A) Integervergleiche sind schneller
und man könnte auch mal CASE-OF statt IF-THEN verwenden

B) änder mal den Text deiner Komponente und schon geht nichts mehr
und dann gibt's noch Schreibfehler beim Programmieren, wo es auch nicht mehr ginge.

Wolfgang Mix 21. Sep 2009 16:58

Re: Temperatur Umrechner
 
@Detlef:

So schwer sind die Zeichensatzregeln nun auch wieder nicht!
Zusammengehörende Befehle wie z.B.

- begin end
- repeat until
- while do
- if then else

werden nicht durch Semikolon getrennt.

Der wichtigste Merksatz ist:

Vor else darf nie ein Semikoln stehen!!!


Gruß

Wolfgang

DeddyH 21. Sep 2009 16:59

Re: Temperatur Umrechner
 
Stimmt so aber auch nicht ganz, in einem case-Label schon.

Wolfgang Mix 21. Sep 2009 17:03

Re: Temperatur Umrechner
 
Einspruch ;-)

weiteres Beispiel:

- case <variable> of .. end;

Gruß

Wolfgang

DeddyH 21. Sep 2009 17:05

Re: Temperatur Umrechner
 
Delphi-Quellcode:
case Dings of
  1: Bla;
  2: Blubb; //<-- Semikolon
  else     //<-- else
    Wuppdi;
end;

Wolfgang Mix 21. Sep 2009 17:07

Re: Temperatur Umrechner
 
Du hast das Semikolon nach of vergessen :-D :-D :-D

[Edit] Ich will keinen verwirren, aber nach of von case darf natürlich auch kein Semikolon stehen [/Edit]

Gruß

Wolfgang

DeddyH 21. Sep 2009 17:29

Re: Temperatur Umrechner
 
Zitat:

Zitat von Wolfgang Mix
Vor else darf nie ein Semikoln stehen!!!

Es ging mir nur um diese Aussage ;). Übrigens kann man sich mit zuvielen Semikola auch ganz schnell happige Fehler einbrocken, wenn man dann aus welchen Gründen auch immer nicht debuggen kann, hat man da die Kappe auf. Beispiel:
Delphi-Quellcode:
while true do; //<-- Ohauerhauerha
begin
  if Blabla then break;
end;
Aber ich denke, wir haben das nun genug beleuchtet :zwinker:

Wolfgang Mix 21. Sep 2009 17:31

Re: Temperatur Umrechner
 
:-D

jens106 21. Sep 2009 17:39

Re: Temperatur Umrechner
 
uiuiui ich merke schon jeder hat da seine eigene methode ;)

Naja neues Problem. Mein Taschenrechner Funktioniert super aber wenn ich jetzt einen Text in meine edit box eingebe stürzt delphi natürlich ab. Ich habe schon nach einer möglichkeit gesucht zu überprüfen ob der eingegebene wert eine ziffer oder eion buchstabe ist, aber ich komme nur auf sehr komplizierte methoden. Ich lerne Delphi erst seit 2 wochen.

Geht das mit Hilfe einer If Anwendung?

DeddyH 21. Sep 2009 17:41

Re: Temperatur Umrechner
 
Du könntest das OnChange-Ereignis des Edits zur Prüfung verwenden. Wenn sich der enthaltene Text in eine Zahl wandeln lässt (TryStrToInt), dann ist alles in Butter.

[edit] Für Fließkommazahlen wäre das dann natürlich TryStrToFloat. [/edit]

jens106 21. Sep 2009 17:44

Re: Temperatur Umrechner
 
könntest du vielleicht ein Beispiel nennen wie man das macht? Ich kenne diese OnChange anwendung noch nicht.

Tryer 21. Sep 2009 17:46

Re: Temperatur Umrechner
 
Noch ein Tip zur Temperatur - Umrechung: 0 °C entsprechen 273,15 K

Oder soll es nur ein Schätzwert sein? :wink:

jens106 21. Sep 2009 17:49

Re: Temperatur Umrechner
 
Zitat:

Zitat von Tryer
Noch ein Tip zur Temperatur - Umrechung: 0 °C entsprechen 273,15 K

Oder soll es nur ein Schätzwert sein? :wink:

nein natürlich nicht danke ;)

DeddyH 21. Sep 2009 17:49

Re: Temperatur Umrechner
 
Klicke das Edit an und wechsle im Objektinspektor auf den Reiter Ereignisse. Bei OnChange machst Du dann einen Doppelklick.
Delphi-Quellcode:
procedure TDeinForm.DeinEditChange(Sender: TObject);
var Zahl: double;
begin
  if not TryStrToFloat(DeinEdit.Text,Zahl) then
    begin
      ShowMessage('Ungültige Eingabe');
    end
  else
    begin
      //Berechnung durchführen
    end;
end;
So könnte man das machen, aber das ist nur eine von mehreren Möglichkeiten.

jens106 21. Sep 2009 17:56

Re: Temperatur Umrechner
 
bei mir kommt eine Fehlermeldung

Delphi-Quellcode:
  if not TryStrToFloat(Edit1.Text,zahl) then
    begin
      ShowMessage('Ungültige Eingabe');
    end
  else
    begin
    end;
Fehler:

[Error] Unit1.pas(37): There is no overloaded version of 'TryStrToFloat' that can be called with these arguments
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

DeddyH 21. Sep 2009 18:01

Re: Temperatur Umrechner
 
Zeig doch einmal die ganze Methode.

jens106 21. Sep 2009 18:04

Re: Temperatur Umrechner
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var zahl, ergebnis, unterergebnis : Real;
begin

  if not TryStrToFloat(Edit1.Text,zahl) then
    begin
      ShowMessage('Ungültige Eingabe');
    end
  else
    begin
    end;


   zahl :=StrToFloat(Edit1.text);

DeddyH 21. Sep 2009 18:07

Re: Temperatur Umrechner
 
Und wenn Du aus real einmal double machst? Sonst kann ich gerade nichts entdecken.
Zitat:

Zitat von Delphi-Hilfe
Konvertiert einen angegebenen String in einen Gleitkommawert mit einem booleschen Erfolgscode.

Pascal
Delphi-Quellcode:
function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Extended; const FormatSettings: TFormatSettings): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Double): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Double; const FormatSettings: TFormatSettings): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Single): Boolean; overload;
function TryStrToFloat(const S: string; out Value: Single; const FormatSettings: TFormatSettings): Boolean; overload;
C++
Code:
Boolean TryStrToFloat(const AnsiString S, Extended Value);
Boolean TryStrToFloat(const AnsiString S, Extended Value, const TFormatSettings FormatSettings);
Boolean TryStrToFloat(const AnsiString S, Double Value);
Boolean TryStrToFloat(const AnsiString S, Double Value, const TFormatSettings FormatSettings);
Boolean TryStrToFloat(const AnsiString S, Single Value);
Boolean TryStrToFloat(const AnsiString S, Single Value, const TFormatSettings FormatSettings);
Datei
SysUtils

Beschreibung
Mit TryStrToFloat kann der String S in einen Gleitkommawert konvertiert werden. S muss ein optionales Vorzeichen (+ oder –), einen String mit Ziffern und einem optionalen Dezimaltrennzeichen und einer optionalen Mantisse. Die Mantisse setzt sich aus 'E' oder 'e', einem optionalen Vorzeichen und einer ganzen Zahl zusammen. Leerzeichen am Anfang und Ende werden ignoriert.

Die globale Variable DecimalSeparator definiert das Zeichen, das als Dezimaltrennzeichen verwendet werden muss. Tausendertrennzeichen und Währungssymbole sind nicht zulässig. Wenn S keinen gültigen Wert enthält, gibt TryStrToFloat den Wert Default zurück.

TryStrToFloat stellt das Ergebnis in Value und gibt bei erfolgreicher Konvertierung den Wert true zurück, ansonsten false.

Die ersten drei Formen von TryStrToFloat sind nicht Thread-sicher, da die landesspezifischen Informationen der globalen Variablen verwendet werden. Den Thread-sicheren zweiten drei Formen werden die landesspezifischen Informationen im Parameter FormatSettings übergeben. Bevor Sie diese Formen von TryStrToFloat aufrufen, müssen Sie die Informationen in den Parameter FormatSettings schreiben. Die landesspezifischen Standardinformationen können FormatSettings mit GetLocaleFormatSettings zugewiesen werden.


jens106 21. Sep 2009 18:09

Re: Temperatur Umrechner
 
bevor ich jetzt mein ganzes Programm ruiniere... ;)

kann ich einfach so anstelle von Real Double hinschreiben? Wenn ja wie mache ich das dann mit StrTo***?

DeddyH 21. Sep 2009 18:10

Re: Temperatur Umrechner
 
Na genauso, double ist auch eine Fließkommazahl.

jens106 21. Sep 2009 18:26

Re: Temperatur Umrechner
 
also wenn ich das mit DoubleToStr richtig gemacht habe Funktioniert auch die Methode leider nicht.

Fehler:
Build
[Error] fast_fertig.dpr(37): Undeclared identifier: 'TryStrToDouble'
[Error] fast_fertig.dpr(56): Undeclared identifier: 'DoubleToStr'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'D:\Info\Delphi\Gradzahlen\fast_fertig.dpr'

Naja was solls ich weiß ja wie man's eingeben muss :)

DeddyH 21. Sep 2009 18:56

Re: Temperatur Umrechner
 
Wozu poste ich denn die gesamte Hilfe zu dem Befehl? Schau mal ganz genau, was man da so alles übergeben kann.

jens106 21. Sep 2009 19:18

Re: Temperatur Umrechner
 
ich lerne delphi (ich glaube das ist pascal) doch erst seit 2 wochen ich kann damit kaum was anfangen ;)

DeddyH 21. Sep 2009 19:22

Re: Temperatur Umrechner
 
TryStrToFloat erwartet gewisse Parameter. Welche das sein können, steht in der Hilfe (siehe mein Zitat). Das heißt nicht, dass sich der Name der Funktion ändert, der heißt weiterhin TryStrToFloat :zwinker:

jens106 21. Sep 2009 20:00

Re: Temperatur Umrechner
 
so ich habe ads jetzt so probiert

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var zahl, ergebnis, unterergebnis : Double;
begin

  if not TryStrToFloat(zahl S: string; out Value: Double): Boolean; overload; then
    begin
      ShowMessage('Ungültige Eingabe');
    end
  else
    begin
    end;
aber das klappt gar nicht

nur fehlermeldungen:

Build
[Error] fast_fertig.dpr(37): There is no overloaded version of 'TryStrToFloat' that can be called with these arguments
[Error] fast_fertig.dpr(56): Undeclared identifier: 'DoubleToStr'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'D:\Info\Delphi\Gradzahlen\fast_fertig.dpr'

Matze 21. Sep 2009 20:08

Re: Temperatur Umrechner
 
Hallo,

dir fehlen (immer noch) jegliche Grundlagen. Du weißt bsp. nicht, was der Unterschied zwischen einer Funktionsdeklaration und dem zugehörigen Aufruf ist. Die Deklaration zeigt dir, welche Parameter eine Funktion erwartet. Beim Aufruf übergibst du als Parameter deine Variablen bzw. Werte:

Delphi-Quellcode:
var myFloat: Extended;

if TryStrToFloat('12.4', myFloat) then
  ShowMessage(FloatToStr(myFloat))
else
  ShowMessage('Ungültige Eingabe');
'12.4' ist der String, der konvertiert werden soll.
in myFloat wird die konvertierte Zahl geschrieben.

Wenn du das besser verstehst, nutze try - except:

Delphi-Quellcode:
try
  myFloat := StrToFloat('12.4');
except
  ShowMessage('Ungültige Eingabe');
end;
Und nun arbeite bitte endlich die Grundlagentutorials durch.

Grüße, Matze

DP-Maintenance 21. Sep 2009 20:12

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage

Wolfgang Mix 21. Sep 2009 21:01

Re: Temperatur Umrechner
 
@Matze:

Sei 'mal nicht ganz so hart.

Zitat:

Ich lerne Delphi erst seit 2 wochen.
Mit Post #9 hat er ja schon sein Zwischenziel erreicht.

Laßt ihn 'mal die Tipps danach erstmal in Ruhe studieren und ausprobieren, vor allem die von Opa Detlef.

Gruß

Wolfgang

Matze 21. Sep 2009 21:14

Re: Temperatur Umrechner
 
Er schrieb doch, dass er es mit Opas Tipps nichts anfangen kann und fragte, wie man es machen muss.
Da finde ich den Hinweis, die Grundlagen zu lernen angebracht, zumal ich auch zum Thema beigetragen habe. Mir hat er meine Bitte auch bestätigt und mir mitgeteilt, dass er die Grundlagen nun vollends durcharbeiten wird.

Dass man bei einem Funktionsaufruf 1:1 die Deklaration kopiert und nicht überlegt, wie eigentlich die eigenen Daten in die Funktion kommen können (das fehlte komplett) sagt mir, dass da Grundlagen fehlen, die man zu Beginn lernen muss (als erstes).
Das lernt man innerhalb weniger Stunden in der Schule. ;)

Edit: Ich bin zu müde und muss ins Bett.

Wolfgang Mix 21. Sep 2009 21:22

Re: Temperatur Umrechner
 
@Matze:
Alles gut, also warten wir ab. :-)

Gruß

Wolfgang

Wolfgang Mix 21. Sep 2009 21:28

Re: Temperatur Umrechner
 
@Matze:

Sorry, daß ich nochmal antworte,
aber Funktionen zu behandeln sind nach 2 Wochen noch nicht machbar.
Ich bin froh, wenn ich das nach einem Vierteljahr vermitteln kann.
Sind halt nicht alle Hobbyprogrammierer.
Nach 30 Jahren Pascal merkt man sowas ;-)

Gruß

Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Seite 1 von 2  1 2      

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