Public feed #527637

Something

public text v1 · immutable
Raw Edit
·published 2007-06-01 11:44 UTC
rendered paste body
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.