luispt Posted October 27, 2009 at 05:46 PM Report Share #293596 Posted October 27, 2009 at 05:46 PM /** 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); b) 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 🙂 Link to comment Share on other sites More sharing options...
Carloz Posted October 27, 2009 at 05:59 PM Report Share #293597 Posted October 27, 2009 at 05:59 PM 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) Link to comment Share on other sites More sharing options...
luispt Posted October 27, 2009 at 06:05 PM Author Report Share #293600 Posted October 27, 2009 at 06:05 PM sorry nao sabia vou ja editar é que eu tou com duvidas nesse exercicio se me pudessem ajudar Link to comment Share on other sites More sharing options...
Warrior Posted October 27, 2009 at 06:41 PM Report Share #293605 Posted October 27, 2009 at 06:41 PM 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. Link to comment Share on other sites More sharing options...
luispt Posted October 27, 2009 at 11:02 PM Author Report Share #293637 Posted October 27, 2009 at 11:02 PM 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 Link to comment Share on other sites More sharing options...
pedrosorio Posted October 28, 2009 at 12:17 AM Report Share #293643 Posted October 28, 2009 at 12:17 AM "a) a trajectoria de n e o respectivo comprimento d (a especificar pelo utilizador); b) 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 b) 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. Link to comment Share on other sites More sharing options...
luispt Posted October 28, 2009 at 12:58 AM Author Report Share #293649 Posted October 28, 2009 at 12:58 AM muito obrigada eu sou um novato disto, tou me a aplicar a fundo para ver se passo a esta cadeira :S Link to comment Share on other sites More sharing options...
pedrosorio Posted October 28, 2009 at 01:09 AM Report Share #293652 Posted October 28, 2009 at 01:09 AM 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. Link to comment Share on other sites More sharing options...
luispt Posted October 28, 2009 at 01:09 PM Author Report Share #293699 Posted October 28, 2009 at 01:09 PM 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; } Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now