Ir para conteúdo
Fórum Script Brasil

heavyscan

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que heavyscan postou

  1. 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 numeros char d1, d2, d3; // os delimitadores int 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 DV int 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 digitos int 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
×
×
  • Criar Novo...