Preciso fazer um programa com as seguintes exigências:
O programa deverá solicitar a entrada de uma string (máximo de 30 caracteres) com caracteres decimais, a string pode possuir caracteres utilizados para formatação do valor como: .(ponto), -(traço), virgula e outros;
A solicitação da entrada de strings será finalizada apenas quando o usuário digitar “FIM” em qualquer padrão. Mensagem: "Digite 'FIM' para encerrar o programa.”;
Caso o usuário digite uma string onde não seja possível calcular o dígito verificador, emitir a mensagem: "Atenção!!! Valor informado inválido."
Caracteres não decimais (utilizados na formatação) devem ser ignorados no cálculo do dígito verificador;
O cálculo do dígito verificador de ser realizado por uma função com nome “calcula_dv”;
A string informada pelo usuário deve ser passada para a função calcula_dv() através de chamada por valor;
A função calcula_dv() deve retornar um valor inteiro, ou seja, se o cálculo for bem sucedido retornar DV, caso contrário retornar valor -1;
Se cálculo do DV for bem sucedido enviar mensagem para o usuário: DV calculado com sucesso: + string digitada + “-“ + DV calculado.
O código fonte será avaliado e itens como cabeçalho de programa e boas práticas de programação amplamente divulgados em nossas aulas serão itens de pontuação do trabalho.
Regras para cálculo do dígito verificador módulo 11.
Para obter o DV da string digitada pelo usuário, multiplica-se cada caracter da string sem o DV pelos multiplicadores 9,8,7,6,5,4,3,2 nesta ordem (repetir está sequência quantas vezes for necessário), soma-se as unidades das dezenas.
Já tinha feito um para CPF queira adaptar ele para estas especificações se puderem me ajudar.
#define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"#include"string.h"int main(int artgc,char** argv){int valor1, valor2, valor3, valor4;// os numeroschar d1, d2, d3;// os delimitadoresint n;int soma, i;// para calculo dos DV 123.456.789-09 OK
printf("Entre com o CPF no formato 012.345.678-90 e Tecle ENTER ao terminar\n");
printf("\nCPF: ");
n = scanf("%3d%c%3d%c%3d%c%2d",&valor1,&d1,&valor2,&d2,&valor3,&d3,&valor4 );// o que leu?
printf("\nscanf() leu %d itens\n", n);// os valores
printf("scanf() valor1 = %03d\n", valor1);
printf("scanf() valor2 = %03d\n", valor2);
printf("scanf() valor3 = %03d\n", valor3);
printf("scanf() valor4 = %02d\n", valor4);// os delimitadores
printf("scanf() delimitador 1 = [%c]\n", d1);
printf("scanf() delimitador 2 = [%c]\n", d2);
printf("scanf() delimitador 3 = [%c]\n", d3);// mostra os valores afinal
printf("\nCPF lido %03d.%03d.%03d-%02d\n", valor1, valor2, valor3, valor4);// aqui vão os digitos 1 a 1 para calcular os DVint digito[11]={0,0,0,0,0,0,0,0,0,0,0};
digito[0]= valor1 /100;
digito[1]=(valor1 %100)/10;
digito[2]= valor1 %10;
digito[3]= valor2 /100;
digito[4]=(valor2 %100)/10;
digito[5]= valor2 %10;
digito[6]= valor3 /100;
digito[7]=(valor3 %100)/10;
digito[8]= valor3 %10;
digito[9]= valor4 /10;
digito[10]= valor4 %10;
printf("Digito a Digito: ");for(i =0; i <11; i = i +1){
printf("%d ", digito[i]);}
printf("\n");/////////////////////////////////////////////////////////// DV 1// o primeiro digito verificador, modulo 11 dos 9
soma =0;for(i =0; i <9; i = i +1)
soma = soma + digito[i]*(10-i);// 10..2// essa e a conta que da nome ao processo
soma = soma %11;if(soma >1)
digito[9]=11- soma;else
digito[9]=0;/////////////////////////////////////////////////////////// DV 2// o segundo DV, modulo 11 dos 10
soma =0;for(i =0; i <10; i = i +1)
soma = soma + digito[i]*(11- i);// 11..2// essa e a conta que da nome ao processo
soma = soma %11;if(soma >1)
digito[10]=11- soma;else
digito[10]=0;
printf("\nDV calculados: %d %d\n", digito[9], digito[10]);// compara os digitosint dv1ok = digito[9]==(valor4 /10);int dv2ok = digito[10]==(valor4 %10);if(dv1ok && dv2ok){
printf("CPF valido\n");}else{if(!dv1ok) printf("DV1 'devia ser %d. Lido %d\n", digito[9],(valor4 /10));if(!dv2ok) printf("DV2 'devia ser %d. Lido %d\n", digito[10],(valor4 %10));
printf("CPF INVALIDO\n");};// if}// main
Pergunta
heavyscan
Preciso fazer um programa com as seguintes exigências:
O código fonte será avaliado e itens como cabeçalho de programa e boas práticas de programação amplamente divulgados em nossas aulas serão itens de pontuação do trabalho.
Regras para cálculo do dígito verificador módulo 11.
Para obter o DV da string digitada pelo usuário, multiplica-se cada caracter da string sem o DV pelos multiplicadores 9,8,7,6,5,4,3,2 nesta ordem (repetir está sequência quantas vezes for necessário), soma-se as unidades das dezenas.
Já tinha feito um para CPF queira adaptar ele para estas especificações se puderem me ajudar.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.