Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача с простым циклом 
V
    Опции темы
Zann
  Дата 4.12.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



Всем привет.
Только недавно стал изучать языки программирования, а именно Ruby.
Осваиваю по книге Криса Пайна. Так вот, есть там задача:
Цитата

Напишите программу "Глухая бабуля". Что бы вы ни говорили бабуле (чтобы вы ни
вводили с консоли), она должна отвечать: АСЬ?! ГОВОРИ ГРОМЧЕ, ВНУЧЕК!, если
только вы не кричите ей (вводите слова заглавными буквами). Если вы кричите, она
вас слышит (или по крайней мере думает, что слышит) и вопит в ответ:
НЕТ, НИ РАЗУ С 1938 ГОДА! Чтобы сделать вашу программу действительно
правдоподобной, пусть бабуля кричит каждый раз другой год; например, любой
случайный год между 1930 и 1950. (Эта часть необязательная, и вам будет гораздо
легче, если вы прочтёте раздел о генераторе случайных чисел в Ruby в конце главы
о методах.) Вы не можете остановить разговор с бабулей, пока не прокричите ПОКА.

Бьюсь второй день, но программа не работает, как надо.
Код

puts 'Hello, grandson! WHAT DO YOU SAID?!'
years = 1938
years = years.to_s
reply = gets.chomp
while reply != 'BYE'
 if reply == reply.upcase
   puts 'NOT, EVEN ONCE SINCE ' + years + '!'
 else
   puts 'WHAT? I dont hear!'
   reply = gets
 end
end
puts 'Good Bye!'

С генерацией года не очень понятно в книге. rand не генерирует (1930-1950), либо я не умею, тк в книге про это нет.
Думал сделать иначе: 
Код

years = rand(31)
puts 'NOT, EVEN ONCE SINCE 19' + years + '!'
 
Но опять же, rand сгенерирует 1, а не 01 и год уже будет выглядет неправильно. Решил  пока присвоить точное значение.

С циклом тоже не все понятно. Если условие выполняется - он зависает. По логике, его надо закрыть, но если поставить end до else,
программа не работает... Запутался в общем. Не судите строго, пишу эти детсадовские программы пятый день. 
PM   Вверх
source777
Дата 4.12.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



1) years = 1930 + rand(20)
2) 10 и 11 строчки надо поменять местами


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Pitlord
Дата 4.12.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(Zann @  4.12.2009,  21:26 Найти цитируемый пост)
Но опять же, rand сгенерирует 1, а не 01 и год уже будет выглядет неправильно. Решил  пока присвоить точное значение.

Просто к сгенерированному прибавь 1900

Цитата(Zann @  4.12.2009,  21:26 Найти цитируемый пост)
С циклом тоже не все понятно. Если условие выполняется - он зависает.

Строка
Код

reply = gets

должна быть за пределами if ... else... :

Код

if reply == reply.upcase
   puts 'NOT, EVEN ONCE SINCE ' + years + '!'
 else
   puts 'WHAT? I dont hear!'
 end
 reply = gets


Добавлено через 21 секунду
Опоздал чуток
PM MAIL   Вверх
Zann
Дата 4.12.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



Огромное спасибо. 
Как я понял, while может содержать метод gets, а if-else не может?
PM   Вверх
Pitlord
Дата 4.12.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(Zann @  4.12.2009,  22:13 Найти цитируемый пост)
Как я понял, while может содержать метод gets, а if-else не может? 

Нет, просто в данном случае допущена логическая ошибка, посмотри внимательно в каком случае у тебя gets вызывается в твоём коде.
PM MAIL   Вверх
Zann
Дата 4.12.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



Понял, спасибо.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.