[問題]
手続codeMakeは、商品の開発順に割り振られた連番を基に5桁の商品コードを生成する。
手続codeMakeは、引数として整数型の変数numberに連番を受け取って生成した商品コードを文字型の一次元配列codeに格納する。
手続codeMakeでは、4桁の連番に1桁のチェックディジットを付加して5桁の商品コードを生成する。 なお、引数として受け取った連番が0以下又は1万以上であった場は、商品コードを “00000" とする。
配列 codeに格納される商品コードの構成を図1に示す。
download/file.php?mode=view&id=2567&sid ... c0d76bad2f
手続codeMake で利用するチェックディジットは、次の手順で求める。
(1) 連番を構成する各桁の数値に重み付けをした総和を求める。 各桁の重みは千の位の数値が4、百の位の数値が3、十の位の数値が2、一の位の数値が1である。連番 (3815) から重み付け総和を求める例を図2に示す。
download/file.php?mode=view&id=2573
(2) 重み付け総和(43)を10で除算した剰余をチェックディジットとする。上記の例の場合、チェックディジットは3となる。
[プログラム]
〇codeMake(整数型:number,文字型の配列:code)
整数型: i, j, base,sum
文字型の配列: D← {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
if ((numberが0以下) or (numberが10000以上))
number←0
endif
sum←0
base←1000
for (iを1から4まで1ずつ増やす)
j ← number÷base
code←D[j]
sum←sum+j×(5-i)
number←number mod base
base←base÷10
endfor
code[5]←D[sum mod 10+1]
(上のプログラムを元に自分で書いたプログラム)
#include <stdio.h>
main()
{
char d[10]={'0','1','2','3','4','5','6','7','8','9'},code[5];
int i,j,base,sum,number;
printf("number?");
scanf("%d",&number);
if(number<=0||number>=10000){
number=0;
}
sum=0;
base=1000;
for(i=0;i<=4;i++){
j=number/base;
code[i]=d[j];
sum=sum+j*(5-i);
number=number%base;
base=base/10;
printf("%c",code[i]);
}
code[5]=d[sum%10+1];
}
number? 3815
3815
38153と表示させたいです。ですが、チェックディジットが付加されず入力した数字がそのまま返されてしまいます。
初心者なので間違いだらけのプログラムですが、ご教授いただければ幸いです。