Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
5 / 5 / 1
Регистрация: 20.08.2011
Сообщений: 32

Функция выдает ошибку при работе с отрицательными числами

13.10.2012, 11:28. Показов 1549. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток! Есть функция вычисляющая значения от х0 до xn с шагом.
Вопрос такой, что в ней не так, что функция выдает ошибку при работе с отрицательными числами?

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun Y (x0 xn sh)
 (setq x x0)
 (PROG (sp)
 (setq sp 'nil)
 (if (< xn x) (RETURN '(konechnoe chislo < nachalnogo)))
 metka
 (if (< xn x) (RETURN sp))
  (defun R (x)
  (cond ((and (> x 0) (<= x 1)) ((- (tan (+ (/ x 3) 2)) sin (* 3 x))))
       ((>= x 5) (+ (* (expt x (/ 1 3)) 2) (* (expt x (/ 2 3)) 3)))
       (t (/ (- (exp x) (exp (- x))) 2))))
 (setq a (R x ))
 (setq sp (cons (+ a) sp))
  (setq x (+ x sh))
 (GO metka)))
Y 4 10 1
(18.233635 17.140416 16.0 14.80378 13.540023 12.192005 27.289917)

Y (- 2) 7 1

Error: Illegal argument in functor position: (- (TAN (+ # 2)) SIN (* 3 X)) in ((- (TAN #) SIN (* 3 X))).
1 (continue) Evaluate (- (TAN (+ # 2)) SIN (* 3 X)) and ignore the rest.
2 (abort) Return to level 2.
3 Return to debug level 2.
4 Evaluate (- (TAN (+ # 2)) SIN (* 3 X)) and ignore the rest.
5 Return to level 1.
6 Return to debug level 1.
7 Return to level 0.
8 Return to top loop level 0.

И еще вопрос! Как избавиться от ошибки
Error: Not inside a block named NIL.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2012, 11:28
Ответы с готовыми решениями:

Интерпретатор выдает ошибку при работе с циклом loop
Здравствуйте! Собственно вот и ошибка Код программы: (DEFUN FACT (X) (COND ((= X 0) 1) (T (* X (FACT (- X 1))) )

При работе с отрицательными числами выводится "-0"
почему при работе с отрицательными числами выводится &quot;-0&quot;?(первый цикл for) double x,y=0; cout &lt;&lt; &quot;Enter x:&quot;; cin...

Не выдает ошибку при работе
При работе кода ошибку браузер не пишет, но и в бд csv не записывается. Вот код &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta...

4
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
13.10.2012, 22:43
Первое, что бросается в глаза: определение функции r нужно вынести за пределы функции y (у тебя функция переопределяется в цикле, что совершенно не нужно!). Кроме того, есть лишние скобки, а
перед sin скобки нет. Короче:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 (defun R (x)
  (cond ((and (> x 0) (<= x 1)) (- (tan (+ (/ x 3) 2)) (sin (* 3 x))))
       ((>= x 5) (+ (* (expt x (/ 1 3)) 2) (* (expt x (/ 2 3)) 3)))
       (t (/ (- (exp x) (exp (- x))) 2))))
 
==> r
 
(defun Y (x0 xn sh)
 (setq x x0)
 (PROG (sp)
 (setq sp 'nil)
 (if (< xn x) (RETURN '(konechnoe chislo < nachalnogo)))
 metka
 (if (< xn x) (RETURN sp))
 (setq a (R x ))
 (setq sp (cons (+ a) sp))
  (setq x (+ x sh))
 (GO metka)))
 
==> y
 
;; вот и проверка:
 
(y -2 7 1)
 
==> (1.480377949561370E+1 1.354002293234820E+1 1.219200510799200E+1 2.728991719712780E+1 1.001787492740990E+1 3.626860407847020E+0 -1.187920385975300E+0 0.000000000000000E+0 -1.175201193643800E+0 -3.626860407847020E+0)
1
5 / 5 / 1
Регистрация: 20.08.2011
Сообщений: 32
13.10.2012, 23:17  [ТС]
Спасибо большое! Еще вопрос!
Эта же функция через цикл do. Где ошибка? При любых значениях выдает NIL

Lisp
1
2
3
4
5
6
7
8
9
(defun Y (x0 xn sh)
 (setq x x0)
 (PROG (sp)
 (setq sp 'nil)
 (if (< xn x) (RETURN '(konechnoe chislo < nachalnogo)))
 (do (x0 (+ x0 sh)) (xn) 
 (setq a (R x ))
 (setq sp (cons (+ a) sp))
 (RETURN sp))))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38179 / 21114 / 4307
Регистрация: 12.02.2012
Сообщений: 34,721
Записей в блоге: 14
14.10.2012, 09:38
Вот работающее решение (все переменные сделаны локальными):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(defun Y (x0 xn sh)
 (PROG (sp sq x a)
    (if (< xn x0) (RETURN '(konechnoe chislo < nachalnogo))
        (do ((x x0 (+ x sh)))
             ((> x xn) (return sp))
            (setq a (R x ))
            (setq sp (cons (+ a) sp)))
    ))) 
 
==> y
 
(y 1 2 0.1)
 
==> (3.626860407847020E+0 
       3.268162911528320E+0 
       2.942174288095680E+0 
       2.645631933837230E+0 
       2.375567953200230E+0 
       2.129279455094820E+0 
       1.904301501451530E+0 
       1.698382437292620E+0 
       1.509461355412170E+0 
       1.335647470124170E+0 
     -1.187920385975300E+0)
А вот решение с циклом loop:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun y2 (x-beg x-end x-step &optional a (x x-beg) sp)
   (if (< x-end x-beg) (return 'Неверные_границы)
       (loop
           (when (> x x-end) (return sp))
           (setq sp (cons (r x) sp))
           (setq x (+ x x-step)))))
 
==> y2
 
(y2 1 2 0.1)
 
==> (3.626860407847020E+0 
        3.268162911528320E+0 
        2.942174288095680E+0 
        2.645631933837230E+0 
        2.375567953200230E+0 
        2.129279455094820E+0 
        1.904301501451530E+0 
        1.698382437292620E+0 
        1.509461355412170E+0 
        1.335647470124170E+0 
       -1.187920385975300E+0)
Что же касается твоего кода, то причина ошибки - в неверном синтаксисе DO. Правильный синтаксис:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(DO/DO*  ( 
               (переменная-1 значение-1 шаг-1) ;; нач. установки
               (переменная-2 значение-2 шаг-2)
               …
               (переменная-n значение-n шаг-n)
              )
 
              (условие_окончания форма_ок1 форма_ок2 … форма_окm)
 
              (форма-1) (форма-2)(форма-k)  ;; тело цикла
              
     )
1
5 / 5 / 1
Регистрация: 20.08.2011
Сообщений: 32
14.10.2012, 09:43  [ТС]
Спасибо большое! Буду разбираться!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2012, 09:43
Помогаю со студенческими работами здесь

Выдает ошибку при работе
Скачал для Unity 3d плагин ProBuilder. Все запустилось, но при нажатии на вторую кнопку (рисунок 1), программа вырубается и появляется...

При работе со строками выдает ошибку
Здравствуйте. При всех попытках сделать какие-либо операции над строками в dataGridView1, выплывает ошибка как на прикрепленном скрине. Мне...

Выдает ошибку 438 при работе с Selection
Доброго времени суток! На паре дали задание написать программу, чтобы при выделении ячеек и запуске программы на второй лист копировался...

Программа выдает ошибку при работе с символьным массивом
Решил замутить такую игрульку. Суть проста: дана карта 15х15, необходимо на этой карте отыскать данную точку с произвольными координатами...

Компилятор не ругается, но при запуске выдает ошибку о работе с памятью
Здравствуйте! Не могу понять в чем ошибка. Помогите, пожалуйста! Компилятор не ругается, но при запуске выдает ошибку о работе с памятью. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru