Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3

Ruby/ калькулятор через классы и через hash

07.10.2014, 09:34. Показов 2330. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Должен был быть калькулятор в режиме cmd. О должен был делать бинарные операции с последним ответом и числом, которое введет пользователь и сделать ту операцию, которую введет юзер. Так он выглядит без классов
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
def say
puts "Enter integer" 
end
# //////////// faktorial
def fakt (b)
     
 
f = b
while b != 1
f*=b-1
b-=1
i = 0
 
end
return f
     end
     
mass = []    
last = 0
opr = ""
      while opr!="exit"
puts"Enter operation (+), (-), (/), (*), (mod), (pow), (sqrt), (sin), (cos), (tg), (ctg), (fakt), (ln), (push), (pop)"    
opr = gets.chomp
 case opr
   when "+"
  say
  int = gets.to_f
  last += int
   when "-"
  say
  int = gets.to_f   
  last -= int
   when "-"
  say
  int = gets.to_f
  last -= int
   when "*"
  say
  int = gets.to_f
  last *= int
   when "/"
      
  say
  int = gets.to_f
  if int == 0
       puts"ERROR"
       else
  last /= int
     end
   when "mod"
  say
  int = gets.to_f
  last = last%int 
   when "pow"
   say
   int = gets.to_f
   last = last**int
   # Unarni
    when "sqrt"
    if last <= 0 
    puts "ERROR"
    else
last = last**0.5
end
    when "sin"
last = Math.sin(last)   
     when "cos"
last = Math.cos(last)   
    when "tg"
last = Math.sin(last)/Math.cos(last)
           when "ctg"
last = Math.cos(last)/Math.sin(last)        
   when "fakt"
   last = fakt(last)
   when "ln"
   last = Math.log(last)  
   
   # work with mass
   when "push"
   say
   int = gets.to_f
   mass.push int 
   last = int
   when "pop"
   mass.pop
   last = mass.pop
   
   
   
 end 
 
 puts "result = #{last}"
 
 puts "  Mass"
 mass << last
 puts mass
 
 
 
      end
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Теперь надо его переделать через классы. Пользователь вводит операцию, операция проходит через хеш, где ключи - названия операций, а значения - названия методов класса. Сделал программу для двух операций, опреции пока что пользователь не вводит, но не работает =(
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Operation
 
def plus
 
p "Enter integer +"
@int = gets.chomp.to_i
$last += @int
end
 
def minus
 
p "Enter integer -"
@int = gets.chomp.to_i
$last -= @int
end
end
opr = {"+" => plus, "-" => minus}
a = opr["+"]
$last = 0
while $last != -1
die = Operation.new
puts die.opr["+"]
puts die.minus
 
end
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2014, 09:34
Ответы с готовыми решениями:

Нужно создать калькулятор через NetBeans Классы пакета Swing
ПРИМЕРНОЕ ТАКОЕ ТОКА ЧТОБ КНОПКИ БЫЛИ ЧУТЬ ДАЛЬШЕ ДРУГ ОТ ДРУГА НУ ЧТОБ ВИД БОЛЕЕ ПРЕЗЕНТАБЕЛЬНЫЙ БЫЛ /* * To change this...

Активация функций через HASH код
Приветствую. Нужно мнение специалистов. .. есть программатор с определенным набором возможностей. Периодически, продавцом, ...

Оптимизируется ли компилятором конструкция switch-case? Работа со строками через ID объекта или hash
Добрый вечер, 1) Определён ли порядок выбора switch (согласно стандарта кажись неопределён, но все компиляторы я уверен в этом...

1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.10.2014, 12:53
Лучший ответ Сообщение было отмечено KOPOJI как решение

Решение

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Calc
  def initialize()
    @accum = 0
  end
 
  def repl
    loop do
      opname = prompt 'Enter one of (+), (-), (exit)'
 
      next if opname.empty?
      break if opname == 'exit'
 
      begin
        op = dispatch opname
        value = prompt('Enter a number').to_f
        op.call value
        puts @accum
      rescue KeyError
        $stderr.puts "Undefined operation: #{opname}"
      end
    end
  rescue Interrupt
    puts
  end
 
  private
  def add(value)
    @accum += value
  end
 
  def subtract(value)
    @accum -= value
  end
 
  OPTABLE = {
    '+' => :add,
    '-' => :subtract
  }
 
  def dispatch(opname)
    method OPTABLE.fetch(opname)
  end
 
  def prompt(msg)
    print "#{msg}> "
    $stdout.flush
    input = gets
    raise Interrupt if input.nil?
    input.strip
  end
end
 
Calc.new.repl
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2014, 12:53
Помогаю со студенческими работами здесь

Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но через классы
Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но используя соотвественно классы И как...

Установка Ruby через RVM
Пытаюсь установить ruby через rvm. Установил сам rvm. pi@raspberrypi:~ $ rvm -v rvm 1.26.11 (latest) by Wayne E. Seguin...

Запуск скрипта Ruby через cron
Как запустить Ruby скрипт через Cron ? Ни 1 * * * * source &quot;/usr/local/rvm/scripts/rvm&quot; &amp;&amp; rvm use ruby 2.0.0 --default &amp;&amp;...

установка Ruby через терминал - ошибка
Пытался разными способами - через терминал не установить. Помогите решить проблемы, присылаю скрин с ошибкой. ...

Выполнение ruby кода через определенный промежуток времени
Нужно ежедневно выполнять определенный код. Использую гем whenever, но так и не понял как его настроить. Вот код который нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru