![]() |
Delphi-Version: 5
Delphi Aufgabe - Prämien
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Community,
ich bin seit ungefähr einer Woche neu hier und bin mir nicht sicher, ob ich diesen Beitrag in das richtige Subforum poste. Nun, ich habe seit ungefähr einem halben Jahr Informatikunterricht in der Sekundarstufe II und versuche gelegentlich anhand von Textaufgaben die jewiligen Programme zu programmieren, um dann halt auch außerhalb der Schule fit zu bleiben. Nun habe ich eine Aufgabe gefunden, bei der ich einfach keinen richtigen Ansatz finde. Angefangen habe ich schon, aber ich bezweifle, dass an dem jetzigen Quellcode nichts auszusetzen ist. So, ich poste den hier mal, vllt. könntet ihr mir ja weiterhelfen. Die Aufgabe habe ich als png Datei angehängt. Vielen Dank im Voraus.
Delphi-Quellcode:
Die Aufgabe lautet: Formuliere ein Algorithmus zur Berechnung der prämie und erstellen sie das dazugehörige Pascal-Programm
procedure TForm1.Button1Click(Sender: TObject);
var x:Integer; y:Integer; begin x:=StrToInt(Edit1.Text); If (x <= 3) Then Edit3.Text:='100' Else If (x > 3) and (x < 10) Then Begin y:=100; Case x of 4..9: y:=y*(x-1)+50 // Ich dachte mir, dass man eine Rekursion verwenden kann, indem man immer den vorherigen Wert mit 50 addiert, Umsetzung war aber ein wenig erfloglos :-D end; Edit3.Text:=IntToStr(y); end; |
AW: Delphi Aufgabe - Prämien
Delphi-Quellcode:
Nach meinem Verständnis x < 3, denn der dritte Jahrestag ist bereits das dritte Jahr
If (x <= 3)
Delphi-Quellcode:
Unnötige erste Abfrage. Du hast vorher bereits alle unter 3 Jahren erwischt.
If (x > 3) and (x < 10)
Delphi-Quellcode:
Du hast doch schon abgefragt ob er unter 10 Jahre da ist. Hier noch ein mal?
4..9: y:=y*(x-1)+50
Zitat:
|
AW: Delphi Aufgabe - Prämien
Zitat:
Delphi-Quellcode:
-Abfrage.
If (x <= 3)
Ohne ELSE wäre es so schon richtig. Wobei es auch so nicht unbedingt falsch ist, aber unnötig isses natürlich schon. :angle: Nur von der angesprochenen Rekursion kann ich nirgends was finden. PS: Falls du nett bist, dann könntest du ja in deinem ersten Post noch das [DELPHI]-Tag einbauen. |
AW: Delphi Aufgabe - Prämien
Hausaufgaben: es scheint nur Abfragen in allen Variationen zu geben. Warum nicht mal ein Ego-Shooter als Hausaufgabe?
Delphi-Quellcode:
Obwohl ich weiß nicht ob der Part: y*(x-1)+50 auch richtig ist. Hier werden nach meinem Verständnis die Jahre mal Grundprämie genommen und die Jahresprämie dazu addiert (Punkt vor Strichrechnung).
4..9: y:=y*(x-1)+50
|
AW: Delphi Aufgabe - Prämien
Eigentlich kann man das direkt nach der Textvorgabe herunter programmieren:
Delphi-Quellcode:
Dies ist auch ein gutes Beispiel, warum man Code und Darstellung trennen sollte.
function PraemieBerechnen( Dauer : integer ) : Currency;
begin Result := 0; // Wenn die Dauer kleiner 1 Jahr, dann gibt es nichts, also raus hier :o) // Steht zwar so nicht direkt im Text, kann man aber zwischen den Zeilen lesen if Dauer < 1 then Exit; // Bis zu 10 Jahren gibt es immer mindestens 100,00€ if Dauer <= 10 then begin Result := 100; // bei mehr als 3 Jahren, kommen noch pro Mehr-Jahr 50,00€ hinzu if Dauer > 3 then Result := Result + 50 * ( Dauer - 3 ); end else // mehr als 10 Jahre, für jedes Jahr 60,00€ begin Result := Dauer * 60; // ab 50 Jahren gibt es die Hälfte noch mal oben drauf if Dauer >= 50 then Result := Result + Result / 2; end; end; // Nun der Aufruf über den Button procedure TForm1.Button1Click( Sender : TObject ); var Dauer : integer; Praemie : Currency; begin if TryStrToInt( Edit1.Text, Dauer ) then begin Praemie := PraemieBerechnen( Dauer ); Edit3.Text := FloatToStr( Praemie ); end else ShowMessage( Edit1.Text + ' ist keine gültige Zahl' ); end; Es ist einfach übersichtlicher |
AW: Delphi Aufgabe - Prämien
Du weißt ja, ich denke kompliziert.
Delphi-Quellcode:
type
TPraemie = class private FGrundPraemie: Currency; FJahrPraemie: Currency; //Unter 10 FJahrPreamie10: Currency; FAlter: Word; FBetriebsJahre: Word; function Berechnung: Currency; public property GrundPraemie: Currency read FGrundPraemie; property JahrPraemie: Currency read FJahrPraemie; property JahrPreamie10: Currency read FJahrPreamie10; property Alter: Word read FAlter write FAlter; property BetriebsJahre: Word read FBetriebsJahre write FBetriebsJahre; property Summe: Currency read Berechnung; constructor Create; end; constructor TPraemie.Create; begin inherited; FGrundPraemie := 100; FJahrPraemie := 50; FJahrPreamie10 := 60; end; function TPraemie.Berechnung: Currency; begin if FBetriebsJahre > 0 then begin if FBetriebsJahre <= 3 then Result := FGrundPraemie else begin if FBetriebsJahre <= 10 then Result := FGrundPraemie + ((FBetriebsJahre - 3) * FJahrPraemie) else Result := FBetriebsJahre * FJahrPreamie10; end; if FAlter >= 50 then Result := Result * 1.5; end else Result := 0; end; procedure TForm1.Button2Click(Sender: TObject); var Praemie: TPraemie; begin Praemie := TPraemie.Create; try Praemie.BetriebsJahre := StrToInt( Edit1.Text ); Edit3.Text := FloatToStr( Praemie.Summe ); finally Praemie.Free; end; end; |
AW: Delphi Aufgabe - Prämien
Liste der Anhänge anzeigen (Anzahl: 1)
So, habe es nocheinmal programmiert. Bin mir aber nicht sicher, ob man es so machen kann. ;-)
Die Form habe ich als png datei angehängt !
Delphi-Quellcode:
type
{ TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var Dauer,Alter:Integer; Result:Real; begin Dauer:=StrToInt(Edit1.Text); if (Dauer < 10) then begin Result:=100; if (Dauer > 3) and (Dauer < 10) then Result:=Result + (50 * (Dauer - 3)); end else begin Alter:=StrToInt(Edit2.Text); Result:=Dauer*60; if Alter >= 50 then Result:=Result + (Result / 2); end; if TryStrToInt(Edit1.Text, Dauer) then begin Edit3.Text:=FloatToStr(Result); end; end; end. |
AW: Delphi Aufgabe - Prämien
Hmmm, nun ja, da sind noch überflüssige Sachen drin, die da raus können.
Und laut der Textaufgabe ist da etwas falsch umgesetzt (hatte ich aber auch falsch interpretiert :) )
Delphi-Quellcode:
So funktioniert das, wenn in den beiden Edit-Feldern Eingaben enthalten sind, die auch in Integer umgewandelt werden können.
procedure TForm1.Button1Click(Sender: TObject);
var Dauer, Alter :Integer; Praemie : Real; // ein sprechender Name hilft gegen Verwirrungen :o) begin // erst mal die Werte aus dem Formular holen Dauer := StrToInt( Edit1.Text ); Alter := StrToInt( Edit2.Text ); // Jetzt die Berechnung if ( Dauer < 10 ) then begin Praemie := 100; // Die Abfrage ( Dauer < 10 ) ist nicht falsch, aber überflüssig // da wir dieses ja schon hier sicherstellen if ( Dauer > 3 ) { and ( Dauer < 10 ) } then Praemie := Praemie + ( 50 * ( Dauer - 3 ) ); end else begin Praemie := Dauer * 60; end; if ( Alter >= 50 ) then Praemie := Praemie + ( Praemie / 2 ); // Jetzt das Ergebnis ausgeben Edit3.Text := FloatToStr( Praemie ); end; Um das abzufangen bietet sich ![]() Der entsprechende Teil sähe dann so aus:
Delphi-Quellcode:
// erst mal die Werte aus dem Formular holen
if not TryStrToInt( Edit1.Text, Dauer ) or not TryIntToStr( Edit2.Text, Alter ) then begin // Hinweis ausgeben ShowMessage( 'Keine gültige Eingabe!' ); // Verlassen Exit; end; |
AW: Delphi Aufgabe - Prämien
Delphi-Quellcode:
kann weg.
if TryStrToInt(Edit1.Text, Dauer) then
Dauer wird danach ja nicht mehr benötigt und wenn das vorherrige
Delphi-Quellcode:
Probleme bemerkt hätte, dann wäre die Ausführung sowieso nicht bis dort hin gekommen.
Dauer:=StrToInt(Edit1.Text);
[edit] auf Beitrag 7 bezogen |
AW: Delphi Aufgabe - Prämien
Danke nochmal an alle ! Aber die Leerzeichen im Quellcode setzt man nur wegen der Übesichtlichkeit, oder ? Ich zum Besipiel setze kaum Leerzeichen, sondern versuche nur die übersichtliche Struktur beizubehalten :D , z.B x:=(a*b*c)+d; und nicht x := ( a * b * c ) + d; :P
Hmm... und könntet ihr mir vielleicht sagen, ob es notwendig ist später zum Beispiel als Hobbyprogrammierer selber Klassen zu definieren und zu schreiben oder werden die Klassen reichen, die Delphi oder FreePascal einem vorgeben ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz