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?
Linguagem C
1 resposta
Professor Rafael P.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 3 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
Tutoria com IA
Converse com a Minerva IA e aprenda, tire dúvidas e resolva exercícios
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