Первый небольшой практикум по Ruby (начинающий уровень)


Писатель не может научиться писать, читая книги. Программист  не может научиться программировать  без практики. Поэтому это занятие будет целиком практическим.

Итак,  если вы читали все мои уроки по Ruby, то поздравляю вас —  сейчас вы уже должны владеть неким базисом этого языка. Конечно, все что мы прошли – это начальный уровень подготовки, однако пренебрегать этими уроками не стоит.

Давайте закрепим с вами полученные знания. Я сейчас разберу пару скриптов и дам вам домашнее задание. Оно будет простым, но вам нужно обязательно его сделать.  Программированию не учат. Программированию учатся, причем на своем опыте.

Итак, давайте рассмотрим любимый пример  многих авторов программы-конвертора. Это простейшие программы по своей структуре, которые сильно нам облегчают жизнь. Это могут быть конвертеры валют, величин и прочее.

Давайте сделаем конвертер градусов по Цельсия в градусы по Кельвина.  Итак, у нас будет константа KEL с величиной 273:

KEL=273 #0 градусов по Цельсии равно 273 по Кельвину
puts “Введите величину градусов по Цельсии”
grad=gets
graKel=KEL+grad
puts “#{grad} по Цельсия равно #{graKel} + по Кельвина”

Запустите скрипт и посмотрите результат. Как видите, я использовал константу KEL, чтобы не набирать все время 273. Градусы  по Кельвина высчитываются просто добавлением нашей константы к градусам по Цельсия. Думаю, алгоритм вы поняли. Давайте теперь добавим немного интерактивности в нашу программу и сделаем выбор. Вдруг пользователь наоборот захочет конвертировать градусы по Кельвина в Цельсия, а мы этого не учли.

KEL=-273
puts “Выберите шкалу отсчета – K или C (ввести символ)”
vib=gets
if vib!=”C” || vib != “c” || vib!=”K” || vib!=”k” then
puts “Вы ввели недопустимый параметр. Расчет невозможен”
else
if vib==”C” || vib==”c” then
puts “Введите вычисляемые градусы”
grad=gets
gradC=KEL – grad
puts “Реузальтат равен #{gradC}”
else
puts “Введите вычисляемые градусы”
grad=gets
graKel=KEL+grad
puts “#{grad} по Цельсия равно #{graKel} + по Кельвина”
end
end

Как видите, здесь я ввел ветвление, в котором сначала проверил, какой выбор сделал пользователь и не ошибся ли он при вводе символа с клавиатуры и потом уже организовал два ветвления в зависимости от выбора. Безусловно, эти расчеты лучше сделать отдельными методами, но о них мы еще не говорили. Пока придется оставить все так как есть. Единственное, что здесь лучше ввести цикл, в котором пользоавтелю должна быть дана возможность выбрать выхода из программы или сделать новые расчеты. Попробуйте организовать его сами. Единственное, что выход из программы осуществляется с помощью оператора exit

Еще одно задание будет аналогично этому. Только вы уже сделаете более практичную вещь – запрограммируете конвертер валют.

Итак, задание будет таким: создать скрипт конвертера любых четырех валют. Выбор валюты осуществить посредством оператора case. Валюты и величины брать произвольные.

Безусловно, все эти скрипты абсолютно противоречат концепции Ruby и даже мои примеры не совсем правильны. Я сознательно упростил вам эти задачи, дабы вы поняли, как их решать. Даже конвертер градусов проще было реализовать с помощью case. Тем не менее, разберитесь в этом сами.

Пока на этом все. Можете придумать любые задания и попытаться их выполнить, чтобы набить руку. Тем не менее, несмотря на свою простоту, Ruby очень мощный язык. Поэтому настоящий практикум пойдет тогда, когда мы полностью пройдемся по работе со строками, числами и массивами. После этого нам нужно будет освоиться с хешами и объектами. Следующая ступень будет заключаться в том, чтобы показать как на Ruby можно писать настоящие графические программы с взаимодействием с операционной системой. Ну а потом мы приступим с вами к тому, ради чего и затевались эти уроки – освоению Ruby on Rails.

<<Предыдущий урок                                                      Следующий урок>>

Комментарии

