Autor |
Beitrag |
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 07.01.03 22:07
sorri ich nerve mal wieder...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var vokale: set of char; x, kette: string; i: Integer; begin vokale:=['a','e','i','o','u']; Edit2.Text:=x;
kette:=Edit1.Text; for i:=1 to length(kette) do if kette[i] in vokale then kette[i]:=StrToInt(x); Edit1.Text:=kette;
end; |
if kette[i] in vokale then kette[i]:=StrToInt(x);
Fehlermeldung in dieser Zeile: Inkompatible Typen: "Char" und "Integer"
Kann mir nochmal jemand helfen?
Danke sehr
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 07.01.03 22:14
Hallo,
Kette[i] ist ein einzelner Char. Da ist also Platz für einen Buchstaben oder eine Ziffer (welche als Buchstabe dargestellt wird). EIn Integer ist heutzutage 32 Bit größ benötigt also den Platz von 4 Cahrs und einen Solchen erzeugst du mit StrToInt(x). Das geht also alleine wegen des benötigten Speichers nicht außerdem wüsste Delphi auch nicht in welcher Form er die Zahl in den String einfügen soll. Denn auch da gibt es mehrere Möglichkeiten.
Was genau willst du denn machen?
Beschreibe bitte dein Problem, dann finden wir auch eine Lösung .
Gruß
Klabautermann
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Di 07.01.03 22:18
als erstes ist x nicht initialisiert, wozu willst du das dann übergeben???
2. weiß ich nicht warum du strtoint(x)sagst denn kette erwartet einen char und x ist ein string...
Fiji-Fighter
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Di 07.01.03 22:20
Was ist x, was ist kette? Beides sind String. kette[i] ist aber ein Char.
|
|
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 07.01.03 22:21
hmpf
okai....also....ich möchte, dass mein wort (string?) eingelesen wird
Quelltext
jeder der buchstaben meines wortes überprüft wird, ob er ein vokal ist
Quelltext 1: 2:
| for i:=1 to length(kette) do if kette[i] in vokale then kette[i]:=StrToInt(x); |
und wenn ja soll er ausgetauscht werden durch einen anderen buchstaben (anderen vokal), den man vorher eingibt (Edit2.Text:=x; )....
und das mein verändertes wort dann wieder ausgegebn wird....
Quelltext
hab ich total falsch gedacht?
(08.01. 09:25 Tino) Code-Tags hinzugefügt.
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Di 07.01.03 22:22
Popov hat folgendes geschrieben: | Was ist x, was ist kette? Beides sind String. kette[i] ist aber ein Char. |
Ich sollte in Zukunft meine Anhtworten sofort abzuschicken und nicht vorher pinkeln gehen.
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Di 07.01.03 22:27
Linus hat folgendes geschrieben: | und wenn ja soll er ausgetauscht werden durch einen anderen buchstaben (anderen vokal), den man vorher eingibt (Edit2.Text:=x; ).... |
Du meinst wohl x:=edit2.textoder??
Fiji-Fighter
|
|
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 07.01.03 22:29
ja stimmt wohl...
Quelltext
hmh.....
was ist dnen jetzt hier falsch?
muss x integer sein?
dann gibts aber immer noch inkompatible typen....
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Di 07.01.03 22:32
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var vokale: set of char; x: Char; kette: string; i: Integer; begin vokale:=['a','e','i','o','u']; if Length(Edit2.Text) < 1 then Exit else x:=Edit2.Text[1];
kette:=Edit1.Text; for i:=1 to length(kette) do if kette[i] in vokale then kette[i]:=x; Edit1.Text:=kette; end; |
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Di 07.01.03 22:37
also...
mach das mal so: for i:=1 to length(kette) do if kette[i] in vokale then kette[i]:=x[1];
dann sollte es klappen, weil nur der erste buchstabe von x übergeben wird...
das brauchst du aber nur wenn du nicht popov's methode nimmst in der x ein char ist
@ popov: warum nicht so??
Quelltext 1:
| if not (Edit2.Text='') then x:=Edit2.Text[1]; |
Fiji-Fighter
|
|
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 07.01.03 22:52
Danke danke danke
Beides funktioniert (natürlich *ggg*)
Mein Quelltext sieht jetzt aus wie folgt...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var vokale: set of char; x, kette: string; i: Integer; begin vokale:=['a','e','i','o','u']; x:=Edit2.Text;
kette:=Edit1.Text; for i:=1 to length(kette) do if kette[i] in vokale then kette[i]:=x[1]; Edit1.Text:=kette;
end; |
also noch zwei fragen....
1.) Bei mir hat das jetzt nicht geklappt weil ich x als string deklariert hatte und ein string nie nur aus einem zeichen/buchstaben besteht?! sondern eine zeichenkette *g* (supi) ist?!
2.) Wie kann ich denn jetzt noch ausschließen, dass konsonanten eingegeben werden können. ich will also das x nur ein vokal sein kann....
Quelltext 1:
| if not x[1] in vokale then exit; |
wieso geht sowas denn nicht??
(Operator ist auf diesen Operandentyp nicht anwendbar)
Operator & Operandentyp? *bahnhof*
|
|
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 07.01.03 23:00
und noch eine kleine frage
wie kann man denn ein Memo Feld (*noch nie benutzt habe*) in den Quelltext einbauen?
Also bei einem Editfeld muss man ja Edit1.Text
...bei einem Panel Panel1.Caption
und bei einem Memo Feld?
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Di 07.01.03 23:14
Fiji-Fighter hat folgendes geschrieben: | @ popov: warum nicht so??
Quelltext 1:
| if not (Edit2.Text='') then x:=Edit2.Text[1]; | |
Ganz einfach:
1) zum Teil ist es das gleiche, nur in grün.
2) wenn Edit2 leer ist, dann fliegt ihm die ganze Sache um die Ohren.
x bleibt dann leer (es bricht mit einer Fehlermeldung ab) oder hat einen falschen Wert (das Ergebnis ist falsch). Und schon funktioniert der ganze Code nicht.
Der Code von Linus funktioniert jetzt solange, solange er keinen Fehler bei der Eingabe macht.
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Mi 08.01.03 09:13
hast schon recht...
dann halt so:
Quelltext 1: 2:
| Code: if not (Edit2.Text='') then x:=Edit2.Text[1] else exit; |
ist kürzer als dein Quelltext und daher zu bevorzugen
Fiji-Fighter
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 08.01.03 10:32
Willst du jetzt solange meine Codes verbessern bis du mal einen Glückstreffer landest
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 08.01.03 11:35
Hallo,
Linus hat folgendes geschrieben: | 1.) Bei mir hat das jetzt nicht geklappt weil ich x als string deklariert hatte und ein string nie nur aus einem zeichen/buchstaben besteht?! sondern eine zeichenkette *g* (supi) ist?! |
Das hast du richtig verstanden. Bei zuweisungen musst du immer drauf achten, das die Typen auch kompatibel sind.
Linus hat folgendes geschrieben: | 2.) Wie kann ich denn jetzt noch ausschließen, dass konsonanten eingegeben werden können. ich will also das x nur ein vokal sein kann.... |
1. Bitte eröffne für neue Fragen auch ein neues Posting.
2. Diese Frage wurde hier schon oft beantwortet. Das Prinzib kannst du hier sehen.
Linus hat folgendes geschrieben: | Quelltext 1:
| if not x[1] in vokale then exit; |
wieso geht sowas denn nicht?? |
Das geht schon, du musst nur richtig klammern:
Quelltext 1: 2:
| if not (x[1] in vokale) then exit; |
Wenn du nicht Klammerst dann Versucht Delphi soetwas:
Quelltext 1: 2:
| if (not x[1]) in vokale then exit; |
Und der Operator NOT lässt sich nicht auf Chars (X[1]) anwenden. Daher deine Fehlermeldung.
Linus hat folgendes geschrieben: | Also bei einem Editfeld muss man ja Edit1.Text |
Beim Meno heißt die Eigenschft Linies und ist vom Typ tStrings. Dieser verwaltet mehrere Strings in einer Liste. Gucke dir diesen am besten mal in der Online-Hilfe an.
Gruß
Klabautermann
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Mi 08.01.03 14:18
Popov hat folgendes geschrieben: | Willst du jetzt solange meine Codes verbessern bis du mal einen Glückstreffer landest |
Ja genau das will ich!!
Ist doch eigentlich nur gut, wenn der Code verbessert wird...
da können alle dabei etwas lernen und das Programm läuft (wesentlich ) schneller...
Fiji-Fighter
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 08.01.03 15:21
Ob das Programm wesentlich schneller läuft? Das glaube ich nicht.
Das ganze ist wie "das Glas ist halb voll/ das Glas ist halb leer".
Mir ist wichtig, daß ich auch nach Monaten den Quelltext auch lesen kann:
Quelltext 1:
| if Length(Edit2.Text) < 1 then Exit ... |
Hier lese ich raus, daß der Text mindestens ein Zeichen lang sein müß. Nicht null, nicht zwei. Eins. Sofort weiß ich worum es geht. Ein Zeichen ist minimum. Ich hätte auch schreiben können:
Quelltext 1:
| if Length(Edit2.Text) = 0 then Exit ... |
Hier lese ich raus, daß der Text nicht leer sein darf. Warum? Hier weiß ich nur, daß der Text nicht leer sein darf. Bei dem anderen lese ich raus, daß die Länge mindestens eins sein muß.
Auch wenn das Ergebnis das gleiche ist, so lese ich hier unterschiedliches raus. Anderen ist sowas vielleicht egal. Mir nicht.
|
|