multiplikation ohne das Multiplikationszeichen
-
Oder dividiere mit Kehrwert (casten nicht vergessen)...
-
stift und papier habe ich immer in der hand.
ich gehe dies immer durch. es klappt irgendwie nicht
jetzt habe ich z=y gesetzt. ich denke mit der Abbruchbedingung in der for-Schleife stimmt etwas nicht.....
-
hoopee schrieb:
ich denke mit der Abbruchbedingung in der for-Schleife stimmt etwas nicht.....
Nicht nur dort. Es gibt schon viel früher Probleme. Wie willst du ein Produkt ausrechnen, wenn du, bevor du irgendwas berechnest, einen der Faktoren auf 0 setzt?
-
[quote="MFK Wie willst du ein Produkt ausrechnen, wenn du, bevor du irgendwas berechnest, einen der Faktoren auf 0 setzt?[/quote]
das stimmt schon. x=0 ist schon falsch, da ja ein bestimmter Wert für x eingelesen wird. Wenn ich x=y setze klappts doch auch nicht. ich habe einfach den Faden verloren nach einer zeit
-
for(;y>0;--y) { z=z+x; }
-
otze schrieb:
for(;y>0;--y) { z=z+x; }
hmm, danke für deine Hilfe. Also so läuft das Programm, aber ich kann es nicht nachvollziehen.
Das es keine Anfangsbedingung geben muss ist ok. Aber wie prüfe ich y???
-
y wird im zweiten teil von for geprüft,die schleife läuft solange durch, bis y=0 ist, dh y schleifendurchläufe durchgeführt wurden. in jedem schleifendurchlauf wird dann x aufs ergebnis addiert(obwohl man wohl besser z+=x schreiben sollte, habs aber grad irgendwie vergessen zu sagen
),und am ende jedes schleifendurchlaufs wird y um einen verringert(das geschieht durch die anweisung im dritten teil von for)
-
ok, ok, ich habe einfach ein printf für y in die for-Schleife reingesetzt und konnte somit y verfolgen.
Danke für eure hilfen.
Aber interessieren würde mich noch, ob es auch andere Varianten gäbe, wie ich es zum Teil hatte
-
du kannst auch mit shiften multilplizieren, ist m.W. sogar schneller.
ein beispiel (zwar java...egal)
http://www.stud.uni-karlsruhe.de/~usge/info2/ShiftAndAdd.java.html
-
Was wäre an diesem Code falsch??
#include <stdio.h> int main() { int x,y,z,erg; scanf("%d%d", &x, &y); z=0; for (z=0;z<y;z++) { erg+=x; } //ergebnis printf("%d\n", erg); return 0; }
-
Hallo
zum Beispiel das du erg nicht initialisiert hast.
erg = 0; for...
bis bald
akari
-
Genau das ist dein (einziger) Fehler.
An alle die selber knobeln wollen bitte jetzt wegschauen, ich möchte nur wissen wie man meine Lösung verbessern kann (alleine die Bezeichner... na ja):
----------------------- SPOILER ------------------------------
#include <iostream> using namespace std; inline int multiply(int x, int y, int z) { return( z >= 2 ? multiply(x+=y, y, --z) : x); } int main() { int value_one = 0, value_two = 0; cout<<"Bitte zwei Zahlen eingeben die multipliziert werden sollen: "; cin>>value_one>>value_two; cout<<endl<<"Ergebnis: "<<multiply(value_one, value_one, value_two)<<endl; system("pause"); return(0); }
----------------------- SPOILER ENDE ------------------------------
-
rekursionen sollten wenn möglich vermieden werden. sind zwar einfacher und kürzer, aber bei großen zahlen stehste ganzschnell mit vollem stack dar.
(und inline kann man sich bei rekursionen eh in den po schieben
)
-
warum kompliziert wenns auch einfach geht?
double zahl1, zahl2, ergebnis; cin >> zahl1; cin >> zahl2; ergebnis=zahl1*zahl2; cout << ergebnis;
oder habe ich etwas verpasst?
-
Hallo
oder habe ich etwas verpasst?
ja, du hast vergessen, das Thema des Threads zu lesen.
bis bald
akari
-
alles klar, hatte die 'aufgabe' irgendwie falsch verstanden
sorry
-
das wäre eine möglichkeit um die erste zahl mal 2 zu multiplizieren, kann man ja ausbauen:
#include <iostream> using namespace std; long bin1, bin2; bool bit1, bit2, bit3, bit4, bit5, bit6, bit7, bit8, bit9, bit10, bit11, bit12, bit13, bit14, bit15, bit16; bool bit17, bit18, bit19, bit20, bit21, bit22, bit23, bit24, bit25, bit26, bit27, bit28, bit29, bit30, bit31, bit32; bool res1, res2, res3, res4, res5, res6, res7, res8, res9, res10, res11, res12, res13, res14, res15, res16, res17; int main() { cout << "Erste Zahl eingeben: "; cin >> bin1; cout << "Zweite Zahl eingeben: "; cin >> bin2; bit16=bin1&32768; cout << bit16; bit15=bin1&16384; cout << bit15; bit14=bin1&8192; cout << bit14; bit13=bin1&4096; cout << bit13; bit12=bin1&2048; cout << bit12; bit11=bin1&1024; cout << bit11; bit10=bin1&512; cout << bit10; bit9=bin1&256; cout << " " << bit9; bit8=bin1&128; cout << bit8; bit7=bin1&64; cout << bit7; bit6=bin1&32; cout << bit6; bit5=bin1&16; cout << bit5; bit4=bin1&8; cout << bit4; bit3=bin1&4; cout << bit3; bit2=bin1&2; cout << bit2; bit1=bin1&1; cout << bit1; cout << endl; bit32=bin2&32768; cout << bit32; bit31=bin2&16384; cout << bit31; bit30=bin2&8192; cout << bit30; bit29=bin2&4096; cout << bit29; bit28=bin2&2048; cout << bit28; bit27=bin2&1024; cout << bit27; bit26=bin2&512; cout << bit26; bit25=bin2&256; cout << " " << bit25; bit24=bin2&128; cout << bit24; bit23=bin2&64; cout << bit23; bit22=bin2&32; cout << bit22; bit21=bin2&16; cout << bit21; bit20=bin2&8; cout << bit20; bit19=bin2&4; cout << bit19; bit18=bin2&2; cout << bit18; bit17=bin2&1; cout << bit17; res1=bit16+0; res2=bit15+bit32; res3=bit14+bit31; res4=bit13+bit30; res5=bit12+bit29; res6=bit11+bit28; res7=bit10+bit27; res8=bit9+bit26; res9=bit8+bit25; res10=bit7+bit24; res11=bit6+bit23; res12=bit5+bit22; res13=bit4+bit21; res14=bit3+bit20; res15=bit2+bit19; res16=bit1+bit18; res17=0+bit17; cout <<"\n" << bin1 << "*" << bin2 << "=" << endl; cout << res1 << res2 << res3 << res4 << res5 << res6 << res7 << res8 << res9 << res10 << res11 << res12 << res13 << res14 << res15 << res16 << res17 << endl; };
is doch auch etwas...
-
Hallo
da bin ich aber froh, das für Aufgabe noch C erlaubt war, und nicht Assembler beschränkt war...
bis bald
akari