Mahlzeit community ;-) Kann mir jemand sagen wie ich die Ziffern hinter dem Komma auslesen kann? Hintergrund ist, ich wollte mir eine Fkt. schreiben welche mir die Stellen einer Zahl zählt Ich dachte mir folgendes: zum Beispiel 123. Ich "teile" durch 10. Wären dann 12,3. Dann will ich aber nur die die 3 aus dem ergebnis weiterverarbeiten und zwar in der hinsicht dass ich sie mit der eigentlichen Zahl vergleiche. Stimmen beide nicht überein, teile ich beim nächsten schleifendurchgang durch 100. Wären hinterm komma 23 usw. beim letzten Durchgang würde der Zustand 123=123 eintreten und die schleife beendet werden. Ja, und bei jedem schleifendurchgang dann eben noch einen zähler mitlaufen lassen dessen wert zurückgegeben wird. Das ganze in C. Mein Problem ist im Grunde genommen nur das, dass ich nicht weiss wie ich aus einer Kommazahl die "Zahl" hinter dem Komma extrahiere. Hoffe ihr versteht was ich hier geschrieben habe, kommt mir irgendwie verwirrend vor ;-) Danke
Rush ... schrieb: > wie > ich aus einer Kommazahl die "Zahl" hinter dem Komma extrahiere. Kannst ja erst Modulo benutzen, das gibt dir den Rest. z.B.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
"nachkomma" sollte jetzt den Wert 0.23 haben. mfg mf
Modulo selber implementiert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
mfg mf PS: das hier ^^ scheint nur mit positiven Zahlen zu gehen.
nachkomma = (float) ergebnis / meinteiler; danach steht doch 0,0023 drin. Du meinst wohl * statt teilen oder?
Da kommt 0 raus. Habe es eben mal ausprobiert
Nein. 123 % 100 = 23 23 / 100 = 0.23 mfg mf
Gast
#2132315
Warum teilst du nicht einfach solange durch 10, solange die Zahl ungleich Null ist.
1 | |
2 | |
3 | |
4 | |
5 | |
oder
1 | |
Rush ... schrieb: > Da kommt 0 raus auch auf float gecasted? sonst kommt tatsächlich 0 raus. Da du modulo 100 rechnest, könntest du auch die 23 direkt als Nachkommaanteil benutzen. mfg mf
1 | |
2 | |
3 | |
4 | |
5 | |
Hierbei rennt das Programm aus irgendeinem grund in eine Endlosschleife rein.
Rush ... schrieb: > Hintergrund ist, ich wollte mir eine Fkt. schreiben welche mir die > Stellen einer Zahl zählt wieso erinnert mich diese Frage eigentlich an Schule?
Gast
#2132354
Ich bin von davon ausgegangen, das zahl ein int ist (wegen 123)
Gast
#2132358
Problematisch am Eröffnungsbeitrag ist, dass die eigentliche
Fragestellung ("Anzahl der Stellen einer Zahl ermitteln") und der
vermeintliche Lösungsansatz ("Ziffern hinter dem Komma extrahieren")
vermischt werden. Dadurch sind die Antworten direkt in Richtung
Modulorechnung gegangen, was hier nicht unbedingt eine "sinnvolle"
Lösung darstellt.
"Mathematisch korrekt" ermittelt man die Anzahl der Stellen einer Zahl
nämlich mit der Logarithmusfunktion:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Den algorithmischen Ansatz von DirkB kann man natürlich auch verfolgen, dann muss man sich aber schon mehr Gedanken machen (der Algorithmus von DirkB hat gleich mehrere Fehler).
Rush ... schrieb: > Hintergrund ist, ich wollte mir eine Fkt. schreiben welche mir die > Stellen einer Zahl zählt hmm, das geht auch ganz anders:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
;) mf PS: falls die Zahl negativ sein kann, noch das hier vor sprintf(); rein werfen:
1 | |
PPS: Ich hab meinen Informatik Profs in den Praktikumsaufgaben immer möglichst abstruse Lösungen abgegeben. Kommentar der Profs dazu war meist: "Na, wenigstens sehe ich, dass Sie nicht wie die restlichen 90% des Kurses einfach alles aus meinen Musterlösungen herauskopieren."
herauskopieren? -> abstrus!
Die sache mit dem Log funktioniert auch nicht. Da wird garnichts ausgegeben, nicht einmal eine Null. Ich hänge die paar zeilen einfach mal dran:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Für Mathematikfunktionen musst du die math.h einbinden. mfg mf
Gast
#2132388
Rush ... schrieb: > Die sache mit dem Log funktioniert auch nicht. Da wird garnichts > ausgegeben, nicht einmal eine Null. Dein Code ist, mit Verlaub, auch völlige Grütze. Vielleicht solltest du erstmal ein gutes C-Buch durcharbeiten. Darin sollte dann z.B. erklärt werden, wie man die printf-Funktion korrekt benutzt. Du kannst nicht erwarten, dass wir dir hier deine Hausaufgaben machen. Ein bisschen Eigeninitiative darf wohl schon von dir gefordert werden.
Das erwarte ich auch garnicht! Schließlich mache ich mir meine Gedanken darüber sonst hätte ich auch keinen Ansatz gepostet. Die Sache mit der math.h habe ich schlicht und ergreifend übersehen. Aber auch nach dem Einbinden passiert rein garnichts :-(
Rush ... schrieb: > Aber auch nach dem Einbinden passiert rein garnichts :-( Das wundert mich ehrlich gesagt aber auch nicht wirklich printf("%u" + mod(bla)); Tja. Das funktioniert nun mal nicht so. > Schließlich mache ich mir meine Gedanken darüber Gedanken machen ist guuuuut. Aber ehe du dir Gedanken machst, kommt noch ein Schritt davor. Und der lautet: Erlernen der absoluten Basics. Und dazu kann man sich auch Gedanken machen, nämlich wenn man darüber nachdenkt, was man gerade in seinem C-Buch gelesen hat. Unterschätz das nicht!
Gast
#2133456
Die Fragestellung ist leicht zweideutig, ich dachte zuerst auch, Rush
wollte die einzelnen Stellen extrahieren. Das mache ich immer so
(endlich mal eine Anwendung für den Komma-Operator):
c='0'-1;while(c++,(t-=10000)>=0);putch(c);
c='9'+1;while(c--,(t+= 1000)< 0);putch(c);
c=47;while(c++,(t-= 100)>=0);putch(c);
c=58;while(c--,(t+= 10)< 0);putch(c);
putch(c+48);
Rush will aber die Länge der Zahl haben. Das würde ich mit einer binären
Suche erledigen, weil am schnellsten:
Nehmen wir an, es ist ein u16_t:
if(i>99){if(i>999){if(i>9999)l=5;else l=4;}else l=3;}
else if(i>9)i=2; else i=1;
ungetestet!
Gast
#2133457
falsch: else if(i>9)i=2; else i=1; soll heißen: else if(i>9)l=2; else l=1;
Gast
#2133461
Noch eine Verbesserung: putch(c+48); ---> putch(t+48);
Gast
#2133471
"Wieso erinnert mich diese Frage eigentlich an Schule?" Eine Schule die C lehrt ist doch sehr zu empfehlen!
Gast
#2133475
eProfi schrieb: > ---> putch(t+48); putch(t+'0');
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.