Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dos.santos.jr

Erro na multiplicação

Recommended Posts

E ai glra,

 

estou por fazer um programa que gera os dois dígitos do CPF após o usuário digitar os 9 iniciais, acontece que estou com um gargalo na linha 34, acontece que o programa está executando a multiplicação de forma incorreta, ao executar o teste e digitar: 123456789 ao invés de me retornar "210" o programa retorna sempre "2430", conto com a ajuda de vocês, obrigado:

 

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int cpf[9];
    int i,j;
    int soma = 0;
    char char_cpf[9];
    int cpfOk;
    
      printf("Informe o valor dos 9 primeiros digitos do CPF:\n");
    gets(char_cpf);
    
    for(i=0; i<9; i++){
       if (char_cpf[i] >= 48 && char_cpf[i] <= 58){ // garante que foi digitado somente numeros entre 0 e 9
          cpf[i] = char_cpf[i] - 48;    // transforma o caracter '0' no inteiro 0
       }                                  // (48 é a posição de '0' na tabela ASCII)
       else{
            printf("não foi informado o cpf corretamente.\n");
            cpfOk = 0; //controle para informar que o cpf possui um caractere invalido
       }
    }
    
    if(cpfOk){
        for(i=0; i<9; i++)
           printf("%d-",cpf[i]);
    }
    printf("\n");

    for(i=0;i<9;i++){
       for(j=10;j>=2;j--){ //troquei o ";" por chaves
       soma = (j * cpf[i]) + soma;          //Linha 34
       }        
    }
    printf(" - Soma = %d\n", soma);
    
    system("pause");    
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu problema está no loop. O programa está multiplicando cada número por todas as constantes (10, 9, 8, 7, 6, 5, 4, 3, 2) ao invés de multiplicar cada número por uma constante certa, pois você criou 2 for integrados (um dentro do outro). Apenas crie 1 for que incremente o 'i' e decremente o 'j' a cada loop.

Troque:

for(i=0;i<9;i++){
    for(j=10;j>=2;j--){
        soma = (j * cpf[i]) + soma;
    }
}

Por:

for(i=0,j=10 ;i<9; i++,j--){
    soma = (j * cpf[i]) + soma;
}

Espero que tenha entendido o problema, não apenas copiado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.