基数変換プログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
okemarururu

基数変換プログラム

#1

投稿記事 by okemarururu » 1週間前

現在C言語を使って基数変換プログラムを作ろうとしています。
しかし、ヘッダファイルとポインタを使って作れという課題がでており、大変苦戦しております。
ヘッダファイルを使ってプログラムを組んだ経験が無いので、全くと言っていいほど分かりません。
c、h共に完成系のコードを教えていただけると幸いです。
甘えだとは思いますが、どうしても分かりません。よろしくお願いいたします。
10進数で数値を入力→変換したい基数を選択→変換後の数値を出力
といった流れで、簡単で良いのでどうかお願いいたします。

okemarururu

Re: 基数変換プログラム

#2

投稿記事 by okemarururu » 1週間前

補足
Cファイルを分けて基数ごとに関数を呼び出す様にします。
よろしくおねがいします。

かずま

Re: 基数変換プログラム

#3

投稿記事 by かずま » 1週間前

ヘッダファイルを使うやり方の例を示します。

conv.h

コード:

#ifndef CONV_H
#define CONV_H

void 基数変換(unsigned 数, unsigned 基数, char 結果[]);

#endif // CONV_H
conv.c

コード:

#include "conv.h"

void 基数変換(unsigned 数, unsigned 基数, char 結果[])
{
	static const char 数字[] = "0123456789abcdefghijklmnopqrstuvwxyz";
	char バッファ[33];
	int i = 0, j = 0;
	do バッファ[i++] = 数字[数 % 基数]; while (数 /= 基数);
	do 結果[j++] = バッファ[--i]; while (i != 0);
	結果[j] = '\0';
}
main.c

コード:

#include <stdio.h>
#include "conv.h"

int main(void)
{
	char 変換結果[33];
	unsigned 数, 基数;
	while (printf(">> "), scanf("%u%u", &数, &基数) == 2
			&& 基数 >= 2 && 基数 <= 36) {
		基数変換(数, 基数, 変換結果);
		puts(変換結果);
	}
}
実行結果

コード:

>> 1000 2
1111101000
>> 1000 8
1750
>> 1000 10
1000
>> 1000 16
3e8
>> 1000 24
1hg
>> 1000 36
rs
>> .
上記のプログラムは、次の点で質問にある完成系(形?)のコードではありません。

・ポインタを使っているようには見えない。
・変換したい基数を選択するのではなく、入力させている。
・基数の範囲が勝手に 36まで拡張されている。
・基数ごとに関数を呼び出すようになっていない。
・名前に英数字以外の文字を使っている。(VC++ ではコンパイルできますが)
・main の中でループしている。

ポインタを使うためには、
int i = 0, j = 0;

char *p = バッファ, *q = 結果;
として、*p++ や *--p に書き換えればよいでしょう。

基数の選択や、基数ごとに関数を呼び出すというのが
どういうことなのか、よくわかりません。
課題の原文はどうなっているんですか?

コンパイラは何を使っていますか?
フォーラムルールに従って質問してください。

返信

“C言語何でも質問掲示板” へ戻る