www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik rechenoperationen mit strings?


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich will wiedermal was einfaches wissen.

ich habe zwei strings, in denen stehen beliebige zahlen im ASCII format

also zum beispiel:

string1[0]='2'
string1[1]='3'
string1[2]='4'

string2[0]='1'
string2[1]='5'
string2[2]='5'

ich möcht damit ein bisschen rum rechnen (subtraktion und division), und 
dann einen ergebnis string haben, mit ASCII zeichen drin.

also zum beispiel die beiden subtrahiert (ich möchte jeweils immer die 
kleiner zahl von der größeren subtrahieren, ich brauche nur positive 
werte)

ergebnis[0]='0'
ergebnis[1]='7'
ergebnis[2]='9'

und dann zum beispiel durch 2 (was mit den zahlen nach dem komma 
passiert ist mir egal)

könnte dann entweder

ergebnis[0]='0'
ergebnis[1]='3'
ergebnis[2]='9'

oder
ergebnis[0]='0'
ergebnis[1]='7'
ergebnis[2]='8'

rauskommen.

nun, ich hab schon den ganzen tag rumprobiert, komm aber auf kein grünen 
zweig.

ich wäre sehr dankbar für jede hilfe, und für jeden tip.

MfG Dieter

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uups, soll natürlich

ergebnis[0]='0'
ergebnis[1]='3'
ergebnis[2]='9'

oder
ergebnis[0]='0'
ergebnis[1]='3'
ergebnis[2]='8'

sein.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieter,
zunächst einmal solltest Du es Dir vereinfachen und nicht mit 
ASCII-Zeichen rechnen.

Einfacher Pseudocode. Rechnen wie wir es in der Schule gelernt haben.

//Zahl ist 432
string1[0]=2
string1[1]=3
string1[2]=4
// Zahl ist 551
string2[0]=1
string2[1]=5
string2[2]=5

Beispiel sehr einfache Addition:
uebertrag = 0;
for (i=0; i <3; i++)
{
 ergebnis[i] = (string1[i]+ string2[i]+uebertrag)%10;
 uebertrag = (string1[i]+ string2[i]+uebertrag)/10;
}
ergebnis[4] = uebertrag;


Ausgabe:
for (i=4; i >=0; i--)
{
 print(ergebnis[i]+'0');
}

Grüße
Oliver

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieter,
doppelte Kapazität erhälst Du, wenn Du die Zahlen jeweils in einem 
Nibble abspeicherst(gepackte BCD-Zahlen).
Beispiel:

//Zahl ist 1234
string1[0] = 4; //low nibble
string1[0] |= 3<<4; // high nibble
string1[1] = 2;//low nibble
string1[1] |= 1<<4;// high nibble

Mit 2 Byte kann man also schon 4 Zahlen kodieren.

Auf diese Art habe ich mal vor Jahren die Fakultät von 2000 berechnet. 
Die ganze Zahl paßte gerade noch auf ein DIN A4 Blatt.

Grüße
Oliver

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.