(от PetrovP): В в каждой строке матрицы A присвоить элементу главной диагонали сумму положительных элементов с - Lisp

Узнай цену своей работы

Формулировка задачи:

Задана матрица A размера 6*7 в каждой строке матрицы элементу главной диагонали присвоить сумму положительных элементов строки без элемента главной диагонали.
HomeLisp:
Листинг программы
  1. (defun task (matr)
  2. (let ((res nil))
  3. (iter (for row in matr)
  4. (for p from 0 to (- (length matr) 1))
  5. (let ((r nil)
  6. (s 0))
  7. (iter (for a in row) (for j from 0 to (- (length row) 1))
  8. (when (and (plusp a) (/= j p)) (summing a into s)))
  9. (setf (nth p row) s))
  10. (collecting row into res)) res ))
  11. ==> task
  12. (task '((1 2 3) (4 5 6) (7 8 9)))
  13. ==> ((5 2 3) (4 10 6) (7 8 15))

Решение задачи: «(от PetrovP): В в каждой строке матрицы A присвоить элементу главной диагонали сумму положительных элементов с»

textual
Листинг программы
  1. (define (matrix-diagonal-chg mtxk)
  2.     (let matrix-diagonal-chg_ ((mtxk mtxk) (mtxc mtxk) (nrow 0) (mtxr '()))
  3.         (cond
  4.             ((empty? mtxc) mtxr)
  5.             (else
  6.                 (define sumcol
  7.                     (let compute-sumcol ((mtxc mtxk) (ncol nrow) (jcol 0) (sumcol 0))
  8.                         (cond
  9.                             ((empty? mtxc) sumcol)
  10.                             (else
  11.                                 (define elmc
  12.                                     (let select-elmc ((lstrow (car mtxc)) (ncol ncol) (jcol 0))
  13.                                         (cond
  14.                                             ((empty? lstrow) 0)
  15.                                             (else
  16.                                                 (cond
  17.                                                     ((= jcol ncol) (car lstrow))
  18.                                                     (else (select-elmc (cdr lstrow) ncol (+ jcol 1)))
  19.                                                 )
  20.                                             )
  21.                                         )
  22.                                     )
  23.                                 )
  24.                                 (cond
  25.                                     ((< elmc 0) (set! elmc 0))
  26.                                 )
  27.                                 (cond
  28.                                     ((= jcol ncol) (set! elmc 0))
  29.                                 )
  30.                                 (compute-sumcol (cdr mtxc) ncol (+ jcol 1) (+ sumcol elmc))
  31.                             )
  32.                         )
  33.                     )
  34.                 )
  35.                 (define lstrownew
  36.                     (let create-lstrow-new ((lstc (car mtxc)) (sumcol sumcol) (ncol nrow) (jcol 0) (lstrownew '()))
  37.                         (cond
  38.                             ((empty? lstc) lstrownew)
  39.                             (else
  40.                                 (cond
  41.                                     ((= jcol ncol) (set! lstrownew (append lstrownew (list sumcol))))
  42.                                     (else (set! lstrownew (append lstrownew (list (car lstc)))))
  43.                                 )
  44.                                 (create-lstrow-new (cdr lstc) sumcol ncol (+ jcol 1) lstrownew)
  45.                             )
  46.                         )
  47.                     )
  48.                 )
  49.                 (set! mtxr (append mtxr (list lstrownew)))
  50.                 (matrix-diagonal-chg_ mtxk (cdr mtxc) (+ nrow 1) mtxr)
  51.             )
  52.         )
  53.     )
  54. )

Объяснение кода листинга программы

Код представлен на языке программирования Lisp. Он выполняет следующие действия:

  1. Получает на вход матрицу A и присваивает элементу главной диагонали сумму положительных элементов с главной диагонали.
  2. Для этого используется рекурсивная функция matrix-diagonal-chg_, которая выполняет следующие действия:
    • Инициализирует переменные mtxk, mtxc, nrow и mtxr значением пустого списка.
    • Рекурсивно вызывает функцию matrix-diagonal-chg_ для каждого элемента матрицы, начиная с главной диагонали.
    • Для каждого элемента матрицы выполняет следующие действия:
      • Проверяет, является ли текущий элемент положительным.
      • Если текущий элемент положительный, то добавляет его в список sumcol.
      • Если список sumcol не пустой, то добавляет его в новый список lstrownew.
      • Добавляет новый список lstrownew в список mtxr.
  3. Выводит на экран список mtxr, который содержит исходную матрицу A с измененными значениями.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы