1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ajuda num algoritmo.. que me esta a dar a volta a cabeça

Discussão em 'Programação' iniciada por luixx, 27 de Outubro de 2008. (Respostas: 6; Visualizações: 730)

  1. luixx

    luixx Power Member

    pessoal isto ate pode ser do mais facil possivel...mas eu nao dou com isto...

    preciso do fluxograma e pseudo-codigo deste problema:

    -» elaborar um algoritmo que permita calcular a soma da seguinte serie de n termos:

    1-(1/2)+(1/4)-(1/6)+(1/8)-(1/10)+(1/12)


    ajudem-me por favor...isto esta-me a dar cabo da cabeça....
     
  2. Mike42

    Mike42 Power Member

    Código:
    calculaSerie(int num_termos){//7, no exemplo
    
    	float temp;
    	float total = 1;
    	int factor,i;
    
    	for(i = 0, factor = 2; i < num_termos-1 ; i++, factor+=2){
    
    		temp= 1;
    		temp/= factor;
    
    		if(i%2!=0)//termo impar
    			total+=temp;
    		else
    			total-=temp;
    
    	}
    
    	printf("%f\n",total);
    }
    Agora faz o pseudo-codigo a partir daí :P
     
  3. Diogo Pinho

    Diogo Pinho Power Member

    Pseudo-Codigo:
    Código:
    X = 0
    I = 0
    N = 0
    ler(N)
    equanto (I<=N)
      faz:
          I=I+2;   ----> anda só com nº pares
          X = X+1/I;
      fim;
    X=1-X;  ----> retira a 1 valor de X e atribui de novo a X 
    imprime (X)
    
    não faço ideia do que seja um fluxograma
    se não tiver ajudado avisa...
     
    Última edição: 27 de Outubro de 2008
  4. alph

    alph Power Member

    Isto não dá muita ajuda, mas funciona. Fica para investigares, caso te interesses:

    Código:
    def f(n):
        if n == 1:
            return 1
        else:
            return ((n%2 == 0)*2-1)*(1.0/((n-1)*2)) + f(n-1)
    
     
  5. AliFromCairo

    AliFromCairo Power Member

    Boas, isso não está correcto uma vez que tens o sinal trocado para cada um dos termos da série (tirando o caso trivial). Corrigindo:

    Código:
    def f(n):
        if n == 1:
            return 1
        else:
            return ((n%2 [B]!=[/B] 0)*2-1)*(1.0/((n-1)*2)) + f(n-1)
    
    Ou, alternativamente, uma versão mais inteligível (para mim, claro está):

    Código:
    def f(n):
        sum = 1
        i = 1
        while i < n:
            if i % 2 == 0:
                sum = sum + 1.0 / (2 * i)
            else:
                sum = sum - 1.0 / (2 * i)
            i = i + 1
        return sum
    
     
  6. alph

    alph Power Member

    Depende como encaras o n. Mas se o problema é "elaborar um algoritmo que permita calcular a soma da seguinte serie de n termos" então a minha solução está correcta. :)

    Exemplo: 2 termos corresponderá a 1 - (1/2).
     
  7. AliFromCairo

    AliFromCairo Power Member

    Exactamente. No entanto, no procedimento que definiste, f(2) retorna 1.5 e não 0.5 (1 - (1/2)) como era suposto :007:.
     

Partilhar esta Página