2 array multiplizieren

OP #1187503
Hi Leute

hab da mal wieder  n kleines Problem.


Ich habe 2 Arrays a und b mit folgenden Inhalten:

a[1]=1;
a[2]=2;
a[3]=3;
a[4]=8;

b[1]=0;
b[2]=5;
b[3]=7;
b[4]=0;



also 1238x570=705660;

ich würde so vorgehen

a[4]*b[1]=c[0];
a[3]*b[1]=c[1];
a[2]*b[1]=c[2];
a[1]*b[1]=c[3];


nur hab ich da ein Problem was mache ich mit dem übertrag?

wie würdet ihr vorgehen

schöne Grüße Ulf
Vom Zweck der Übung weiß ich jetzt nicht...

Aber ansonsten: Genau wie auf dem Papier: Aufschreiben und auf die 
nächste Stelle addieren.
1
c[4] = a[4] * b[4];
2
ü = mod(c[4],10);
3
c[4] = c[4] - 10*ü;
4

5
c[3] = a[3] * b[3] + ü;
6
ü = mod(c[3],10);
7
c[3] = c[3] - 10*ü;
8

9
...

So sähe das in Pseudocode aus.
Nicolas S. wrote:
> Vom Zweck der Übung weiß ich jetzt nicht...
>
> Aber ansonsten: Genau wie auf dem Papier: Aufschreiben und auf die
> nächste Stelle addieren.
>
>
1
> c[4] = a[4] * b[4];
2
> ü = mod(c[4],10);
3
> c[4] = c[4] - 10*ü;
4
> 
5
> c[3] = a[3] * b[3] + ü;
6
> ü = mod(c[3],10);
7
> c[3] = c[3] - 10*ü;
8
> 
9
> ...
10
>
>
> So sähe das in Pseudocode aus.

Nicht wirklich, aber fast. Mittels mod (=modulo) kannst du nicht den 
Übertrag bestimmen. Der Übertrag ist ganz einfach die Zahl durch 10 
dividiert. Modulo kommt erst ins Spiel, wenn du den Teil haben willst, 
der nach Abzug des Übertrags übrig bleibt.

@Ulf
Und der Modulo Operator ist in C ganz einfach das %.
    a = 10 % 7;
    b = 10 / 7;

b wird 1, a wird 3.
denn: 7 ist in 10 1 mal enthalten und 3 bleiben Rest.

Frage: Was ist daher

    23 / 10    bzw.
    23 % 10

(das erste ist 2, das zweite ist 3. 'Zufällig' wäre in deiner Anwendung 
der Übertrag bei so einem Zwischenergebnis 2, während die sich zu 
merkende Stelle 3 wäre :-)
OP
Hi ich hab mir da smal so durch den kopf gehen lassen... mir ist 
aufgefallen, das ist alles sehr aufwendig

z.B.


a1=6
a2=7

b1=8
b2=9


d1=a2xb2  | 7*9=63
üd1=d1/10 | 63/10=6
c1=d1%10  | 63%10=3

d2=a1xb2  | 6*9=54
üd2=d2/10 | 54/10=5
c2=d2%10  | 54%10=4


dann müssen noch dir überträge dazuaddiert werden. das macht ne menge 
aufwand wenn man 2 4stellige zahlen hat

=/

gibt es vielleicht eine routine dafür, ich will ja das rad kein 2. mal 
erfinden

danke schon mal
Gast
>gibt es vielleicht eine routine dafür, ich will ja das rad kein 2. mal
>erfinden

Warum hältst du die Zahlen nicht in normalen Variablen? Und machst nur 
zur LCD/UART Ausgabe eine Wandlung nach ASCII...
OP
Hallo ja wäre mir auch lieber... nur ich bekomme die daten vom UART im 
ASCII Format. Das ganze soll eine Leistungsanzeige werden. das 
Laderegler sendet mir die daten in diesem Format. Jetzt muss ich Strom 
und Spannung multipliezieren und um eine LCD Anzeige ausgeben.
Ulf Cramme wrote:
> Hallo ja wäre mir auch lieber... nur ich bekomme die daten vom UART im
> ASCII Format.

Ja und?

Die kann man doch auch nach einer richtigen Zahl wandeln!

Die Funktion atoi ist schon lange erfunden. Wie wärs mal mit etwas 
C-Grundlagenstudium.

(Ich dachte bisher, das ganze wäre eine Hausübung! Kein Mensch tut sich 
heute noch BCD Arithmetik an, wenns nicht unbedingt sein muss weil er 
praktisch 'unendlich große' Zahlen verarbeiten können muss.)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.