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

     arr.each{|v|sum+=v}

     puts sum

end

   Похожая на readline функция gets не возбуждает исключительной ситуации при прерывании ввода и, по этой причине, не может использоваться в задачах, требующих обработки исключений.

Среднее арифметическое элементов последовательности

Для решения этой задачи нам недостаточно одной переменной sum, так как функция, вычисляющая среднее арифметическое значение последовательности, не является индуктивной. Потребуется построить её индуктивное расширение. Для одной и той же функции f можно придумать разные расширения. Однако, наибольший практический интерес представляет такое индуктивное расширение, которое содержит минимум дополнительной информации.

   Разложение функции в композицию индуктивных – творческая задача и применяется только в простейших случаях, где оно более или менее очевидно.

sum, count = 0.0, 0

begin

while true

     sum += readline f

     o

     t

     count += 1

end

rescue EOFError

puts count == 0 ?

     0 :

     sum/count

end

В данной задаче минимальным индуктивным расширением является объединение двух индуктивных функций – количества элементов последовательности и их суммы.

Как правило, решение таких задач сводится к тому, что программист должен понять, какой информации (переменных) ему не хватает, и ввести ее в программу Более подробно об этом можно причитать в пособии Е.А. Роганова «Основы информатики и программирования» (стр. 132—138).

3.3 Тестирование последовательностей. Для тестирования программ, работающих с последовательностью, возможно применение следующего приёма. Продемонстрируем его на тестировании программы, находящей среднее арифметическое элементов последовательности.

require ’test/unit’

class TestAverage < Test::Unit::TestCase

     def setup # запуск программы с последовательностью @seq = IO.popen("ruby average.rb", "r+") end

def teardown # выключение программы (закрытие потока) @seq.close end

# метод направляющий поток данных в тестируемую

# программу и возвращающий результат в виде строки def sequence(*items)

items.each { |i| @seq.puts(i) }

     @seq.close_write @seq.read.chomp end

     def test_average

     assert_equal("2.5",sequence(1,2,3,4))

end

def test_empty

assert_equal("0", sequence()) end end

Отметим что функция sequence() возвращает результат выполнения программы average.rb в виде строки (выводимой коммандой puts). Таким образом, если бы оператор печати выглядет так:

puts "average = #{count == 0 ? 0 : sum/count}"

то тестовый случай должен принять вид

assert_equal(sequence(1,2,3,4),"average = 2.5")

Задача 1. Найдите максимальный элемент последовательности чисел.

Задача 2. Найдите второй по величине элемент последовательности.

Тестирование последовательностей

Задача 3. Напишите программу, определяющую, является ли последовательность чисел возрастающей?

Задача 4. Найдите наибольший общий делитель последовательности целых чисел.

Задача 5. Найдите сумму всех попарных произведений элементов последовательности чисел.

<p>4. Стековый калькулятор и языки</p>

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

Итак, введем определение стека. Стеком называется любая структура, в которой могут накапливаться какие-то элементы и для которой выполнено следующее основное условие: элементы из стека можно доставать только в порядке, обратном порядку добавления их в стек. Это условие часто называют принципом «последним пришел – первым ушел» или LIFO (Last In – First Out).

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

Уже из названия видно, что стековый калькулятор использует стек. При выполнении любых арифметический операций (сложить, умножить, вычесть, разделить) стековый калькулятор достает из стека последовательно сначала правый, а затем левый аргументы операции, выполняет операцию и полученный результат помещает в стек.

Перейти на страницу:

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

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

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

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

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

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

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

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