C++ :: Aufgabe #176

2 Lösungen Lösungen öffentlich

Wurzel ziehen mit Intervallschachtelung

Anfänger - C++ von Felix - 11.07.2017 um 21:30 Uhr
Schreibe eine Methode die aus einer Zahl die Wurzel zieht, benutze dafür die Intervallschachtelung.

Lösungen:

vote_ok
von Meteo (60 Punkte) - 20.01.2018 um 14:31 Uhr
Quellcode ausblenden C-Code
#include <iostream>
using namespace std;

int main()
{
	double OG,UG,z,x;
cout << "Geben Sie eine Zahl ein:\n ";
cin >> z;

	UG=0;  
	OG=z;

while(OG-UG>0.01)
{
x=(UG+OG)/2;
	if( x*x>z)
		{OG=x;}
	else if (x*x<z)
		{UG=x;}
}

cout <<" Die Wurzel von "<< z << " beträgt: " << x;

}

vote_ok
von Alhazen (220 Punkte) - 20.04.2018 um 12:47 Uhr
Quellcode ausblenden Java-Code
public class IntervallWurzel {

	private double raiseValue;	// Soll die aktuelle Dezimalstelle des Vergleichswerts erhöhen.
	private int decimalPlace;	// Die aktuell zu erhöhende Dezimalstelle.
	
	
	public double squareroot(double value){
		double lowerLimit = 0.0;
		double searchValue = lowerLimit;
		
		// Die Schleife läuft so lange wie das Quadrat des Sucher-Values ungleich
		// des Wertes ist, von dem die Wurzel gefunden werden soll.
		// Im else-Zweig gibt es noch ein break welches den Fall abfängt, in dem die
		// kleinstmögliche Auflösung für das Such-Value erreicht ist. In dem Fall würde
		// sich das Such-Value nicht mehr ändern und die Suche kann abgebrochen werden.
		while((searchValue * searchValue) != value){
			searchValue += getRaiseValue();			
			if(value < (searchValue * searchValue)){
				// Das Quadrat des Such-Values hat den Betrag des Wertes
				// für den die Wurzel gefunden werden soll überschritten.
				// Also ist eine neue unter Grenze gefunden ab der das Such-Value ...
				searchValue = lowerLimit;
				// ... die nächst kleineren Dezimalstelle untersuchen kann.
				setRaiseValue(determineRaiseValue());
			}else{
				// Das Quadrat des Such-Values hat den Betrag des Wertes
				// für den die Wurzel gefunden werden soll noch nicht überschritten, ...
				if(lowerLimit == searchValue)
					break; // Such Value hat kleinste Auflösung erreich
				// ... so daß eine neue potenzielle untere Grenze gemerkt werden kann.
				lowerLimit = searchValue;
			}
		}
		// Werte zurücksetzen, damit eine weitere Suche erfolgen kann.
		// Das Objekt "lebt" ja noch.
		setDecimalPlace(0);
		setRaiseValue(1.0);
		return searchValue;
	}
	
	private double determineRaiseValue(){
		// Der Erhöhungswert beginnt mit eins und wird jedesmal um eine Dezmalstelle kleiner.
		double tempRaiseValue = 1.0;
		// Dabei gibt @decimalPlace die aktuelle Dezimalstelle an.
		for(int runner = 0; runner < getDecimalPlace(); runner++){
			tempRaiseValue /= 10.0;
		}		
		setDecimalPlace(getDecimalPlace() + 1); // Die nächste Dezimalstelle merken.
		return tempRaiseValue;		
	}
	
	public IntervallWurzel(){
		setDecimalPlace(0);
		setRaiseValue(determineRaiseValue());
	}	
	
	private void setRaiseValue(double raiseValue) {
		this.raiseValue = raiseValue;
	}

	private double getRaiseValue() {
		return raiseValue;
	}

	private int getDecimalPlace() {
		return decimalPlace;
	}

	private void setDecimalPlace(int decimalPlace) {
		this.decimalPlace = decimalPlace;
	}	
}
1813599

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.