Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121

Увеличить строки матрицы на два первых элемента этой же строки

14.11.2013, 20:56. Показов 831. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане и гости!
Необходимо создать функцию входным параметром которой является матрица, а выходным – модифицированная матрица в которой в каждой строке на два элемента больше, причем эти два элемента это первых два элемента этой же строки. Только операторный стиль. Без рекурсии, без фишек, без dotimes.

Пример:
Lisp
1
2
-->(функция '((1 2 3 4 5) (a b c d e) (6 7 8 9 0)))
((1 2 3 4 5 1 2) (a b c d e a b) (6 7 8 9 0 6 7))
Есть код:
Lisp
1
2
3
4
5
6
7
8
(defun more_strok (matrix)
  (setq copy_matrix matrix)
  (setq kolvo_strok (length matrix))
  (setq matrix (nconc (car copy_matrix) (cons (caar copy_matrix) nil) (cons (cadar copy_matrix) nil)))
  (do ((stroka 1 (+ stroka 1)))
      ((= stroka kolvo_strok) matrix)
      (setq matrix (nconc matrix (cadr copy_matrix) (cons (caadr copy_matrix) nil) (cons (cadadr copy_matrix) nil)))
      (setq copy_matrix (cdr copy_matrix))))
Моя программа делает как-то так:
Lisp
1
2
-->(more_strok '((1 2 3) (4 5 6) (7 8 9)))
(1 2 3 1 2 4 5 6 4 5 7 8 9 7 8)
Я понимаю что не нужно было использовать nconc, но и list и append не подходят. Как иначе строить матрицу?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2013, 20:56
Ответы с готовыми решениями:

Вывести на экран все элементы n-й строки матрицы, начиная с нижнего элемента этой строки
Дан двумерный массив. Вывести на экран все элементы n-й строки массива. начиная с нижнего элемента этой строки.

Для каждой строки матрицы определить число элементов, больших первого элемента этой строки
Для каждой строки матрицы определить число элементов, больших первого элемента этой строки. (Считает только для последней строки,...

Для каждой строки матрицы определить произведение элементов, меньших последнего элемента этой строки
Для каждой строки матрицы определить произведение элементов,меньших последнего элемента этой строки

8
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
14.11.2013, 21:27
Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
Без рекурсии, без фишек, без dotimes.
-

Lisp
1
2
3
4
5
6
7
8
(defun more-cols (matr)
  (mapcar #'(lambda (x) (append x (subseq x 0 2))) matr))
 
==> more-cols
 
(more-cols '((1 2 3 4 5) (a b c d e) (6 7 8 9 0)))
 
==> ((1 2 3 4 5 1 2) (a b c d e a b) (6 7 8 9 0 6 7))
2
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
14.11.2013, 21:41  [ТС]
Спасибо, Catstail =)
А можно без использования mapcar # ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
14.11.2013, 21:46
Так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun more-cols (matr)
  (prog (res line)
@
    (when (null matr) (return res))
    (setq line (car matr))
    (setq line (append line (subseq line 0 2)))
    (setq res (append res (list line)))
    (setq matr (cdr matr))
    (go @)))
 
==> more-cols
 
(more-cols '((1 2 3 4 5) (a b c d e) (6 7 8 9 0)))
 
==> ((1 2 3 4 5 1 2) (a b c d e a b) (6 7 8 9 0 6 7))
2
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
14.11.2013, 22:19  [ТС]
А что делает subseq? Я очень зажат в инструментах и даже эту функцию не могу использовать, так как не имею таковую.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
14.11.2013, 22:55
subseq возвращает отрезок списка. В данном случае без него легко обойтись:

Lisp
1
2
3
4
5
6
7
8
9
(defun more-cols (matr)
  (prog (res line)
@
    (when (null matr) (return res))
    (setq line (car matr))
    (setq line (append line (list (car lst) (cadr lst))))
    (setq res (append res (list line)))
    (setq matr (cdr matr))
    (go @)))
2
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
14.11.2013, 23:04  [ТС]
Спасибо! Живите долго! =)
Наверное вместо lst нужно line?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
15.11.2013, 07:31
Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
Наверное вместо lst нужно line?
- да, конечно! Пардон...
1
21 / 21 / 1
Регистрация: 24.07.2013
Сообщений: 121
15.11.2013, 19:53  [ТС]
Мда, в pc-lisp 3.0 нельзя меткой ставить "собаку" – @. В pc-lisp 3.0 нет предложения when, так что конечный результат что-то такое:
Lisp
1
2
3
4
5
6
7
8
9
(defun more-cols (matr)
  (prog (res line)
metka
    (if (null matr) then (return res))
    (setq line (car matr))
    (setq line (append line (list (car line) (cadr line))))
    (setq res (append res (list line)))
    (setq matr (cdr matr))
    (go metka)))
Препод просто жжет. Преподает то, что знает. С какой-то стороны это плюс: студенты меньше должны заглядывать в интернет и больше в конспект и лучше слушать лекции, но с практической стороны это огромный минус, так как в будущем многие из этих вещей не пригодятся и нужно будет переучиваться на современный лад, мучатся с современными диалектами. Это конечно не оправдывает ошибку в моем генетическом коде, но все же затрудняет лабоделание.
Catstail, еще раз благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2013, 19:53
Помогаю со студенческими работами здесь

Измените значение элементов матрицы вычитанием из каждого элемента строки среднее арифметическое этой строки
Нужна помощь с написанием функции которая вычитает из каждого элемента строки среднее арифметическое этой строки package Labs; ...

Для каждой строки матрицы определить номер первого элемента, большего среднего арифметического этой строки
Для каждой строки определить номер первого элемента большего среднего арифметического этой строки.

Замена первых элементов каждой строки квадратной матрицы на сумму элементов этой строки
Замена первых элементов каждой строки квадратной матрицы на сумму элементов этой строки

Найти строку матрицы с наименьшей суммой элементов и увеличить все элементы этой строки на 10
Дана целочисленная матрица {Aij}i=1..n,j=1..m (n,m<=100). Найти строку с наименьшей суммой элементов и увеличить все элементы этой строки...

Дана матрица. Написать программу, которая упорядочивает строки этой матрицы по убыванию первых элементов строк
Дана матрица А(nxn). Написать программу, которая упорядочивает строки этой матрицы по убыванию первых элементов строк.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru