Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Помогите сделать калькулятор! пожалуйста!


Автор: iritschultz 26.11.2011, 18:08
Задача: сделать калькулятор, который бы считал сложение, вычитание и умножение. причем умножение в столбик, с промежуточными результатами, и выглядел вот так:
Enter 1st number: 12345
Enter 2nd number: 67890
Enter operation: +

12345
+67890
------
80235

Enter 1st number: 324
Enter 2nd number: 111
Enter operation: -

324
-111
----
213
Enter 1st number: 325
Enter 2nd number: 4405
Enter operation: *

325
*4405
-----
1625
0
1300
1300
-------
14316


Сначала программа считала все, но не выводила промежуточные результаты. Путем проб и ошибок и компановки разных кусков кода из интернета я сделала следующее:


def interm_res(res_length,num)
  num_length=num.to_s.length
  " "*(res_length-num_length) + num.to_s
end
def read_safe_positive_number(enter_first_number)
end

puts "Enter 1st number:"
x = gets.strip.to_i
while x<= 0
puts "Number must be greater than 0. Please enter it again:"
x = gets.strip.to_i
end



def read_safe_positive_number(enter_second_number)
end
puts "Enter 2nd number:"
y = gets.strip.to_i
while y<= 0
puts "Number must be greater than 0. Please enter it again:"
y = gets.strip.to_i
end

def sum(x,y)
@a= x.to_i+y.to_i
end
def sub(x,y)
@a= x.to_i-y.to_i
end

puts "Enter operation:"
z=gets.strip
 
if z=="+"
  sum(x,y)
end

if z=="-"
  sub(x,y)
end

q = [ x, z, y ].join
result=eval(q)
res_length=result.to_s.length

if z == "*"
   puts interm_res(res_length,x),"*",interm_res(res_length,y),"-"*res_length
  i=0
end
y.to_s.split('').reverse.each do |digit|
     interm = x.to_i*digit.to_i
     puts "#{' '*(res_length.to_i-interm.to_s.length - i)}#{interm.to_s}"
     i+=1
end
puts '-'*res_length


puts result

if z=="+"
  puts sum(x,y)
elsif z=="-"
  puts sub(x,y)
  
  
puts x.to_s.rjust(6)
puts z.rjust(6)
puts y.to_s.rjust(6)
puts "-------".rjust(6)
puts @a.to_s.rjust(6)
end
 
Программа прекрасно считает умножение, выводит промежуточнеы результаты. Но отказывается теперь считать сложение и вычитание. Говорит ошибка из-за ковычек в этом куске:(выделено оранжевым). С ковычками она считает *, но не считает + и -, а без ковычек наоборот. 
f z == "*"
   puts interm_res(res_length,x),"*",interm_res(res_length,y),"-"*res_length
  i=0
end
y.to_s.split('').reverse.each do |digit|
     interm = x.to_i*digit.to_i
     puts "#{' '*(res_length.to_i-interm.to_s.length - i)}#{interm.to_s}"
     i+=1
end
puts '-'*res_length


Подскажите пожалуйста, что делать???


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)