Program DigitoVerificadorEmPascal; Uses WinCrt; Var contaCorrente : Integer; Function digitoVerificador(var conta : Integer) : Integer ; var erro, cont, contaInt, tConta, cInvInt, dVerificador : Integer; contaStr, cInvStr : String; cDivididaInt : Array[1..3] of Integer; cDivididaStr : Array[1..3] of String; Begin str(conta, contaStr); { Convertendo a conta de Integer para String. } for tConta := length(contaStr) downto 1 do begin cInvStr := cInvStr + contaStr[tConta]; { Invertendo a posição da conta } end; val(cInvStr, cInvInt, erro); { Convertendo a Conta de String para Inteiro. } if erro <> 0 then begin writeln( 'Erro!' ); end; conta := conta + cInvInt; { Somando a Conta Inicial pelo Conta Inversa. } str(conta, contaStr); { Convertendo a Conta de Integer para String. } tConta := length(contaStr); { Obtendo o novo tamanho da conta. } conta := 0; { Zerando o valor da variável conta. } for cont := 1 to tConta do begin cDivididaStr[cont] := contaStr[cont]; { Dividindo os dígitos da conta em um Vetor. } val(cDivididaStr[cont], cDivididaInt[cont], erro); { Convertendo o valor na posição de acordo com o contador. } if erro = 0 then { Se a conversão foi bem sucedida } begin conta := conta + ( cDivididaInt[cont] * cont ); { Conta recebe a conta + a multiplicação do valor na posição do contador. } end else begin writeln('Erro!'); halt; end; end; str(conta, contaStr); { Convertendo a conta de Integer para String } tConta := length(contaStr); { Obtendo o tamanho da conta } val(contaStr[tConta], dVerificador, erro); { Convertendo a última posição da conta de String para Integer } if erro = 0 then { Se não der erro na conversão } begin digitoVerificador := dVerificador; end else begin writeln( 'Erro!' ); halt; end; End; Begin write( 'Digite o número da conta: ' ); readln( contaCorrente ); write( '\n\nO digito verificador da conta é ', digitoVerificador( contaCorrente ) ); readkey; End.