Resultados 1 a 7 de 7

Tópico: Fatoração Simples

  1. #1
    Lamer
    Data de Ingresso
    Nov 2011
    Localização
    #!/bin/ruby
    Posts
    5
    Post Thanks / Like

    Wink Fatoração Simples

    Olá povo, estava estudando matemática e com a maior preguiça de fatorar, então resolvi criar um script bem simples em Ruby que me auxiliasse nesse trabalho.

    Código:
    #!/bin/ruby
    
    
    
    
    class Fatoracao
    
    
        def Fatorar(numero)
        
            fatores = {2 => 0,
                       3 => 0,
                       5 => 0,
                       7 => 0}
        
            
            puts "\nResolucao: "
            
            
        while numero%2==0
            
            puts numero.to_s+" | 2"
            numero = numero/2
            fatores[2] += 1
                
        end
        
        
        
        while numero%3==0
            
            puts numero.to_s+" | 3"
            numero = numero/3
            fatores[3] += 1
            
        
        end
        
        
        while numero%5==0
        
            puts numero.to_s+" | 5"
            numero = numero/5
            fatores[5] += 1
    
    
        
        end
        
        
        while numero%7==0
        
            puts numero.to_s+" | 7"
            numero = numero/7
            fatores[7] += 1
            
            
        end
    
    
        
        puts 1
        
        puts "\nResultado: "
        
        r2 = 2**fatores[2]
        r3 = 3**fatores[3]
        r5 = 5**fatores[5]
        r7 = 7**fatores[7]
        
        puts "\n2^#{fatores[2]} = #{r2}\n3^#{fatores[3]} = #{r3}\n5^#{fatores[5]} = #{r5}\n7^#{fatores[7]} = #{r7}\n\nFinal: #{r2} * #{r3} * #{r5} * #{r7} = #{r2*r3*r5*r7}\n"
        
        end
    
    
    
    
    end
    
    
    
    
    
    
    print "Digite o valor a ser fatorado: " 
    n = gets.to_i
    
    
    if n>=2
        Fatoracao.new.Fatorar(n)
    else
        puts "O numero deve ser maior ou igual a 2"
    end

  2. #2
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Desculpa @log22, mas seu script esta errado, não esta me retornando certo o valor,
    achei legal o fato de ter criado uma classe mas para o caso achei desnecessario, apesar que
    me deu noção de como criar classes nessa linguagem.

    Bem, eu não sei programar em Ruby, mas acho que fica algo parecido com isso, acabei de fazer aqui e to com poquinho de pressa pra sair, se tiver algum erro
    pode falar.

    Código:
    puts "Digite o valor a ser fatorado: " 
    n = gets.to_i
    resultado = n
    
    while n>1 
        n = n - 1
        resultado = resultado * n
    end
    
    puts resultado
    Última edição por _Guga_; 23 Apr 2012 às 10:59. Razão: não existe print e sim puts
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  3. #3
    Lamer
    Data de Ingresso
    Nov 2011
    Localização
    #!/bin/ruby
    Posts
    5
    Post Thanks / Like
    Sim, eu tinha notado que alguns números não davam o resultado correto, mas creio que sejam os números primos, além do mais funcionou nos meu exercícios, o resto funciona aqui, a classe não é inutil não, já que assim eu posso implementa-la em outro projeto, no caso uma calculadora por exemplo, além de ser mais bonito e organizado (:

  4. #4
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Citação Postado originalmente por log22 Ver Post
    Sim, eu tinha notado que alguns números não davam o resultado correto, mas creio que sejam os números primos, além do mais funcionou nos meu exercícios, o resto funciona aqui, a classe não é inutil não, já que assim eu posso implementa-la em outro projeto, no caso uma calculadora por exemplo, além de ser mais bonito e organizado (:
    Tenho que me desculpar com você, eu confundi, ai é fatoração, e funciona sim, ate com numeros primos, eu tinha pensado em fatorial.
    Mas o resultado poderia sair mais bunito tipo, tah saindo assim:

    Código:
    Final: 1 * n * 1 * 1 = n
    poderia melhorar pra sair real, o fatoração do 9 sai:

    Código:
    Resolução:
    9 | 3
    3 | 3
    1
    
    Resultado:
    2^0 = 1
    3^2 = 9
    5^0 = 1
    7^0 = 1
    Final: 1 * 9 * 1 * 1 = 9
    mas eu acho que poderia sair assim apenas

    Código:
    Resolução:
    9 | 3
    3 | 3
    1
    
    Resultado:
    
    3^2 = 9
    
    Final: 3 * 3 * 1 = 9
    Pois o "Final: " sai muito estrano e antes dele tem algo que não vejo o porque...
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  5. #5
    Lamer
    Data de Ingresso
    Nov 2011
    Localização
    #!/bin/ruby
    Posts
    5
    Post Thanks / Like
    Sim, se eu fosse fazer fatorial, tentaria usar o Teorema de Fermat.

  6. #6
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Citação Postado originalmente por log22 Ver Post
    Sim, se eu fosse fazer fatorial, tentaria usar o Teorema de Fermat.
    Quem saiba eu não faça usando o Teorema de Fermat,,, hahahaha.....
    seria muita maconha pra isso....
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  7. #7
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Reabrindo discussão:

    Quando você fez

    Código:
    fatores = {2 => 0,            3 => 0,            5 => 0,            7 => 0}
    você limitou a fatoração apenas para numeros divisiveis por 2, 3, 5 e 7.

    Agora vamos pegar o numero 121 a fatoração dele ficaria:

    Código:
    121 | 11
    11  | 11
    1
    No caso o seu algoritimo não é capaz de fatorar 121, 289, 529...

    Eu não estou estudando Ruby pra te falar como deveria fazer, acho que
    deveria desenvolver uma rotina para verificar numeros primos e adicionar na lista de divisores.

    Algo como isso:
    Código PHP:
    #"/usr/bin/env perl
    use warnings;
    use 
    strict;


    print 
    "Digite um numero a ser verificado: ";
    chomp (my $num = <>);

    my $i 2;

    while (
    $i <= $num){
        
        if ((
    $num/$i == int $num/$i) && ($num/$i != 1)){
            print 
    "composto\n";
            exit 
    0;
        }
        
        
    elsif ($num == $i){
            print 
    "primo\n";
            exit 
    0;
        }
        
        else{
            
    $i++;
        }

    que eu acho que deveria ficar assim em Ruby
    Código:
    #!/bin/ruby
    
    puts "Digite um numero a ser verificado: "
    num = get.to_i
    
    i = 2
    
    while i <= num
        div = num / i
        if (div == (div).to_i) && (div != 1)
            puts "composto"
        elsif num == i
            puts "primo"
        else
            i++
        end    
    end
    agora pode modificar a rotina, dai sua classe teria que ficar mais ou menos assim:

    Código:
    class Primos 
    #aqui voce fas a rotina para numeros primos
    end
    
    class Fatoracao
    
    
        def Fatorar(numero)
        
            fatores = {Primos}
        
            
            puts "\nResolucao: "
            
            
        while numero%Primos==0
            
            puts numero.to_s+" | 2"
            numero = numero/2
            fatores += 1
                
        end
        
        
        
            
    
    end
    Claro que acima não ensina nada, so exemplifica, mas coloquei para mostrar que ate sua classe iria ficar mais simples.

    Espero que tenha ajudado e que tente seguir essa dica.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •