ページ 1 / 1
基数変換プログラム
Posted: 2018年7月10日(火) 15:46
by okemarururu
現在C言語を使って基数変換プログラムを作ろうとしています。
しかし、ヘッダファイルとポインタを使って作れという課題がでており、大変苦戦しております。
ヘッダファイルを使ってプログラムを組んだ経験が無いので、全くと言っていいほど分かりません。
c、h共に完成系のコードを教えていただけると幸いです。
甘えだとは思いますが、どうしても分かりません。よろしくお願いいたします。
10進数で数値を入力→変換したい基数を選択→変換後の数値を出力
といった流れで、簡単で良いのでどうかお願いいたします。
Re: 基数変換プログラム
Posted: 2018年7月10日(火) 16:01
by okemarururu
補足
Cファイルを分けて基数ごとに関数を呼び出す様にします。
よろしくおねがいします。
Re: 基数変換プログラム
Posted: 2018年7月11日(水) 07:48
by かずま
ヘッダファイルを使うやり方の例を示します。
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 に書き換えればよいでしょう。
基数の選択や、基数ごとに関数を呼び出すというのが
どういうことなのか、よくわかりません。
課題の原文はどうなっているんですか?
コンパイラは何を使っていますか?
フォーラムルールに従って質問してください。