0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
1

В список, упорядоченный по возрастанию, вставить новый элемент так, чтобы упорядоченность сохранилась

27.12.2016, 12:00. Показов 955. Ответов 7
Метки нет (Все метки)

Нужна помощь.
В список, упорядоченный по возрастанию, вставить новый элемент так, чтобы упорядоченность сохранилась. Нужно реализовать код со спискоразрушающей функцией rplaca rplacd.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2016, 12:00
Ответы с готовыми решениями:

Списки. Вставить в упорядоченный список новый элемент так, чтобы сохранилась упорядоченность
Вставить в непустой список L, элементы которого упорядочены по неубыванию, новый элемент E так,...

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

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

Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя упорядоченность
помогите Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя...

7
4568 / 4273 / 364
Регистрация: 12.05.2012
Сообщений: 3,010
27.12.2016, 12:09 2
Lisp
1
2
3
4
5
6
7
8
(defun plunge-in (n w)
  (when w (let ((a (car w)) (d (cdr w)))
            (cond ((atom d) (list a n))
                  ((> n a) (cons a (plunge-in n d)))
                  ((cons n w))))))
 
> (plunge-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 15 секунд
Lisp
1
2
3
4
5
6
7
8
9
(defun plunge-in (n w)
  (when w ((lambda (a d)
             (cond ((atom d) (list a n))
                   ((> n a) (cons a (plunge-in n d)))
                   ((cons n w))))
           (car w) (cdr w))))
 
> (plunge-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 22 секунды
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun squeeze-in (n w)
  (let ((e))
    (loop for i from 0 below (length w) do
          ((lambda (u)
             (when  (and  (<= n u) (or (= i 0) (> n (nth (1- i) w))))
               (push n e))
             (push u e)
             (when (and (> n u) (= (length w) (1+ i)))
               (push n e)))
           (nth i w)))
    (nreverse e)))
 
> (squeeze-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 14 секунд
Lisp
1
2
3
4
5
(defun cram-in (n w)
  (sort (cons n w) #'<))
 
> (cram-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 13 секунд
Lisp
1
2
3
4
5
6
7
(defun set-in (n w)
  (cond ((null w) (cons n nil))
        ((> n (car w)) (cons (car w) (set-in n (cdr w))))
        ((cons n w))))
 
> (set-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 17 секунд
Lisp
1
2
3
4
5
6
7
(defun set-in (n w)
  (cond ((null w) `(,n))
        ((> n (car w)) (cons (car w) (set-in n (cdr w))))
        ((cons n w))))
 
> (set-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 15 секунд
Lisp
1
2
3
4
5
6
7
(defun set-in (n w &aux (a (car w)))
  (cond ((null w) `(,n))
        ((> n a) (cons a (set-in n (cdr w))))
        ((cons n w))))
 
> (set-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 14 секунд
Lisp
1
2
3
4
5
(defun set-in (n w &aux (a (car w)))
  (if w (if (> n a) (cons a (set-in n (cdr w))) (cons n w)) `(,n)))
 
> (set-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 15 секунд
Lisp
1
2
3
4
(defun plunge-in (n w) (merge 'list (list n) w #'<)) 
 
> (plunge-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
Добавлено через 11 секунд
Lisp
1
2
3
4
(defun plunge-in (n w) (merge 'list `(,n) w #'<))
 
> (plunge-in 7 '(1 3 5 8 11))
(1 3 5 7 8 11)
1
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
27.12.2016, 12:12  [ТС] 3
Спасибо большое, но мне нужно реализовать это задание со спискоразрушающей функцией rplacd или rplaca.
0
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
27.12.2016, 13:03  [ТС] 5
Мне нужно чтобы список разрушался, но не рекурсивно.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
30638 / 16867 / 3474
Регистрация: 12.02.2012
Сообщений: 28,276
Записей в блоге: 5
27.12.2016, 14:42 6
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
27
28
29
30
31
32
33
34
(defun task (lst a)
  (if (<= a (car lst)) 
      (cons a lst) 
      (let ((u (list a))
            (prev lst)
            (curr (cdr lst)))
        (loop
            (when (< a (car curr)) (rplacd u curr) (rplacd prev u) (return t))
            (setq prev (cdr prev))
            (setq curr (cdr curr))
            (when (null curr) (rplacd prev u) (return t)))
        lst)))
 
==> task
 
(task '(1 3 5 7 9) 11)
 
==> (1 3 5 7 9 11)
 
(task '(1 3 5 7 9) 1)
 
==> (1 1 3 5 7 9)
 
(task '(1 3 5 7 9) 2)
 
==> (1 2 3 5 7 9)
 
(task '(1 3 5 7 9) 3)
 
==> (1 3 3 5 7 9)
 
(task '(1 3 5 7 9) 4)
 
==> (1 3 4 5 7 9)
0
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
27.12.2016, 15:08  [ТС] 7
Спасибо большое, но я запутался в своем задании и его реализации и запутал вас. Я думаю, что мне нужно использовать рекурсию, но не рекурсивно уничтожать список.

Добавлено через 4 минуты
Реализация как я понял должна выглядеть примерно так:
Цитата Сообщение от gamer538 Посмотреть сообщение
(defun del ( lst )
(cond ((null lst) nil)
* * (( > (car lst) 0) (del (cdr lst)))
* * (t (rplacd lst (del (cdr lst)))))
)
Добавлено через 3 минуты
То есть код моего задания должен быть примерно таким же как я понял. Мне достаточно того чтобы элемент мог встать либо в конец списка либо куда-нибудь в середину.

Добавлено через 4 минуты
Я хотел сказать что похож по размеру.

Добавлено через 4 минуты
И в программе должны использоваться стандартные функции (cdr, car, cons, rplacd, rplaca), без if и when.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
30638 / 16867 / 3474
Регистрация: 12.02.2012
Сообщений: 28,276
Записей в блоге: 5
27.12.2016, 16:38 8
Evgen12301230, меня ты нисколько не запутал. Я реализовал (может, не очень красиво) итерационное структуроразрушающее преобразование. Нет особых проблем, чтобы переделать его в рекурсивное:

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
27
28
(defun task (lst a &optional (start t) (prev lst) (curr (cdr lst)))
  (let ((u (list a)))
     (cond ((and start (<= a (car lst))) (cons a lst))
           ((null curr) (rplacd prev u) lst)
           ((<= a (car curr)) (rplacd u curr) (rplacd prev u) lst) 
           (t (task lst a nil (cdr prev) (cdr curr))))))   
 
==> TASK
 
(task '(1 3 5 7 9) 0)
 
==> (0 1 3 5 7 9)
 
(task '(1 3 5 7 9) 1)
 
==> (1 1 3 5 7 9)
 
(task '(1 3 5 7 9) 2)
 
==> (1 2 3 5 7 9)
 
(task '(1 3 5 7 9) 4)
 
==> (1 3 4 5 7 9)
 
(task '(1 3 5 7 9) 11)
 
==> (1 3 5 7 9 11)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 16:38

Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя упорядоченность.
Прошу помочь решить задачки!:(очень нужно (Билет №19) Вставить в одномерный массив А,...

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

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

Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность)
Задание: Даны два вектора {хi}, {уi}, i = 1,..., 10, упорядоченные по возрастанию. Слить их в один...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru