Програма 4. Обчислення тангенса

(DEFUN TAN (А / S С) ; Заголовок функції ; А - аргумент функції - кут, S, С - локальні

; змінні

(SETQ S (SIN A))

(SETQ C (COS A))

(IF (/= С 0.0) (/ S С) "нескінченність")

) ; Кінець функції

Тут, якщо С не дорівнює нулеві, обчислюється тангенс (і значення тангенса буде повернуто функцією). Якщо ж С дорівнює нулеві, то тангенс не обчислюється, а функція повертає рядок "нескінченність" - це слово і з'явиться на екрані.

Цикл в Автоліспі організується за допомогою функції WHILE.

(WHILE <умова> < вираз >...)

Тут < умова > - це вираз, який в деяких ситуаціях може приймати значення NIL.

Функція WHILE обчислює значення умови і, якщо воно не NIL, обчислює вираз, потім знову умова і т.д. Це продовжується, поки умова не стане дорівнює NIL. Потім WHILE повертає останнє значення останнього виразу. Таким чином, функція WHILE відповідає структурі псевдокоду ПОКИ - ЦИКЛ.

Наведена нижче Програма 5 ілюструє використання циклу, що дозволяє компактно записати побудову складного зображення: будується сімейство з 20 квадратів, кожний з яких повернутий на кут 0.1 * РІ щодо попередніх і має периметр у 0.9 разів менше попереднього. Для побудови 20 замкнутих ліній використовується всього одна команда LINE

; Програма 5. Побудова сімейства квадратів:

; Введення вихідних даних (опис функції)

(DEFUN ID ( ); Заголовок функції

(SETQ PI (GETPOINT "\n Початкова точка:"))

(SETQ L (GETDIST P1 “ Початкова довжина:"))

)

; Побудова одного квадрата:

(DEFUN QUADR (L A /P2 P3 P4) ; Заголовок функції

;Тут Р2, РЗ, Р4 оголошені як локальні

;змінні

(SETQ P2 (POLAR PI A L))

(SETQ РЗ (POLAR P2 ( + А (/ PI 2)) L))

(SETQ P4 (POLAR P3 ( + A PI) L))

(COMMAND "LINE" PI P2 P3 P4 "C")

)

; Побудова сімейства квадратів:

(DEFUN QN () ; Заголовок функції

(SETQ B 0.0) ; Заданий початковий кут B = 0

(ID) ; Виконана функція ID

(WHILE (< = B (* 2 PI)) ; Початок циклу

; Виконаємо функцію QUADR з

; параметрами L, B:

(QUADR L B)

; Збільшимо кут на 0.1 РІ

(SETQ B (+ B (* PI 0.1)))

; Змінимо L у 0.9 разів:

(SETQ L(* L 0.9))

) ; Кінець циклу

) ;defun

 

Результат виконання Програми 5 показаний на рис.2. У попередніх прикладах кожна програма містила по одному опису функції. Приклад Програми 5 демонструє, що така відповідність не обов'язкова. Програма може містити кілька описів функцій (кілька функцій DEFUN).

Рис. 1. Результат двохкратного виконання Програми 5 з різними вихідними даними

 

Кожен опис функції - це функціональний модуль, який можна використовувати окремо, зокрема в інших програмах. Зверніть увагу на передачу даних при виклику функції. У заголовку функції QUADR описано два аргументи: L, А. При звертанні у функцію QUADR передаються значення параметрів: L і В. Це варто розуміти так, що в момент звертання до QUADR:

А дорівнює В;

L (яке буде працювати усередині QUADR) стає рівним L (яке існувало поза QUADR).

Отже, А і В, L і L - це різні дані, і не має значення які вони мають імена (як А і В) або однакові (як L). Зміни, що відбуваються з В и L всередині функції, ніяк не відбиваються на значеннях А і L в іншій програмі.








Дата добавления: 2016-11-02; просмотров: 456;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.