PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Im Array hochzählen


Gast
2009-05-09, 20:52:19
Nabend,

Mich beschäftigt da eine Sache extrem.

Ich habe ein Array und möchte quasi dort Hochzählen wie man es binär auch macht.

Also:
0000
0001
0010
0011
0100
usw.

Das gleiche Prinzip des Hochzählens will jedoch auf dieses Bespiel anwenden:
0|0|0|0
0|0|0|1
0|0|0|2
...
0|0|0|45
0|0|1|0
0|0|1|1
0|0|1|2
...
0|0|2|0
...
45|45|45|45

Wie müsste ich sowas programmieren?! Ich find einfach keine schlaue Lösung.

Gnafoo
2009-05-09, 21:12:55
Ganz normal zählen und dann auf Basis 46 zerlegen. D. h. Zähler modulo 46 gibt dir die letzte Stelle. Dann den Zähler per Ganzzahldivision durch 46 teilen. Wieder modulo 46 rechnen, teilen usw.

1 = 0*46^3 + 0*46^2 + 0*46^1 + 1*46^0
2 = 0*46^3 + 0*46^2 + 0*46^1 + 2*46^0
...
46 = 0*46^3 + 0*46^2 + 1*46^1 + 0*46^0
47 = 0*46^3 + 0*46^2 + 1*46^1 + 1*46^0
...
123 = 0*46^3 + 0*46^2 + 2*46^1 + 31 * 46^0

usw.

Hardwaretoaster
2009-05-09, 21:23:31
Also wenn ich dich richtig verstehe:

(Pseudocode)

while(Hochzählbednigung){
array[0]++
//Hochzaehlen per überlauf
for(int i=0; i<arraylänge; i++){
if(array[i]>=46){
array[i]==0;
array[i+1]++;
}
//wenn die stelle i nicht überlauft, tut es auch eine Stelle i+1 nicht, die for-Schleife kann also abgebrochen werden
else break;
}
//stupide Abbruchbedingung, musste halt so anhalten, wie du es für deinen Fall brauchst...
if(array[arraylaenge-1]>=46){
break;
}
}


Keine Garantie auf Richtigkeit, erst recht nicht, dass das ein besonders effizienter Weg