1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda na resolução de um exercicio

Discussão em 'Programação' iniciada por Angell'S, 13 de Abril de 2009. (Respostas: 14; Visualizações: 861)

  1. Angell'S

    Angell'S Power Member

    Boas malta, venho-vos aqui incomodar com um exercício,

    Elabore um programa que lê do standard input um número n e uma base b, para a qual se irá converter o número n, determine essa conversão e escreva em standard output esse resultado. A base b deve estar compreendida no intervalo de 2 a 16.
    Exemplo: dado o n=2447, converter para base 16 será:
    (2447)10 = (98F)16. O resto 15 foi substituído por F.

    Nota:
    A = 10
    B = 11
    C = 12
    D = 13
    E = 14
    F = 15

    encalhei neste, percebo a ideia, não sei é faze-lo.

    se alguém me quiser ajudar, agradecia ;)

    thx e cumps
     
  2. marcobjorge

    marcobjorge Power Member

    Olá,

    O problema é a conversão?

    Vê como se faz a conversão decimal para binário e aplica o mesmo algoritmo.
     
  3. Granadafeup

    Granadafeup Power Member

    Ve se isto ajuda Link
     
  4. Angell'S

    Angell'S Power Member

    o problm é mesmo o algoritmo em si...

    onde anda esse algoritmo que falas? :P


    epá um edit rápido, esqueci-me de dizer que a linguagem é java.....Granadafeup o link é fixe, mas não é para java (a culpa tb foi minha sry)
     
  5. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Se percebi bem, o número será sempre recebido na base decimal (10), e, por causa da parte que diz "No intervalo de 2 a 16", assumo que não seja só converter em binário ou hexadecimal, como também em quaisquer bases entre 2 a 16, certo?
    Ou seja, posso pedir-te para passares (1600)10 para a base 12?
     
  6. Angell'S

    Angell'S Power Member

    ya é isso mesmo

    o número é sempre recebido em ase decimal, e pode ser convertido para qualquer base à custa de divisões sucessivas.
     
  7. Baderous

    Baderous Banido

    Quanto ao algoritmo, como vais ter abranger o caso do hexadecimal em que entram letras à mistura, o melhor será utilizar uma string para guardar o resultado final. O que tens de fazer é ir dividindo o número pela base, em que actualizas o número com o resultado dessa divisão, e o resto guardas na string sobre a forma de caracter, tendo em atenção a ordem dos sucessivos restos. Esta será a forma mais simples. Sem utilizar strings também dá, mas não dá para fazer o caso do hexadecimal, quando o resultado tem letras.
     
  8. Angell'S

    Angell'S Power Member

    ok entendi
    vou tentar fazer, já agora há algum stress de meter aqui o código? (não quero infringir regras)

    edit:

    qual é a ordem pela qual é inserido os elementos na string?
     
    Última edição: 13 de Abril de 2009
  9. Baderous

    Baderous Banido

    Não há problema em meter código.
    Repara que quando acabas as divisões, recolhes os restos do último calculado para o primeiro. (O último resto vai ser o dígito mais à esquerda no resultado final).
     
  10. Angell'S

    Angell'S Power Member

    sim isso eu sei :)

    a ver vamos ;)
     
  11. mR.z3ro

    mR.z3ro Power Member

    Boas, eu acho que percebi. falta apenas o calculo para a conversão de decimal para base 16 ? certo ? Eu aprendi a calcular como passar de umas bases pras outras, agora ja não me lembro como...lol , acho que isso aparece num livro meu de bases de programação...

    Cumps

    Edit: Desculpem, não prestei muita atenção ao que já se escreveu... lol, em relação ao algoritmo está ai uma cena fix pra pensar ...
     
    Última edição: 13 de Abril de 2009
  12. Angell'S

    Angell'S Power Member

    Bem aqui tá o código do trabalho :)

    Agradeço a todos pela ajuda
     
  13. Baderous

    Baderous Banido

    Fica aqui a minha solução feita em C para qualquer base excepto 16 (Hexadecimal):

    Código:
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int main(int argc,char** argv) {
        int numero = atoi(argv[1]);
        int base = atoi(argv[2]);
        int resto = numero, aux, final=0, i=0;    
        while (numero) {
            aux=numero;
            numero/=base;
            resto=aux%base;
            final+=resto*pow(10,i);
            i++;
        }
        printf("%d\n",final);
        return 0;
    }
    Como vês, era um pouco mais intrincada a solução.
     
  14. Angell'S

    Angell'S Power Member

    sim era :P

    mas pronto tá resolvido ;)

    thx
     

Partilhar esta Página