diff --git a/cpfs.pas b/cpfs.pas index ba0b90a..cf2ed47 100644 --- a/cpfs.pas +++ b/cpfs.pas @@ -6,7 +6,38 @@ type cpf : string; prox : TCPF; end; - THash = array[0..99] of TCPF; + THash = array[0..99] of ptcpf; + +var + cpf:string; + bool:boolean; + + + +function charInt(var letra:char):integer; +var tmp:integer; + begin + tmp:=Ord(letra)- Ord('0'); + charInt:=tmp; //ord('0')=48... ord('1')=49... dai -48 vira 0... + end; + +function validacaoDeInexistencialismoDeOutroCadastroDePessoasFisicasDentroDaLista(var cpf:string; final:integer; cpfs:thash ): boolean; + var + i:integer; + aux:tcpf; + existenciaDeTalInformacaoNaLista:boolean; + begin + aux:= cpfs[final]; + existenciaDeTalInformacaoNaLista := false; + while (aux^.prox <> nil) and (not existenciaDeTalInformacaoNaLista) do + begin + if (cpf = aux^.cpf) then + existenciaDeTalInformacaoNaLista := true + else + aux:= aux^.prox; + end; + validacaoDeInexistencialismoDeOutroCadastroDePessoasFisicasDentroDaLista:= existenciaDeTalInformacaoNaLista; + end; function validarCPF(var cpf:string):boolean; @@ -15,10 +46,10 @@ function validarCPF(var cpf:string):boolean; begin soma:=0; for i:=1 to 9 do - //ord('0')=48... ord('1')=49... dai -48 vira 0... *11-i, vai decrementando, *9, *8, *7... - soma:=soma+(Ord(cpf[i])-48)*(11-i); + // *11-i, vai decrementando, *9, *8, *7... + soma:=soma+( charInt(cpf[i]) ) * (11-i); - dig1 := 11 - (soma mod 11); //digito 1 pega a sobra da divisao bla bla + dig1 := 11 - (soma mod 11); if (dig1 = 10) or (dig1 = 11) then dig1 := 0; @@ -31,9 +62,7 @@ function validarCPF(var cpf:string):boolean; if (dig2 = 10) or (dig2 = 11) then dig2 := 0; - ValidarCPF := - (dig1=(Ord(cpf[10])-48)) and (dig2=(Ord(cpf[11])-48)); - + ValidarCPF :=dig1=charInt( cpf[10] ) and dig2=charInt( cpf[10] ); end; @@ -44,44 +73,40 @@ procedure inserirCPF(var cpfs:THash; var cpf:string); begin if validarCPF(cpf) then begin - pos:=(Ord(cpf[10])-48)*10 + (Ord(cpf[11])-48); //esse ngocio pega os digitos verificadores, gpt ajudou, transformar string em int é pesadelo - new(novo); - if novo = nil then - writeln('Memoria cheia') - else - begin - novo^.cpf := cpf; - novo^.prox := nil; - atual:= cpfs[pos]; - ant:=nil; - while (atual <> nil) and (atual^.cpf < cpf) do - begin - ant := atual; - atual := atual^.prox; - end; - if ant = nil then - begin - novo^.prox := cpfs[pos]; - cpfs[pos] := novo; - end - else - begin - novo^.prox := atual; - ant^.prox := novo; - end; - end; - end - else - writeln('CPF INVALIDO'); - end; + doisDigitos:=( charInt(cpf[10])*10 ) + charInt(cpf[11]); //*10 pq né, vira dezena + decimal 👍 + if (validacaoDeInexistencialismoDeOutroCadastroDePessoasFisicasDentroDaLista(cpf, doisDigitos, cpfs)) then + begin - - - -var - hash: THash; - cpf:string; - bool:boolean; + new(novo); + if novo = nil then + writeln('Memoria cheia') + else + begin + novo^.cpf := cpf; + novo^.prox := nil; + atual:= cpfs[doisDigitos]; + ant:=nil; + while (atual <> nil) and (atual^.cpf < cpf) do + begin + ant := atual; + atual := atual^.prox; + end; + if ant = nil then + begin + novo^.prox := cpfs[doisDigitos]; + cpfs[doisDigitos] := novo; + end + else + begin + novo^.prox := atual; + ant^.prox := novo; + end; + end; + end + else + writeln('CPF INVALIDO'); + end; + end; begin readln(cpf); inserirCPF(hash,cpf);