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 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 18:12
Kommt drauf an, was du alles machen willst.

Eine Klasse stellt eine Sammlung von Methoden und Variablen dar, welche zu einem bestimmten Themenbereich gehören.
Ist besser als unzählige globale Variablen und frei rumschwirrende Prozeduren. (deswegen wurde ja OOP erfunden und als Bonus bekommt man die Vererbung gleich mit dazu)

Und vorallem für die Trennung von Code und GUI sind diese ganz praktisch.

Also im Prinzip wirst du da nicht drumrumkommen. (selbst wenn es ohne ebenfalls ginge)
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
 
#12

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 18:54
So, habe es nocheinmal programmiert. Bin mir aber nicht sicher, ob man es so machen kann.
Paar Punkte vielleicht:

a.) ich bin traurig, dass du keine Klasse geschrieben hast Ist aber nicht wirklich schlimm

b.) Du verwendest den Variablennamen "Result". Ist zwar nicht verboten, aber der hat bei Funktionen eine Bedeutung. Ich würde es wegen einem besseren Verständnis nicht nehmen. Ist aber an dieser Stelle aber nicht wirklich schlimm.

c.) Real als Variablentyp.

- nach meiner Kenntnis ist der Typ veraltet. Er wird zwar nie verschwinden, bleibt aber wohl nur aus Kompatibilitätsgründen da. Besser ist Double.
- Aber auch Double ist hier nicht richtig, da es sich um Währung handelt. Bei kleinen Zahlen fällt das nicht auf, aber wenn ich diesen Rundungsfehler hätte 1,24E8 €, bzw. das was hier durch runden weggefallen ist, wäre ich ein reicher Mann. Für Währungen nimmt man Currency als Typ. Da wird nichts gerundet.

d.) über das Dauer:=StrToInt(Edit1.Text); brauchen wir nicht groß reden, im Zweifelsfall kommt eine Fehlermeldung.

e.) if (Dauer > 3) and (Dauer < 10) then Hier bekommt auch der eine Prämie, der lediglich einen Arbeitsvertrag hat. Denn hier bekommen auch die eine Prämie, die 0 Jahre gearbeitet haben.

f.) Noch besser ist das: Dauer,Alter:Integer; Hier kommen nach e. auch die dran die -3 Jahre gearbeitet haben (wie das gehen soll weiß ich zwar nicht, aber rein rechnerisch ginge es). Dann aber kämen auch die dran, die noch nicht geboren sind ca. -1 Jahr Integer ist gut, Word ist besser, da er keine negativen Werte zulässt.

Ist alles nicht so wild wenn keine Fehler bei der Eingabe passieren. Ansonsten gut gemacht

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 ?
Du wirst auch ohne auskommen können. Aber ab einem bestimmten Punkt wird dir etwas fehlen und du wirst anfangen zu basteln um auf eine (eigene) Klasse zu verzichten. Es wird dann aufwendiger zu programmieren, nicht unmöglich.

Geändert von Popov ( 8. Feb 2012 um 19:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 19:09
c.) Real als Variablentyp.

- nach meiner Kenntnis ist der Typ veraltet.
Jain.

Das alte Real-Typ ist "verschwunden" und ist inzwischen standardmäßig als Real48 verfügbar.
(wurde irgendwann umgestellt ... vor langer Zeit / vor Delphi 7)

Der "neue" Real-Typ ist ein dynamischer Typ, wie auch Integer (aktuell NativeInt), Char, PChar und String.
Aktuell ist er eine Weiterleitung auf Double.

http://docwiki.embarcadero.com/VCL/de/System.Real48
http://docwiki.embarcadero.com/RADSt...t_%28Delphi%29
http://docwiki.embarcadero.com/VCL/de/System.Real

PS: Ein Integer ohne Vorzeichen ist eigentlich ein Cardinal.
Integer = signed integer
Cardinal = unsigned integer
ShortInt - Byte
SmallInt - Word
LongInt - LongWord
Int64/LargeInt - UInt64
Integer - Cardinal
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2012 um 19:15 Uhr)
  Mit Zitat antworten Zitat
haui95

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

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 21:21
So, endlich fertig und hoffentlich richtig

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Dauer, Alter :Word;
  Praemie :Currency;
begin
  Dauer := StrToInt( Edit1.Text );
  Alter := StrToInt( Edit2.Text );

  if ( Dauer < 10 )
    and ( Dauer > 0 ) then
      begin
        Praemie := 100;
          if ( Dauer > 3 ) then
            Praemie := Praemie + ( 50 * ( Dauer - 3 ) );
      end
  else
    begin
      Praemie := Dauer * 60;
    end;
  if ( Alter >= 50 ) then
    Praemie := Praemie + ( Praemie / 2 );

  Edit3.Text := FloatToStr( Praemie );
end;
Eine Frage habe ich dann doch noch ! Wie kann ich dem Programm eigentlich sagen, dass er mir bei Zahlen unter 0 eine Fehlermeldung (ShowMessage oder sowas ;D) ausgeben soll? Also die 3 Edit Felder dürfen keine negativen Zahlen beinhalten und auch nicht vom Programm akzeptiert werden.
Hauke
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#15

AW: Delphi Aufgabe - Prämien

  Alt 8. Feb 2012, 23:43
Da gibt es viele Möglichkeiten, aber hier bietet sich StrToIntDef gerade zu an.

Alter := StrToIntDef(Edit1.Text, -1); Wird etwas falsches angegeben, z.B. Text statt Zahl, bekommt Variable Alter den Wert -1. Und da es mindestens 0 Jahre alt sein muss um in der Firma arbeiten zu dürfen reicht nun eine einfache if Alter > -1 Anfrage. Gibt einer -25 dann ist es auch < 0, also perfekt.

Ansonsten vielleicht etwas genauer:

Delphi-Quellcode:
const
  Min = 16;
  Max = 65;
var
  Alter: Integer;
begin
  Alter := StrToIntDef(Edit1.Text, -1);

  if (Alter < Min) or (Alter > Max) then
    ShowMessage('Falsche Alterseingabe')
  else
    ShowMessage('Alles klar, der Typ ist ' + IntToStr(Alter) + ' Jahre alt');
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:48 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