Programm, das berechnet die Quadratwurzel einer Zahl.
Ich habe ein Programm entwickelt, das in einer Zahl und gibt die Quadratwurzel aus. Ex - 45 --> 3√5. Ich machte ein Programm, aber es gibt die gleiche Anzahl, die ich in. Hilfe würde sehr geschätzt werden.
Hier ist mein code -->
#include<iostream>
using namespace std;
int squarerootfinder(int number, int divisor){
if(divisor == 1){
return 1;
}
else{
if((number / (divisor * divisor))% 1 != 0){
divisor = squarerootfinder(number, divisor - 1);
}
if((number/ (divisor * divisor)) % 1 == 0 ){
return divisor;
}
}
}
int main(){
int number;
cout << "Enter a number to find the square root of it \n";
cin >> number;
int divisor = number;
int squareroot;
squareroot = squarerootfinder(number, divisor);
cout << squareroot << endl;
return 0;
}
- Welche versuche haben Sie gemacht, um die debug-problem?
- Gut, die ich gelesen habe über ihn für die Letzte halbe Stunde, aber ich kann nicht finden, wo der Fehler ist. Ich nehme an, es ist etwas falsch mit der Funktion Rekursion. Aber ich bin mir nicht sicher, was ich tun soll.
- Wenn Sie Zugriff auf einen debugger, die Sie wollen zu Fuß durch die Ausführung des Programms an, das beobachten der Ausführung Volumenstrom und der Status von Variablen auf wichtige Punkte in diesem Ablauf. Ansonsten, print auf die Konsole oder in eine Logdatei, um das gleiche erreichen.
- Hinweis:
% 1
ist nicht das tun, was Sie denken, es tut. Auch, wenn es die Hausaufgaben, bitte markieren Sie Sie als solche. - vielen Dank für die Hilfe! Und ja, das ist Hausaufgaben, tut mir Leid dies ist tatsächlich mein erstes mal Buchung für C++ - Hilfe.
- Ich habe in der % 1, um zu sehen, wenn es geteilt, um die form einer ganzen Zahl. Wenn es das nicht ist, dann würde es subtrahieren den divisor und so weiter. Ich verstehe nicht, warum es nicht funktioniert.
- Ich sehe, dass das problem bei der if((Zahl / (Teiler * Teiler))% 1 != 0) Teil, weil das nicht funktioniert. Weiß jemand, warum?
- Ich habe gerade festgestellt, was für ein idiot ich bin
- lol... Gut auf Sie. Das Auffinden eines Fehlers selbst ist viel befriedigender, als wenn es dir gegeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Probleme mit dieser Linie, die beide den Typ integer:
if((number /(divisor * divisor))% 1 != 0){
Erinnern, dass das Ergebnis ein integer-operation ist eine ganze Zahl, was ist der Wert des ersten Satzes von Werten, die in der Funktion? Übernehmen
number
ist 5. Dann haben wir:5/(5*5) = 5/25 = 0
Gilt das gleiche mit der
% 1
. ints sind immer ganze zahlen, so ist das modden von 1 immer 0 zurück.Das Problem hier ist die Verwendung des richtigen Algorithmus, und das ist Sie nötig, um die cmath-header in der std Bibliothek, in Ihrem squareRootFinder Funktion. Sie können auch eine Funktion verwenden, um Ihre ganze Zahl. Hier ist mein code. Hoffe, es hilft.