#!/usr/bin/env ruby
i=1
while i <= 5
  puts i; i += 1
end
puts

# еще раз
i=1
until i > 5
  puts i; i += 1
end
puts

3.times do
   print "Ау! "
end
puts

0.upto(9) do |x| print x, " " end 
puts

0.step(12, 3) {|x| print x, " " } # 0 3 6 9 12
puts

[1, 1, 2, 3].each {|k| print k, " " } # 1 1 2 3 
puts

for i in  ["one", "two", "three"]
  print i, " "
end
puts

# то же самое
["one", "two", "three"].each{ |i| print i, " "}
puts

for i in 1..5
  puts i
end
puts

for i in 1 ... 6
  puts i
end
puts

print "Введите целое положительное число: "
str = gets.chop! # ввели строку
num = str.to_i   # преобразовали в число
if num > 0
  i = 1
  fact = 1
  while i <= num
    fact *= i
    i += 1
  end
  puts "Факториал числа #{num} равен #{fact}"
else
  puts "Вы ввели неположительное число"
end
puts

print "Введите целое положительное число: "
num = gets.to_i # строку сразу преобразовали в число
if num > 0
  fact = 1
  for i in 1 .. num
    fact *= i
  end
  puts "Факториал числа #{num} равен #{fact}"
else
  puts "Вы ввели неположительное число"
end
puts

def fact(n)
  f = 1
  1.step(n,1) {|k| f *= k}
  return f
end
print "Введите целое положительное число: "
if (num = gets.to_i) > 0
  print "#{num}! = #{fact(num)}\n"
else
  puts "Факториал числа #{num} не определен\n"
end

puts
print "Введите целое положительное число: "
a, k = gets.to_i, 0
while a>0
  a /= 10; k += 1 # отбросили последнюю цифру
end
print "Количество цифр в введенном числе равно #{k}.\n"
puts

print "Введите число элементов массива: "
sn = gets.chop!; n = sn.to_i
b = Array.new(n)   # создали массив из n элементов  
s = 0              # обнулили сумму
for i in 0 .. n - 1
  print "Введите #{i+1}-й элемент массива: "
  b[i] = gets.chop!.to_f; s = s + b[i]
end
print "Сумма всех элементов массива равна ", s, "\n"
puts

puts "Введите массив чисел (разделяя их пробелами):"

a = gets.chop!
b = a.split # разбили строку на отдельные числа
s = 0
for i in 0 .. b.length - 1
  s += b[i].to_f
end
puts "Сумма всех элементов массива равна #{s}"
puts

=begin

for i in 1 .. 5
  print  i
  break if i == 3
  print "*"
end
puts


for i in 1 .. 5
  print  i
  redo if i == 3
  print "*"
end
puts

for i in 1 .. 5
  print  i
  next if i == 3   
  print "*"
end
puts

for i in 1 .. 5
  print  i
  retry if i == 3
  print "*"
end
puts

=end

for i in 1 .. 5
  print "Now at #{i}. Restart?(y/n) "
  retry if gets.chop == "y"
end
puts
