Autor Beitrag
Linus
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 07.01.03 22:07 
sorri ich nerve mal wieder...:-(

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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



BeitragVerfasst: Di 07.01.03 22:20 
Was ist x, was ist kette? Beides sind String. kette[i] ist aber ein Char.
Linus Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 07.01.03 22:21 
hmpf :-(

okai....also....ich möchte, dass mein wort (string?) eingelesen wird
ausblenden Quelltext
1:
kette:=Edit1.Text;					

jeder der buchstaben meines wortes überprüft wird, ob er ein vokal ist
ausblenden 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....
ausblenden Quelltext
1:
Edit1.Text:=kette;					

hab ich total falsch gedacht? :-(

(08.01. 09:25 Tino) Code-Tags hinzugefügt.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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 wohlx:=edit2.textoder??

Fiji-Fighter
Linus Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 07.01.03 22:29 
ja stimmt wohl...
ausblenden Quelltext
1:
x:=Edit2.Text;					


hmh.....
was ist dnen jetzt hier falsch? :-(

muss x integer sein?
dann gibts aber immer noch inkompatible typen....
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 07.01.03 22:32 
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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... 8)

das brauchst du aber nur wenn du nicht popov's methode nimmst in der x ein char ist ;)


@ popov: warum nicht so??
ausblenden Quelltext
1:
 if not (Edit2.Text='') then x:=Edit2.Text[1];					


Fiji-Fighter
Linus Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 07.01.03 22:52 
Danke danke danke :-)

Beides funktioniert (natürlich *ggg*)

Mein Quelltext sieht jetzt aus wie folgt...

ausblenden 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....

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 07.01.03 23:00 
und noch eine kleine frage :roll:

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



BeitragVerfasst: Di 07.01.03 23:14 
Fiji-Fighter hat folgendes geschrieben:
@ popov: warum nicht so??
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 08.01.03 09:13 
hast schon recht...
dann halt so:
ausblenden 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 :wink:

Fiji-Fighter
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.01.03 10:32 
Willst du jetzt solange meine Codes verbessern bis du mal einen Glückstreffer landest ;)
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden Quelltext
1:
if not x[1] in vokale then exit;					

wieso geht sowas denn nicht?? :-(

Das geht schon, du musst nur richtig klammern:
ausblenden Quelltext
1:
2:
if not (x[1] in vokale) then 
  exit;


Wenn du nicht Klammerst dann Versucht Delphi soetwas:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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!! :twisted: :wink: :wink:

Ist doch eigentlich nur gut, wenn der Code verbessert wird...
da können alle dabei etwas lernen und das Programm läuft (wesentlich :wink: ) schneller... :wink:

Fiji-Fighter
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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.