2013-03-22 3 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

+0

나는 그것이 같지 않다고 생각한다. – BeginnerPascal

+0

'N1'이 문자열이거나 Char 일 때 문자열을 곱할 수없고, 문자열에 대해 모듈로 ('mod') 연산을 할 수 없다. 귀하의 질문은 완전히 명확하지 않습니다. 당신이하고 싶은 일도 멀리 할 수 ​​없기 때문입니다. 곱하기 또는 수정하기 위해 일종의 숫자로 변환해야합니다. 또한 질문이 'N11 = (무언가)라면 DoThis else doThat'으로 줄일 수 있습니다 - 두 번째 (N1 * 1 + N2 * 2 ...)는 필요 없습니다. 당신은 당신의 질문을 편집하고 당신이하려는 일을 분명하게해야합니다 - 당신이 요구 한 것은 불가능합니다. 이것은 CheckDigit입니까? –

답변

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 : 당신이 제안한 편집 내용이 적절하지 않다고 대답했지만, 귀하의 의견을 듣고 대답을 향상시킬 것을 촉구했습니다. 감사. :-) –