Foto de Pedro B.
Pedro Renato há 3 anos
Enviada pelo
Site

Manipulação de caracteres

O exercício é o seguinte: Desenvolva um subprograma para validação de CPF (Cadastro de Pessoas Físicas): desenvolva um algoritmo que dado um número de CPF, informado pelo usuário como uma cadeia de caracteres, ve- rifique se é válido e imprima a resposta na tela. A cadeia de caracteres digitada conterá pontos e traço conforme exemplo. char cpf[14]=“529.982.247-25”; Para verificar se um CPF é válido deve-se analisar os 2 (dois) últimos dígitos de acordo com alguns cálculos realizados com os demais números. Veja a seguir o cálculo para o exemplo: • Verificação do primeiro dígito: Primeiro: multiplica-se os 9 (nove) primeiros dígitos pela sequência decrescente de números intei- ros a partir de 10 (dez). 10 9 8 7 6 5 4 3 2 * * * * * * * * * 5 2 9 9 8 2 2 4 7 50 + 18 + 72 + 63 + 48 + 10 + 8 + 12 + 14 = 295 Segundo: multiplica-se o resultado por 10 (dez). 295 ∗ 10 = 2950 Terceiro: faz-se a divisão do resultado por 11 (onze) e pega-se o valor do resto da divisão. 2950 % 11 = 2 ++Caso o resultado do resto for maior que 10 (dez), então considera-se como resultado o valor 0 (zero). • Verificação do segundo dígito: Primeiro: multiplica-se os 10 (dez) primeiros dígitos pela sequência decrescente de números intei- ros a partir de 11 (onze). 11 10 9 8 7 6 5 4 3 2 * * * * * * * * * * 5 2 9 9 8 2 2 4 7 2 55 + 20 + 81 + 72 + 56 + 12 + 10 + 16 + 21 + 4 = 347 Segundo: multiplica-se o resultado por 10 (dez). 347 ∗ 10 = 3470 Terceiro: faz-se a divisão do resultado por 11 (onze) e pega-se o valor do resto da divisão. 3470 % 11 = 5 ++Caso o resultado do resto for maior que 10 (dez), então considera-se como resultado o valor 0 (zero). Desta forma temos como resposta os dígitos “25”, os quais correspondem aos dígitos do CPF dado como exemplo: “529.982.247-25”. OBS: Você pode usar as funções int tam = strlen(texto), int num = atoi(texto) {converte ca- deia de caracteres para inteiro} e int valor = isdigit(char) {se valor==0 o char é um número entre 0 e 9}. Todas das bibliotecas #include e #include Minha dúvida é a seguinte: eu passo o cpf pra função de validação como uma string ou eu já faço a conversão para inteiro? Essa função atoi não entendi como funciona. Sei como ela converte um único caractere em inteiro, mas com uma string como um CPF, que contém "." e "-", não consegui implementar. Eu teria que passar os números do cpf pra um vetor de inteiros, certo?
1 resposta
Professor Rafael P.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 2 anos
Contatar Rafael

Você pode fazer um loop, e multiplicar por um valor relativo a i.

Lembrando que o CPF virá em forma de string (ou seja: char []), então deve-se subtrair o caractere em questão do caractere "0" para se obter o numeral.

As posições da string se dão da seguinte forma:

  • 0 a 2 - o primeiro grupo ternário (de três elementos)
  • 3 - o primeiro ponto
  • 4 a 6 - o segundo grupo ternário (veja que é equivalente a dizer "3 a 5" + 1)
  • 7 - o segundo ponto
  • 8 a 10 - o terceiro grupo ternário (veja que é equivalente a dizer "6 a 8" + 2)
  • 11 - o hífen
  • 12 a 13 - os dígitos verificadores

int soma = 0;
for (i = 0; i < 10; i++) {
  # Pequeno hack: nas posicoes [3-5], deve-se somar um ao indice da string, para se livrar do hifen
  soma += (cpf[i + (i / 3)] - '0') * (10 - i);
}
int dv = (soma * 10) % 11;
if (dv == (cpf[12] - '0')) {
  printf("O CPF %s e valido!", cpf);
} else {
  printf("O CPF %s e invalido!", cpf);
  return;
}
dv = soma + cpf[12];
dv = (dv * 10) % 11;
if (dv == (cpf[12] - '0')) {
  printf("O CPF %s e valido!", cpf);
} else {
  printf("O CPF %s e invalido!", cpf);
  return;
}

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Tire dúvidas com IA
Resposta na hora da Minerva IA
Enviar dúvida
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Prefere professores para aulas particulares ou resolução de atividades?
Aulas particulares
Encontre um professor para combinar e agendar aulas particulares Buscar professor
Tarefas
Envie sua atividade, anexe os arquivos e receba ofertas dos professores Enviar tarefa