AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Aufgabe - Prämien

Ein Thema von haui95 · begonnen am 7. Feb 2012 · letzter Beitrag vom 8. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
haui95

Registriert seit: 1. Feb 2012
Ort: Niedersachsen
29 Beiträge
 
Delphi 7 Personal
 
#1

Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 17:58
Delphi-Version: 5
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:
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;
Die Aufgabe lautet: Formuliere ein Algorithmus zur Berechnung der prämie und erstellen sie das dazugehörige Pascal-Programm
Miniaturansicht angehängter Grafiken
praemien.png  
Hauke

Geändert von TBx ( 8. Feb 2012 um 02:06 Uhr) Grund: Delphi-Tags gesetzt
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 18:36
 If (x <= 3) Nach meinem Verständnis x < 3, denn der dritte Jahrestag ist bereits das dritte Jahr

  If (x > 3) and (x < 10) Unnötige erste Abfrage. Du hast vorher bereits alle unter 3 Jahren erwischt.

      4..9: y:=y*(x-1)+50 Du hast doch schon abgefragt ob er unter 10 Jahre da ist. Hier noch ein mal?

Zitat:
Ich dachte mir, dass man eine Rekursion verwenden kann
Warum nicht einfach mal nehmen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 18:57
  If (x > 3) and (x < 10) Unnötige erste Abfrage. Du hast vorher bereits alle unter 3 Jahren erwischt.
Aber nur inklusive dem vorangehenden ELSE, zu der If (x <= 3) -Abfrage.

Ohne ELSE wäre es so schon richtig.
Wobei es auch so nicht unbedingt falsch ist, aber unnötig isses natürlich schon.


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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 20:08
Hausaufgaben: es scheint nur Abfragen in allen Variationen zu geben. Warum nicht mal ein Ego-Shooter als Hausaufgabe?

      4..9: y:=y*(x-1)+50 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).
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 20:47
Eigentlich kann man das direkt nach der Textvorgabe herunter programmieren:
Delphi-Quellcode:
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;
Dies ist auch ein gutes Beispiel, warum man Code und Darstellung trennen sollte.
Es ist einfach übersichtlicher
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Delphi Aufgabe - Prämien

  Alt 7. Feb 2012, 21:24
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;
  Mit Zitat antworten Zitat
haui95

Registriert seit: 1. Feb 2012
Ort: Niedersachsen
29 Beiträge
 
Delphi 7 Personal
 
#7

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 14:14
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.
Miniaturansicht angehängter Grafiken
unbenannt.png  
Hauke
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 14:51
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:
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;
So funktioniert das, wenn in den beiden Edit-Feldern Eingaben enthalten sind, die auch in Integer umgewandelt werden können.

Um das abzufangen bietet sich Delphi-Referenz durchsuchenTryStrToInt an.
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#9

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 14:56
if TryStrToInt(Edit1.Text, Dauer) then kann weg.
Dauer wird danach ja nicht mehr benötigt
und wenn das vorherrige Dauer:=StrToInt(Edit1.Text); Probleme bemerkt hätte, dann wäre die Ausführung sowieso nicht bis dort hin gekommen.

[edit]
auf Beitrag 7 bezogen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
haui95

Registriert seit: 1. Feb 2012
Ort: Niedersachsen
29 Beiträge
 
Delphi 7 Personal
 
#10

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 17:04
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 , z.B x:=(a*b*c)+d; und nicht x := ( a * b * c ) + d;
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 ?
Hauke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz