2013-03-22 78 views
0

我有一個小問題。我寫了一個程序,要求用戶輸入一個包含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校驗位的計算。

+0

這是一個ISBN? – sberry 2013-03-22 23:54:30

+0

我認爲它不是 – BeginnerPascal 2013-03-22 23:58:49

+0

你不能乘以字符串(當N1是字符串或字符時爲'N1 * 1'),也不能對字符串進行模(mod)操作。你的問題完全不清楚,因爲你所要做的事情甚至都不可能。你必須轉換爲某種編號才能乘以或修改它。另外,你的問題可以簡化爲「如果N11 =(某事),那麼Do This else DoThat」 - 根本不需要第二個「(N1 * 1 + N2 * 2 ...)」。你需要[編輯]你的問題,並明確你想要做什麼 - 你問的問題是不可能的。這是一個CheckDigit嗎? – 2013-03-23 00:02:41

回答

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; 
+0

@Tutompita:你所建議的編輯不是正確的,但你的輸入促使我改進答案。謝謝。 :-) – 2013-05-25 21:54:00