Читаем Программирование на языке Ruby полностью

Задача 1. Оператор ** в Ruby реализован весьма эффективно по сравнению с наивным способом умножения основания на себя нужное число раз. Напишите программу с применением цикла while, которая будет возводить число a в натуральную степень n за время, сопоставимое со временем работы оператора a**n даже для больших значений показателя.

Задача 2. Измените написанную при рассмотрении примера 7 программу так, чтобы она работала и в ситуации, когда исследуемая строка заключается в апострофы или кавычки. Например, команда ruby palindrome.rb ’аргентина манит негра’ должна печатать true.

Задача 3. Какие изменения следует внести в программу умножения многочленов (пример 9), если коэффициенты многочленов задавать в обратном порядке – от младших степеней к старшим?

Задача 4. Напишите программу, находящую для всех чисел от 1 до задаваемого в командной строке натурального n, массив списков (массивов) всех делителей этих чисел. Для n = 6, например, программа должна напечатать следующую строку: [[1], [1, 2], [1, 3], [1, 2, 4], [1, 5], [1, 2, 3, 6]].

Задача 5. Назовём билет с натуральным номером, десятичная запись которого состоит из чётного количества (2n) цифр, счастливым, если сумма первых его n цифр равна сумме n последних. Напишите программу, вычисляющую количество счастливых билетов для заданного натурального n.

Задача 6*. Напишите программу, способную вычислить количество счастливых билетов (см. задачу 5) для n = 1000 за «разумное время» (например, около 30 секунд на компьютере с тактовой частотой процессора 2.4 Ghz).

Задача 7*. Напишите такую программу, решающую задачу 4, чтобы время её работы для п = 106 удовлетворяло требованиям, сформулированным в задаче 6 (это ограничение касается собственно нахождения массива; вывод такого огромного количества данных требует заметного дополнительного времени).

Задача 8*. Программа умножения многочленов, приведённая на стр. 12, имеет квадратичную сложность (количество операций при перемножении двух многочленов степени п пропорционально n2). Так называемое быстрое преобразование Фурье (см. книгу [5]) позволяет сделать это быстрее. Реализуйте алгоритм быстрого умножения многочленов таким образом.

<p>2. Модификация и создание пользовательских классов</p>

Ruby является объектно-ориентированным языком программирования. Давайте рассмотрим особенности представления классов.

Объекты и классы

В реальной жизни все объекты обладают индивидуальными свойствами. Но, введя некоторые обобщения, можно поделить объекты реальной жизни на группы. Каждая из таких групп будет обладать одинаковым набором свойств и, как следствие, к ней будут применимы одинаковые наборы действий.

classString

     def reverse

           "?????"

end

     def msiu

           "МГИУ"

     end

end

a="12345"

putsa.reverse

putsa.msiu

В языке программирования Ruby для описания набора свойств групп объектов и применимых к этим объектам действий используется такое понятие, как классы.

Класс – это формальное описание основных свойств объекта (его атрибутов) и методов, применимых к нему Задав описание класса, в дальнейшем можно создавать столько его экземпляров, сколько потребуется.

Классы в Ruby – открыты; если нам не хватает функциональности класса, то мы можем дополнить класс новым методом или переопределить старый.

Иерархия классов и полиморфизм

Зачастую из класса можно выделить группу объектов, обладающую каким-либо специальным свойством. Такую группу называют подклассом, или дочерним классом. Дочерний класс наследует все свойства родительского класса, но обладает отдельной функциональностью. С помощью символа < указывается родительский класс.

Пример 1.

Птицы всех видов несут яйца, но не все птицы умеют летать. Хотя в классе Penguin и не описан метод lay_egg, при необходимости он ищется (и находится!) в родительском классе (принцип наследования, иерархическая организация классов). Метод fly переопределен для пингвинов, и реакция на вызов этого метода определяется принадлежностью к тому или

Модификация и создание пользовательских классов иному классу (полиморфизм, различные реалиции на одинаковую команду).

class Bird def lay_egg

puts "Я из класса #{self.class}. Яйцо снесено!" end

     def fly

           puts "Все представители класса #{self.class} умеют летать!"

     end

end

class Penguin < Bird def fly

puts "Представители класса #{self.class} не летают…" end end

b = Bird.new; b.lay_egg; b.fly p = Penguin.new; p.lay_egg; p.fly

Создание класса
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных