Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: hilfe beim verkürzen meines codes

  Alt 31. Mai 2014, 04:22
Delphi-Quellcode:
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;
Wenn es nur ein Befehl ist, dann kann man sich natürlich das Begin-End sparen.
Und dann gibt es natürlich noch das Case.
Delphi-Quellcode:
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;
Und wie dir auffällt, sind da fortlaufende Zahlen sind, welche man zusammenfassen kann.
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:
case (kmneu - 5) div 10 of
  100:
  99:
  98:
  97:
  96:
  ...
  3:
  2:
  1:
  else
end;
Und wenn man weiter sieht, dann kann man die mittlere Reihe auch zusammenfassen.
Ein Blick auf die vorrherrige Reihe gibt auh gleich die mathematische Lösung.
Delphi-Quellcode:
  100: tacho := kmneu + (kmneu / 100 * 10);
  1..99: tacho := kmneu + (1 / 10 * ((kmneu - 5) div 10 + 1));
  else tacho := kmneu;
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.
Delphi-Quellcode:
  100: tacho := kmneu + kmneu / 10;
  1..99: tacho := kmneu + ((kmneu - 5) div 10 + 1) / 10;
  else tacho := kmneu;
Und das wäre selbst mit IF nichtmal so lang geworden, wenn man nur mal nach redundanten Regelmäßigkeiten sucht,
vorallem wenn die in der Ausgangsfrage alle schon vorgegeben waren.

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?
$2B or not $2B

Geändert von himitsu (31. Mai 2014 um 04:28 Uhr)
  Mit Zitat antworten Zitat