Vector mean, prime number indices

1

Well, this is the problem. I thought here and got a code. However, both the sum and the k (which would be the prime number positions) are incorrect. Any thoughts on why?

#include <stdio.h>
#include <windows.h>
int main(void)
{
    int k,i,j,d,v[101],soma,prim,f;
    float med;
    i=0;
    while((i<101) && (j!=0) ){
        i++;
        printf ("Defina o valor do elemento %d => ", i);
        scanf ("%d", &v[i]);
        printf ("Para parar digite 0 => ");
        scanf ("%d", &j);
    }
    k=0;
    prim=1;
    f=i;
    soma=0;
    while (f>2){ // verificação para ver se a posição do vetor(i) é um número primo
        if (i%(f-1)==0){
            prim = 0;
        }
        else{
            k++;
            soma=soma+v[f];
        }
        f=f-1;
    }
    med=soma/k;
    printf("%d, %d, %d", k,soma,i); // só está servindo pra ver o que está dando errado no código
    printf("A media e => %f \n", med);
    system("pause");
}
    
asked by anonymous 09.06.2014 / 05:46

1 answer

1

This snippet of your code has some problems:

k=0;
prim=1;
// o valor armazenado nunca é comparado com nada nem impresso.
// Em um ponto mais pra baixo, você altera esse valor, mas continua não usando pra nada.
f=i;
soma=0;
while (f>2){
    if (i%(f-1)==0){
    // i armazena o tamanho do seu vetor, você está checando se isso é divisível por f.
    // O que você deveria estar checando é se f, a posição atual, é um número primo. 
        prim = 0;
    }
    else{
    // esta parte parece certa, exceto que você vai entrar aqui quando o tamanho
    // do seu vetor é divisível pela posição atual.
        k++;
        soma=soma+v[f];
    }
    f=f-1;
}

If you change that conditional to something that checks to see if f is prime, it will probably work as you wanted.

But since you have a small, fixed-size vector, there is a more efficient way to solve your problem. The following pseudocode would be more efficient:

P := (2, 3, ..., 97) # P armazena todos os primos entre 0 e 100
m := len(P)          # m armazena a quantidade de números primos no intervalo
I := input           # I armazena os valores que o usuário digitou
n := len(I)          # n armazena o número de elementos no vetor I
k := 0               # k recebe a quantidade de índices primos
s := 0               # s recebe a soma dos valores em índices primos

enquanto i < m e P[i] < n:
# para cada número primo que também é um índice válido de I:
        k += 1    # atualiza k
        s += P[i] # atualiza s
        i += 1    # atualiza i
    
23.07.2014 / 08:04