A maior rede de estudos do Brasil

e identificação e os dois últimos os dígitos de verificação, calcule e escreva se o CPF digitado é válido ou não.

Para evitar erros de digitação de seqüências numéricas de importância fundamental, como a matrícula de um aluno, o número
de conta bancária, o CPF do imposto de renda, etc, geralmente se adiciona ao número um dígito verificador. Por exemplo, o número
de matrícula 811057 é usado como 811057-3, onde 3 é o dígito verificador, calculado da seguinte maneira:
Cada algarismo do número é multiplicado por um peso começando de 2 e crescendo de 1, da direita para a esquerda: 8*7, 1*6 ,
1*5 , 0*4 , 5*3 , 7*2;
Somando-se as parcelas obtidas: 8*7 + 1*6 + 1*5 + 0*4 + 5*3 + 7*2
56 + 6 + 5 + 0 + 15 + 14 = 96;

Calcula-se o resto da divisão desta por 11: 96 dividido por 11 dá resto 8 (96 = 8*11+8);
Subtrai-se de 11 o resto obtido: 11 – 8 = 3;
Se o valor encontrado for 10 ou 11, o dígito verificador será 0; nos outros casos, o dígito verificador é o próprio valor encontrado.
Fazer um algoritmo que leia o CPF de uma pessoa, o CPF e composto de 11 dígitos sendo os 9 primeiros os de identificação e os
dois últimos os dígitos de verificação, calcule e escreva se o CPF digitado é válido ou não.


3 resposta(s) - Contém resposta de Especialista

User badge image

RD Resoluções Verified user icon

Há mais de um mês

Vamos utilizar o seguinte código mostrado abaixo:

#include

#include

#include

struct registro_t

{

char szConta[7];

int iDigito;

float flSaldo;

char szNome[128];

};

void main ( void )

{

FILE* pArquivo;

int iConta;

registro_t reg;

std::list ListaCorreto;

std::list ListaIncorreto;

pArquivo = fopen( "C:\\teste.txt", "r" );

if( pArquivo == NULL )

printf( " Erro ao abrir arquivo ..." );

while( fscanf( pArquivo, "%i-%i %f %[^\n]", &iConta, ®.iDigito, ®.flSaldo, reg.szNome ) == 4 )

{

itoa( iConta, reg.szConta, 10 );

int iVerificador = 0.0f;

for( int i = 0; i < 6; ++i )

iVerificador += (7 - i) * (reg.szConta[i] - '0');

iVerificador /= 11;

int num = 11 - iVerificador;

if( num >= 10 )

num = 0;

if( num == reg.iDigito )

ListaCorreto.push_back( reg );

else

ListaIncorreto.push_back( reg );

}

fclose( pArquivo );

printf( "CONTAS DE NUMERO CORRETO:\n" );

std::list::iterator it = ListaCorreto.begin();

std::list::iterator end = ListaCorreto.end();

while( it != end )

{

printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );

++it;

}

printf( "\nCONTAS DE NUMERO INCORRETO:\n" );

it = ListaIncorreto.begin();

end = ListaIncorreto.end();

while( it != end )

{

printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );

++it;

}

getch();

Vamos utilizar o seguinte código mostrado abaixo:

#include

#include

#include

struct registro_t

{

char szConta[7];

int iDigito;

float flSaldo;

char szNome[128];

};

void main ( void )

{

FILE* pArquivo;

int iConta;

registro_t reg;

std::list ListaCorreto;

std::list ListaIncorreto;

pArquivo = fopen( "C:\\teste.txt", "r" );

if( pArquivo == NULL )

printf( " Erro ao abrir arquivo ..." );

while( fscanf( pArquivo, "%i-%i %f %[^\n]", &iConta, ®.iDigito, ®.flSaldo, reg.szNome ) == 4 )

{

itoa( iConta, reg.szConta, 10 );

int iVerificador = 0.0f;

for( int i = 0; i < 6; ++i )

iVerificador += (7 - i) * (reg.szConta[i] - '0');

iVerificador /= 11;

int num = 11 - iVerificador;

if( num >= 10 )

num = 0;

if( num == reg.iDigito )

ListaCorreto.push_back( reg );

else

ListaIncorreto.push_back( reg );

}

fclose( pArquivo );

printf( "CONTAS DE NUMERO CORRETO:\n" );

std::list::iterator it = ListaCorreto.begin();

std::list::iterator end = ListaCorreto.end();

while( it != end )

{

printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );

++it;

}

printf( "\nCONTAS DE NUMERO INCORRETO:\n" );

it = ListaIncorreto.begin();

end = ListaIncorreto.end();

while( it != end )

{

printf( "%s-%i %f %s\n", it->szConta, it->iDigito, it->flSaldo, it->szNome );

++it;

}

getch();

Essa pergunta já foi respondida por um dos nossos especialistas