![]() |
ähnliche case anweisungen vereinfachen
Hallo,
Ich grübel schon eine ganze Zeit daran einen ganz ähnlichen Qeullcode zu vereinfachen
Delphi-Quellcode:
Das einzige worin sich die Zeilen unterscheiden sind die letzten beiden Zahlenwerte,
case ord(system[i]) -64 of
1: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 2, 1); 2: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 4, 2); 3: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 8, 3); 4: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 16, 4); 5: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 32, 5); 6: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 64, 6); 7: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 128, 7); 8: speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 256, 8); end; ich komm aber nicht drauf wie ich das mit dem 2,4,8,16,32,etc löse Zuerst dachte ich so villeicht
Delphi-Quellcode:
aber das stimmt nur für die ersten 2 Zeilen..... kann wer das zusammenfasse?
speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], 2*(ord(system[i]) -64), ord(system[i]) -64);
Ferby |
Re: ähnliche case anweisungen vereinfachen
hallo,
ich denke du musst statt 2 * (ord(system[i]) -64) eine Potenz berechnen. d.h. du musst 2 mit dem entspr. Faktor potenzieren, z.b. 2^1 = 2, 2^2 = 4 2^3 = 8... also sowas wie Power(ord(system[i]) - 64) - die syntax von power weiss ich jetzt nicht mehr, kann man aber leicht in der hilfe nachschaun dann kannst du natürlich in einer if-schleife prüfen, ob ord(system[i]) - 64). im gewünschten bereich liegt, und dann speicher[i] := speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], Power(ord(system[i]) -64), ord(system[i]) -64); schreiben. mfg, heiopei |
Re: ähnliche case anweisungen vereinfachen
Das mit dem Power war schon nicht schlecht, kann man aber auch mit einer einfachen Schiebeoperation machen:
Delphi-Quellcode:
code := ord(system[i]) - 64;
speicher[i] := speicher[i] + FarbenToBit(BMP.canvas.Pixels[y, x], 1 shl code, code); |
Re: ähnliche case anweisungen vereinfachen
Hallo,
Ich habe das mal mit dem Power gemacht
Delphi-Quellcode:
Habe Power bis jetzt nicht gekannt.
if ord(system[i]) -64 < 9 then
speicher[i]:=speicher[i] + FarbenToBit(BMP.canvas.Pixels[y,x], round(Power(2,ord(system[i]) -64)), ord(system[i]) -64 ) Wieso heißt diese Funktion Power, was hat "Power" mit Potenzrechnen zu tun? @ Flocke: Ich blick nicht ganz durch was shl macht, auch die Delphi hilfe versteh ich da nicht ganz, wie kann ich mir das mit den Bit verschieben vorstellen? Ferby |
Re: ähnliche case anweisungen vereinfachen
Zitat:
Zitat:
//edit: selbiges im Dezimalsystem: betrachte die Zahl 234567 und verschiebe alles eine Stelle nach links: => 2345670 ^= 234567 * 10 ;) |
Re: ähnliche case anweisungen vereinfachen
Hi,
Zitat:
... und schon wieder etwas gelernt Zitat:
|
Re: ähnliche case anweisungen vereinfachen
Anstelle jedes Mal das Quadrat zu berechnen könntest du auch einfach eine Array -Konstante mit diesen Werten anlegen, die du dann abfragst. Könnte sogar noch schneller sein.
mfG Markus |
Re: ähnliche case anweisungen vereinfachen
Zitat:
greetz Mike |
Re: ähnliche case anweisungen vereinfachen
Naja, mit sowas kenne ich mich nicht genau aus, ich habe nur bei einem eigenen Programm festgestellt, dass es eine Beschleunigung bewirkt. Die Zahlenwerte liegen dabei zwischen 2^0 und 2^7 (es geht um Bits).
mfG Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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