mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zahlen zerlegen


Autor: Heckes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Elektrolurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.