auf eine bestimmte Zahl kommen
-
TGGC schrieb:
Warum nicht einfach im Neunersystem zaehlen? (Ja danke, ich weiss das ich genial bin) f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
Und das bringt genau was?
-
Die gewuenschten Zahlen oder den Umweg mit dem Ueberspringen. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Magst du denn mal erlaeutern, wie genau die dann ausgelassen werden sollen?
-
@Walli: Ich glaub du hast recht, hier reicht es nicht ein Genie zu sein, man muss es auch erst mal umstaendlich erklaeren.
Man braucht dann nichts mehr ueberspringen, da es im Neunersystem keine Zahlen, welche die Ziffer 9 enthalten, gibt. Das tolle ist, du kannst damit auch ganz einfach die 100. Zahl dieser Reihe finden, ohne alle davor zu berechnen. Oder an welcher Stelle die 100 in der Reihe steht. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Na dann versuch mal, alle Zahlen zu überlesen, die eine 1 enthalten
(da gibt es nur im Binärsystem eine derart direkte Lösung - alle Zahlen außer der 0 können überlesen werden)
-
CStoll schrieb:
Na dann versuch mal, alle Zahlen zu überlesen, die eine 1 enthalten
(da gibt es nur im Binärsystem eine derart direkte Lösung - alle Zahlen außer der 0 können überlesen werden)Dann nehme ich das Nuenersystem mit den Ziffern "023456789". f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Die Frage ist doch, wo das jetzt soviel anders ist, als das umstaendliche Ueberspringen. Letztendlich sollen es ja Dezimalzahlen bleiben.
-
TGGC schrieb:
CStoll schrieb:
Na dann versuch mal, alle Zahlen zu überlesen, die eine 1 enthalten
(da gibt es nur im Binärsystem eine derart direkte Lösung - alle Zahlen außer der 0 können überlesen werden)Dann nehme ich das Nuenersystem mit den Ziffern "023456789". f'`8k
Ja, so kann man es auch machen, nur wird es etwas schwieriger, den Wert einer Zahl zu ermitteln (noch besser - du nimmst die "Ziffern" A..J :D)
Aber mit deiner "Lösung" bist du sowieso voll am ursprünglichen Problem vorbeigerauscht - wenn du die Zahlenbasis wechselst, ändern sich auch die "Problemzahlen" (z.B. enthält die 19 im Hex-System keine 9 mehr, die 25 schon).
-
@XFame: Eben weil es nicht so umstaendlich ist.
CStoll schrieb:
TGGC schrieb:
CStoll schrieb:
Na dann versuch mal, alle Zahlen zu überlesen, die eine 1 enthalten
(da gibt es nur im Binärsystem eine derart direkte Lösung - alle Zahlen außer der 0 können überlesen werden)Dann nehme ich das Nuenersystem mit den Ziffern "023456789". f'`8k
Ja, so kann man es auch machen, nur wird es etwas schwieriger, den Wert einer Zahl zu ermitteln (noch besser - du nimmst die "Ziffern" A..J :D)
Das macht ueberhaupt nichts schwieriger. Der PC rechnet sowieso nie im Dezimalsystem, und ob er nun ins Zehner oder Neunersystem umrechnet, ist ihm egal und auch die Zeichen sind ihm eigentlich egal. Der Aufwand der Umrechnung bleibt gleich.
CStoll schrieb:
Aber mit deiner "Lösung" bist du sowieso voll am ursprünglichen Problem vorbeigerauscht - wenn du die Zahlenbasis wechselst, ändern sich auch die "Problemzahlen" (z.B. enthält die 19 im Hex-System keine 9 mehr, die 25 schon).
Das liegt nur an deiner "falschen" Interpretation der Zahlen. Im Grunde handelt es sich beim Neunersystem (in der ueblichen Darstellung) um eine bijektive Abbildung der natuerlichen Zahlen auf die Zahlen des Zehnersystem ohne die Zahlen mit einer 9. So etwas kann man sehr oft anwenden, zum Beispiel um alle moeglichen Farbkombinationen bei Mastermind aufzulisten. Dort gibt es sechs(?) Farben, daher sind die Kombinationen alle Zahlen des Sechsersystems von 0000 bis 5555 und die Ziffern sind Farben! Das ist offensichtlich wesentlich einfacher als im Dezimalsystem zu zaehlen und alles mit 6,7,8,9 zu ueberspringen. Ich hoffe das Beispiel macht es klar. f'`8k
Gruß, TGGC ([url=www
-
Ich glaube, so langsam kann ich deinen Gedankengang verstehen - du schreibst die Zahl im (modifizierten) Neuner-System und interpretierst die Ausgabe dann als Dezimalzahl.
-
Die Frage ist, ob ueberhaupt noch (vom Programm) interpretiert wird, schliesslisch werden Ausgaben eigentlich vom Anwender interpretiert. Und da muss man normalerweise nichts Spezielles tun, damit eine Zahl als "Zahl im Zehnersystem" verstanden wird. f'`8k
Gruß, TGGC (making great games since 1992)
-
im Prinzip eine Konvertierung wie itoa nur mit einer Menge von 9 zeichen und zur basis 9.
PS: Ich glaube TGGC ist nur zufällig auf die Lösung gekommen, weil das Beispiel mit 9 war. Das das auch für alle anderen Zahlen geht, war ihm doch zuerst garnicht bewusst, sondern nur glück.
-
Bei itoa kann man die Basis als Parameter uebergeben. Darum brauch man kein itoaN fuer jede verschiedene Basis schreiben. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Ja, die Basis schon, aber nicht welchen "Zeichensatz" er nehmen soll. Man könnte den Zeichenstaz für die Ausgabe umstellen, aber da wäre es glaub ich einfacher sein ito9a zu schreiben und z.B den "023456789" Zeichensatz zu übergeben.
-
Wieso dann nicht eine allgemeine Funktion mit Basis == Laenge des "Zeichensatzes"? f'`8k
Gruß, TGGC (making great games since 1992)
-
Weil dann mein Name nicht mehr passt.
-
TGGC schrieb:
Die Frage ist, ob ueberhaupt noch (vom Programm) interpretiert wird, schliesslisch werden Ausgaben eigentlich vom Anwender interpretiert. Und da muss man normalerweise nichts Spezielles tun, damit eine Zahl als "Zahl im Zehnersystem" verstanden wird. f'`8k
Ist doch egal, wer die Zahl interpretiert - wenn du es nur ausgeben willst, reicht die Umwandlung und Ausgabe aus, wenn du damit noch rechnen willst, mußt du sie (dezimal) zurückwandeln.
PS: Für beliebige Ziffern kannst du ja die itoa mit einem anschließenden Zeichen-Mapping kombinieren:
void remap_number(char* num,char* mapping) { for(int i=0;i<strlen(num);++i) if(isdigit(num[i]) num[i] = mapping[num[i]-'0']; } char ausgabe[MAX]; itoa(number,ausgabe,9) remap_number(ausgabe,"012456789x");//wir suchen alle Zahlen ohne '3'
PPS: itoa() ist aber keine Funktion des Ansi-Standards.