Forum: Mikrocontroller und Digitale Elektronik rechenoperationen mit strings?


von Dieter (Gast)


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

von Dieter (Gast)


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.

von Oliver (Gast)


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

von Dieter (Gast)


Lesenswert?

danke

von Oliver (Gast)


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

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.