Public feed
#527637
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.