> puts ""
> puts "Conversion Program"
> puts "------------------\n"
>
> puts "Would you like to convert:"
> puts "1. F to C"
> puts "2. C to F"
> puts"Enter your choice now: "
> choice = gets.chomp.to_i
>
> if choice == 1
>   puts "Enter a temperature in F:"
>   fahr = gets.chomp.to_f
>   cent = ( (fahr - 32) / 1.8 )
>   puts fahr.to_s + " F is " + cent.round.to_s + " C."
>
> elsif choice == 2
>   puts "Enter a temperature in C:"
>   cent = gets.chomp.to_f
>   fahr = ( (cent * 1.8) + 32 )
>   puts cent.to_s + " C is " + fahr.round.to_s + " F."
> else
>   puts "That is a not a valid choice.  Good bye!"
> end
>

I'm using Ruby, but I'll take a stab at it (learn from my mistakes).

Well, I started off OK (using classes for temp conversion) and then 
things got ugly (probably putting too much in the manager class).

At any rate, here it is. (aka, here's how not to do it. ;-)


#! /usr/bin/env ruby

class TemperatureConverter
   attr_reader :from_unit, :to_unit, :conversion

   def initialize( from_unit='', to_unit='', conversion=proc {|x| x } )
     @from_unit = from_unit
     @to_unit = to_unit
     @conversion = conversion
   end

   def convert( arg )
     @conversion.call( arg )
   end
end

class FahrenheitToCelsiusConverter < TemperatureConverter
   def initialize
     super( 'F', 'C', proc {|f| (f - 32.0) / 1.8 } )
   end
end

class CelsiusToFahrenheitConverter < TemperatureConverter
   def initialize
     super( 'C', 'F', proc {|c| (c * 1.8) + 32 } )
   end
end

class TemperatureConversionManager
   attr_reader :prompt
   def initialize( *converters )
     @converters = converters
     @prompt = <<END_OF_PROMPT

Conversion Program
------------------
Would you like to convert:
END_OF_PROMPT

     index = 0
     @prompt += @converters.map do |converter|
       "#{index += 1}. #{converter.from_unit} to #{converter.to_unit}"
     end.join( "\n" )
     @prompt += "\nEnter your choice now: "
   end

   def run
     print prompt
     user_choice = choose_converter - 1
     if user_choice < 0 or user_choice >= @converters.size
       puts "That is not a valid choice. Goodbye."
     else
       prompt_and_display_conversion( @converters[ user_choice ] )
     end
   end

   def choose_converter
     gets.chomp.to_i
   end

   def get_temperature
     gets.chomp.to_f
   end

   def temperature_prompt( converter )
     "Please enter temperature in #{converter.from_unit}: "
   end

   def prompt_and_display_conversion( converter )
     print temperature_prompt( converter )
     user_input = get_temperature
     converted_temp = converter.convert( user_input )
     puts <<END_OF_RESULTS
#{user_input} #{converter.from_unit} is #{converted_temp} 
#{converter.to_unit}
END_OF_RESULTS
   end
end

TemperatureConversionManager.new(
   FahrenheitToCelsiusConverter.new,
   CelsiusToFahrenheitConverter.new
).run



Corrections / advice / criticisms are welcome.
(I think that I prefer the original version.)

Richard