(от 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. Он выполняет следующие действия:
- Получает на вход матрицу A и присваивает элементу главной диагонали сумму положительных элементов с главной диагонали.
- Для этого используется рекурсивная функция
matrix-diagonal-chg_
, которая выполняет следующие действия:- Инициализирует переменные
mtxk
,mtxc
,nrow
иmtxr
значением пустого списка. - Рекурсивно вызывает функцию
matrix-diagonal-chg_
для каждого элемента матрицы, начиная с главной диагонали. - Для каждого элемента матрицы выполняет следующие действия:
- Проверяет, является ли текущий элемент положительным.
- Если текущий элемент положительный, то добавляет его в список
sumcol
. - Если список
sumcol
не пустой, то добавляет его в новый списокlstrownew
. - Добавляет новый список
lstrownew
в списокmtxr
.
- Инициализирует переменные
- Выводит на экран список
mtxr
, который содержит исходную матрицу A с измененными значениями.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д