Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - If - Einbindung


01Detlef - So 01.09.02 16:42
Titel: If - Einbindung
Hi
Ich habe folgenden Quelltext und habe dazu eine Frage:
Wie kann ich jetzt die Bedingung in die Rechnung einbringen? So dass, entweder das mit 0.25 oder mit 1 multipliziert wird? Und wenn das gelingt habe ich den wert, der 25% entspricht, aber ich möchte dann noch das diese von SummePro abgezogen werden!

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
PROGRAM Kassenzettel;
USES CRT;
CONST Oliven     = 7.86;
      Paprika    = 2.98;
      Gurken     = 3.67;
      Mwst       = 0.14;
      Rabatt     = 0.25;

VAR   AnOliven, AnPaprika, AnGurken,SummeOl, SummePa, SummeGu,   SummePro,Rab : Real  ;
      Antwort  : Char;

PROCEDURE Eingabe;
BEGIN
   CLRSCR;
   WRITELN('Gewicht der Oliven:');
   READLN(AnOliven);
   WRITELN('Gewicht der Paprikas:');
   READLN(AnPaprika);
   WRITELN('Gewicht der Gurken:');
   READLN(AnGurken);
   WRITELN('Bedigung');
   READLN(Antwort);

END;

PROCEDURE Bedingung;
BEGIN
   IF Antwort = 'j' then
   Rab:= SummePro * Rabatt  ;
END ELSE
  Rab := SummePro * 1;

PROCEDURE Rechnung;
BEGIN
   SummeOl:= AnOliven * Oliven;
   SummePa:= AnPaprika * Paprika;
   SummeGu:=AnGurken* Gurken;
   SummePro:= SummeOl+SummePa+SummeGu;
   
END;

PROCEDURE Ausgabe;
BEGIN
   CLRSCR;
   WRITELN('SUMME DER OLIVEN');
   WRITELN(SummeOl:8:2);
   WRITELN('Summe der Paprikas');
   WRITELN(SummePa:8:2);
   WRITELN('Summe der Gurken');
   WRITELN(SummeGu:8:2);
   WRITELN('_____________________________');
   WRITELN('Summe der Produkte');
   WRITELN(SummePro:8:2);
  
END;

BEGIN
   CLRSCR;
   Eingabe;
   Bedingung;
   Rechnung;
   Ausgabe;
   READLN;
END.

Detlef


patmann2001 - So 01.09.02 20:44

Hi
Ich würde die Procedure Bedingung weglassen.

Am Ende der Procedure Rechnung würde ich folgens einfügen:

Quelltext
1:
2:
3:
4:
IF Antwort = 'J' then
SummePro:= SummePro * 0,75 ;
END ELSE
SummePro := SummePro * 1;


Wurde also als Antwort ein 'j' eingegeben, dann wird das Ergebniss um 25% kleiner.

Noch ein paar Tips zur Eingabe.
Schreibe nie direkt in Variablen die nur nummerische Eingaben verwalten können. Sonst kommt es zu einem Programmambsturz wenn der Benutzer mal Buchstaben eintippt. Um das zu verhindern mache folgendes:
Zitat:

Var zahl:STRING;
kontrolle:INTEGER;
...
Repeat
WRITELN('Gewicht der Oliven:');
READLN(zahl);
VAL(zahl,AnOliven,kontrolle);
UNTIL kontrolle = 0;
...


Dann die Abfrage der Bedingung (Variable Antwort)
Ich würde nach der Eingabe von Antwort folgende Zeile einfügen:
Zitat:

antwort := UPCASE(antwort);


Dadurch werden immer Großbuchstaben in antwort stehen, egal was der Benutzer drückt.

cu Patmann


Wolff68 - Di 03.09.02 20:17
Titel: Re: If - Einbindung
Also ein paar Dinge kannst Dir wirklich sparen:

Quelltext
1:
2:
END ELSE
  Rab := SummePro * 1;

Soviel ich weis ändert sich nichts an einem Wert, wenn man ihn mit 1 multipliziert, oder? Also kannst das auch genausogut weglassen.

Wie übrigends die gesamte Prozedur Bedingung.
Diese eine If-Zeile kannst auch genausogut unten reinschreiben.
Ach ja: Es wäre auch günstig ERST SummePro berechnen zu lassen BEVOR Du da Prozente abrechnen willst. Macht sonst irgendwie wenig Sinn, oder?

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
BEGIN
   CLRSCR;
   Eingabe;
   Bedingung; // Hier werden 25% von einem unbestimmten Wert berechnet
   Rechnung;  // Und hier wird dann SummePro (ohne %) berechnet
   Ausgabe;
   READLN;
END.


OK, und wegen dem Abziehen: Wenn Du die Konstante nicht auf 0.75 setzen willst kannst zB auch  IF Antwort = 'J' then SummePro := SummePro * (1 - Rabatt); verwenden. Ist besser wenn später der Rabatt mal geändert werden soll. (In ein paar Monaten bist sonst überzeugt, daß Du bisher immer 75% Rabatt eingeräumt hast...) :-)

Viele Grüße,
Wolfgang