• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lugh

Números Primos

4 mensagens neste tópico

Mais um rookie com problemas em calcular os números primos!  :cheesygrin:

Então é assim, fiz uma função para verificar se determinado numero é primo, aparentemente tudo ok.

No meu main é suposto receber números, verificar se estes são primos e em caso afirmativo soma-los. É igualmente suposto carregar em qualquer tecla diferente dum número para sair.

Agora o mais notável: se meter a sequência 2, 3, 4 e carregar numa letra, impecável, dá 5. O mais espantoso é se meter a sequência 4, 3, 2 e depois sair carregando numa tecla... Resultado: 7.

Isto porque o programa associa sempre o valor numérico do ultimo numero introduzido à letra que é seleccionada, facto esse que eu não consigo entender. Por isso no 1º caso associa o número 4 à letra escolhida, 4 não é primo por isso não afecta o resultado. No 2º caso o último número introduzido é o 2, é primo por isso o resultado sai viciado

Alguma dica?

O código:

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

int is_prime(int num);
int main(void)
{
  int numero, retorno, contador = 0, aux;
  
  do {
     printf("Insira um numero: \n");
     fflush(stdin);
     aux = scanf("%d", &numero);
     retorno = is_prime(numero);
     if (retorno == 1) {
        contador += numero;  
        printf("O numero inserido: %d\n", numero);
        printf("A actual contagem e: %d\n", contador);
        printf("O aux e %d\n", aux);      
     } else {
        printf("O numero inserido: %d\n", numero);
        printf("A actual contagem e: %d\n", contador); 
        printf("O aux e: %d\n", aux);       
     }
  } while (aux != 0);
  printf("A soma dos numeros primos é: %d\n", contador);
  system("PAUSE");
  return 0;
}


int is_prime(int num) {
    int i, max, resultado;
    max = sqrt(num);
    for (i = 2; i <= max; i++) {
        resultado = (num % i);
           if (resultado == 0) {
           return 0;
        }
    } 
    return 1;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
/* ... */
  do {
     printf("Insira um numero: \n");
     fflush(stdin);
     aux = scanf("%d", &numero);
                                    /* *************************************** */
     if (aux != 1) break;           /* sair quando não se introduzir um número */
                                    /* *************************************** */
     retorno = is_prime(numero);
     /* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Atenção que o fflush(stdin) não funciona em todos os compiladores. No standard C, a chamada a esta função sobre streams de input é indefinida. Em alguns compiladores, como o do Visual C++, funciona como é pretendido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora