AGB  ·  Datenschutz  ·  Impressum  







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

Tarifrechner

Offene Frage von "xsus"
Ein Thema von xsus · begonnen am 30. Okt 2011 · letzter Beitrag vom 31. Okt 2011
Antwort Antwort
Seite 2 von 2     12   
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#11

AW: Tarifrechner

  Alt 30. Okt 2011, 21:00
Auf der Konsole wird stardardmäßig der Dezimalpunkt als Dezimaltrenner verwendet (liegt an der amerikanischen Herkunft des BS).

Dein Delphi meckert vermutlich immer noch, oder?

Zur Abprüfung, ob der eingegebene Wert kleiner oder gleich Null ist, bau eine entsprechende IF-Clause und weise dem Result ein entsprechendes Ergebnis zu. Dieses prüfst Du dann in der Procedure Abauf ab und verzweigst ggf. in eine Procedure ausgabe3, die dann den Hinweis enthält, daß Pakete ohne Gewicht oder mit einem negativen Gewicht Schwachfug sind.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Tarifrechner

  Alt 30. Okt 2011, 21:01
Zitat:
PPS: Um den Rückgabewert einer Funktion zu setzen kann man entweder den Namen der Funktion verwenden oder das reservierte Wort Result.
Besser das Result, denn das Andere kann schonmal unübersichtlich werden.


Was wird hier wohl gerechnet?
Delphi-Quellcode:
var BöseGlobaleVariable: Integer;

function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then
    begin
      BöseGlobaleVariable := BöseGlobaleVariable - 1;

      SinnloseFunktion := SinnloseFunktion + 2;

      SinnloseFunktion := SinnloseFunktion + SinnloseFunktion - 1;
    end
  else
    SinnloseFunktion := 0;
end;


BöseGlobaleVariable := 10;
ShowMessage(IntToStr(SinnloseFunktion));
So wird es dann wohl verständlicher, wo der aktuelle Funktions-Wert und wo ein neuer Funktionsaufruf lauern.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    Result := SinnloseFunktion + 2;
    Result := SinnloseFunktion + SinnloseFunktion - 1;
  end else
    Result := 0;
end;
Aber eigentlich wollte ich dieses haben. war allerdings mit den "Funktionsnamen als Result" garnicht machbar ist.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    Result := SinnloseFunktion + 2;
    Result := Result + SinnloseFunktion - 1;
  end else
    Result := 0;
end;
OK, außer man führt das komische Ding, mit der unnötigen Variable wieder ein, aber auch da macht sich das Result veständlicher.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
var
  i: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    i := i + SinnloseFunktion - 1;
  end else
    i := 0;
  SinnloseFunktion := i; // Result := i;
end;
Wobei man hier das Result ja direkt verwenden und sich deshalb eben diese zusätzliche Variable ersparen kann.


PS: So, ich klaue dir jetzt mal das Refactoring (falls du sowas besitzt) und nun bennene mal diese Funktionen um.
Wo wirst du wohl weniger Arbeit haben?
PSS: Wenn es zufällig eine gleichnamige Funktion, mit passender Signatur, in einer anderen Unit gibt (die oben in Uses mit drin steht) und du vergißt auch nur einen Namen umzubenennen, dann war's daß, weil den Fehler suchst du erstmal eine Weile.
$2B or not $2B

Geändert von himitsu (30. Okt 2011 um 21:05 Uhr)
  Mit Zitat antworten Zitat
xsus

Registriert seit: 30. Okt 2011
7 Beiträge
 
Delphi 7 Personal
 
#13

AW: Tarifrechner

  Alt 30. Okt 2011, 21:11
Dein Delphi meckert vermutlich immer noch, oder?
Delphi ist glücklicher denn jeh, nur ich nicht mehr!

PS: So, ich klaue dir jetzt mal das Refactoring (falls du sowas besitzt) und nun bennene mal diese Funktionen um.
Wo wirst du wohl weniger Arbeit haben?
.
Also das mit dem result sieht übersichtlicher aus und so aber ich schnalls nicht..würde es dir was ausmachen, mir das an meiner function zu zeigen? dann erhoff ich mir eher, es nachvollziehen zu können..ehm was ist REFACTORING?

PSS: Wenn es zufällig eine gleichnamige Funktion, mit passender Signatur, in einer anderen Unit gibt (die oben in Uses mit drin steht) und du vergißt auch nur einen Namen umzubenennen, dann war's daß, weil den Fehler suchst du erstmal eine Weile.
Das bedeutet, ich passe gut auf, wie ich was benenne?!

EDIT: doch..ich glaub ich habs verstanden, ich probiers mal eben ^^

EDIT2:
Delphi-Quellcode:
function tarif(gewicht:real):byte;
begin
  if gewicht>0 then
begin
  if (gewicht<=10) then
     tarif:=1 else
        if (gewicht<=20) then
            tarif:=2 else
                if (gewicht>20) and (gewicht<=100) then
                   tarif:=3 else
                       tarif:=0
end else
result:=0;
RICHTIG? Erstelle ich jetzt Ausgabe 3, aber wie verweiße ich dann darauf?

Geändert von xsus (30. Okt 2011 um 21:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: Tarifrechner

  Alt 31. Okt 2011, 00:38
In ablauf ist der Rückgabewert von tarif 0, falls Das Gewicht < 0 oder > 100. Somit müsstest du dem < 0 einen anderen Tarif zuordnen um ihn von über 100 zu unterscheiden. Das dann wie gehabt prüfen. Statt tarif(gw) <> 0 zum Beispiel: t = tarif(gw); if t = 1 then ... else if t = ...

Edit: Bzw. die Eingabe vor der Berechnung prüfen.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
xsus

Registriert seit: 30. Okt 2011
7 Beiträge
 
Delphi 7 Personal
 
#15

AW: Tarifrechner

  Alt 31. Okt 2011, 09:47
Okee, das habe ich mit ner Case of - Anweisung gelöst ..thx
  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 16:18 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