Problems with calculation of "TREE OF LIFE"

4

Good afternoon, I have a problem I need to do the following:

Create a program, in C language, that calculates the size of the tree of life, after a certain number of growth cycles, taking into account that the tree starts with one meter in size.

A tree, 1 meter in size, after 1 cycle, is 2 meters long.

A tree, 1 meter in length, after 2 cycles, is 3 meters long.

A tree, one meter in length, after 3 cycles, is 6 meters long.

A tree, 1 meter in length, after 4 cycles, is 7 meters long.

A tree, one meter in size, after 5 cycles, is 14 meters long.

A tree, one meter in size, after 6 cycles, is 15 meters.

A tree, 1 meter in length, after 7 cycles, is 30 meters long.

So far I've done the following

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

void funcao_01() // sub programa
{
    int ciclos;
    printf(" \n\n             --   ARVORE DA VIDA   --  \n\n");// cabecalho
    printf("  Digite o valor de ciclos desejados: ");
    scanf("%d",&ciclos); // le valor digitado pelo usuario

    float resultado;
    if (ciclos % 2 == 1)
    {
        resultado = (ciclos * ciclos);
        --resultado;
    }
    else
    {
        if(ciclos % 2 == 0)
        {
            resultado = ciclos * 2;
        }
    }

    printf("\n\n  Voce escolheu %d, ciclos\n\n  Sendo assim voce tem %f metros.\n\n\n\n",ciclos, resultado);
}

int main() // programa principal
{
    funcao_01(); // chama funcao
    return 0;
}

because the relationship I had created was as follows:

"When the cycle is odd it doubles .. when it's even it adds +1"

At first, it worked, but when it starts with larger numbers, it does not have logic anymore, so I would like to "standardize" it, but my question is, what is the easiest method to solve this problem?

    
asked by anonymous 21.06.2016 / 20:12

2 answers

7

Come on:

  

Create a program, in C language, that calculates the size of the   life, after a certain number of growth cycles

As the statement said let's create a program that calculates the size of the tree of life, so we already have a name for our program:

void calculaArvoreDaVida() {
  //
}


  

A tree, 1 meter in size, after 1 cycle, is 2 meters long.

     

A tree, 1 meter in length, after 2 cycles, is 3 meters long.

     

A tree, one meter in length, after 3 cycles, is 6 meters long.

     

A tree, 1 meter in length, after 4 cycles, is 7 meters long.

     

"When the cycle is odd it doubles .. when it's even it adds +1"

The logic is correct only the algorithm that does not:

// usamos um loop for para percorrer a quantidade de ciclos
for(int i = 1; i <= ciclos; i++) {

    // verificamos se i é impar ou par 
    if (i % 2 == 1) {
        // se for impar multiplicamos o resultado por 2
        resultado = resultado * 2;
    } else {
        // se for par somamos + 1
        resultado = resultado + 1;
    }
}


Finally:

  

Considering that the tree starts with a meter in size.

Do not forget to initialize the variable resultado :

int resultado = 1;

Ps.: Check the code as I did not test on C .

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

void calculaArvoreDaVida() // sub programa
{
    int ciclos;
    printf(" \n\n             --   ARVORE DA VIDA   --  \n\n");// cabecalho
    printf("  Digite o valor de ciclos desejados: ");
    scanf("%d",&ciclos); // le valor digitado pelo usuario

    int resultado = 1;

    for(int i = 1; i <= ciclos; i++) {        
        if (i % 2 == 1) {
            resultado = resultado * 2;
        } else {
            resultado = resultado + 1;
        }
    }

    printf("\n\n  Voce escolheu %d, ciclos\n\n  Sendo assim voce tem %f metros.\n\n\n\n",ciclos, resultado);
}

int main() // programa principal
{
    calculaArvoreDaVida(); // chama funcao
    return 0;
}
    
21.06.2016 / 21:35
0

RESOLVED:

Well I managed to solve the problem I will put the code here for anyone who wants to see the resolution.

#include <stdio.h>
void calculaArvoreDaVida() // sub programa
{
    int ciclos;
    int resultado = 1;
    int x;
    do
    {
        // cabecalho
        printf(" \n\n             --   ARVORE DA VIDA   --  \n\n");
        printf(" Digite 0 (zero) para sair do programa\n\n");
        printf("  Digite o valor de ciclos desejados: ");
        scanf("%d",&ciclos); // le valor digitado pelo usuario
        if (ciclos == 0) // se o usuario digitar zero em tela imprime mensagem
        {
            printf("\n\n         BYE BYE !  \n\n"); // mensagem exibida caso valor digitado for zero
            return;
        }
        for(x = 1; x <= ciclos; x++ ) // teste e implementacao
        {
            if (x % 2 == 1)
            {
                resultado = resultado * 2;
            }
            else
            {
                resultado = resultado + 1;
            }
        }
        //mostra mensagem na tela caso sucesso
        printf("\n\n  Voce escolheu %d, ciclos\n\n  Sendo assim voce tem %d metros.\n\n\n\n",ciclos, resultado);
        // volta variavel resultado para 1 para refazer o ciclo sem nenhuma variavel atribuida.
        // pois se nao tiver ele vai pegar valores anteriores e manipular apartir daqueles
        // sendo assim nao da certo.
        resultado = 1;
    }
    while(ciclos != 0);
}
// PROGRAMA PRINCIPAL
int main() 
{
    calculaArvoreDaVida(); // chama funcao
    return 0;
} 
    
22.06.2016 / 04:58