【问题标题】:How to use Pascal string in equation如何在方程中使用 Pascal 字符串
【发布时间】:2013-03-22 23:40:24
【问题描述】:

我有一个小问题。我编写了一个程序,要求用户输入包含 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 校验位的计算。

【问题讨论】:

  • 你不能乘以字符串(N1 * 1N1 是一个字符串或字符),你也不能对一个字符串做模(mod)操作。您的问题完全不清楚,因为您要问的任何事情都遥不可及。您必须转换为某种数字才能对其进行乘法或修改。此外,您的问题可以简化为if N11 = (something) then DoThis else DoThat - 根本不需要第二个(N1*1 + N2*2...)。您需要edit您的问题并明确说明您要做什么-您所问的是不可能的。这是 CheckDigit 吗?
  • 这个问题似乎与此惊人地相似:stackoverflow.com/questions/15558881/isbn-final-digit-finder/…
  • 我编辑了,你现在能理解我的问题了吗?
  • 是的,它几乎是同一个程序,但我怎么能在 pascal 中做同样的事情?比如:Digit1=int(ISBN[1])*11 ???

标签: pascal freepascal isbn


【解决方案1】:

改用循环。 (我只显示总值和校验位计算 - 您需要先让用户输入到名为 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;

【讨论】:

  • @Tutompita:您建议的编辑不是正确的,但您的输入促使我改进答案。谢谢。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多