Entwickler-Ecke

Sonstiges (Delphi) - Wie Zahlen einlesen?


Ottchen - So 08.12.02 16:15
Titel: Wie Zahlen einlesen?
Liebe Listenmitglieder!

Ich möchte mit einer repeat-until-Schleife folgendes Problem lösen:

Mittels Edit-Feld sollen Integer-Zahlen eingelesen werden und deren Summe solange berechnet und in einem Panel z.B. ausgegeben werden, bis die eingegebene Zahl negativ ist.

Wie löst man das Problem praktisch in Delphi? Weist man das Einlesen einem OnClick-Ereignis vom Button zu? (Funktioniert aber nicht) Oder gibts da andere Möglichkeiten? Wie kommt man aus der Schleife raus?

z.B. dieses selbst ausgedachte hier funktioniert nicht:
Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var zahl, summe, i: integer; 

begin 
  zahl:=StrToInt(Edit1.Text); 
  summe:=0; 
  i:=0 

  repeat 
    summe:=summe+zahl; 
    i:=i+1; 
  until zahl<0  

end;


Ottchen


Jack Falworth - So 08.12.02 16:42
Titel: Re: Wie Zahlen einlesen?
Ottchen hat folgendes geschrieben:

z.B. dieses selbst ausgedachte hier funktioniert nicht:
Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var zahl, summe, i: integer; 

begin 
  zahl:=StrToInt(Edit1.Text); 
  summe:=0; 
  i:=0 

  repeat 
    summe:=summe+zahl; 
    i:=i+1; 
  until zahl<0  

end;

Ottchen


Ist eigentlich klar warum das nicht geht:
Wenn du ne zahl ins edit eingibst, die z.b. positiv ist, dann kommst du in ne endlos schleife, weil du solang zahl addierst bis die zahl kleiner null wird. nur wenn zahl positiv ist und du addierst, wird sie niemals kleiner null.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var zahl, summe, i: integer; 

procedure TForm1.Create (Sender: TObject);
begin
summe:= 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin 
  zahl:=StrToInt(Edit1.Text); 
  summe:=summe+zahl; 
  if summe < 0 then showmessage ('TATA');
end;


Das dürfte funzen.

MfG

Jack Falworth


Wolff68 - So 08.12.02 21:09

Erstmal eine Frage:
Du möchtest das mit repeat...until, oder Du sollst es mit repeat...until machen. (Weil Dein Lehrer das zB vorgibt.)
Falls Du sollst: Bist Du sicher, daß das nicht eine Konsolenanwendung geben soll? Denn nur da macht es Sinn!

Generell ist zu sagen, daß Delphi Ereignisorientiert arbeitet. Mit dem Eingeben einer Zahl in ein Edit bzw dem Drücken des Buttons löst Du ein Ereignis aus. Was dann passieren soll schreibst Du in die Ereignisbehandlung Button1Click. Danach ist das Ereignis erledigt, und das Programm wartet auf weitere Ereignisse (zB den nächsten Click auf den Button). Deshalb ist hier ein repeat..until völlig unsinnig.
Es geht zwar auch innerhalb einer repeat..until schleife, aber etwa genauso wie man sich auch mit der rechten Hand am linken Ohr kratzen kann.


Ottchen - So 08.12.02 23:27
Titel: Schleife
Also ich habe da immer noch so Beispiele von Büchern aus PASCAL-Programmen und versuche, diese in Delphi umzuschreiben. (So ein "richtiges" Übungsbuch/-heft müsste man haben...) Und Delphi ist doch etwas anders. Eben komfortabler mit mehr Möglichkeiten.
Ich versuche das Beispiel zu programmieren!

Vielen Dank!!

Ottchen


Wolff68 - So 08.12.02 23:35

Dann ist klar...
In Deinem Pascal-Buch sind Beispiele für Konsolenanwendungen. Also ohne Windows-Fenster usw.
Diese Art Programme sind nicht Ereignisgesteuert. Da musste man selber warten.

Da steht sicher was von ReadLn

Quelltext
1:
2:
3:
4:
repeat
  ReadLn(zahl);
  Summe := Summe + Zahl;
until Summe < 0;

Da wartet das ReadLn auf die Eingabe einer neuen Zahl.

Also ich würde Dir auch dringendst zu einem Delphi-Buch raten (Ist ja bald Weihnachten...)
Ansonsten kannst die Programmbeispiele nur als Programmidee verwenden. Die Umsetzung jedoch ist völlig anderst.


Delete - Mo 09.12.02 00:43

@Jack: Dein zweiter Code bricht aber nicht unbedfingt ab, wenn eine negative Zahl eingegeben wird.
Beispeil: Summe = 9, eingegeben Zahl -5. Summe ist immer noch größer 0 und es geht weiter.


Quelltext
1:
2:
3:
repeat
  Zahl := Zahl + IntToStr.Edit1;
until zahl < 0;

Das sollte gehen. Un das ganze in eine ButtonClick-Prozedur packen.


Jack Falworth - Mo 09.12.02 18:26

Luckie hat folgendes geschrieben:
@Jack: Dein zweiter Code bricht aber nicht unbedfingt ab, wenn eine negative Zahl eingegeben wird.
Beispeil: Summe = 9, eingegeben Zahl -5. Summe ist immer noch größer 0 und es geht weiter.


Quelltext
1:
2:
3:
repeat
  Zahl := Zahl + IntToStr.Edit1;
until zahl < 0;

Das sollte gehen. Un das ganze in eine ButtonClick-Prozedur packen.


Ich bin davon ausgegangen, dass man immer wieder eine neue Zahl ins Edit eingibt und dann die Zahl ein Mal verrechnet und nicht mit derselben zahl solange rumrechnet bis was negatives rauskommt.

MfG

Jack Falworth


Delete - Mo 09.12.02 18:34

Jetzt wo du es sagst, dann geht mein Code auch nicht, dann muß es so sein:

Quelltext
1:
2:
3:
4:
5:
6:
begin 
  repeat
    zahl:=StrToInt(Edit1.Text); 
    summe:=summe+zahl; 
  until zahl < 0;
end;