| Autor |
Beitrag |
juleins
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 23.07.07 22:26
Hi!
ich versuche gerade Binäre Zahlen zu erzeugen, die dann weiterverarbeitet werden.
wenn ich z.B. alle 9 stelligen Zahlen (000 000 000 bis 111 111 111) erzeugen will, brauche ich dazu 9 for-schleifen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for a1:=0 to 1 do for a2:=0 to 1 do for a3:=0 to 1 do for a4:=0 to 1 do for a5:=0 to 1 do for a6:=0 to 1 do for a7:=0 to 1 do for a8:=0 to 1 do for a9:=0 to 1 do ...erstelle Zahl |
Da gibt es doch sicher eine effektivere Lösung oder?
grüßle Juleins
Zuletzt bearbeitet von juleins am Mo 23.07.07 23:26, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.07.07 22:37
Moin!
juleins hat folgendes geschrieben: | | alle 9 stelligen Zahlen (0 000 000 bis 1 111 111) |
Wo ist das Problem:
Delphi-Quelltext
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 23.07.07 22:47
Wie wär's mit: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var Zahl: 0 .. (1 shl 9) - 1; begin for Zahl := Low(Zahl) to High(Zahl) do end; |
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 23.07.07 23:07
Versteh ich da was falsch? Kommt es dir im speziellen darauf an, dass es im binären 9stellige Zahlen sein sollen, oder kommt es darauf an, dass die Ausgabe binär ist? Hier mal eine IntToBin Funktion, falls sie dich weiter bringt. Du kannst ja z.B. per while-Schleife hochzählen, bis IntToBin dir '1111 1111 1' zurückgibt(ohne ' '), dann weißt du, dass du bei der größten 9-Stelligen Zahl angekommen bist.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Function IntToBin(x: Integer): String; Var hex: String; i: integer; Const HexToBin: Array[0..$F] Of String = ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111'); Begin hex := IntToHex(x, 10); For i := 10 Downto 1 Do Result := HexToBin[StrToInt('$' + hex[i])] + Result; While Result[1] = '0' Do Delete(Result, 1, 1); End; |
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
juleins 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 23.07.07 23:25
@narses: ich glaube du hast es nicht ganz verstanden...
@Benbe: Ist das ein Pointer? oder wie funktioniert deine routine. Ich verstehe sie nicht wirklich.
Nochmal:
also dachte eigentlich das wär klar:
ich will einfach binäre Zahlen ausgeben.
Und zwar immer eine weiter:
Bei 4 stellen:
0000
0001
0010
0011
....
1111
Bei 9 stellen:
000000000
000000001
000000010
...
111111111
am Besten wäre natürlich ein Script, bei der man die Grenze, bis zu der hochgezählt wird, eingeben kann.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mo 23.07.07 23:35
Hi
juleins hat folgendes geschrieben: | | @narses: ich glaube du hast es nicht ganz verstanden... |
ne, Du hast es wohl etwas falsch formuliert.
Es besteht ein himmelweiter Unterschied zwischen einer wirklich binären Zahl und der Darstellung einer binären Zahl als binäre Zahl auf dem Screen z.B.
Dazu bitte mehr Input;)
Gruß
Aga
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 23.07.07 23:41
Für Leute mit IOCCC-Erfahrung ;-) Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| Program CountBinary;
{$APPTYPE CONSOLE}
Uses SysUtils;
Function DWordToBinaryStr(AValue: DWORD): String; Type PByte = ^Byte; Var B: PByte; Begin Result := StringOfChar('0', 32); B := @Byte(Result[32]); While AValue <> 0 Do Begin Inc(B^, AValue And 1); AValue := AValue Shr 1; Dec(B); End; End;
var Zahl: 0 .. (1 shl 9) - 1; begin for Zahl := Low(Zahl) to High(Zahl) do WriteLn(DWordToBinaryStr(Zahl)); end. | Ach ja: Mein oberes Code-Schnipselchen war nix anderes, als Narses' Beispiel etwas kryptischer darszustellen...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am Mo 23.07.07 23:45, insgesamt 2-mal bearbeitet
|
|
juleins 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 23.07.07 23:44
Das wusste ich nicht.Sorry
Ok also ich will die als Strings bzw Integerwerte haben.
Optimal wäre als Array [Stelle] of Boolean.
grüßle
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 23.07.07 23:51
Werd ich übersehen?
Du kannst einen String in einen solchen Array umwandeln:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| function BinToAOB(s: String): Array of Boolean; var i:integer; begin SetLength(Result, length(s)); for i := low(Result) to High(Result) do Result[i]:= (s[i] = '1'); end; |
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Di 24.07.07 00:05
Schade daß Du sowenig Eigenintiative hast.
Aber ok, um die Uhrzeit.
Also, wie Du alle Bins jetzt kriegst weißt Du und das ist hübsch und elegant...nun mußt Du noch dafür sorgen, daß die Bins anzeigbar werden...und dann siehst de zu, daß de das alles noch in dein Array kriegst.
Leute, ich sag Euch, wenn Ihr Euch immer Alles vorkauen läßt, wird das nie was mit der Programmiererei.
Muß ja allgemein sagen, entweder ist die F1-Taste total festgerostet oder total abgenutzt, scheint jedenfalls nicht gebrauchsfähig
Nix für ungut, diese meine Unmutsäußerung bezieht sich nicht nur auf Dich.
LG
*smack*
Aga
|
|
|