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

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

07.10.2014, 09:34. Показов 2351. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru