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

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

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

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

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

textual
Листинг программы
(define (matrix-diagonal-chg mtxk)
    (let matrix-diagonal-chg_ ((mtxk mtxk) (mtxc mtxk) (nrow 0) (mtxr '()))
        (cond
            ((empty? mtxc) mtxr)
            (else
                (define sumcol
                    (let compute-sumcol ((mtxc mtxk) (ncol nrow) (jcol 0) (sumcol 0))
                        (cond
                            ((empty? mtxc) sumcol)
                            (else
                                (define elmc
                                    (let select-elmc ((lstrow (car mtxc)) (ncol ncol) (jcol 0))
                                        (cond
                                            ((empty? lstrow) 0)
                                            (else
                                                (cond
                                                    ((= jcol ncol) (car lstrow))
                                                    (else (select-elmc (cdr lstrow) ncol (+ jcol 1)))
                                                )
                                            )
                                        )
                                    )
                                )
                                (cond
                                    ((< elmc 0) (set! elmc 0))
                                )
                                (cond
                                    ((= jcol ncol) (set! elmc 0))
                                )
                                (compute-sumcol (cdr mtxc) ncol (+ jcol 1) (+ sumcol elmc))
                            )
                        )
                    )
                )
                (define lstrownew
                    (let create-lstrow-new ((lstc (car mtxc)) (sumcol sumcol) (ncol nrow) (jcol 0) (lstrownew '()))
                        (cond
                            ((empty? lstc) lstrownew)
                            (else
                                (cond
                                    ((= jcol ncol) (set! lstrownew (append lstrownew (list sumcol))))
                                    (else (set! lstrownew (append lstrownew (list (car lstc)))))
                                )
                                (create-lstrow-new (cdr lstc) sumcol ncol (+ jcol 1) lstrownew)
                            )
                        )
                    )
                )
                (set! mtxr (append mtxr (list lstrownew)))
                (matrix-diagonal-chg_ mtxk (cdr mtxc) (+ nrow 1) mtxr)
            )
        )
    )
)

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

Код представлен на языке программирования 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
Похожие ответы