Moinsen, Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu unterdrücken oder raus zu rechnen?
1 | |
2 | |
3 | |
4 | |
5 | |
Sieht auf dem Display ein wenig "doof" aus.
|
Anzeige
|
Führende Nullen unterdrücken wenn == 0Moinsen, Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu unterdrücken oder raus zu rechnen?
Sieht auf dem Display ein wenig "doof" aus. Schau Dir mal itoa oder sprintf an.
@Jan H. (janiiix3) >Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu >unterdrücken oder raus zu rechnen? Sicher. > buffer[4] = (((uart.byteRx / 10000) % 10) + '0'); > buffer[5] = (((uart.byteRx / 1000) % 10) + '0'); > buffer[6] = (((uart.byteRx / 100) % 10) + '0'); > buffer[7] = (((uart.byteRx / 10) % 10) + '0'); > buffer[8] = ((uart.byteRx % 10) + '0'); >Sieht auf dem Display ein wenig "doof" aus. Nicht nur im Display, auch im Quelltext. Schon mal was von Schleifen gehört? https://www.mikrocontroller.net/articles/Festkommaarithmetik#Ergebnis_ausgeben
Gast
#5301139
Jan H. schrieb: > buffer[4] = (((uart.byteRx / 10000) % 10) + '0'); > buffer[5] = (((uart.byteRx / 1000) % 10) + '0'); > buffer[6] = (((uart.byteRx / 100) % 10) + '0'); > buffer[7] = (((uart.byteRx / 10) % 10) + '0'); > buffer[8] = ((uart.byteRx % 10) + '0'); das kann nur das Ergebnis folgender learning/work-chain sein: Zuerst YouTube Filmchen: Film 1: Unboxing Büchersendung " Programmieren lernen, leicht gemacht " Film 2: was ein guter Programmierer braucht ist: Windows + Netbeans + Eclipse Film 3: Hello World Film 4: Strings & Arrays Film 5: warum Linux besser ist Film 6: ich muss nix lernen, es gibt für alle probs ne eigene Distribution Step 7: grübel, grübel Step 8: ich frage mal im Forum nach
Gast
#5301141
Jan H. schrieb: > byteRx Interessant. Wie schaffst du es eigentlich in ein "Byte"! eine 5 stellige Dezimalzahl zu codieren? So viel zum Thema sinnvolle Variablennamen benutzen ;) Jan H. schrieb: > Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu > unterdrücken oder raus zu rechnen? Wenn du den Puffer per Schleife von hinten nach vorne füllst, dann kommst du mit einer Bedingung aus. Und wenn du dann auch noch die div/ldiv Funktionen verwendest, dann musst du auch nur 1x dividieren. A. K. schrieb: > div/ldiv Funktionen verwendest, dann musst du auch nur 1x dividieren. Sorry. Ich verstehe nicht. Wie meinst du das? Jan H. schrieb: > A. K. schrieb: >> div/ldiv Funktionen verwendest, dann musst du auch nur 1x dividieren. > > Sorry. Ich verstehe nicht. Wie meinst du das? Diese Lib-Funktion liefert in einem Aufwasch Quotient und Rest. Also sinngemäss:
@Jan H. (janiiix3) >> div/ldiv Funktionen verwendest, dann musst du auch nur 1x dividieren. >Sorry. Ich verstehe nicht. Wie meinst du das? Es gib im avr gcc eine Funktion, welche eine Ganzzahldivision berechnet und sowohl das Ergebnis als auch den Rest zurückliefert. Das spart die doppelte Berechnung der Division und Modulo-Operation. Ist aber nebensächlich, wenn man nicht 1 Million Zahlen / Sekunde umrechnen will. Falk B. schrieb: > Es gib im avr gcc eine Funktion, Die gibts nicht nur im GCC, sondern im Standard. Und sie spart u.U. nicht nur Zeit sondern auch Platz. A. K. schrieb: > do { > div_t qr = div(n, 10); > buf[--i] = '0' + qr.rem; > n = qr.quot; > } while (n); Stehe gerade ein bisschen auf dem Schlauch "Mathe".. Könntest du mir evtl. noch ein Beispiel liefern? Jan H. schrieb: > Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu > unterdrücken oder raus zu rechnen? Die Frage ist, ob du da Leerzeichen willst oder die Zahl nach links rücken soll. Der Andere schrieb: > Interessant. Wie schaffst du es eigentlich in ein "Byte"! eine 5 > stellige Dezimalzahl zu codieren? Würde mich auch wundern. Ich hatte in diesem Forum doch mal eine schnelle ltoa Funktion mit Unterdrückung führender Nullen gepostet...
Beitrag #5301237 wurde von einem Moderator gelöscht.
Jan H. schrieb: > Stehe gerade ein bisschen auf dem Schlauch "Mathe".. Könntest du mir > evtl. noch ein Beispiel liefern? https://www.gut-erklaert.de/mathematik/dividieren-teilen-klasse-2.html
Gast
#5301242
Jan H. schrieb: > Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu > unterdrücken oder raus zu rechnen? Eine Sprintf Anweisung kann hier helfen... siehe auch.... http://www.cplusplus.com/reference/cstdio/printf/ Michael B. schrieb: > Jan H. schrieb: >> Ist es irgendwie möglich ohne mehrere "if´s" die führenden nullen zu >> unterdrücken oder raus zu rechnen? > > Die Frage ist, ob du da Leerzeichen willst oder die Zahl nach links > rücken soll. Das würde doch unnötig groß werden das Programm..
Gast
#5301269
Jan H. schrieb: > Das würde doch unnötig groß werden das Programm.. Diese Gegenfrage verstehe ich jetzt überhapt nicht. Es gibt keinen Rabatt für ungenutzen Flash Speicher. Wohl aber (berechtigte) Kritik wenn im Display dann Zahlen hin und her springen oder Ziffern gleicher Wertigkeit bei mehrzeiligen Ausgaben nicht untereinander stehen. Es ist dein Projekt, wir wissen nicht wie deine Anzeige aussehen soll. Michael hat nur die richtige und wichtige Anmerkung gemacht ob die führenden Nullen einfach wegfallen, oder durch Blanks ersetzt werden sollen. Der Andere schrieb: > Es ist dein Projekt, wir wissen nicht wie deine Anzeige aussehen soll. > Michael hat nur die richtige und wichtige Anmerkung gemacht ob die > führenden Nullen einfach wegfallen, oder durch Blanks ersetzt werden > sollen Ist ja richtig. Wie würdet ihr das denn lösen, wenn ihr vor diesem Problem stehen solltet.. Leerzeichen oder die Zahlen hin und her kopieren bzw. verschieben? A. K. schrieb: > Jan H. schrieb: >> A. K. schrieb: >>> div/ldiv Funktionen verwendest, dann musst du auch nur 1x dividieren. >> >> Sorry. Ich verstehe nicht. Wie meinst du das? > > Diese Lib-Funktion liefert in einem Aufwasch Quotient und Rest. Also > sinngemäss: >
Macht ein optimierender COmpiler ohnehin. Solche Verrenkungen sind nicht mehr zeitgemäß. Jan H. schrieb: > Wie würdet ihr das denn lösen, wenn ihr vor diesem > Problem stehen solltet.. Leerzeichen oder die Zahlen hin und her > kopieren bzw. verschieben? Die Anwort steht doch bereits im 1. Post. itoa macht genau das. itoa erzeugt doch einen sehr großen Overhead oder Jan H. schrieb: > itoa erzeugt doch einen sehr großen Overhead oder Ungefähr 1/100 des ebenfalls vorgeschlagenen sprintf.
Gast
#5301373
Also beim Management bringt es nichts, wenn man führende Nullen durch Leerzeichen ersetzt ;-)
Gast
#5301385
welcher C Standard ist jetzt nochmal itoa ?
Gast
#5301389
Vril schrieb: > welcher C Standard ist jetzt nochmal itoa ? Wie sagt Wikipedia so schön: "The itoa (integer to ASCII) function is a widespread non-standard extension to the standard C programming language. It cannot be portably used, as it is not defined in any of the C language standards; however, compilers often provide it through the header <stdlib.h> while in non-conforming mode, because it is a logical counterpart to the standard library function atoi." Da man bei der Frage aber davon ausgehen kann daß der TO keine universelle Bibliothek schreibt die auf 5 Rechnersystemen portabel und mit 20 verschiedenen Compilern compilierbat sein muss ist der Hinweis auf itoa() so es existiert wohl eher nicht das Problem.
Gast
#5301394
StefG schrieb: > Leerzeichen Du meinst Leerstellen. Oder Lehrstellen?
Gast
#5301405
Anbei der Quellcode eines Compilers hier. der TO kann ja das ganze in MyItoa umbenennen, Radix durch 10 ersetzen und hat dann was er sucht.
Jan H. schrieb: > ohne mehrere "if´s" Uups... selbst ohne radix bleiben noch 4ifs... OK, sign braucht er nicht, ... bleiben 2 ifs. Mmh, wenn ifs bei ihm so teuer sind, vielleicht ?: stattdessen? Und dann noch Stackspeicher und memcpy .....
Beitrag #5301439 wurde von einem Moderator gelöscht.
Gast
#5301705
Jaja das kann jeder taschenrechner unsere politiker- und unsere wirtschaft aber nicht Jan H. schrieb: > itoa erzeugt doch einen sehr großen Overhead oder Sagt wer? Und für welche Toolchain / Architektur. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|