Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie, Division und Modulooperator nur mit Addition und Subtraktion in Java?

Frage Entwicklung Java

Mitglied: Shamaz

Shamaz (Level 1) - Jetzt verbinden

20.01.2010 um 21:01 Uhr, 11294 Aufrufe, 3 Kommentare

Die gesamte Aufgabenstellung lautet wie folgt:

Es soll die ganzzahlige Division und der Modulooperator nur mit Hilfe von
Addition und Subtraktion realisiert werden. Schreiben Sie dazu jeweils eine iterative und eine rekursive
Methode (DivIter, DivRek, ModIter und ModRek).

Was ich bis jetzt schon habe sind die Itterativen Lösungen zur Division und Mudolo. Diese sehen bei mir wie folgt aus:

Itterative Division mit + und * ------------------------------

static double DivIter (int x, int y){

int rest = x;
double erg = 0;
int nachkommaerg = 0;
int counter = 0;

while (rest >= y){
rest = rest - y;
erg = erg +1;
}
if (rest != 0){
while ((rest != 0)&(counter <= 15)){
counter++;
rest = rest *10;
while (rest >= y){
rest = rest - y;
nachkommaerg = nachkommaerg + 1;
}
erg = erg + nachkommaerg * Math.pow(10, counter * -1);//Damit werden die Nachkommastellen immer hintendran gehangen, bis Max 15, weil dann double zu Ende ist
nachkommaerg = 0;
}
}
return erg;
}

Itterative Mudolooperation ------------------------------

static int ModIter (int a, int b){
int rest = a;
int erg = 0;
if (a<b){
return a;
}else{
while (rest >= b){
rest = rest - b;
erg = erg +1;
}
return rest;
}
}

Meine Frage ist nun folgende:

Wie sieht die jeweilige rekursive Lösung aus?
Oder könnt ihr mir ein paar Hilfen geben wie man auf die Lösung kommt?

Hierzu noch:
Ich weiß, dass man das Problem auf ein kleineres reduziert und das dann wieder versucht mit der Rekusion zu lösen. z.B. Fibonaccizahl von 5 = Fibonaccizahl von 4 + Fibonaccizahl von 3.

freu mich auf viele gute Antworten

Mfg Shamaz
Mitglied: filippg
21.01.2010 um 00:05 Uhr
Hallo,

grob:

int div(divid, divis){
if(divid > divis)
return 1 + div(divid - divis, divis)
else
return 0
}

Also: wenn der der Divisor größer als der Divident ist (z.B. 4 : 5), dann 0 zurückgeben (4 ist nicht durch 5 teilbar). Wenn der Divident noch einmal reinpasst (z.B. 9 : 5), dann diese 1 "merken", und den Rest nochmal probieren zu teilen (und das Ergebnis davon zu dieser 1 addieren). Ich denke, daraus solltest du auch den Modulo-Operator herleiten können...

Gruß

Filipp
Bitte warten ..
Mitglied: Shamaz
21.01.2010 um 19:54 Uhr
Also dein Vorschlag hat mich meinem Ziel schon einmal sehr nahe gebracht. Mein Quelltext sieht nun wie folgt für die rekursive Division aus:

static double DivRek(double a, double b){

String s = new String ();

if(a == 0){
return 0;
}else{
if (a >= b){
s = s + (1 + DivRek(a - b, b));
return Double.valueOf(s).doubleValue();
}else{
a = a * 10;
return (DivRek (a,b))* Math.pow(10, -1);
}
}
}

den kleinen Trick mit dem String mache ich damit auch die Nachkommastellen immer schön hinten drann gehangen werden. Also, so wie man es auch mit Stift und Papier macht. Wie ich jetzt nochmal auf das math.pow Zeug gekommen bin,weiß ich gearde mal selber nicht mehr. aber es geht.

