Ir para conteúdo

POWERED BY:

Arquivado

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

Gugsteer

Lógica em estrutura de repetição

Recommended Posts

Pessoal,



Qual seria a lógica para construir um programa em C que lê um número de termos N e exibe o valor da expressão S abaixo:



S = 1 + 2 + 3 + 4 + 3 + 2 + 1 + 2 + 3 + 4 + 3 + 4 + ....


Compartilhar este post


Link para o post
Compartilhar em outros sites

Confere a fórmula da soma se ela não seria assim:

S = 1 + 2 + 3 + 4 + 3 + 2 + 1 + 2 + 3 + 4 + 3 + 2 + .... 

Se for como você digitou não vejo a lógica. Vou tratar para a fórmula que corrigi acima....

Matematicamente falando, se o n não for determinado, S = ∞. Mas supondo que S seja determinado, tente ver a fórmula desta maneira...

S = (1 + 2 + 3 + 4 + 3 + 2) + (1 + 2 + 3 + 4 + 3 + 2) + ....

Compartilhar este post


Link para o post
Compartilhar em outros sites
É isso mesmo. Na verdade, o programa completo é o seguinte:


Faça um programa que leia o número de termos e um valor positivo para X, calcule e mostre o valor da série a seguir:


S = -(x2/1!)+(x3/2!)-(x4/3!)+(x5/4!)-(x6/3!)+(x7/2!)-(x8/1!)+(x9/2!)-(x10/3!)+(x11/4!)-(x12/3!).......

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não tenho trabalhado em C (Sei quase nada!). Mas fiz minha versão em PHP (Também não sei muito). Não sei se é o algorítimo que se deseja, mas funciona!

Fica a teu cargo traduzir o código que fiz para C e analisar se não haveria solução melhor.

OBS: "echo" serve para escrever na tela. As variáveis em php iniciam com cifrão "$". O echo que está dentro do while mostra as parciais da soma.

//Números que deverão ser lidos
$n = 22;
$x = 2;

//Definição de variáveis
$s = 0;
$i = 1;
$fat = 1; //fatorial começa em 1!
$fatAnterior = 1;

while ($i<=$n){
  if ($i%2 == 0) { // Se o resto for par, SOMA
      $s += (pow($x,$i+1)/$fat);
  } else { // Se for ímpar, SUBTRAI
      $s -= (pow($x,$i+1)/$fat);
  }
  
  if ($fat == 1) 
      {$fatAnterior = $fat; $fat = 2;} //Se tava em 1! passa para 2!
  elseif ($fat == 2 && $fat>$fatAnterior) 
      {$fatAnterior = $fat; $fat = 6;} //Crescendo... Se tava em 2! passa para 3! 
  elseif ($fat == 2 && $fat<$fatAnterior) 
      {$fatAnterior = $fat; $fat = 1;} //Decrescendo... Se tava em 2! passa para 1! 
  elseif ($fat == 6 && $fat>$fatAnterior) 
      {$fatAnterior = $fat; $fat = 24;} //Crescendo... Se tava em 3! passa para 4! 
  elseif ($fat == 6 && $fat<$fatAnterior) 
      {$fatAnterior = $fat; $fat = 2;} //Decrescendo... Se tava em 3! passa para 2! 
  elseif ($fat == 24) 
      {$fatAnterior = $fat; $fat = 6;} //Se tava em 4! passa para 3!
  
  echo "<br>n=$i ||  FatAnterior = $fatAnterior; Fat = $fat; || Soma = $s<br>";
  $i++;
}
echo "<br>Soma = $s";

Bons estudos!!! Conheça, contribua e divulgue o projeto da "Wikipédia dos Mapas": OpenStreetMap = www.osm.org.

Compartilhar este post


Link para o post
Compartilhar em outros sites
int calcula_fat(int fatorial){
  int fatorial_calculado;
  if(fatorial==1)
    return 1;
  fatorial_calculado=fatorial*calcula_fat(fatorial-1);
  return fatorial_calculado;
}

int main(){
  int i=0,num_termos,x,x_calculado=0,fatorial=1,muda_fat=0;
  float resultado=0;
  printf("Digite o numero de termos:");
  scanf("%d",&num_termos);
  printf("Digite um valor positivo para X:");
  scanf("%d",&x);
  while(i<num_termos){   
    if(i==0)
      x_calculado=x;
    x_calculado=x_calculado*x;
    if(i%2==0){
      resultado=resultado-((float)x_calculado/(float)calcula_fat(fatorial));
    }
    else{
      resultado=resultado+((float)x_calculado/(float)calcula_fat(fatorial));
    }
    if((fatorial==1)||(fatorial==4)){
      muda_fat++;
      muda_fat=muda_fat%2;
    }
    if(muda_fat)
      fatorial++;
    else
      fatorial--;   
    i++;    
  }
  printf("O Resultado e: %f",resultado);
  system("pause");    
}

 

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.