如何在方程中使用Pascal字符串

时间:2013-03-22 23:40:24

标签: pascal freepascal isbn

我有点问题。我编写了一个程序,要求用户输入包含11位数字的代码。我将它定义为字符串,但现在我想单独使用此代码中的每个数字并制作一个等式。

例如,如果代码是37605030299我需要做等式:

(1*3 + 2*7 + 3*6 + 4*0 + 5*5 + 6*0 + 7*3 + 8*0 + 9*2 + 1*9) / 11

找出什么是MOD。

这是ISBN校验位的计算。

1 个答案:

答案 0 :(得分:2)

使用循环代替。 (我只显示总值并检查数字计算 - 您需要先将用户输入放入名为UserISBN的变量中。)

function AddCheckDigit(const UserISBN: string): string;    
var
  i, Sum: Integer;
  CheckDigit: Integer;
  LastCharValue: string;
begin
  Assert(Length(UserISBN) = 10, 'Invalid ISBN number.');
  Sum := 0;
  for i := 1 to 10 do
    Sum := Sum + (Ord(UserISBN[i]) * i);

  { Calculate the check digit }
  CheckDigit := 11 - (Sum mod 11);

  { Determine check digit character value }
  if CheckDigit = 10 then
    LastCharValue := 'X'
  else
    LastCharValue := IntToStr(CheckDigit);

  { Add to string for full ISBN Number }
  Result := UserISBN + LastCharValue;
end;