<<Программирование на Ruby
Занятие 1
Знакомство с базовыми арифметическими действиями
puts 1 + 2
puts 3 * 4
puts 1234 / 56
puts 1234.0 / 56
a = 12
b = 32
puts a * b
puts b / a
puts b.to_f / a
puts 2**10 #=> 2 * 2 * ... * 2 (10 раз)
Строки
# печать строки
puts "Hello, world!"
# печать строки
puts "Hey, Jude!\nDon't be afraid" # в строке с двойными кавычками специальные символы
# (типа \n и \t) раскрываются;
# \n - символ перевода на новую строку
puts 'Hey, Jude!\nDon\'t be afraid' # в строке с одинарными кавычками
# ничего не раскрывается;
# одинарные кавычки внутри строки
# нужно экранировать символом \ (бэкслеш);
puts "abc\\klm" # чтобы вывести один бэкслеш, нужно написать два бэкслеша подряд
a = "Hello"
b = "world"
puts a + ", " + b # напечатает "Hello, world"
a = "Hello"
b = "world"
c = a + ", " + b
puts c
puts c.size
puts c.class
puts c.inspect
(1..10).each do |i|
puts i
end
for i in (1..10)
puts i
end
Факториал числа
# 5! = 1 * 2 * 3 * 4 * 5
n = 1
(1..50).each do |i|
puts "n=#{n}, i = #{i}"
puts n.class
n = n * i
end
puts n
# про inject будет рассказано в лекции 3
n = (1..10).inject{|a,b| a*b}
puts n # выведет 10! = 1*2*3*...*9*10
Таблица умножения
(1..10).each do |i|
(1..10).each do |j|
printf " %02d", i*j
end
puts
end
Сумма цифр числа
def last_digit(x,q=10)
x % q
end
def digits_sum(x,q=10)
res = 0
while x > 0
res += last_digit(x,q)
x /= q
end
res
end
puts digits_sum(1235)
class Integer
def digits_sum(q=10)
self.to_s(q). # получить запись числа (строку) в q-ичном представлении
split(''). # разбить на отдельные буквы (получим массив однобуквенных строк - объектов класса String)
map {|d| d.to_i }. # буквы (цифры) преобразуем в числа (получим массив чисел)
inject{|a,b| a + b} # суммируем
end
end
Вывод числа в других системах счисления
x = 12312312
puts x.to_s(2)
puts x.to_s(3)
puts x.to_s(8)
puts x.to_s(16)
puts x.to_s