1

そこで、バイナリ値を入力として受け取り、それをグレイコードに変換したり、その逆を行ったりするプログラムを書きたいと思います。

これが私が最初に書いたものです:

#include <iostream>

using namespace std;

int main()
{

    int Choice;
    bool g0,g1,g2,g3,b0,b1,b2,b3;

    cout<<"For Binary To Gray Code Enter 1." << endl <<"For Gray Code to Binary Enter 2." << endl;;
    cin>>Choice;

    if(Choice==1)
    {

        cout<<"Enter the Binary Bits." << endl;

        cin>>b0>>b1>>b2>>b3;


        cout<<"Orginal Binary Form: "<<b3 <<b2 <<b1 <<b0 << endl;

        g3=b3;
        g2=b3^b2;
        g1=b2^b1;
        g0=b1^b0;

        cout<<"Converted Gray Code Form: "<<g3 <<g2 <<g1 <<g0 << endl;
    }
    else if(Choice==2)
    {

        cout<<"Enter The Gray Code Bits." << endl;

        cin>>g0>>>g1>>g2>>g3;


        cout<<"Original Gray Code Form: "<<g3 <<g2 <<g1 <<g0 << endl;

        b3=g3;
        b2=b3^g2;
        b1=b2^g1;
        b0=b1^g0;

        cout<<"Converted Binary Form: "<<b3 <<b2 <<b1 <<b0 << endl;
    }

    return 0;
}

これは4ビットで機能しますが、

  1. 実行時にユーザーが入力したバイナリ/グレー コードのサイズを決定するものが必要です。

    私は少し調査を行い、そのような場合にベクトルを使用することを知りましたが、大学で C++ を始めたばかりなので、ベクトルや配列にさえ慣れていません。それを達成するために使用できるものは他にありますか?そうでない場合、ベクトルをどのように使用できるか教えてもらえますか?

  2. 次に、入力をスペースなしで 1 行にまとめたいと思います。

    例:

    10111 0 1 1別々の行で各ビットの入力を取得するのではなく。

  3. 今、私はノーを知ることができなくなることにも気づきました。XOR 演算を実行するために使用したビット式も変更されます。バイナリとグレイコードのbool変数を宣言し、単純なステートメントを使用して個々のビットではなく、これらの変数に対して XOR 演算を実行することは可能ですか?複雑なことは何もありませんか?

4

2 に答える 2

1

文字列を読み取り、一度に char を評価して、次のようなことを始めることができます。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    std::string input
    int Choice;

    cout<<"For Binary To Gray Code Enter 1." << endl <<"For Gray Code to Binary Enter 2." << endl;;
    cin>>Choice;
    cout << "Enter input string: ";
    cin >> input;

    if(Choice==1)
        Gray2Binary(input.c_str(), input.length());
    else
        Binary2Gray(input.c_str(), input.length());

    return 0;
}

void Gray2Binary(char s[], int n)
{
    int state = s[0]=='1' ? 1 : 0;
    int i=0;

    do {
        if (i > 0)
            state ^= s[i++]=='1' ? 1 : 0;

        cout << state;
    }while (i<n);

    cout << endl;
}
于 2013-04-19T14:57:09.833 に答える