2017-11-08 56 views
-1

スタックを使用して10進数を2進数に変換しようとしています。構造体を使用する必要があります。スタックを使用して10進数を2進数に変換する

構造体の私の理解から、それらのメンバー関数を持つことができます。スタックはLIFO戦略に従います。

構造体を作成したり、メンバーを宣言したり、これらのメンバーを初期化して処理したりするために、スタックを作成できます。

したがって、私は上記のものと私の理解との構造体を宣言しようとしましたが、私はまだコンセプトを得るようには思われません。私はそれが私の間違いだと信じています。しかし、読書フォーラムは、私たちがまだクラスを教えられていないので、助けにはならず、あらゆるフォーラム、構造、クラスが混在しています。

ここまでは私のコードですが、コンセプトとロジックに関するヘルプとガイダンスは大変ありがとうございます。

#include<iostream> 
using namespace std; 

struct bin{ 
int num[15]; 
int ci; 

void init() 
{ 
    ci = 0; 
    for (int i = 0;i < 15;i++) 
     num[i] = -1; 
} 

void push(int n) 
{ 
    num[ci] = n; 
    ci++; 
} 
int pop() 
{ 
    int temp = num[--ci]; 
    num[ci] = -1; 
    return temp; 
} 
}; 

int main() 
{ 
int inp, count = 0; 
bin var; 
cout << "Enter a decimal number to convert into binary: "; 
cin >> inp; 

while (inp != 0) 
{ 
    int rem = inp % 2; 
    cout << "rem= " << rem << endl; 
    inp /= 2; 
    cout << "inp= " << inp << endl; 
    var.push(rem); 
    count++; 
} 
cout << "\nYour binary is: "; 
while (count != 0) 
{ 
    cout << var.pop(); 
    count--; 
} 

return 0; 
} 

私は間違いを見つけようとしましたが、できませんでした。

#include<iostream> 
using namespace std; 

void push(int bin[], int n, int &ci); 
void init(int bin[], int &count, int &ci); 
int pop(int bin[], int &ci); 
void display(int bin[], int &count, int &ci); 
void findBinary(int bin[], int &count, int&ci, int &inp); 

int main() 
{ 
int inp, count, ci; 
int bin[20]; 
char c = '\0'; 

init(bin,count,ci); 

    cout << "Enter a decimal number to convert into binary: "; 
    cin >> inp; 

    findBinary(bin, count, ci, inp); 
    display(bin, count, ci); 

return 0; 
} 

void init(int bin[], int &count, int &ci) 
{ 
count = 0; 
ci = 0; 

for (int i = 0;i < 20;i++) 
    bin[i] = -1; 
} 

int pop(int bin[], int &ci) 
{ 
    int temp = bin[--ci]; 
    return temp; 
} 

void push(int bin[], int n, int &ci) 
{ 
    bin[ci] = n; 
    ci++; 
} 

void display(int bin[], int &count, int &ci) 
{ 
    cout << "\nYour binary is: "; 
    while (count != 0) 
    { 
     cout << pop(bin, ci); 
     count--; 
    } 
    cout << endl; 
} 

void findBinary(int bin[], int &count, int&ci, int &inp) 
{ 
    while (inp != 0) 
    { 
     int rem = inp % 2; 
     inp /= 2; 
     push(bin, rem, ci); 
     count++; 
    } 
} 

を次のように、最後に私は単純に配列を使用してコードを実装だから私の質問は以下のとおりです。私たちは、構造体の中に関数を記述するとき、我々は構造体型のオブジェクトを作成するとき 1、関数が実行されません? 2.最初の例の構造体を使用してスタックを実装するために使用したメソッドは正しいですか?しかし、誰他の機能(そうではない、あなたのinit機能) - あなたが最初structまたはclassconstructor実行からオブジェクトを作成

+0

それを指摘してくれてありがとうが、コンパイルされていないので、私はそのコードを使用しませんでした。しかし、私は値を削除するためにpop関数の値を置き換える必要があります(-1は削除されたものとみなされます)。 –

+0

最初の例のコードはコンパイルされ、うまく動作します。 "私はまだコンセプトライトを得ていないようだ" – hnefatl

+0

2番目の注記では、私のオリジナルのポップ機能が正しいです。 ciはもともとデータを入力するために空のインデックスを指しています。 –

答えて

0

。あなたはそれを実行したい場合は、明示的に呼び出す必要があります:あなたの関数の実装の観点から

bin var; 
var.init(); 

:あなたはあなたが処理できる以上のアイテムをプッシュしていないことを保証するために、境界チェックを使用する必要があります、またはキュー内にあるよりも多くのポップを表示します。それ以外に、私は彼らに多くの間違いを見ることができません。アレイの代わりにstd::vectorを使用することを検討してください。しかし、C++について学び始めたばかりの方であれば、コースの後半でそれをカバーする可能性があります。あなたがが、あなたにもclassの使用に切り替えることstructにコンストラクタを追加している時間によって


。 C++では、構造体とクラスは同等です(構造体内のデフォルトのアクセス修飾子はpublicですが、クラスではprivateです)、それであなたを離れさせません。

関連する問題