![]() |
hilfe beim verkürzen meines codes
hallo alle zusammen,
ich habe folgendes ein problem mit der if schleife, der Ablauf funktioniert zwar aber ich möchte den code verkürzen jedoch kriege ich es nicht hin. Meine beiden variablen : kmneu und tacho sind Double, zu der variable tacho soll ab 15km immer im 10km tack ein 0,1km dazu addiert werden NUr ein bruch teil meines langen codes..
Code:
if kmneu>= 1005 then begin tacho:= kmneu + (kmneu / 100 * 10) end else if kmneu>= 995 then begin tacho:= kmneu + (1 / 10 * 100) end else if kmneu>= 985 then begin tacho:= kmneu+(1 / 10 * 99) end else if kmneu>= 975 then begin tacho:= kmneu+ (1 / 10 * 98) end else if kmneu>= 965 then begin tacho:= kmneu+ (1 / 10 * 97) end . . . . . else if kmneu>= 35 then begin tacho:= kmneu+ (1 / 10 * 4) end else if kmneu>= 25 then begin tacho:= kmneu+ (1 / 10 * 3) end else if kmneu>= 15 then begin tacho:= kmneu+ (1 / 10 * 2) end else begin tacho:= kmneu end; |
AW: hilfe beim verkürzen meines codes
Delphi-Quellcode:
Wenn es nur ein Befehl ist, dann kann man sich natürlich das Begin-End sparen. :mrgreen:
if kmneu >= 1005 then
tacho := kmneu + (kmneu / 100 * 10) else if kmneu >= 995 then tacho := kmneu + (1 / 10 * 100) else if kmneu >= 985 then tacho := kmneu + (1 / 10 * 99) else if kmneu >= 975 then tacho := kmneu + (1 / 10 * 98) else if kmneu >= 965 then tacho := kmneu + (1 / 10 * 97) ... else if kmneu >= 35 then tacho := kmneu + (1 / 10 * 4) else if kmneu >= 25 then tacho := kmneu + (1 / 10 * 3) else if kmneu >= 15 then tacho := kmneu + (1 / 10 * 2) else tacho := kmneu; Und dann gibt es natürlich noch das Case.
Delphi-Quellcode:
Und wie dir auffällt, sind da fortlaufende Zahlen sind, welche man zusammenfassen kann.
case kmneu of
1005..10014{weiß ich nicht}: tacho := kmneu + (kmneu / 100 * 10); 995..1004: tacho := kmneu + (1 / 10 * 100); 985..994: tacho := kmneu + (1 / 10 * 99); 975..984: tacho := kmneu + (1 / 10 * 98); 965..974: tacho := kmneu + (1 / 10 * 97); ... 35..44: tacho := kmneu + (1 / 10 * 4); 25..34: tacho := kmneu + (1 / 10 * 3); 15..24: tacho := kmneu + (1 / 10 * 2); else tacho := kmneu; end;
Delphi-Quellcode:
case kmneu - 5 of
1000..1009: 990..999: 980..989: 970..979: 960..969: ... 30..39: 20..29: 10..19: else end;
Delphi-Quellcode:
Und wenn man weiter sieht, dann kann man die mittlere Reihe auch zusammenfassen.
case (kmneu - 5) div 10 of
100: 99: 98: 97: 96: ... 3: 2: 1: else end; Ein Blick auf die vorrherrige Reihe gibt auh gleich die mathematische Lösung.
Delphi-Quellcode:
Und nun lässt man einfach noch die äußeren Klammern weg, welche ja nicht nötig sind und stellt löst die Formeln auf.
100: tacho := kmneu + (kmneu / 100 * 10);
1..99: tacho := kmneu + (1 / 10 * ((kmneu - 5) div 10 + 1)); else tacho := kmneu;
Delphi-Quellcode:
Und das wäre selbst mit IF nichtmal so lang geworden, wenn man nur mal nach redundanten Regelmäßigkeiten sucht,
100: tacho := kmneu + kmneu / 10;
1..99: tacho := kmneu + ((kmneu - 5) div 10 + 1) / 10; else tacho := kmneu; vorallem wenn die in der Ausgangsfrage alle schon vorgegeben waren. :wall: Eventuell sollte man die Aufgabestellungen nochmal genau lesen und das machen, was darin steht. ab 15 in 10er-Schritten = (kmneu - 15) div 10 Und meinst du nicht, daß 1000 km/h nicht ein bissl viel sind? So viele IFs hättest du nicht gebraucht, vorallem da sie ja sowieso unnötig wären, wenn man es als Gleichung löst. Und wo steht eigentlich was von der Formel bei 1005... kmh? |
AW: hilfe beim verkürzen meines codes
Delphi-Quellcode:
Da fehlt noch ne Kleinigkeit und zwar die Prüfung ob km >= 1005 ist und die abweichende Berechnung aber das kriegst du sicher selbst hin.
var
n : integer; begin n := floor(kmneu + 5.0); // falls kmneu = 25.0 dann wäre n = 30 n := n div 10; tacho := kmneu + (0.1 * n); |
AW: hilfe beim verkürzen meines codes
Delphi-Quellcode:
Genau die gleiche Idee wie sx2008, nur eben in einer Zeile. Es ging ja um die Kürze, nicht um verständlichen Code. ;-).
kmneu := kmneu + 0.1* (trunc(min (1005,kmneu)+0.5) div 10 + 1);
... Und die Deckelung auf 1005 ist auch eingebaut.
Delphi-Quellcode:
konvertiert einen Double in einen Integer und kompensiert dabei eventuelle Rundungfehler.
trunc(x + 0.5)
|
AW: hilfe beim verkürzen meines codes
BTW
![]() |
AW: hilfe beim verkürzen meines codes
Zitat:
![]() :lol: |
AW: hilfe beim verkürzen meines codes
Zitat:
|
AW: hilfe beim verkürzen meines codes
<OT-Klippe>
Es war so ziemlich der einzige Link, der *nicht* gegen die Schlif-Eife (ich darf das Wort nicht aussprechen :freak:) gewettert hat. </OT-Klippe> |
AW: hilfe beim verkürzen meines codes
Zitat:
|
AW: hilfe beim verkürzen meines codes
Zitat:
|
AW: hilfe beim verkürzen meines codes
Ja was wohl: Du deutest damit an, dabei zu lachen. Das ändert aber nichts an der Richtigkeit meiner Aussage. Ich hoffe, du fühltest dich dadurch nicht beleidigt, denn das lag ganz gewiß nicht in meiner Absicht.
|
AW: hilfe beim verkürzen meines codes
Zitat:
Zitat:
![]() Zitat:
Wichtig! Nichts von dem ist böse gemein, von beiden Seiten nicht. So, nun geh ich raus, die Sonne lacht. Sie hat mir heute Glück gebracht. Macht es mir nach, und geht hinaus. Und hier ist die Geschichte aus. |
AW: hilfe beim verkürzen meines codes
Kein weiteres Interesse an deinen Spielchen ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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