29 мар. 2010 г.

Наивные пионеры

Поражаюсь наивности некоторых моих учеников. Предыстория такова: на каникулы задал всем классам парочку задач на ruby. Решение попросил прислать на почту. Мы только начали изучать программирование, поэтому задачи были простые: перевести массив из евро в рубли, найти сумму неотрицательных элементов массива. И тут одна девушка присылает следующий замечательный код:


  1. sourceArrayEuro = [1510152025]
  2. euro_to_rub = 41
  3. resultArrayRub = sourceArrayEuro.map { |elem| elem * euro_to_rub }
  4. printf('ArrayEuro = [ ')
  5. sourceArrayEuro.each { |elem| printf('EURO %d; ', elem) }
  6. puts ']'
  7. puts 'Euro_to_rub = ' + euro_to_rub.to_s
  8. printf('ArrayRub = [ ')
  9. resultArrayRub.each { |elem| printf('%d RUB; ', elem) }
  10. puts ']'

Особенно меня порадовала camel-like нотация (которой я, кстати, не придерживаюсь для именования переменных, printf (привет, noname-c++-программист), использование итераторов в качестве циклов, а не блоков.

В общем, нехорошо так палиться, ой нехорошо.

p.s. правильное решение - на порядок проще:


  1. sourceArrayEuro = [1510152025]
  2. euro_to_rub = 40 # 41 - это уже мечты
  3. resultArrayRub = sourceArrayEuro.map { |elem| elem*euro_to_rub}
  4. puts "Значения в рублях: #{resultArrayRub}"

7 комментариев:

  1. [1, 5, 10, 15, 20, 25].map{|v| puts "#{v} EUR = #{v*39.39} RUR" } #40 уже тоже мечты ;)

    ОтветитьУдалить
  2. кстати по ходу все траблы в том что автор кода не знает как распечатать массив целиком, тут главное знает про map. если бы пытался:
    i =0
    while i<array.size
    bla-bla-bla
    end

    точно отдавало бы Сями

    а это верю что ученик сам по аналогии писал

    ОтветитьУдалить
  3. пс в комменте с кодом я наврал, там map не нужен, лучше each

    ОтветитьУдалить
  4. to 2 comment:
    В одну строчку - не тру, так как не масштабируемо.

    А насчёт сам - как говорится, узнаем примерно завтра. Подробности - в следующем комменте / сообщении.

    ОтветитьУдалить
  5. Надо же... Не ожидала
    Обидно.

    ОтветитьУдалить
  6. Ваше решение было чересчур сложным. К тому же я не рассказывал тогда про циклы. Сложно было придумать иное объяснение.

    ОтветитьУдалить