NosferatuPT Posted December 31, 2009 at 06:41 PM Report Share #303477 Posted December 31, 2009 at 06:41 PM Tenho de fazer um problema que consiste em criar uma função que aceite como parâmetro um inteiro e que troque os dígitos do mesmo. Até agora tenho isto: #include<stdio.h> int troca(int num) { int i=0; while(i < num) { scanf("%d",&num); num = (num/10)%10; i++; } } Mas acho que o que fiz foi apenas ler os dígitos um a um. Agora preciso de trocá-los.. mas não sei como ? Ideias pf 🙂 Link to comment Share on other sites More sharing options...
mogers Posted December 31, 2009 at 07:17 PM Report Share #303483 Posted December 31, 2009 at 07:17 PM Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer. Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como 123 % 10 = 3 123 / 10 = 12 (divisão inteira) 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 321 = ((3 * 10) + 2) * 10) + 1 "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
Baderous Posted December 31, 2009 at 07:28 PM Report Share #303487 Posted December 31, 2009 at 07:28 PM Podes vir a ter de jogar com as sucessivas potências de 10, daí que a função pow(base,expoente) do math.h pode vir a ser útil. Caso a utilizes não te esqueças de a linkar através da flag -lm. Link to comment Share on other sites More sharing options...
Localhost Posted December 31, 2009 at 08:10 PM Report Share #303492 Posted December 31, 2009 at 08:10 PM Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar. here since 2009 Link to comment Share on other sites More sharing options...
ic Posted December 31, 2009 at 08:30 PM Report Share #303497 Posted December 31, 2009 at 08:30 PM Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar. A forma mais simples deverá ser a apontada plo mogers. 🙂 Link to comment Share on other sites More sharing options...
mogers Posted December 31, 2009 at 08:42 PM Report Share #303500 Posted December 31, 2009 at 08:42 PM Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar. Operações bit a bit ajudam bastante quando trabalhas com potências de base 2, mas como estamos a falar de base 10 (décimal), essas operações não servem. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
Localhost Posted December 31, 2009 at 08:44 PM Report Share #303501 Posted December 31, 2009 at 08:44 PM Hmm, ok, como disse, nunca utilizei operadores bit a bit here since 2009 Link to comment Share on other sites More sharing options...
NosferatuPT Posted December 31, 2009 at 08:55 PM Author Report Share #303503 Posted December 31, 2009 at 08:55 PM Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer. Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como 123 % 10 = 3 123 / 10 = 12 (divisão inteira) 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 321 = ((3 * 10) + 2) * 10) + 1 Percebido 🙂 Eu já suspeitava que seria algo assim.. É que a parte complicada para mim nem é fazer o raciocínio.. o difícil é passar para código. Então, tenho de fazer com que o numero seja dividido por 10 (resto da divisão) e depois na mesma por 10 (sem ser a divisão com o resto). Mas o valor dessa última divisão tem de passar para o início do ciclo para ele considerar esse o número e voltar a fazer a mesma coisa até ser 0. Eu percebi. Agora, como é que faço o while disso?... Link to comment Share on other sites More sharing options...
mogers Posted December 31, 2009 at 09:32 PM Report Share #303515 Posted December 31, 2009 at 09:32 PM Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código. Enquanto o número é diferente de 0 // while (num != 0) pegar no resto da divisão dividir num por 10 actualizar o resultado return resultado "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
NosferatuPT Posted December 31, 2009 at 11:15 PM Author Report Share #303526 Posted December 31, 2009 at 11:15 PM Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código. Enquanto o número é diferente de 0 // while (num != 0) pegar no resto da divisão dividir num por 10 actualizar o resultado return resultado Nunca fui adepto de pseudo-código... 🙂 Mas pode fazer jeito 🙂 Muito obrigado. 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