Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions comments/ruby1.1.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Идеальный вес. Программа запрашивает у пользователя
# имя и рост и выводит идеальный вес по формуле
# <рост> - 110, после чего выводит результат пользователю на экран
# с обращением по имени. Если идеальный вес получается отрицательным,
# то выводится строка "Ваш вес уже оптимальный"
puts 'Hello. Let me know your name'
name = gets.chomp
puts 'Fine, now i want to know your height'
height = gets.chomp.to_i
best_weight = height - 110
if best_weight <= 0
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По-моему, должно быть наоборот )

puts "Ok, #{name}, yor best weight is #{best_weight}"
else puts "Your weight is good"
end
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как правило, условные выражения форматируют так:

if <condition>
  <code>
else
  <code>
end

9 changes: 9 additions & 0 deletions comments/ruby1.2.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Площадь треугольника. Площадь треугольника можно вычилсить,
# зная его основание (a) и высоту (h) по формуле: 1/2*a*h.
# Программа должна запрашивать основание
# и высоту треуголиника и возвращать его площадь.
puts 'Enter a:'
a = gets.chomp.to_f
puts 'Enter h'
h = gets.chomp.to_f
puts "S = #{0.5*a*h}"
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стоит вычислять площадь заранее и присваивать результат локальной переменной, затем её здесь выводить чтобы разделить логику вычисления и вывода.

38 changes: 38 additions & 0 deletions comments/ruby1.3.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Прямоугольный треугольник.
# Программа запрашивает у пользователя 3 стороны треугольника
# и определяет, является ли треугольник прямоугольным,
# используя теорему Пифагора (www-formula.ru) и выводит результат на экран.
# Также, если треугольник является при этом равнобедренным
# (т.е. у него равны любые 2 стороны), то дополнительно выводится информация о том,
# что треугольник еще и равнобедренный.
# Подсказка: чтобы воспользоваться теоремой Пифагора,
# нужно сначала найти самую длинную сторону (гипотенуза)
# и сравнить ее значение в квадрате с суммой квадратов двух остальных сторон.
# Если все 3 стороны равны, то треугольник равнобедренный и равносторонний,
# но не прямоугольный.
puts "Enter a b c of triangle (with delimiter ','):"
sides = gets.chomp.split(',').map {|i| Float(i) }
a = sides[0]
b = sides[1]
c = sides[2]
case sides.max
when a
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подумай как можно это отрефакторить чтобы не считать три раза теорему Пифагора.

if (c**2 + b**2) == a**2
puts 'triangle is rectangular'
end
when b
if (a**2 + c**2) == b**2
puts 'triangle is rectangular'
end
when c
if (a**2 + b**2) == c**2
puts 'triangle is rectangular'
end
else
puts "something went wrong"
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему что-то пошло не так? Треугольник может существовать, просто не быть прямоугольным.

end
if [a, c].include? b
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[3, 5].include?(3) - равнобедренный, но не равносторонний.

puts 'triangle is equilateral and isosceles'
elsif a == b || a == c || b == c
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подумай как ещё можно определить это условие.

puts 'triangle is isosceles'
end
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно пишут в таком формате:

if <condition>
  <code>
else
  <code>
end

23 changes: 23 additions & 0 deletions comments/ruby1.4.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#Квадратное уравнение. Пользователь вводит 3 коэффициента a, b и с. Программа вычисляет дискриминант (D) и корни уравнения (x1 и x2, если
#oни есть) и выводит значения дискриминанта и корней на экран. При этом возможны следующие варианты:
# Если D > 0, то выводим дискриминант и 2 корня
# Если D = 0, то выводим дискриминант и 1 корень (т.к. они в этом случае равны)
# Если D < 0, то выводим дискриминант и сообщение "Корней нет"
#Подсказка: Алгоритм решения с блок-схемой (www.bolshoyvopros.ru). Для вычисления квадратного корня, нужно использовать
#Math.sqrt
# Например,
#Math.sqrt(16)
# вернет 4, т.е. квадратный корень из 16.

puts "Enter a b c (with delimiter ','):"
sides = gets.chomp.split(',').map {|i| Float(i) }
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно используют to_f.

Ещё можно применить сокращённую форму вызова метода в итераторе map:

sides = gets.chomp.split(',').map(&:to_f)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Второй момент, я догадываюсь почему, но sides здесь совсем не sides, а coefficients.

a = sides[0]
b = sides[1]
c = sides[2]
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно воспользоваться параллельным присваиванием:

a, b, c = sides

А можно сразу работать через массив sides, чтобы не плодить лишних локальных переменных.

if (d=b**2-4*a*c) == 0
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В данном случае присваивание лучше вынести за пределы if.

puts "x = #{(-b)/2*a}"
elsif d<0
puts "no roots of equation"
elsif d>0
puts "x1 = #{(-b+Math.sqrt(d))/(2*a)}\nx2 = #{(-b-Math.sqrt(d))/(2*a)}"
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь стоит разделить логику вывода и вычислений. Иначе трудно читать, поддерживать и ориентироваться.

end