Teixeirinha 0 Denunciar post Postado Junho 18, 2012 Construa um algoritmo que verifique se o número de um CPF é válido. Utilizar subprogramas de forma a estruturar bem seu algoritmo Bom galera esse é o enunciado...O programa eu ja fiz...Pórem eu nao to conseguindo dividilo e colocar os calculos na função e depois chamar. Me ajudem OBS: procurei algo como este no fórum e não encontrei desculpe-me por qualquer coisa Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Junho 18, 2012 vamos lah *primeiro poste na área correta, dessa vz irei mover o tópico.. *segundo poste oq fez.. []s Compartilhar este post Link para o post Compartilhar em outros sites
Teixeirinha 0 Denunciar post Postado Junho 18, 2012 vamos lah *primeiro poste na área correta, dessa vz irei mover o tópico.. *segundo poste oq fez.. []s var cpf: vetor [1..11] de real i, a, s1, s2, d10, d11, resto10, resto11, z: inteiro inicio // Seção de Comandos funcao valido (a, d : inteiro): inteiro s1 <- 0 para i de 1 ate 9 faca a <- cpf * (11 – i) fimpara para i de 1 ate 9 faca s1 <- s1 + a fimpara d10 <- 11 - (s1 / 11) se d10 < 2 entao s2 <- 0 senao resto10 <- d10 / 2 d10 <- d10 fimse d11 <- 11 - (s2 / 11) se d11 < 2 entao d11 <- 0 senao resto <- d11 / 2 d11 <- resto fimse se (d10 = d[10]) e (d11 = d[11]) entao escreva ("CPF Valido") senao escreva("CPF invalido") fimfuncao para i de 1 ate 11 faca escreva ("Entre com o numero do cpf: ") leia (cpf) z <- valido (cpf) fimpara fimalgoritmo Compartilhar este post Link para o post Compartilhar em outros sites
fgsander 0 Denunciar post Postado Dezembro 26, 2012 Olá! Estou começando agora com portugol... estava estudando como desenvolver um algoritmo para validacao de CPF. Consegui chegar a uma solução, não sei se ainda quer saber como.... Mas tem alguns erros na sua lógica, primeiro nao pode utilizar funcao, pois ela retorna um valor, o que não queremos, o que tem que utilizar é um PROCEDIMENTO, e quando você utiliza o passo para armazenar o CPF, está errado, primeiro você tem que separar os dígitos para que os multiplique e some os resultados. Outra coisa, você está dividindo por 11 e por 10, não é o que queremos, o que precisa ser feito é MOD 11 MOD 10 ou seja pegar somente o resto da divisao. Quando você declara a variável real, ela tem que ser inteira caso contrário nao funcionará a separacao dos digitos. Abaixo o algoritmo que desenvolvi. Implementei também opcoes de SE para conferir o digito e gerar digito de CPF e AGencia e Conta do BRADESCO E Banco do Brasil. algoritmo "DIGITO CPF E CC E AGENCIA BB E BRADESC" // Função : Gerar e Validar Digito de CPF, Agencia e Conta do Bradesco e Banco do Brasil // Autor : Felipe Sander // Data : 25/12/2012 // Seção de Declarações var opcao, s,digito1,digito2,i,cpf2,digit,dcpf1,dcpf2,dg1,dg2 : inteiro repete: caractere procedimento validacpf (cpf: inteiro) var separanum: vetor [1..11] de inteiro //vetor para variaveis do CPF // separanum2: vetor [1..10] de inteiro // //vetor para variaveis do CPF // // talvez nao precise dependendo do que eu fizer agora multinum: vetor [1..11] de inteiro //vetor para variaveis do CPF separanum2: vetor [1..11] de inteiro // vetor para variaveis do segundo digito do CPF rd1, rd2, d1, d2, soma1, soma2: inteiro // variaveis para armazenar informações do CPF inicio //separa numeros em vetor para a multiplicao separanum[1] <- cpf MOD 10 separanum[2] <- cpf MOD 100 DIV 10 separanum[3] <- cpf MOD 1000 DIV 100 separanum[4] <- cpf MOD 10000 DIV 1000 separanum[5] <- cpf MOD 100000 DIV 10000 separanum[6] <- cpf mod 1000000 div 100000 separanum[7] <- cpf mod 10000000 div 1000000 separanum[8] <- cpf mod 100000000 div 10000000 separanum[9] <- cpf div 100000000 // Multiplica os números separados no vetor 'separanum' para i de 1 ate 9 passo 1 faca multinum[i] <- separanum[i] * (10 - i) fimpara //soma o resultado da multiplicacao para i de 1 ate 9 passo 1 faca soma1 <- soma1 + multinum[i] fimpara //armazena digito1 digito1 <- soma1 mod 11 mod 10 // deixa a primeira celula do vetor 'multinum' livre para i de 1 ate 10 passo 1 faca separanum2[i+1] <- separanum[i] fimpara // transfere novamente os digitos separados para o vetor principal para i de 1 ate 11 passo 1 faca separanum[i] <- separanum2 [i] fimpara separanum[1] <- digito1 // adiciona o digito gerado ao vetor que calculará o segundo digito // gera o segundo digito no caso do CPF para i de 1 ate 10 passo 1 faca multinum[i] <- separanum[11-i] * i fimpara para i de 1 ate 10 passo 1 faca soma2 <- soma2 + multinum[i] fimpara digito2 <- soma2 mod 11 mod 10 fimprocedimento //inicio algoritimo inicio //menu repita repita se opcao > 4 entao // caso a opcao seja invalida ele apresenta esta informacao e limpa tela limpatela escreval ("Opção Inválida, escolha 1, 2, 3 ou 4!") escreval ("") fimse escreval ("Escolha uma das opções abaixo:") escreval ("1.Consultar CPF") escreval ("2.Gerar dígito de CPF") escreval ("3.Gerar dígito de Agência do BB ou Bradesco") escreval ("4.Gerar dígito de Conta do BB ou Bradesco") leia (opcao) se opcao = 1 entao escreval ("Digite o seu CPF SEM o Dígito!") leia (cpf2) escreval ("Digite os dois dígitos") leia (digit) dg1 <- digit div 10 dg2 <- digit mod 10 validacpf (cpf2) // chama o procedimento desenvolvido acima se (digito1 = dg1) e (dg2 = digito2) entao escreval ("CPF Válido!") senao escreval ("CPF Inválido!") fimse senao se opcao = 2 entao escreval ("Digite os 9 primeiros dígitos") leia (cpf2) validacpf (cpf2) // chama o procedimento desenvolvido acima escreval ("Os dígitos válidos são: ", digito1,digito2) escreval ("O CPF completo é: ", cpf2,digito1,digito2) senao se opcao = 3 entao escreval ("Digite os 4 dígitos da Agência") leia (cpf2) validacpf (cpf2) // chama o procedimento desenvolvido acima escreval ("O dígito válido é: ", digito1) escreval ("A Agência completa é: ", cpf2,"-",digito1) senao se opcao = 4 entao escreval ("Digite os 4 dígitos da Agência") leia (cpf2) validacpf (cpf2) // chama o procedimento desenvolvido acima escreval ("O dígito válido é: ", digito1) escreval ("A Conta completa é: ", cpf2,"-",digito1) fimse fimse fimse fimse ate opcao < 5 // sai da opcao repete escreval ("Nova Consulta?") // opcao de limpar tela e repetir a consulta ou mudar o tipo de consulta sem precisar fechar e abrir novamente leia (repete) se (repete = "s") entao limpatela // limpa tela para fazer uma nova consulta fimse ate repete = "n" fimalgoritmo Compartilhar este post Link para o post Compartilhar em outros sites