Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Teixeirinha

Função CPF Visualg

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.