2012-04-14 10 views
1

私はプログラムを作る必要があります。プログラムは数値を取り、その平方根を出力します。 Ex - 45 - >3√5。私はプログラムを作ったが、それはちょうど私が入れたのと同じ番号を返す。ヘルプは非常に高く評価されるだろう。 ここに私のコードだ - 整数型に関連する両方の行で>数値の平方根を計算するプログラム。

#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; 
} 
+0

問題のデバッグにどのような試みをしましたか? –

+0

さて、私は30分以上それを読んできましたが、どこにエラーがあるのか​​分かりません。私は関数の再帰で何かが間違っていると思います。しかし、私は私が何をすべきかについてあまりよく分かりません。 –

+1

デバッガにアクセスできる場合は、実行フローとそのフローのキーポイントでの変数の状態を観察しながら、プログラムの実行を進めたいと思っています。それ以外の場合は、同じことを達成するためにコンソールまたはログファイルに出力してください。 –

答えて

2

2つの問題:

if((number/(divisor * divisor))% 1 != 0){

整数演算の結果が何であるか、整数であることに留意します関数に入る最初の値セットの値? numberが5であると仮定その後、我々は持っている:

5/(5*5) = 5/25 = 0

同じことが% 1に適用されます。 intは常に整数ですので、1でモディファイすると常に0が返されます。

+1

ではなく、モジュロ1は常にゼロを返します。 *何もしません、それは何も役に立ちません*。 –

+0

@BenVoigt true。それは有用ではありません。 – mydogisbox

-2

ここで問題となるのは、正しいアルゴリズムを使用することで、squareRootFinder関数のstdライブラリでcmathヘッダーを使用する必要があります。関数を使用して整数を取得することもできます。ここに私のコードです。それが役に立てば幸い。

#include <iostream> 
#include <cstring> 
#include <cmath> 


using namespace std; 

int getPositiveInt(string rqstNum) 
    { 
     int num; 
     do 
     { 
      cout << rqstNum << endl; 
      cin >> num; 
     }while(num == 0); 

     return num; 
    } 


double squareRootFinder(double Num) 
    { 
     double squareroot; 
     squareroot = sqrt(Num); 
     return squareroot; 
    } 

int main() 
{ 
int Num = getPositiveInt("Enter a number and i'll calculate the squareroot "); 
double squareroot = squareRootFinder(Num); 

    // To dispay the answer to two decimal places we cast the squareroot variable 
    squareroot *= 100; 
    squareroot = (double)((int)squareroot); 
    squareroot /= 100; 
    cout << squareroot << endl; 

    return 0; 
} 
+0

導入の段落で言及した以上に修正しました。 –

関連する問題