Forum: Mikrocontroller und Digitale Elektronik Zahlen zerlegen


von Heckes (Gast)


Lesenswert?

Hallo Microcomputer Freunde

ich bin ein Neueinsteiger und wollte mal fragen ob mir einer sagen kann
wie man Zahlen zerlegt und auf ein LCD Display ausgibt

 Programmablauf:

Zerlegen

Divisor=10000,Stelle=[1]
Wert[Stelle]=Zahl/Divisor
Zahl=Zahl-Divisor*Wert[Stelle]
Divisor=Divisor/10,Stelle=Stelle+1
Stelle=6 JA/Nein


das Programm soll mit C geschrieben werden


Zahl=Zahl-Divisor*Wert[Stelle]//Was macht diese Zeile

Vielen Dankl

von Markus (Gast)


Lesenswert?

Am einfachsten ist es, wenn man sich solche Algorithmen mal
durchspielt.

Angenommen es gitl die Zahl 24000 zu zerlegen.
Zeile1: Divisor ist dann nach der ersten Zeile also 2.
Zeile2: Wert der ersten Stelle wird mit 2 festgelegt.
Zeile3: zahl wird vermindert um 20000
Zeile4: vom Divisor wird eine 0 gestrichen, also neuer divisor ist
1000

würdest Du zeile 3 weglassen, dann würdest Du beim nächsten Durchlauf
wieder 24000 durch 1000 teilen, also würdest als Wertigkeit für die
zweite Stelle nicht 4 sondern 24 bekommen.

von Elektrolurch (Gast)


Lesenswert?

Ich habe das Problem mal wie folgt gelöst:
int wert;
unsigned char einer;
unsigned char zehner;
unsigned char hunderter...

einer = wert % 10;
wert = wert / 10;
zehner = wert % 10;
wert = wert / 10;

usw.

von Matthias (Gast)


Lesenswert?

Hi

ausgabe einer beliebigen Anzahl von Stellen (inkl.
Vornullenunterdrückung) einer long-Zahl auf $AUSGABEDEVICE als
ASCII-Zeichen:

/**
    Zahl dezimal ausgeben
    d:    auszugebende Zahl
    n:    Anzahl der Stellen (von hinten)
    v:    0=ohne Vornullenunterdrückung
*/

void xxx_printd(unsigned long d, unsigned char n, unsigned char v)
{
    unsigned char s[10];
    unsigned char m;

    //Mehr als 10 Stellen hat ein long eh nicht
    if(n>10) n=10;

    //Erstmal Array mit n Stellen erzeugen
    for(m=0;m<n;m++)
    {
        s[m]=(d%10);
        d/=10;
    }
    m=0;

    //Ausgabe
    do{
        n--;
        if((!v)||(m)||(s[n]))
        {
            xxx_putc(s[n]+0x30);
            m=1;
        }
    }while(n);
}

von AVRli (Gast)


Lesenswert?

Hi,

unter einen anderen NAmen wurde dies in diesem Thread auführlich mit
mehreren Lösungsansetzen beschrieben.
Speziel für LCD Betreiber sind auch Routinen bei...

http://www.mikrocontroller.net/forum/read-1-109329.html

Gruß AVRli... der davon auch provitiert hat... :-D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.