gt05063
@gt05063

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

未完成のC++プログラムを完成させる

Q&A

Closed

C++プログラミングの勉強を始めました。
何回もやってみましたが、期限付きの課題のやり方が分からなくて終わらなく、結局はこちらで答えを求めることにしました。
よろしくお願いします。

課題:
下記未完成C++プログラムのソースを修正してください。
10進数-- > 16進数, 16進数-- > 10進数への変換プログラムを完成させてください。
10進数を16進数に変換し画面に16進数を出力する函数1を定義。
4桁の16進数を10進数に変換して画面に10真数を出力する函数2を定義。

注意事項:
16進数の入力は大文字小文字に関係なく処理できなければならない。つまり、 "ff"でも"FF"でも入力できるようにする。
10進数-- > 16進数への変換時16真数は全て大文字で出力する。
16進数-- > 10真数への変換時入力される16進数は4桁に限る(例:0AF1)。
二つの函数の返還型はvoid型にする。

▼▼▼▼▼▼▼▼▼▼

#include< iostream >
//課題:必要なヘッダーファイルを追加してください。
using namespace std;

//課題:下記に定義する函数1と2の原型を宣言してください。

int main(void)
{
int sel = 1;
//課題:必要な地域変数を追加してください。

cout << "10進数 --> 16進数への変換モード: 1番" << endl;
cout << "16進数 --> 10進数への変換モード: 2番" << endl;
cout << "1番と2番以外の値を入力するとプログラムが終了します。" << endl;
cout << "変換しようとするモードの番号を選んでください: ";
cin >> sel;
if (sel == 1) {
    cout << "16進数に変換しようとする10進数を入力してください: ";
    // 課題:変換しようとする10進数の値を入力するコードを書いてください。
    // 課題:入力された10進数の値をを媒介変数として関数1を呼び出してください。

} else if (sel == 2) {
    cout << "10進数に変換しようとする16進数を4桁で入力してください。//(例:0AF5): ";
    // 課題:変換しようとする16進数を入力するコードを書いてください。
    // 課題:入力された16真数の値を媒介変数として関数2を呼び出してください。

} else
    cout << "プログラムが終了します。" << endl;
return 0;

}

1

5Answer

こちら,どの辺りで詰まっているのでしょうか?それがわかれば回答が付け易くなるかと思います.

例えば,こういう考えで進めようと思っている.などが記載されていると,更にわかりやすいように思います.

1Like

Comments

  1. @gt05063

    Questioner

    アドバイスありがとうございます。
    確かにどの辺りで詰まっているか分かった方が回答しやすいですね。
    次回から詰まってる部分も書いて質問するようにします。
  2. 解決できたようで良かったです

心臓を捧げよ。

下民共よ。吾輩が福音を授けてしんぜよう。

//課題:必要なヘッダーファイルを追加してください。

これは貴様が記しているように#include< iostream >で正解だ。

//課題:下記に定義する函数1と2の原型を宣言してください。

何やら難しい漢字を使って格好つけておるな貴様。ええい図に乗るでない!
貴様が以下に表面を繕おうと我には常に真が見えている。

string dec2hex(int dec) {
    return hex << dec;
}

int hex2dec(string s) {
    return dec << s;
}

decとhexの使い方については以下の目録を参照するがよい。

//課題:必要な地域変数を追加してください。

これもint sel = 1;で問題ない。

// 課題:変換しようとする10進数の値を入力するコードを書いてください。

貴様がすでに用いているであろう術式cinこれを用いれば自ずと入力を取得できる。

int dec;
cin >> dec;

// 課題:入力された10進数の値をを媒介変数として関数1を呼び出してください。

cout << dec2hex(dec) << endl;

いいか、今回は貴様に答えを示してみせたがいつでも吾輩が求めに応えるわけではない。
そのことを胸に刻み勉学に励むが良い。

さもなければ貴様に災いと死が訪れるであろう。

1Like

回答してくださった方、ありがとうございます。

ギリギリでしたが、なんとか自分でできました。
違う書き方があるかも知れませんが、実行してみたら求めてた結果が出てました。

#include <iostream>
using namespace std;

void funDecToHex(int n) {
	int i = 0, m, num[32];

	char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

	while (n > 0) {
		num[i++] = n % 16;
		n = n / 16;}

	for (i = i - 1; i >= 0; i--) {
		m = num[i];

		cout << hex[m];
	}

	cout << endl;
}

void funHexToDex(string s16) {
	int sum = 0, t;

	for (int i = 0; i < s16.length(); i++) {
		if (s16[i] <= '9')

			t = s16[i] - '0';

		else if ('A' <= s16[i] && s16[i] <= 'F')

			t = s16[i] - 'A' + 10;

		else if ('a' <= s16[i] && s16[i] <= 'f')

			t = s16[i] - 'a' + 10;

		sum = sum * 16 + t;
	}

	cout << sum << endl;
}

int main(void) {
	int sel = 1;

	cout << "10進数 --> 16進数に変換: 1" << endl;

	cout << "16進数 --> 10進数に変換: 2" << endl;

	cout << "1と2以外を入力したらプログラムを終了します。。" << endl;

	cout << "変換方法を選んでください: ";

	cin >> sel;

	if (sel == 1) {
		cout << "10進数を入力: ";

		int n;

		cin >> n;

		funDecToHex(n);

	} else if (sel == 2) {
		cout << "16進数を入力 (例如, 0AF5): ";

		string s16;

		cin >> s16;

		funHexToDex(s16);

	} else

		cout << "プログラムを終了します。" << endl;

	return 0;
}
1Like

// 課題:変換しようとする16進数を入力するコードを書いてください。
// 課題:入力された16真数の値を媒介変数として関数2を呼び出してください。

コレに関しては貴様自身の手で解いてみよ。我からの最終試験だ。

0Like

すいませんミスが有りました。

以下の修正お願いします。

・関数定義

void dec2hex(int dec) {
    cout << hex << dec << endl;
}

void hex2dec(string s) {
    cout << dec << s << endl;
}

・呼び出し側

    int dec;
cin >> dec;
dec2hex(dec);
0Like

Comments

  1. @gt05063

    Questioner

    回答ありがとうございます。
    同じ問題でも人によって書き方が違うので、勉強になりました。

Your answer might help someone💌