PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : multiplikation ohne das Multiplikationszeichen



hoopee
28.11.2004, 15:09
Hallo,
möchte ein Programm erstellen, wo zwei Zahlen multipliziert werden. Der Punkt ist der, dass dabei das *-Zeichen nicht vorhanden sein darf.
Habe folgenden Programmcode und weiß einfach nicht weiter:


#include <stdio.h>
int main()
{
int x, y, z;

printf("Zwei positive Zahlen multiplizieren\n");
scanf ("%d %d", &x, &y);

z=0;
for(x=0 ; x<=y; x=x+y)
{
z=z+x;
}
printf("Multiplikation ergibt %d\n", z);
printf("x= %d\n", x);
printf("y= %d\n", y);



return 0;
}



Wäre dankbar auf Tipps.

cht
28.11.2004, 15:40
for (x=0 //x wird 0, der eine Faktor geht verloren!
Kann also nicht funktionieren. Ich würde das hier vorschlagen:


int x,y,z,ergebnis;
//...
z=0;
for (z=0;z<y,z++) {
ergebnis+=x;
}
//ergebnis ausgeben

mfG

cht

PicNick
28.11.2004, 17:51
Hi, ich deklariere mich hiermit als vollkommenen Dödi:
Was ist schlimmes am "*" ??? :-s mfg

thille
28.11.2004, 19:22
Vielleicht hat der Compiler eine Allergie.

Gruß

Torsten

PicNick
28.11.2004, 19:30
Bei dem, was Computer heute sonst alles können, glaub ich dir das auch.
Naja, vielleicht gibts beim Conrad auch Cyber-Anti-Histamine und ich weiß das nur noch nicht. mfg

exile
01.12.2004, 12:05
Wie waers mit inline assembler und mul??

mfg
martin

Thomson
01.12.2004, 12:11
Was ist schlimmes am "*" ??? :-s mfg
Das "schlimme" ist, daß die Multiplikation in der Digitaltechnik immer auf eine Addition zurückgeführt werden muß.
Das merkt man spätestens dann, wenn man mal versucht, zwei Binärzahlen zu multiplizieren. 8-[

PicNick
01.12.2004, 12:17
@thomson
Na sowas aber auch, was sie nicht meinen *staunen*
aber doch nicht auf SO eine Addition !
Wenn der Compiler oder der CHip die Rechnung 128 * 255 auf 128 oder gar 255 Additionen auftröselt, dreh ich ihm den Hals um mfg ](*,)

Thomson
01.12.2004, 12:24
>Wenn der Compiler oder der CHip die Rechnung 128 * 255 auf 128 oder gar 255 Additionen auftröselt, dreh ich ihm den Hals um mfg

http://www.click-smilies.de/sammlung0304/grinser/grinning-smiley-019.gif

bhm
01.12.2004, 12:39
wie soll das Multiplizieren via Addieren denn mit Floatzahlen gehen ?
ciao ... bernd

hmm, man könnte es gaaanz kompliziert machen:
Rechnen, wie auf einen Stück Papier, d.h. Zahl für Zahl unter Berücksichtigung der Stelle multiplizieren, und das letztere Multiplizieren durch das Auslesen aus einer Lookuptabelle für das kleine 1x1 ersetzen ;-)

PicNick
01.12.2004, 12:50
@bhm: Na siehste, jetzt kommen wir der Sache schon näher. O:)

Thomson
01.12.2004, 13:15
>wie soll das Multiplizieren via Addieren denn mit Floatzahlen gehen ?
Da kommen dann Mantissen und Exponenten, Normalisierungen und Exponentenangleichungen ins Spiel...

Nicht umsonst wird die Leistungsfähigkeit eines Rechners in Floating Point Operations / sec. und nicht in Integer Operations / sec. gemessen. ;)

PicNick
01.12.2004, 13:19
An alle: wir sind schon noch beim rumalbern, gelle ? *unsicherdreinschau* mfg

bhm
01.12.2004, 23:01
kann schon sein ;-)
aber das mit der lookuptable um das * zu vermeiden ist doch 'ne schicke Idee. Zugegeben, die könnte _etwas_ größer werden ;-)

PicNick
02.12.2004, 07:37
Is war. Der Mensch lernt das 1x1 ja auch nur auswendig, und auswendig is ja irgendwie auch eine Tabelle, versteh' nicht, daß sich das nicht durchsetzt, Speicher kost' doch nix mehr.
Jetzt weiß ich's: man könnte PROMS machen dafür und extra verkaufen, (als feature oder "Robby's multiplying option"). Prom reicht, das 1x1 ändert sich doch eh relativ selten O:)
Hingegen das kleine 1x1 in binär könnt man aber schon machen, ist ja doch etwas kürzer.
*geniale-idee* Ein Projekt: Ein Abakus (rechenkugeln) mit Schrittmotoren und Greifer =D> mfg Robert

hoopee
02.12.2004, 12:22
Hi an alle:

danke für eure Beiträge, aber ne diskussion wollte ich nicht auslösen, wobei das Problem schon längst aus der Welt geschaffen ist O:)

nestler
02.12.2004, 13:24
auch wenn das problem nicht mehr existiert, muss ich doch noch meinen
senf dazu geben.

bei der "normalen" multiplikation entstehen kosten von O(n²). n ist
dabei die länge der zahl in binärdarstellung. es sind also rechen-
operationen in der größenordnung n² nötig.

verwendet man jedoch die sogennannte fft (fast fourier transformation),
sind die kosten nur noch O(log(n) * n), also erheblich geringer.

btw.: fließkommazahlen benötigen keine andere berechung, da die
beiden mantissen einfach wie integer multipliziert werden und danach
einfach nur die exponenten addiert werden.

<klugscheiss ende>