Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Условия и Условные Функции





Conditionals

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

Наша функция вычисления процентов, должна определить, какое из возможных условий выполняется для входных данных. Мы говорим, что такая функция – это УСЛОВНАЯ ФУНКЦИЯ (CONDITIONAL FUNCTION), и формулируем определение такой функции, используя УСЛОВНЫЕ ВЫРАЖЕНИЯ (CONDITIONAL EXPRESSIONS). Общая форма условного выражения имеет вид:

(cond [question answer]... [question answer])   (cond [question answer]... [else answer])  

Точки показывают, условное выражение (cond), может содержать произвольное число условий. Каждое условие, также называемое точкой условия, содержит два выражения, называемых УСЛОВИЕ (CONDITION) и ОТВЕТ (ANSWER). Условие – это условное выражение, которое использует параметры; ответ – это выражение на Схеме, которое вычисляет результат с учетом параметров и других данных, если условное выражение выполнено.

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

(cond [(< n 10) 5.0] [(< n 20) 5] [(< n 30) true]) (cond [(< n 10) 30 12] [(> n 25) false] [(> n 20) 0])  

Условное выражение слева – правильное, потому что каждое условие содержит два выражения. А выражение справа, неправильное. Первое условие содержит три выражения вместо двух.

Когда Схема вычисляет условное выражение, она вычисляет значение каждого условия одно за другим. Результатом условия должна быть true или false. Для первого встреченного выражения, значением которого будет true, Схема вычислит соответствующий ответ, и значение этого ответа будет значением условного выражения. Если последнее условие else, и все другие условия не выполнены, то результатом выполнения условного выражения будет значение ответа из условия else.

Ниже приведены два примера:

(cond [(<= n 1000).040] [(<= n 5000).045] [(<= n 10000).055] [(> n 10000).060]) (cond [(<= n 1000).040] [(<= n 5000).045] [(<= n 10000).055] [else.060])

 

Если мы заменим n на 20000, значением первых трех условий будет false, в обоих выражениях. Для выражения слева, четвертое условие (> 20000 10000) будет истинно, и результатом будет 0.60. Для выражения справа, пункт else определяет какой результат будет для выражения в этом случае. Если же n равно 10000, то значение будет.055, потому что результатом выражений (<= 10000 1000) и (<= 10000 5000) будет false, а результатом выражения (<= 10000 10000) будет true.

Упражнение 4.3.1 Определите какое из следующих двух условных выражений правильное:

(cond [(< n 10) 20] [(> n 20) 0] [else 1]) (cond [(< n 10) 20] [(and (> n 20) (<= n 30))] [else 1])

 

Объясните почему.

Почему следующее выражение неправильное.

(cond [(< n 10) 20] [* 10 n] [ else 555]);

Solution

 

Упражнение 4.3.2 Чему равно значение

(cond [(<= n 1000).040] [(<= n 5000).045] [(<= n 10000).055] [(> n 10000).060])

при n равном (a) 500, (b) 2800, и (c) 15000? Solution

Упражнение 4.3.3 Чему равно значение

(cond [(<= n 1000) (*.040 1000)] [(<= n 5000) (+ (* 1000.040) (* (- n 1000).045))] [ else (+ (* 1000.040) (* 4000.045) (* (- n 10000).055))])

при n равном (a) 500, (b) 2800, и (c) 15000? Solution

 

При помощи условных выражений, мы можем определить функцию расчета процентов, про которую мы говорили в начале этой секции. Предположим, что банк платит 4% за депозиты до 1000$ (включительно), 4.5% за депозиты до 5000$ (включительно) и 5% за депозиты более 5000$. Ясно что на вход функции подается только одно число, и результатом является тоже одно число.

;; interest-rate: number -> number;; определить величину процента по вкладу для конкретной суммы(define (interest-rate amount)...)

Кроме того, постановка задачи обеспечивает три примера:

  1. (= (interest-rate 1000).040)
  2. (= (interest-rate 5000).045)
  3. (= (interest-rate 8000).050)

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

Тело функции должно быть условным выражением, которое различает три возможных варианта, известных нам из постановки задачи. Имеется набросок:

(cond [(<= amount 1000)...] [(<= amount 5000)...] [(> amount 5000)...])

Используя примеры и набросок условного выражения, все получается очень просто:

(define (interest-rate amount) (cond [(<= amount 1000) 0.040] [(<= amount 5000) 0.045] [(> amount 5000) 0.050]))

Так как мы знаем, что у нас всего три возможных варианта, то последнее условие мы можем заменить на else.

(define (interest-rate amount) (cond [(<= amount 1000) 0.040] [(<= amount 5000) 0.045] [ else 0.050]))

Когда мы применим функцию interest-rate к количеству, например 4000, процесс вычисления будет обычным. Схема копирует тело функции и заменяет amount на 4000:

(interest-rate 4000)= (cond [(<= 4000 1000) 0.040] [(<= 4000 5000) 0.045] [ else 0.050])= 0.045

Первое условие ложно, но второе истинно, так что результатом будет 0.045 или 4.5%. Вычисление будет выполняться тем же образом, если бы мы использовали вариант функции с (> amount 5000) вместо else.

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных