Hilfe: schnelles teilen mit c++
-
Hallo Leute,
ich bin leicht verzweifelt, obwohl die Aufgabe nicht so schwer sein dürfte
Ich muss in c++ folgende Aufgabe programmieren (sie muss noch nicht mal in 'ne Funktion gepackt werden);
**Schnelles Teilen:
Schreiben Sie je eine beschleunigte Version der Funktion / , bei der Sie die Division und Multiplikation mit 2 verwenden.
Hinweis:Pseudocode für die Multiplikation u*v
resultat := 0;
Solange u <>0 mache
falls u ungerade resultat = resultat + v;
u = u / 2; v = v * 2;
fertigFür welche Werte von u und v terminiert dieses Programm (das heißt: kommt das Programm zu einem Enden)?**
Ich habe den pseudocode ausprogrammiert für multiplizieren, hat auch funktioniert, aber für teieln habe ich keine Ahnung.
Vielleicht erbarmt sich jemand und hilft mir wenigstens mit einem Pseudocode weiter, da wäre ich schon sehr dankbar :pGrüße, Kikki
-
Hausaufgaben werden hier nich gemacht.
Funktion /
??? Kenne ich nicht. Ist "teilen" gemeint ?bei der Sie die Division und Multiplikation mit 2 verwenden
Man könnte jetzt raten das man schift operatoren anwenden soll, der aber bei optimierenden Compilern keinen sinn mehr macht ?!
-
Mit / ist teilen gemeint, sorry.
Ich weiss auch leider nicht was shift operatoren sind, ich bin gerade im ersten Semester Wirtschaftsinformatik und das hier "sollte" eigentlich eine einfachere Aufgabe sein, da wir noch nicht so viel können in c++.
-
Hattet ihr schon die Operatoren << und >> ?
-
Wenn du damit das für cout und cin meinst ja, ansonsten nein.
-
Jein, ist zwar der gleiche Operator aber nicht der gleiche Zweck.
Ich verrate es dir:
int i = 4; int j = i << 2: // mit 2 Multiplizieren int k = i >> 2 // durch 2 dividieren
-
Oh, danke für den Hinweis ich wäre da gar nicht drauf gekommen, ich hatte zwar mal gesehen, dass man die Operatoren auch so nutzen kann wusste aber nicht wie.
Auf die Gefahr hin, dass ich nerve, denkst es geht mit * und / gar nicht?
Ich weiss nicht genau ob man es so machen soll wie in der Aufgabe beschrieben, da war auch nicht die Rede von << und >>, ??
Zusätzliches Problem: Die Aufgaben werden bepunktet und dienen als Schein für Klausur, d.h. ich weiss nicht ob der Prof alle Lösungen zulässt.Ansonsten werde ich jetzt mal mit deinem Hinweis weiterarbeiten und die Aufgabe wenigstens so zum Laufen bringen.
Danke nochmals.
-
Das ist die schnellste, ansonsten kannste ja nur 4/2 oder 4*2 schreiben, da kann man nix optimieren.
-
SirLant schrieb:
int i = 4; int j = i << 2: // mit 2 Multiplizieren int k = i >> 2 // durch 2 dividieren
Äh, das würde ich noch mal überprüfen...
Bei mir ist 4*2 = 8 und nicht 16!
-
Ok hab mich geirrt, mit 2 quadriert man.
So gehts:
int i = 4; int j = i << 1; int k = i >> 1;
-
SirLant schrieb:
Ok hab mich geirrt, mit 2 quadriert man.
Mit zwei quadriert man auch nicht, sondern multipliziert mit/dividiert durch 2^2=4.
IMHO
-
Ok zum zweiten mal geirrt, hätt ich bloß nicht die 4 als Beispiel genommen
-
fubar schrieb:
SirLant schrieb:
Ok hab mich geirrt, mit 2 quadriert man.
Mit zwei quadriert man auch nicht, sondern multipliziert mit/dividiert durch 2^2=4.
IMHOHallo nochmal,
ich steig da nicht so ganz durch, sorry!
wie meinst du das "multipliziert mit/dividiert", könnt ihr mir in etwa sagen wie die Aufgabe jetzt aussehen müsste?!Danke nochmals :p