Autor Beitrag
juleins
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 23.07.07 22:37 
Moin!

user profile iconjuleins hat folgendes geschrieben:
alle 9 stelligen Zahlen (0 000 000 bis 1 111 111)

Wo ist das Problem: :nixweiss:
ausblenden Delphi-Quelltext
1:
for i := 0 to 511 do					

;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 23.07.07 22:47 
Wie wär's mit:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mo 23.07.07 23:35 
Hi

user profile iconjuleins 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 23.07.07 23:41 
Für Leute mit IOCCC-Erfahrung ;-)

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 23.07.07 23:51 
Werd ich übersehen? :(
Du kannst einen String in einen solchen Array umwandeln:
ausblenden 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'); // falls 1 true ist
end;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: 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 :wink:

Nix für ungut, diese meine Unmutsäußerung bezieht sich nicht nur auf Dich.

LG

*smack*

Aga