Autor Beitrag
Ottchen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: So 08.12.02 15:15 
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:
ausblenden 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

_________________
See you.
Jack Falworth
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222

Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
BeitragVerfasst: So 08.12.02 15:42 
Ottchen hat folgendes geschrieben:

z.B. dieses selbst ausgedachte hier funktioniert nicht:
Code:
ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 08.12.02 20: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.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: So 08.12.02 22: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

_________________
See you.
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 08.12.02 22: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
ausblenden 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.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 08.12.02 23: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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222

Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
BeitragVerfasst: Mo 09.12.02 17: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.

ausblenden 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 09.12.02 17:34 
Jetzt wo du es sagst, dann geht mein Code auch nicht, dann muß es so sein:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
begin 
  repeat
    zahl:=StrToInt(Edit1.Text); 
    summe:=summe+zahl; 
  until zahl < 0;
end;