• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Turbo Pascal

Mitglied seit
11.08.2001
Beiträge
2.818
Reaktionen
65
Servus Leute.

Ich schreibe morgen mein Abi über Turbo Pascal, meine Frage hat also eine gewisse Dringlichkeit.

Es handelt sich um ein Aktienprogramm. Das Problem befindet sich bei der Abbruchbedingung.

Aufgabenstellung: Die Eingabe wird beendet, wenn der Anwender beim Erfassen der Aktienbezeichnung keine weitere Aktienbezeichnung eingibt, sondern lediglich die RETURN-Taste drückt.

Dies klappt bei mir auch soweit, nur werden die restlichen Aktien als 0 Werte angezeigt. Sie sollen in der Ausgabe allerdings nicht erscheinen. Die Laufvariable I muss runter gezählt werden, nur weiss ich leider nicht wie. Vielleicht kann mir ja hier irgendwer helfen.

Hier das Programm:


Code:
PROGRAM aktien_pas; 
USES crt; 

CONST 
max =20; 

VAR 
name :array[1..max] of string[20]; 
menge :array[1..max] of integer; 
e_kurs :array[1..max] of real; 
t_kurs :array[1..max] of real; 
guv :array[1..max] of real; 
summe :real; 
I :integer; 

PROCEDURE eingabe; 
BEGIN 
clrscr; 
writeln ('Dieses Programm berechnet den Gewinn bzw. Verlust Ihrer Aktien.'); 
writeln ('Geben Sie die Aktienbezeichnung, die Stckzahl, den Einkaufskurs'); 
writeln ('und den Tageskurs in Euro an. Mit RETURN wird die Eingabe beendet.'); 
writeln; 
FOR I:=1 TO max DO 
BEGIN 
writeln; 
write (I,'. Aktienbezeichnung eingeben: '); 
readln (name[I]); 
IF (name[I]='') THEN 
BEGIN 
I:=I-1; 
exit; 
END 
ELSE 
write ('Stckzahl der Aktie: '); 
readln (menge[I]); 
write ('Einkaufskurs der Aktie: '); 
readln (e_kurs[I]); 
write ('Tageskurs der Aktie: '); 
readln (t_kurs[I]); 
clrscr; 
END; 
END; 

PROCEDURE verarbeitung; 
BEGIN 
I:=0; 
REPEAT 
I:=I+1; 
guv[I]:=(t_kurs[I]-e_kurs[I])*menge[I]; 
summe:=summe+guv[I]; 
UNTIL I=max; 

END; 

PROCEDURE ausgabe; 
BEGIN 
clrscr; 
gotoxy(30,1); writeln ('Aktienauswertung'); 
gotoxy(30,2); writeln ('================'); 
gotoxy(5,4); writeln ('Aktienbezeichn.'); 
gotoxy(25,4); writeln ('Tagesk.'); 
gotoxy(35,4); writeln ('Einkaufsk.'); 
gotoxy(50,4); writeln ('Menge'); 
gotoxy(60,4); writeln ('Gewinn/Verlust'); 
gotoxy(5,5); writeln ('======================================='); 
I:=0; 
REPEAT 
I:=I+1; 
gotoxy(5,5+I); writeln (name[I]); 
gotoxy(20,5+I); writeln (t_kurs[I]:10:2); 
gotoxy(32,5+I); writeln (e_kurs[I]:10:2); 
gotoxy(50,5+I); writeln (menge[I]); 
gotoxy(60,5+I); writeln (guv[I]:10:2); 
UNTIL I=max; 
gotoxy(5,6+I); writeln ('========================================'); 
gotoxy(60,7+I); writeln (summe:10:2); 
readkey; 
END; 

BEGIN 
eingabe; 
verarbeitung; 
ausgabe; 
END.




Danke für jegliche Hilfe.
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
du kannst dir entweder einfach merken wie viele aktien der user eingegeben hat, oder du überprüfst bei der ausgabe einfach, wann ein aktienname leer ist und brichst dann ab...

wenn du das nächste mal quelltext postest, dann bitte als
Code:
 damit er auch ordentlich eingerückt ist :)
 

Schubunki

Guest
wie die laufvariable muss runtergezählt werden ?
meinst du einfach so ne konstruktion wie:

Code:
for I:=12 downto 0 do begin ...

würd mich wundern aber vielleicht hilfts ja ^^
 

Atheist2

Guest
Was für ein Stil ...
exit ist ein goto-Alias und an dieser Stelle auch völlig unnötig.
Repeat...i:=i+1...until i=max kann durch for i:=1 to max do begin...end ersetzt werden.
Array of record wäre auch eleganter.
Und die Sache mit for...downto hatten wir ja schon.
Und noch Kuhler™ wäre eine Liste.
 

PhotonMan

Musik & Film Forum
Mitglied seit
22.09.2001
Beiträge
1.592
Reaktionen
0
mach einfach repeat until i=0, und mach in jedem durchgang dec(i)... :) da kann man eigentlich nix falsch machen, is ja nur tp :D
 

The_Company

Guest
Original geschrieben von FA_PhotonMan
mach einfach repeat until i=0, und mach in jedem durchgang dec(i)... :) da kann man eigentlich nix falsch machen, is ja nur tp :D
a) If Befehl, der das dec(i) überspringt => Dauerloop
b) man testet nie Gleichheiten, sondern immer > oder <, wenn es geht, damit bei evtl. reduzieren um 2 (evtl. spätere Erweiterung) das Programm auch noch abbricht, wenn i < 0 ist.

Soviel zu "nix falschmachen" :)
 
Oben