どうも始めまして。今、授業でC++を勉強してて、初めてな事なので四苦八苦しています。それで質問があるのですが、数字をバーコードみたいに直すのはどうすればいいのでしょうか。
例えば、 0=:, 1=| として
それで、 1=00111, 2=01010, 3=10101,・・・のような感じで
最後に、数字を入力すると、:|だけで表せばいいのですが、
どうか教えてくださいお願いします
やりようはいくらでもあると思いますが、まずは 10 進数を 2 進数に直すことですよね。
コンソールアプリだとして、scanf でキーボードから 10 進数を入力して、printf なり何なりで 2 進数で出力する。まずはこれですね。
それができたら、'0' / '1' の代わりに ':' / '|' を出力すればいいので、あとはさほど難しいことではないと思います。
違うのか。
> それで、 1=00111, 2=01010, 3=10101,・・・のような感じで
2進数じゃないねぃ。
変換法則はどういうものなんですか?
シャノンさんお早い返事ありがとうございます。
変換は、関数(ファンクション)を使うのだと思うのですが、
いろいろな方のサイトを見させて頂いたのですが、数学的なものばかりで
どこをどう応用すればいいかがわかりません。
もし違っていればごめんなさい。
目的は何なのですか?
バーコードのようにするというなら、どんなデータを入力したときにどんなバーを出力するのか、その変換規則はあなたが決めなければなりません。
それとも、現在、商品についているようなバーコードを再現したいのですか?
それにしても、既存の変換規則にもいろんなものがありますが。
> 数字をバーコードみたいに
とおっしゃいますが、当然、どんなバーコードなのかを決めないと、どのように変換すればいいかもわかりません。
貴方が考えた規格ならばその規則を、既存の規格ならば規格名を書いてください。
参考までに、現在規格化されているバーコードには
http://www.barcode.ne.jp/about_barcode/index.html
こんなに種類があります。
何をどうしたいのか仕様書が無いので説明の方法がないというか。
しかも説明するより実際にプログラム組んぢゃうほうが速いし。
こういう掲示板では「何をどうしたい」「でもどうなった」をきっちり説明すべし。
変換仕様を勝手に決めて適当に作った例
const char *barcodetable[]={
":::||", /* 0 */
":|:|:", /* 1 */
... /* 以下適宜作って */
};
void print_barcode(int n) {
char buf[64];
int i, len;
sprintf(buf, "%d", n);
len=strlen(buf);
for (i=0; i<len; ++i) {
printf("%s", barcodetable[buf[i]-'0']);
}
}
# tetrapod@現実逃避中
シャノンさん、tetrapodさん返信ありがとうございます。
説明がたらなくてごめんなさい。
目的は、授業の宿題です。
それは、最初に書いたように、0から9まで(00011とか11001など)決まってて、プログラムしコンパイルした後に、
5桁の数字をcinして(34567や98437など)、
最後に、:と|だけで表すものです。
10進法から2進法への変換がよくわからずこまっています。
tetrapodさんの、プログラム大変感謝し参考にしていますが、
まだ初めてまもないので自分にはまだ少し難しすぎます。
もう少し、簡単なプログラムありますか。
全部とはずうずうしいので、
一例(0を入力すると、:::||とでる)だけでも教えて頂きたいです。
お願いします。
この場合、以下の方法が簡単ではありませんか?
(1)0から9までの変換後の文字列のテーブルを作成する。
char datatable[10][6];
datatable[0] = ":::||";//00011
:
datatable[9] = "||::|";//11001
(2)入力された5桁の数字を各桁ごとの数値に分解する。
(3)各桁の数値をIndexとして、(1)文字列テーブルから、
その数字の変換後の文字列を取得する。
例)ある桁の数値がnの場合、変換後の文字列はdatatable[n]となる。
(4)上記の(3)で得られる文字列を順番につなぎ合わせる。
各桁の数値をn1,n2,n3,n4,n5とすると、
char buf[5*5+1];
strcpy( buf, datatable[n1] );
strcat( buf, datatable[n2] );
:
strcat( buf, datatable[n5] );
(5)あとは、(4)で作成した文字列を出力する。
KING・王 さん返信送れてどうもすみませんでした。
KING・王 さんの例文とても参考になり、宿題も終える事が出来、
大変感謝しています。
本当にありがとうございました。
ツイート | ![]() |