Ich mache gerade eine Hausaufgabe, die dies erfordert:
Im Folgenden finden Sie den Code, den ich geschrieben habe, um die Quadratwurzel einer Zahl mit der Newton-Raphson-Methode zu berechnen. Fügen Sie ihn in Ihr Projekt ein. Ihre Aufgabe in diesem Projekt wird es sein, ein Testprogramm zu schreiben, das den von mir geschriebenen Code testet. Lesen Sie den Prolog der Methode sorgfältig durch, um zu verstehen, wie die Funktion funktionieren soll. Ihr Test-Kabelbaum soll eine Schleife enthalten, die:
- Fordert den Benutzer auf, einen Testwert einzugeben.
- Ruft die Eingaben des Benutzers ab. Wenn eine Null eingegeben wird, druckt Ihr Programm einen Bericht aus und beendet sich.
- Ruft die in diesem Projekt bereitgestellte Methode Sqrt auf und speichert den Rückgabewert in einer Double-Variablen.
- Ruft die Methode Sqrt auf, die in die Klasse Math integriert ist, und speichert den Rückgabewert in einer zweiten Double-Variablen.
- Vergleichen Sie diese beiden Werte, um festzustellen, ob sie gleich sind.
- Wenn der Benutzer angibt, dass er fertig ist (indem er eine Null eingibt), wird ein Bericht angezeigt, der folgende Informationen enthält: * Wie viele Testfälle Sie ausgeführt haben [ ] * Wie viele sind fehlgeschlagen
Ich habe das alles also ohne Probleme in etwa 15 Minuten geschafft, aber für die Extrapunkte sollen wir herausfinden, was mit seiner Sqrt-Methode falsch ist und sie so korrigieren, dass ihr Rückgabewert dem Math.Sqrt-Rückgabewert des .net Frameworks entspricht. Ich kann das Problem in seiner Methode nicht finden, und ich möchte es finden, also frage ich mich, ob mir jemand einen Hinweis geben kann, was das Problem mit seiner Sqrt-Methode ist? Danke!
Hier ist mein vollständiger Code:
// declare variables
double userInput = 0.0;
double debrySqrtReturnValue = 0.0;
double dotNetSqrtReturnValue = 0.0;
int testCasesExecuted = 0;
int testsPassed = 0;
int testsFailed = 0;
bool isEqual = false;
do
{
// Prompt the user to enter in a test value
Console.Write("Please enter a positive integer value: ");
userInput = double.Parse(Console.ReadLine());
if (userInput != 0)
{
debrySqrtReturnValue = Sqrt(userInput);
dotNetSqrtReturnValue = Math.Sqrt(userInput);
Console.WriteLine("The square root of {0} is: {1}", userInput, debrySqrtReturnValue);
Console.WriteLine("The real square root of {0} is: {1}\n", userInput, dotNetSqrtReturnValue);
if (debrySqrtReturnValue == dotNetSqrtReturnValue)
isEqual = true;
else
isEqual = false;
if (isEqual)
testsPassed++;
else
testsFailed++;
testCasesExecuted++;
}
} while (userInput != 0);
Console.WriteLine("\n\n--------------------------------Report---------------------------------");
Console.WriteLine("test cases excecuted: {0}", testCasesExecuted);
Console.WriteLine("tests passed: {0}", testsPassed);
Console.WriteLine("tests failed: {0}", testsFailed);
Console.ReadLine();
}
// The Sqrt method
// Purpose: to compute the square root of a number
// Parameters: a positive, non-zero integer
// returns: a double, which is the square root of the number
// ---------------------------------------------------------
static double Sqrt(double number)
{
// constants to use in the calculation
const int FIRST_APPROX = 2;
const double EPS = 0.001;
// a local variable
double xN = 0;
// pick 2 as first approximation
double xNPlus1 = FIRST_APPROX;
do
{
xN = xNPlus1;
xNPlus1 = xN - ((xN * xN - number) / (FIRST_APPROX * xN));
} while (Math.Abs(xNPlus1 - xN) > EPS);
return xN;
}
}