Jump to content
Sign in to follow this  
luispt

Ajudem me :( exercicio de programaçao C

Recommended Posts

luispt

/**    Considere o seguinte problema de L. Collatz (1937): Dado um numero inteiro, n, se par, divida por dois; se for impar,

multiplique por 3 e some 1. Repita as operacoes anteriores e pare quando atingir 1. A sequencia de valores obtidos chama-se uma trajectoria.

Escreva um programa para determinar:

    a) a trajectoria de n e o respectivo comprimento d (a especificar pelo utilizador);

    :thumbsup: o tempo de paragem t de n, definido como o numero de iteracoes necessarias para, partindo de n, atingir um inteiro menor que n.

(A conjectura de Collatz: e de que "t" e infinito para todo o n.)

**/

// 3n+1

int main ( )
{
    int n,d,seq=0;
    printf("\n\nIntroduza um num inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz: \n\n");
    scanf("%d",&n);
    printf("\nIntroduza um comprimento para a trajectoria: \n");
    scanf("%d",&d);
    printf("\n\nTrajectoria: \n");
        while(n!=1)
    {    if(n%2==0)
            n=n/2;
         else
            if(n%2!=0)
                n=(n*3)+1;
         printf("\n.%d\n",n);
         if(seq){
                printf("%d",n);
                seq=seq--;}
    }




  
    return 0;

}

cheguei a esse ponto e nao consigo mais desenvolver o algoritmo peço ajuda sff :)

Share this post


Link to post
Share on other sites
Ziwdon

Antes de mais vê isto:

LINK


"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Share this post


Link to post
Share on other sites
luispt

sorry nao sabia vou ja editar é que eu tou com duvidas nesse exercicio se me pudessem ajudar

Share this post


Link to post
Share on other sites
Warrior

Já resolvi esse problema mas neste caso não consigo perceber o que se pede.

É simplesmente pegar num número N e calcular o D e o T? (respectivamente distância a 1 e a um valor < N)

Já agora, para qualquer N é sempre possível atingir 1.

Share this post


Link to post
Share on other sites
luispt

o problema é esse nem eu percebo :S

isto é um tpc para a cadeira de programaçao foi o unico que ate agora nao consigo resolver :S

Share this post


Link to post
Share on other sites
pedrosorio

"a) a trajectoria de n e o respectivo comprimento d (a especificar pelo utilizador);

    :thumbsup: o tempo de paragem t de n, definido como o numero de iteracoes necessarias para, partindo de n, atingir um inteiro menor que n.

(A conjectura de Collatz: e de que "t" e infinito para todo o n.)"

a) A trajectória são os números pelos quais passa a sucessão até chegar a 1, o comprimento é o tamanho dessa trajectória

:) A conjectura de Collatz é de que t é finito para todo o n e não infinito como tens aí.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
luispt

muito obrigada eu sou um novato disto, tou me a aplicar a fundo para ver se passo a esta cadeira :S

Share this post


Link to post
Share on other sites
pedrosorio

muito obrigada eu sou um novato disto, tou me a aplicar a fundo para ver se passo a esta cadeira :S

Força! =)


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
luispt

Resolvido:

alinea a)

int main()
{
   int n,d,i;
   printf("\n\nInsira um numero inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz:");
   scanf("%d",&n);
   printf("\nIntroduza um comprimento para a trajectoria:");
   scanf("%d",&d);
   i=0;
   while(n>1 && i<d)
   {  if(n%2==0)
           n=n/2;
       else
           n=3*n+1;
   printf("\nTrajectoria:  %d\n", n);
   i++;
   }
   return 0;
}

alinea b)

int main()
{
   int n,d,i,ninicial;
   printf("\n\nInsira um numero inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz:");
   scanf("%d",&n);
   ninicial=n;
   i=0;
   while(n>=ninicial)
   {  if(n%2==0)
           n=n/2;
       else
           n=3*n+1;
   printf("\nTrajectoria:  %d\n", n);
   i++;
   }
   printf("\nO tempo de paragem e': %d", i);
  return 0;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.