Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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