2017-03-07 10 views
1

私はコンバージョンに関するプログラムを開発しようとしています。このプログラムは、バイナリ、8進数、16進数を10進数に変換する必要があります。このプログラムには、10進数が間違っているため、いくつかの間違いがあります。誰でも助けてくれますか?ここ は、コードは次のとおりです。あなたの助けのためのHexa、8進数から10進数へのバイナリ(C++)

#include <conio.h> 
#include <iostream> 
#include <windows.h> 
#include <stdlib.h> 
#include <math.h> 

using namespace std; 

int Decimal,Lenght,Pos_bit,x,base,i,n; 
//Pos_bit=Exponent 

char c[9]; 
int main() 
{ 
    Decimale=0; 
    Pos_bit=0; 
    n=0; 
    cout<<"Select a conversion method"<<endl; 
    cout << endl << endl; 
    cout << "1)Binary-Decimal" << endl; 
    cout << "2)Octal-Decimal" << endl; 
    cout << "3)Hexa-Decimal" << endl; 
    cin >> x; 
    switch (x) 
    { 
      case (1): 
      base=2; 
      break; 
      case (2): 
      base=8; 
      break; 
      case (3): 
      base=16; 
      } 
    cout<<"How many digits has the number?"<<endl; 
    cin>>Lenght; 
    Pos_bit=Lenght; 
    for(i=0;i<Lenght;i++,Pos_bit--) 
    { 
    cout<<"Type-bit value"<<endl; 
    cin>>c; 
    if(base==2){ 
     if(c[i]==48){ 
     n=0;} 
    else if(c[i]==49){ 
     n=1;} 
    Decimal=Decimal+n*(pow(2,Pos_bit)); 
    } 
    else if(base==8){ 
    if ((c[i]>=48)&&(c[i]<=55)){  
    n=c[i]-48;} 
    Decimal=Decimal+n*(pow(8,Pos_bit)); 
    } 
    else if(base==16){ 
     if((c[i]>=48 && c[i]<=57)){ 
     n=c[i]-48;} 
    else if((c[i]>=65)&&(c[i]<=70)){ 
     n=c[i]-55;} 
    else if((c[i]>=97)&&(c[i]<=102)){ 
     n=c[i]-87;} 
    Decimal=Decimal+n*pow(16,Pos_bit); 
    } 
    } 

    cout<<"Decimal number is"<<Decimal<<endl; 
    getch(); 
    system("cls"); 
    return 0; 
    } 

ありがとう!

+1

精巧な。あなたのテスト入力は何ですか?期待される成果は?実際の出力は何ですか?そして、すべてのコードを英語に翻訳できますか?状況は重要です。とにかく出力は英語でなければなりません。それはエラーを分離するためにこれまでに何を試みたのですか?デバッガを使用しましたか?いずれの場合でも基本的なヒントは、関数を使用してプログラムを実際に分割する必要があります。デバッグの高速化を実現します。 – Aziuth

+0

前のコメントに加えて、「48」や「55」のような「魔法」の数字は避け、むしろ「0」や「7」などを使用する方がはるかに明確です。 –

+0

これは、デバッガを使用する必要があるものです。 'cin >> x'行の後にブレークポイントを設定し、コードを一歩一歩進んで、変数の実際の値があなたの期待を満たしているかどうかを毎回確認してください。 – zett42

答えて

0

大きな問題は、Pos_bitの処理方法です。あなたは1つずつエラーがあります。

私は11をバイナリから変換したいとしましょう。 Lungh_numしたがってPos_bit

Decimale=Decimale + 1 * (pow(2, 2)); 

されることへの答えは4.あなたの最終的な答えがループする前に6になりますです。2.あなたの最初の桁の計算で出始めるが、実際に

Pos_bit = Lungh_num - 1; 

を設定しました最高のものは、pow()のものをすべて忘れることです。代わりに

Decimale=Decimale+n*pow(16,Pos_bit); 

書き込み

Decimale = Decimale * base + n; 
0

の我々は入力のサニタイズとマジックナンバーや他のコーディング標準の問題を気にしない場合は、メインのエラーがあった。

  • 我々は少しを数えます0からn-1までの数字なので、この行は次のようにする必要があります。c[i] yoあなたはc[0]に置き換えてください。間違っていなければ、入力の最初の文字だけが気になります。

あなたの修正コードは次のようになります。あなたの質問に

#include <conio.h> 
#include <iostream> 
#include <windows.h> 
#include <stdlib.h> 
#include <math.h> 

using namespace std; 

int Decimale, Lungh_num, Pos_bit, x, base, i, n; 
//lungh_num=n lenght; 
//Pos_bit=Exponent 

char c[9]; 
int main() 
{ 
    Decimale = 0; 
    Pos_bit = 0; 
    n = 0; 
    cout << "Scegli un metodo di conversione" << endl; 
    cout << endl << endl; 
    cout << "1)Binario-Decimale" << endl; 
    cout << "2)Ottale-Decimale" << endl; 
    cout << "3)Esadecimale-Decimale" << endl; 
    cin >> x; 
    switch (x) 
    { 
    case (1): 
     base = 2; 
     break; 
    case (2): 
     base = 8; 
     break; 
    case (3): 
     base = 16; 
    } 
    cout << "Quante cifre ha il numero?" << endl; 
    cin >> Lungh_num; 
    Pos_bit = Lungh_num - 1; 
    for (i = 0; i < Lungh_num; i++, Pos_bit--) 
    { 
     cout << "Digita valore bit" << endl; 
     cin >> c; 
     if (base == 2) { 
      if (c[0] == 48) { 
      n = 0; 
     } 
     else if (c[0] == 49) { 
      n = 1; 
     } 
     Decimale = Decimale + n*(pow(2, Pos_bit)); 
     } 
     else if (base == 8) { 
      if ((c[0] >= 48) && (c[0] <= 55)) { 
       n = c[0] - 48; 
      } 
      Decimale = Decimale + n*(pow(8, Pos_bit)); 
     } 
     else if (base == 16) { 
      if ((c[0] >= 48 && c[0] <= 57)) { 
       n = c[0] - 48; 
      } 
      else if ((c[0] >= 65) && (c[0] <= 70)) { 
       n = c[0] - 55; 
      } 
      else if ((c[0] >= 97) && (c[0] <= 102)) { 
       n = c[0] - 87; 
      } 
      Decimale = Decimale + n*pow(16, Pos_bit); 
     } 
    } 

    cout << "Il numero decimale e'" << Decimale << endl; 
    getch(); 
    system("cls"); 
    return 0; 
} 
+0

素晴らしい!!ありがとう! – KingRoy

関連する問題