Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Inkompatible Typen: Char und String (https://www.delphipraxis.net/179363-inkompatible-typen-char-und-string.html)

Delp 2. Mär 2014 18:34

Inkompatible Typen: Char und String
 
Guten Abend,

habe heute angefangen meinen Taschenrechner zu programmieren und komme direkt nicht mehr weiter..

Hier der Quellcode:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var eingabe,loesung: string;
ergebnis: double;
zeichen:char;
begin
ergebnis:= 0;
loesung:= edit2.text;
eingabe:=edit1.Text;
zeichen:= copy(loesung,length(loesung),1);
delete(loesung,length(loesung),1);
case zeichen of
'+': ergebnis:=strtofloat(loesung)+strtofloat(eingabe);
'-': ergebnis:=strtofloat(loesung)-strtofloat(eingabe);
end;
edit2.text:=floattostr(ergebnis);
end;

end.
Bei der Zeile
Delphi-Quellcode:
zeichen:= copy(loesung,length(loesung),1);
zeigt es mir den oben genannten Fehlercode an. Wie könnte ich es anders schreiben, damit der Fehler beseitigt wird?

Danke im voraus für die Antworten.

Delp

mkinzler 2. Mär 2014 18:36

AW: Inkompatible Typen: Char und String
 
Versuch mal
Delphi-Quellcode:
Zeichen:= Char(copy(loesung,length(loesung),1));
bei älteren Delphiversionen sollte auch
Delphi-Quellcode:
Zeichen:= copy(loesung,length(loesung),1)[0];
funktionieren

Delp 2. Mär 2014 18:41

AW: Inkompatible Typen: Char und String
 
Danke für die fixe Antwort.

Beides funktioniert leider nicht.
Bei erster Variante erscheint die Fehlermeldung "Ungültige Typumwandlung" und bei der zweiten Variante: "[Fehler] Unit1.pas(65): E2157 Auf Element 0 kann nicht zugegriffen werden - 'Length' oder 'SetLength' verwenden".

Habe übrigens Delphi 2005

Bernhard Geyer 2. Mär 2014 18:42

AW: Inkompatible Typen: Char und String
 
Du willst das letzte Zeichen haben?
Delphi-Quellcode:
Zeichen:= loesung[length(loesung)]

Delp 2. Mär 2014 18:44

AW: Inkompatible Typen: Char und String
 
Danke Bernhard, hat geklappt!

Hab irgendwo gelesen gehabt, dass man dafür copy verwendet.

schönen Abend noch

mkinzler 2. Mär 2014 18:46

AW: Inkompatible Typen: Char und String
 
Zitat:

Zitat von Delp (Beitrag 1250302)
Danke für die fixe Antwort.

Beides funktioniert leider nicht.
Bei erster Variante erscheint die Fehlermeldung "Ungültige Typumwandlung" und bei der zweiten Variante: "[Fehler] Unit1.pas(65): E2157 Auf Element 0 kann nicht zugegriffen werden - 'Length' oder 'SetLength' verwenden".

Habe übrigens Delphi 2005

Sollte auch
Delphi-Quellcode:
Zeichen:= copy(loesung,length(loesung),1)[1];
lauten :oops:

Delp 2. Mär 2014 18:54

AW: Inkompatible Typen: Char und String
 
Stimmt, dass hätte jetzt auch geklappt :D

Danke euch beiden

DeddyH 2. Mär 2014 18:57

AW: Inkompatible Typen: Char und String
 
Nur mal so aus Interesse: wo liegt denn in neueren Delphi-Versionen der Unterschied zwischen
Delphi-Quellcode:
Copy(EinString, Length(EinString), 1)[1]
und
Delphi-Quellcode:
EinString[Length(EinString)]
:?: Nach meinem Verständnis ist das Ergebnis der Copy-Funktion ein String, ob ich nun auf den indiziert zugreife oder auf das Original, welche Rolle spielt das?

Delp 2. Mär 2014 19:36

AW: Inkompatible Typen: Char und String
 
Hab da noch eine Frage zu den Fehler: [Fehler] Unit1.pas(61): E2012 Ausdruckstyp muss BOOLEAN sein

Meine Plus-Taste:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var eingabe,loesung: string;
ergebnis: double;
zeichen: char;
begin
eingabe:=edit1.text;
if edit2.Text:='' then
begin
edit2.Text:=edit1.Text+'+';
edit1.text:=''
end
else
ergebnis:=0;
loesung:= edit2.text;
zeichen:= copy(loesung,length(loesung),1)[1];
delete(loesung,length(loesung),1);
case zeichen of
'+': ergebnis:=strtofloat(loesung)+strtofloat(eingabe);
'-': ergebnis:=strtofloat(loesung)-strtofloat(eingabe);
'*': ergebnis:=strtofloat(loesung)*strtofloat(eingabe);
'/': ergebnis:=strtofloat(loesung)/strtofloat(eingabe);
end;
case zeichen of
'+': edit2.Text:=floattostr(ergebnis)+ '+';
'-': edit2.Text:=floattostr(ergebnis)+ '-';
'*': edit2.Text:=floattostr(ergebnis)+ '*';
'/': edit2.Text:=floattostr(ergebnis)+ '/';
end;
edit1.Text:=floattostr(ergebnis);
end;
Wie ihr vielleicht schon mitbekommen habt, will ich einen Rechner mit 2 Edit-Feldern programmieren. (ähnlich dem Windows-Rechner)

Nun soll geprüft werden, ob in den oberen Feld bereits eine Zahl mit Operator steht. Wenn ja, dann soll mit einem erneuten drücken eines Operators bereits das Ergebnis in das untere Feld eingetragen werden.

Ich glaube das Programm dürfte somit laufen, nur wie bekomme ich diese Zeile
Delphi-Quellcode:
if edit2.Text:='' then
so hin, dass kein Fehler mit Boolean auftritt?

Edit: Habs selber hinbekommen. Einfach ne Variable drauß gemacht :)

mkinzler 2. Mär 2014 19:52

AW: Inkompatible Typen: Char und String
 
Was steht in Zeile 61?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 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