Jetzt gibt es leider nur noch das Problem mit dem Beenden. Wenn ich für a=1 und b=3 einsetzte, dann ist dies ja ein unendlicher Bruch. Also 0.3333333333333333333... das erzeugt dann auch dierekt nach 16 Durchläufen (das was eine double Variable aufnehmen kann) einen "java.lang.StackOverflowError"
Bei meiner itterativen Lösung verwende ich einen Zähler, der dann halt nach dem 15ten Mal die Sache zum Abbruch bringt. Bei meiner rekursiven Methode kann ich solch einen aber nicht verwenden, weil ich als Rückgabewert den Rest liefere.
Mein Lösungsgedanke ich jetzt, dass ich den "java.lang.StackOverflowError" mit "Try, catch " abfange und dann die Zahl ausgeben lasse.
Leider habe ich mit Fehlersituationen noch nicht befasst und weiß nicht wie ich das bewekstelligen soll.
Deshalb frage ich jetzt nach einer Möglichkeit das zu beheben, wenn überhaupt geht?
Bitte warten ..
Mitglied: Shamaz
11.02.2010 um 14:49 Uhr
Soo, da niemand weiter auf diesen Beitrag hin antwortet und mein Abgabetermien schon lange vorbei ist, poste ich hier mal die Lösung die ich abgegeben habe.
An dieser stelle sei gesagt, das dieser Quelltext von jedem verwendet werden kann wer will. Was ihr, du damit macht ist mir egal... außer natürlich es stellt sich heraus, das man damit ne Unmenge an Geld machen kann, dann will ich auch was davon .

So da isser endlich:

 
	static double DivIter (int x, int y){ 
		 
		int rest = x; 
		double erg = 0; 
		int nachkommaerg = 0; 
		int counter = 0; 
		 
		while (rest >= y){ 
			rest -= y;//rest = rest -b, steht da eigentlich 
			erg = erg +1; 
		if (rest != 0){ 
			while ((rest != 0)&(counter <= 15)){ 
				counter++;  
				rest = rest *10; 
				while (rest >= y){ 
					rest -= y; 
					nachkommaerg = nachkommaerg + 1; 
			erg = erg + nachkommaerg * Math.pow(10, counter * -1); 
			nachkommaerg = 0; 
		return erg; 
	 
	static double DivRek(double a, double b, int counter){ 
		 
		String s = new String (); 
		--counter; 
		 
		if (counter == 0){return 0; 
		}else { 
			if(a == 0){ 
				return 0; 
			}else{ 
				if (a >= b){ 
					s = s + (1 + DivRek(a - b, b, counter)); 
					return Double.valueOf(s).doubleValue(); 
				}else{	 
					a = a * 10; 
				return (DivRek (a,b,counter))* Math.pow(10, -1); 
	 
	static int ModRek (int a, int b){ 
		if (a>=b) 
			return ModRek (a-b,b); 
		else 
			return a; 
	 
	static int ModIter (int a, int b){ 
		int rest = a; 
		int erg = 0; 
		if (a<b){ 
			return a; 
		}else{ 
			while (rest >= b){ 
				rest -= b; 
				erg += 1;  
			return rest; 
Wenn jemand natürlich noch weiter mit mir über ne richtige Lösung diskutieren will, der kann das gerne tun. Denn zur Zeit ist es so, dass je nachdem welche Zahl in die Rekursive Division übergeben wird, kann es sein, z.B. bei 1/3, dass eine NullPointerExeption geschmissen wird, weil der Algorythmus nie zum Ende kommt.

Mfg Shamaz
Bitte warten ..
Ähnliche Inhalte
JavaScript
Problem Bei JavaSkript Rechnung Division
Frage von HattoriHanzoJavaScript5 Kommentare

Wo Liegt hier der Fehler? bis Zeile 20 hat noch alles funktioniert.

Java
Wie bekomme ich bei Java diese Zertifkatsmeldung weg. Ein Abacus Login verwendet Java , und dies bringt eine Java Warnmeldung
Frage von 116480Java10 Kommentare

Hallo, scheinbar nur , wenn man aus unserem Netz auf ein Abacus System zugreift, das Java fürs Login verwendet, ...

Java
Was ist ein "Href" im Java ?
gelöst Frage von rainergugusJava31 Kommentare

Hallo zusammen, wir haben eine Applikation ; Die hat den Aufruf JNLP . Nun heisst es "Java neu eine ...

Java
Java Installationsoptionen
gelöst Frage von joergJava3 Kommentare

Hallo zusammen, kann ich beim automatisierten Ausrollen von Java-Paketen ein Flag mit setzen, womit ich gleich die Sitelists bearbeiten ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 22 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...