Ruby :: Aufgabe #56

1 Lösung Lösung öffentlich

Zahlenausgabe in verschiedenen Schreibweisen

Anfänger - Ruby von pocki - 26.11.2014 um 11:53 Uhr
Schreibe ein Programm, welches eine positive Ganzzahl in dezimaler Schreibweise entgegen nimmt.
Gib diese Zahl dann in binärer, oktaler und hexadezimaler Schreibweise, ohne Verwendung der integrierten Formatierungsfunktionen, wieder aus.

Beispiel:

Konsolenausgabe:


Zahl eingeben: 365

binär: 101101101
oktal: 555
hexadezimal: 16D

Lösungen:

vote_ok
von Idef1x (1320 Punkte) - 18.01.2018 um 09:32 Uhr
Quellcode ausblenden Ruby-Code

def dec_to_x(decimal, base)
=begin
 In:
  - Decimal number preentered by the user
  - Base of the numbersystem the decimal has to be converted to (2, 8, 16)
 
 Out:
  - converted decimal number
  
=end

#Section - CODE

 #Section - Declaration
    start = decimal
    exponent = 0
    result = ""
    numsys = ""

    hex = {10 => "A", 11 => "B", 12 => "C", 13 => "D", 14 => "E", 15 => "F"}
    
 #Section - Naming Numbersystem
    case base
    when 2
        numsys = "Binary"
    
    when 8
        numsys = "Octal"
        
    when 16
        numsys = "Hexadecimal"
        
    else
        return
        
    end
 #Section - Converting
    if decimal == 0
        result = "0"
        
    elsif decimal > 0
        #calculating the highest fitting exponent for decimal >= base ** exponent
        exponent = Math.log(decimal, base).to_i
        
        loop do
            fits = 0
            
            # how often does the base**exponent fit in the decimal?
            fits += decimal / base ** exponent
            
            # reducing decimal
            decimal -= fits * base ** exponent
            
            #in case of hexadecimal numbersystem converting fits
            if base == 16 && fits >= 10
                fits = hex[fits]
                
            end
            
            #filling result
            result += "#{fits}"
            
            #reducing the exponent by 1
            exponent -= 1
            
            #setting break-condition
            break if exponent < 0
            
        end
        
    else
        return
        
    end
    
 #Section - Output
    puts "#{numsys}: #{result}"
    
end

#getting the decimal number
dec = gets.to_i

#outputting the decimal number
puts "Decimal: #{dec}"

#running method for each numbersystem
dec_to_x(dec , 2)
dec_to_x(dec , 8)
dec_to_x(dec , 16)