14 коммент. на “Первый небольшой практикум по Ruby (начинающий уровень)”
  1. Enigmat:

    >>>>>>>

    Kell=273 #0 градусов по Цельсии равно 273 по Кельвину
    puts “Введите величину градусов по Цельсии”
    grad=gets
    graKel=KEL+grad
    puts “#{grad} по Цельсия равно #{graKel} + по Кельвина”

    <<<<<<<
    graKel=KEL+grad

    Откуда взялся KEL? Если мы объявляли константу Kell

  2. admin:

    Ребята, читайте внимательно уроки! Честно говоря, я их и бросил по этой причине. Неужели так многа букафф? Я в тексте урока написал KEL, а в коде сделал просто опечатку (ну не проверяю я написанное). Кто читал внимательно, тот замечал ошибку и делал у себя все правильно.
    Учитесь много читать. Программеру нужно много доков читать в дальнейшем, причем, на английском языке. А если по диагонали читать… Тогда уж ищите видеоуроки и на этом баста. Я и так сильно упрощаю изложение, стараясь отойти от канонов учебников, которые реально просто скучно читать.
    Хотите правильный код? С Рубином идет книга на английском. Читайте ее. Вот только там букафф вообще дохрена, предупреждаю сразу.

  3. Overlord:

    Че то не очень с посетителями обращается админ сайта. Какое же это обучение новичков? А то что читать много — это да. Мне тупо жаль время. Я лучше в танки загамаю.
    А если так относится к посетителям, они не будут возвращаться на сайт. Таких сайтов в нете пално.

    • admin:

      Вот это вас избаловал интернет… Конечно, есть кучи разных сайтов и блогов, на которых горе недосео или как их там «манимейкеров» пишут о том, как нужно лелеять посетителей.
      Сколько раз вы вернетесь на сайт? А даже на форум. Вы решили свою проблему и побежали дальше. И вряд ли вернетесь.
      Смысл пестаться, тратя свое время? Этот блог абсолютно убыточен для меня. Он не приносит ни материального профита, ни морального.
      Я бы мог еще полтора года назад закончить уроки по C++, Ruby, C#, Андроиду. Только что взамен я получаю? То, что люди разленились настолько, что даже не могу прочесть 1,5 знаков и возмущаются?
      Рекламу все равно не кликают. Любой материал это затраты времени. В общем, мне по барабану все это

  4. Антон:

    Спасибо тебе автор данного сайта за очень простое и практичное введение в язык Ruby.
    Труд твой точно не прошел и не пройдет даром. Спасибо тебе!

  5. Анатолий:

    Уважаемый, Автор. Исправьте, пожалуйста, пример:

    KEL = 273
    puts «Выберите шкалу отсчета – K или C (ввести символ)»
    vib = gets.chomp
    if vib != «C» && vib != «c» && vib != «K» && vib != «k» then
    puts «Вы ввели недопустимый параметр. Расчет невозможен»
    else
    if vib == «C» || vib == «c» then
    puts «Введите вычисляемые градусы»
    grad = gets.to_i
    gradC = KEL — grad
    puts «Реузальтат равен #{gradC}»
    else
    puts «Введите вычисляемые градусы»
    grad = gets.to_i
    gradKel = KEL + grad
    puts «#{grad} по Цельсия равно #{gradKel} по Кельвина»
    end
    end

    • admin:

      Ну да, согласен, приведенный пример не будет работать из-за каретки «\n». Однозначно убирать ее методом chomp.
      Честно говоря, не помню, как я так прошляпил код. Писал то все два года назад. Почему раньше не проверял сам не знаю.

  6. Дмитрий:

    Просто огромное спасибо.

  7. Виталик:

    Автор, спасибо за материал!

  8. Тимур:

    Здраствуйте, я читаю ваши уроки и тестирую ваши примеры на Aptan Studio 3.

    KEL=273 #0 градусов по Цельсии равно 273 по Кельвину
    puts “Введите величину градусов по Цельсии”
    grad=gets
    graKel=KEL+grad
    puts “#{grad} по Цельсия равно #{graKel} + по Кельвина”

    Ввожу всё правильно, нажимаю запустить программу. Появляется надпись «Введите величину градусов по Цельсии», я ввожу, и у меня выскакивает ошибка. D:/Programming/����� �����/less/les.rb:64:in `+’: String can’t be coerced into Fixnum (TypeError)
    from D:/Programming/����� �����/less/les.rb:64:in `’

    • Игорь:

      в седьмой строке надо добавить метод .to_i для конвертации типа string в тип integer и будем Вам счастье.
      7: graKel=KEL+grad.to_i

  9. Игорь:

    Во втором примере у автора присутствуют некоторые неточности. Комментарий Анатолия их тоже не исправляет.
    Мой вариант программы — работает с дробными значениями (используется метод .to_f — конвертация стринга во флоат тип):

    KEL=273.15
    puts «Выберите шкалу отсчета – ºK или ºC (ввести символ)»
    vib=gets.chomp
    if vib != «C» && vib !=»c» && vib != «K» && vib !=»k» then
    puts «Вы ввели недопустимый параметр. Расчет невозможен. input=#{vib}»
    else
    if vib==»C» || vib==»c» then
    puts «Введите градусы Цельсия для конвертации»
    grad=gets.chomp
    grad_kel=grad.to_f+KEL
    puts «Результат конвертации: #{grad}º Цельсия = #{grad_kel}º Кельвина»
    else
    puts «Введите градусы Кельвина для конвертации»
    grad=gets.chomp
    grad_cel=grad.to_f-KEL
    puts «Результат конвертации: #{grad}º Кельвина = «+grad_cel.to_s+»º Цельсия»
    end
    end

  10. ара:

    Так в итоге какой оператор в if? && или || как бы пример не работает

    • admin:

      Сразу видно человека, внимательно читающего уроки… Это вообще два разных оператора — И и ИЛИ. Какой, блин, по логике здесь должен быть, а?

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: