Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Aufgabe, Russische Bauernmultiplikation JAVA (http://www.informatikerboard.de/board/thread.php?threadid=2809)


Geschrieben von Someone am 24.01.2016 um 17:11:

  Aufgabe, Russische Bauernmultiplikation JAVA

Hallo zusammen,
bin neu hier und hoffe auf etwas Hilfestellung bei meiner Aufgabe.

Zitat:
Aufgabe 1 25 Punkte
Die Russische Bauernmultiplikation zweier ganzer Zahlen a und b funktioniert wie folgt.

Initialisiere
Setze p = 0.
Setze v auf wahr, falls das Vorzeichen des Produkts von a und b negativ ist, sonst
auf falsch.

Iteriere
Solange b ungleich 0 ist
Falls b ungerade ist, erh ohe p um a
Verdopple a.
Halbiere b ganzzahlig.

Finalisiere
Falls n otig, abh angig von v und p, ver andere das Vorzeichen von p.
Liefere p als Ergebnis.

Schreiben Sie eine Java-Applikation, die zwei ganze Zahlen als Kommandozeilenargumente
entgegen nimmt, mit Russischer Bauernmultiplikation multipliziert und das Ergebnis
ausgibt, ohne dabei die Multiplikation (*) von Java zu benutzen.
Gliedern Sie den Quelltext in die Abschnitte Initialisiere, Iteriere, Finalisiere und Kennzeichnen
Sie die Abschnitte durch Kommentare.
(25 Punkte)


Ich habe soweit das hier hinbekommen, aber irgendwas fehlt....eclipse sagt, dass der booleanwert v nicht genutzt wird, was ich auch sehe. Doch in der Aufgabestellung steht auch nicht genaueres. Ehrlich gesagt, weiß ich auch nicht was der boolean-Typ hier macht.

Hoffe ihr könnt hier mir weiterhelfen smile

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
public class BM2 {
	
	public static void main(String[] args) {
		
		int a = 15;            //feste Konstante ansonsten Integer.parseInt(args[0]);
		int b = 10;            //feste Konstante ansonsten Integer.parseInt(args[1]);
		int p = 0;
		
		boolean v = false;
				if (a < 0 ^ b < 0)
					v = true;
				
		while(b != 0) {
			if (b % 2 != 0) {
				p += a;
				a += a;
				b /= 2;
			}	
		}
			if (v = true ^ p < 0) {
				p = -p;
		
				System.out.println(p);
		}
	}

}



Geschrieben von eulerscheZahl am 24.01.2016 um 17:22:

 

Siehe Kommentare
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public static void main(String[] args) {

	int a = 15;
	int b = 10;
	int p = 0;

	boolean v = false;
	if (a < 0 ^ b < 0)
		v = true;

	while (b != 0) {
		if (b % 2 != 0) {
			p += a;
		}
		a += a; //aus if herausgezogen
		b /= 2; //aus if herausgezogen, sonst gibt es eine Endlosschleife
	}
	if (v == true ^ p < 0) { //= zu ==, es soll ja keine Zuweisung werden
		p = -p;

	}
	System.out.println(p); //aus if herausgezogen, wir wollen das Ergebnis immer sehen
}



Geschrieben von Someone am 24.01.2016 um 17:36:

 

Oh wow das ging schnell... vielen Dank!


Forensoftware: Burning Board, entwickelt von WoltLab GmbH