バーコード

解決


クッキー  2004-10-06 21:53:14  No: 54644

どうも始めまして。今、授業でC++を勉強してて、初めてな事なので四苦八苦しています。それで質問があるのですが、数字をバーコードみたいに直すのはどうすればいいのでしょうか。
例えば、 0=:, 1=| として
それで、 1=00111, 2=01010, 3=10101,・・・のような感じで
最後に、数字を入力すると、:|だけで表せばいいのですが、
どうか教えてくださいお願いします


シャノン  2004-10-06 23:20:54  No: 54645

やりようはいくらでもあると思いますが、まずは 10 進数を 2 進数に直すことですよね。
コンソールアプリだとして、scanf でキーボードから 10 進数を入力して、printf なり何なりで 2 進数で出力する。まずはこれですね。
それができたら、'0' / '1' の代わりに ':' / '|' を出力すればいいので、あとはさほど難しいことではないと思います。


シャノン  2004-10-06 23:21:41  No: 54646

違うのか。

> それで、 1=00111, 2=01010, 3=10101,・・・のような感じで

2進数じゃないねぃ。
変換法則はどういうものなんですか?


クッキー  2004-10-07 00:01:45  No: 54647

シャノンさんお早い返事ありがとうございます。
変換は、関数(ファンクション)を使うのだと思うのですが、
いろいろな方のサイトを見させて頂いたのですが、数学的なものばかりで
どこをどう応用すればいいかがわかりません。
もし違っていればごめんなさい。


シャノン  2004-10-07 00:44:41  No: 54648

目的は何なのですか?
バーコードのようにするというなら、どんなデータを入力したときにどんなバーを出力するのか、その変換規則はあなたが決めなければなりません。
それとも、現在、商品についているようなバーコードを再現したいのですか?
それにしても、既存の変換規則にもいろんなものがありますが。

> 数字をバーコードみたいに
とおっしゃいますが、当然、どんなバーコードなのかを決めないと、どのように変換すればいいかもわかりません。
貴方が考えた規格ならばその規則を、既存の規格ならば規格名を書いてください。

参考までに、現在規格化されているバーコードには
http://www.barcode.ne.jp/about_barcode/index.html
こんなに種類があります。


tetrapod  2004-10-07 00:50:25  No: 54649

何をどうしたいのか仕様書が無いので説明の方法がないというか。
しかも説明するより実際にプログラム組んぢゃうほうが速いし。
こういう掲示板では「何をどうしたい」「でもどうなった」をきっちり説明すべし。

変換仕様を勝手に決めて適当に作った例

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@現実逃避中


クッキー  2004-10-07 12:21:35  No: 54650

シャノンさん、tetrapodさん返信ありがとうございます。
説明がたらなくてごめんなさい。
目的は、授業の宿題です。
それは、最初に書いたように、0から9まで(00011とか11001など)決まってて、プログラムしコンパイルした後に、
5桁の数字をcinして(34567や98437など)、
最後に、:と|だけで表すものです。
10進法から2進法への変換がよくわからずこまっています。
tetrapodさんの、プログラム大変感謝し参考にしていますが、
まだ初めてまもないので自分にはまだ少し難しすぎます。
もう少し、簡単なプログラムありますか。
全部とはずうずうしいので、
一例(0を入力すると、:::||とでる)だけでも教えて頂きたいです。
お願いします。


KING・王  2004-10-07 22:09:56  No: 54651

この場合、以下の方法が簡単ではありませんか?

(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)で作成した文字列を出力する。


クッキー  2004-10-09 10:13:42  No: 54652

KING・王 さん返信送れてどうもすみませんでした。
KING・王 さんの例文とても参考になり、宿題も終える事が出来、
大変感謝しています。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加