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

Common Lisp Вставка столбца в матрицу

21.05.2014, 00:48. Показов 963. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер! Пожалуйста, помогите решить задачу на языке Common Lisp!

Даны действительные числа A1, ..., An, действительная квадратная матрица порядка n (n>=6). Получить действительную матрицу размера n*(n+1), вставив в исходную матрицу между пятым и шестым столбцами новый столбец с элементами A1, ..., An.

Заранее огромное спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2014, 00:48
Ответы с готовыми решениями:

Книги или другой источник, где описана история версий Lisp и Common Lisp
Доброго времени суток.Такой вопрос,знаете какой-нибудь источник,где описана история версий Lisp и...

Common lisp
Есть фрагмент программы: (defun game(x y) (cond (( < x y)(print "menshe")(setq y (read))) (( >...

Common Lisp
Подскажите пожалуйста, а может Common Lisp формировать списки из функций, и (если вдруг может) как?

Common lisp
кто поможет решить эти задачи? Перечитайте правила форума. Один вопрос - одна тема. Заголовок...

12
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
21.05.2014, 07:44 2
Лучший ответ Сообщение было отмечено Sashazima как решение

Решение

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
(defun extend-matrix (a k v)
  (let ((m (array-dimension a 0))
        (n (array-dimension a 1)))
    (let ((b (make-array (list m (1+ n)))))
      (dotimes (i m)
        (dotimes (j k)
          (setf (aref b i j) (aref a i j))))
      (loop
        :for i :below m
        :for x :in v
        :do (setf (aref b i k) x))
      (dotimes (i m)
        (loop :for j :from k :to (1- n) :do
          (setf (aref b i (1+ j)) (aref a i j))))
      b)))
 
(defun print-matrix (a &optional (format "~a"))
  (dotimes (i (array-dimension a 0))
    (dotimes (j (array-dimension a 1))
      (format t format (aref a i j)))
    (terpri)))
 
(defun test-extend-matrix (k format)
  (let ((n (+ k (random k))))
    (let ((a (make-array (list n n)))
          (v (loop :for i :below n :collect i)))
      (dotimes (i (array-dimension a 0))
        (dotimes (j (array-dimension a 1))
          (setf (aref a i j) (random (* n n)))))
      (print-matrix a format)
      (terpri)
      (print-matrix (extend-matrix a k v) format))))
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
(test-extend-matrix 6 "~3d ")
; 13  21  10  33   1  19 
; 19  22   0  20  17   5 
;  7  35  14  10   7  21 
; 16  14  23  29  10  26 
;  1  13  21  20  15   1 
; 30  32   7  34  29   1 
;
; 13  21  10  33   1  19   0 
; 19  22   0  20  17   5   1 
;  7  35  14  10   7  21   2 
; 16  14  23  29  10  26   3 
;  1  13  21  20  15   1   4 
; 30  32   7  34  29   1   5 
 
(test-extend-matrix 6 "~3d ")
;  0  57   1  36  52  58  27  12 
; 15  11  29  58   5  11  37  28 
; 18  55  50  42  48  18  63  48 
; 27  31  11  38  23  31  32  25 
; 45  63  62  61  61  41  59   7 
; 22  16  59   6  55  15  46  31 
; 59  49  35  43  56  48  41   1 
; 18  20  22  60   9  35  40  26 
;
;  0  57   1  36  52  58   0  27  12 
; 15  11  29  58   5  11   1  37  28 
; 18  55  50  42  48  18   2  63  48 
; 27  31  11  38  23  31   3  32  25 
; 45  63  62  61  61  41   4  59   7 
; 22  16  59   6  55  15   5  46  31 
; 59  49  35  43  56  48   6  41   1 
; 18  20  22  60   9  35   7  40  26
1
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 10
21.05.2014, 09:56  [ТС] 3
korvin_, спасибо. Но я не совсем поняла, что происходит. И почему столбец встает не между 5 и 6?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
21.05.2014, 10:22 4
Вот:

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
;; matr - матрица; 
;; col-new - новый столбец;
;; after - после какого вставлять
 
(defun col-ins (matr col-new after)
  (mapcar #'(lambda (row el) (append (subseq row 0 after) (list el) (subseq row after))) matr col-new))
 
==> col-ins
 
(col-ins '((1 2 3) (4 5 6) (7 8 9)) '(a b c) 2)
 
==> ((1 2 a 3) 
       (4 5 b 6) 
       (7 8 c 9))
 
(col-ins '((1 2 3) (4 5 6) (7 8 9)) '(a b c) 1)
 
==> ((1 a 2 3) 
       (4 b 5 6)
       (7 c 8 9))
 
(col-ins '((1 2 3) (4 5 6) (7 8 9)) '(a b c) 3)
 
==> ((1 2 3 a) 
       (4 5 6 b)
       (7 8 9 c))
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
21.05.2014, 10:59 5
Цитата Сообщение от Sashazima Посмотреть сообщение
я не совсем поняла, что происходит
http://www.lispworks.com/docum... ntents.htm

Цитата Сообщение от Sashazima Посмотреть сообщение
И почему столбец встает не между 5 и 6?
Между. Индексация начинается с нуля.
0
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 10
21.05.2014, 11:20  [ТС] 6
Catstail, спасибо, но это ведь получается работа со списком, а не с матрицей?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
21.05.2014, 11:26 7
Да, со списками. И гораздо лаконичнее, чем с массивами.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
21.05.2014, 12:27 8
и гораздо медленнее
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
21.05.2014, 12:39 9
Цитата Сообщение от transformator.t Посмотреть сообщение
и гораздо медленнее
- да, но зато без структуроразрушения.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
21.05.2014, 12:43 10
скопировать матрицу не проблема)
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INSOMNIA> (defparameter
              mx-ar
            (loop with matrix = (make-array '(10000 10000))
                 for l to 9999
                 do
                 (loop for c to 9999
                      do
                      (setf (aref matrix l c)
                            (1+ (random 100))))
                 finally (return matrix)))
MX-AR
INSOMNIA> (time (arrayp
                 (matrix-copy mx-ar)))
Evaluation took:
  1.442 seconds of real time
  1.312000 seconds of total run time (0.809000 user, 0.503000 system)
  [ Run times consist of 0.427 seconds GC time, and 0.885 seconds non-GC time. ]
  90.98% CPU
  3,452,467,487 processor cycles
  800,000,016 bytes consed
  
T
1
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 10
21.05.2014, 14:50  [ТС] 11
Catstail, я с Вами согласна, без сомнения. Но, к сожалению, нужны именно массивы(

Добавлено через 9 минут
korvin_, спасибо за ссылку, я поняла! Просто я к тому, что Вы создаете каждый раз рандомную матрицу, а она должна быть задана, так же как и столбец, который нужно вставить.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
21.05.2014, 15:11 12
Цитата Сообщение от Sashazima Посмотреть сообщение
Просто я к тому, что Вы создаете каждый раз рандомную матрицу, а она должна быть задана, так же как и столбец, который нужно вставить.
Так это просто для проверки, что extend-matrix работает.
0
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 10
21.05.2014, 15:57  [ТС] 13
korvin_, Ааа! Вот, теперь я сделала свои тесты, прогнала и окончательно поняла! Спасибо Вам огромное!
0
21.05.2014, 15:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2014, 15:57
Помогаю со студенческими работами здесь

ООП Common Lisp
Помогите пожалуйста! Реализовать класс: Программа (название, тип, сфера применения, язык...

Курсы ФП на Common Lisp
Курс функционального программирования стартует 27 февраля на бесплатном образовательном ресурсе...

Common Lisp - Матрица
Помогите решить задачу! 1. Нужно написать функции генерации матрицы и ввода матрицы с клавиатуры...

Вопрос по common lisp
Подскажите пожалуйста как выполнить лисп-программу из txt или какого другого файла?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru