Форум программистов, компьютерный форум, киберфорум
Наши страницы
AutoLISP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Artur Artur
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 4
1

AutoLisp, поменять порядок цифр числа

08.01.2016, 18:24. Просмотров 1068. Ответов 6
Метки нет (Все метки)

Необходимо перевернуть натуральное число n в том случае, если в него входит цифра 3. Я смог только проверить число на наличие тройки, а вот с переворотом беда. Помогите пожалуйста.

Lisp
1
2
3
4
5
(DEFUN REV(X)
(COND
((< X 10) (COND ((= X 3) T) (T nil)))
((= (REM X 10) 3) T)
(T (REV (FIX (/ X 10))))))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2016, 18:24
Ответы с готовыми решениями:

Обратный порядок цифр в атоме. Рекурсия
В общем, нужно сделать так, чтобы в каждом атоме списка цифры шли в обратном...

Удалить из числового списка числа, нарушающие возрастающий порядок
Задача из раздела &quot;C++ для начинающих&quot;. Занятно сравнить длину кода (да и...

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

Запуск AutoLISP
Как запустить AutoLISP в AutoCad&quot;e. Я выбираю Сервис=Приложения=... и в...

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

6
vlisp
501 / 475 / 111
Регистрация: 10.08.2015
Сообщений: 1,674
Завершенные тесты: 1
08.01.2016, 19:27 2
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(defun explode ( num / lst)
  ;; Разбивает число на список его цифр
  ;; (explode 153) ==> (1 5 3)
  (while (> num 0)
    (setq lst   (cons (rem num 10) lst)
          num (/ num 10)))
  lst
)
 
(defun implode ( lst / num )
  ;; Восстанавливает число из списка его цифр
  ;; (implode '(1 5 3)) ==> 153
  (setq num 0
        len (1- (length lst)))
  (while lst
   (setq num (+ num (* (car lst) (expt 10 len) ))
         len (1-  len)
         lst (cdr lst)))
  num
)
 
(if (member 3 (setq num 153 lst (explode num)))
  (implode (reverse lst)))
3
Catstail
Модератор
24165 / 12153 / 2179
Регистрация: 12.02.2012
Сообщений: 19,737
08.01.2016, 22:17 3
В HomeLisp это будет так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun task (n)
  (let ((l (explode n)))
    (if (member 3 l) (implode (reverse l)) n)))
 
==> task
 
(task 123)
 
==> 321
 
(task 124)
 
==> 124
2
Lambdik
1038 / 932 / 106
Регистрация: 04.11.2012
Сообщений: 968
Записей в блоге: 3
08.01.2016, 22:58 4
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun F (integer / str)
  (setq str (itoa integer))
  (if (vl-string-search "3" str)
      (read (vl-list->string (reverse (vl-string->list str))))
      integer))
 
Command: (F 1234)
4321
 
Command: (F 124)
124
2
Artur Artur
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 4
10.01.2016, 09:45  [ТС] 5
Большое спасибо!!
0
castorsky
1973 / 1076 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
13.01.2016, 00:49 6
Лучший ответ Сообщение было отмечено _sg как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
;; racket-lang.org
(define (foo n)
  (when (number? n)
    (let ((m (string->list (number->string n))))
      (if (member #\3 m)
          (string->number (list->string (reverse m)))
          n))))
 
(foo 1234)
;4321
(foo 2244)
;2244
3
vlisp
501 / 475 / 111
Регистрация: 10.08.2015
Сообщений: 1,674
Завершенные тесты: 1
13.01.2016, 02:51 7
Вот так будет быстрее всего
Lisp
1
2
3
(defun foo ( num / lst)
  (if (vl-position 51 (setq lst (vl-string->list (itoa num))))
    (atoi (vl-list->string (reverse lst))) num))
4
13.01.2016, 02:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2016, 02:51

Программа в AutoLISP
Известна длинна окружности. Найти площадь круга, ограниченного этой окружностью.

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

AutoLisp относительные координаты
Всем привет! Есть команда (command &quot;pline&quot; A &quot;@10&lt;45&quot; &quot;@10&lt;0&quot; &quot;@-10&lt;45&quot;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru