• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

luispt

Ajudem me :( exercicio de programaçao C

9 mensagens neste tópico

/**    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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"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í.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Força! =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora