Ruby/Практикум/Числа: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 330:
'''Замечания по решению:'''
У меня возникает вопрос, кто-либо проверяет работу программ, перед тем, как их сюда разместить? Элементарная проверка выявляет ошибку: число 8 в двоичном представлении - это 1000, очевидно, что если разбить на группы 10 и 00, то сумма одной группы цифр не будет равна сумме второй группы("1 + 0 = 1" и "0 + 0 = 0"), т.е. число не является "счастливым", но представленная программа выше выдаёт нам true, что является неправильным.
 
 
 
'''Возможное решение:'''
 
<source lang=ruby>
print 'Введите число (0 < x < 512], х='
x = gets.to_i #пользователь вводит Х
binX = sprintf("%b", x) #перевод Х в двоичную СС
text1 = ' не является счастливым в двоичной СС'
evenness = (binX.size).even? #проверка четности разряда (ответ будет true или false)
if (x > 512) || ( x<=0) #проверка числа по условию задачи (0<x<512]
puts 'ERROR'
elsif evenness == false
puts 'число ' + x.to_s + text1 #если разрядность нечетная, число несчастливое
else
leftside = binX.slice(0..((binX.size/2)-1)) #отделение левой части и запись в leftside
rightside = binX.slice(((binX.size/2))..binX.size) #отделение правой части и запись в rightside
sumL = leftside.split('') #разделяем строку и создаём массив с
sumR = rightside.split('') #левыми и правыми значениями
left=0 #переменные для хранения количества
right=0 #единиц каждой из сторон
sumL.each do |el|
left = el.to_i + left.to_i #количество единиц для левой стороны
end
sumR.each do |el|
right = el.to_i + right.to_i #количество единиц для правой стороны
end
if right == left #если количество единиц в правой части равно количеству единиц в левой - число счастливое
puts 'число ' + x.to_s + ' счасливое в двоичной СС'
else
puts 'число ' + x.to_s + text1
end
end
</source>
 
'''Замечания по решению:'''
 
=== Даны координаты некоторой точки A (на плоскости). Необходимо найти расстояние от точки A до начала координат. ===