> 1 <

Автор Сообщение

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3368   2010-11-11 23:31 GMT+3 часа(ов)      
Преобразовать матрицу, оставив в списках , являющихся элементами матрицы,только первые элементы этих списков

условие не пойму вообще...

Сначала думал что нужно было сделать примерно так:

PC-Lisp v 3.00
-->(rev)
chislo strok
3
chislo stolbcov
3
icxodnaya
((2 3 6)(4 8 9)(8 7 1))
icxodnaya matrica
2 3 6
4 8 9
8 7 1

(2 4 t

но преподаватель сказал что пойди разберись с условием...

вот код, может чем поможете или хотя б толком обьяесните что переделать нужно


(defun vvod_m() (progn
(setq m (progn(princ "chislo strok")
(terpri)(read) ))
(setq n (progn(princ "chislo stolbcov ")
(terpri)(read) ))
(setq x (progn(princ " ishodnaya")
(terpri)(read) ))

))
(defun vuvod_m(x) (prog(y)
m2
(setq y(car x))
m1
(princ (car y))
(princ " ")
(setq y(cdr y))
(cond ((not (null y))(go m1)))
(setq x(cdr x))
(cond ((not (null x))(terpri)(go m2)))
))
(defun vvod() (progn

(vvod_m)(princ " Ishodnaya matrica")
(terpri)(terpri)(vuvod_m x)
(terpri)(terpri)(terpri)))

(defun vyvod() (progn
(princ " Otvet")
(terpri)(terpri)(vuvod_m x)))


(defun rev() (progn
(vvod)
(setq i 1)
(setq z(list(car(car x))))
(setq y x)
l1
(setq y (cdr y))
(setq z (append z (list(car(car y)))))
(setq i (+ i 1))
(cond ((< i m)(go l1)))
(princ z) ))

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3369   2010-11-12 01:11 GMT+3 часа(ов)      
многабукав!!!
((defun parsemrx (L)
"this function get first elements of matrix"
(cond
((null L) nil)
(T
(cons (list (caar L)) (parsemrx (cdr L))))))
(defun solve ()
(parsemrx (read)))
>> (solve)
>> ((1 2 4) (2 4 6) (4 3 2))
>> ((1)(2)(4))
 
Яснее, чего вы хотели, задавая число строк и стобцов - проверку корректности ввода? или чего.
P.S. вы действительно думаете, что я лучше препода могу знать, что ему нужно?
I wish I'd made you angry earlier

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#3370   2010-11-12 11:30 GMT+3 часа(ов)      
Если внимательно читать задание, где указано «...в списках , являющихся элементами матрицы...», то можно предположить, что матрица (например 3 на 3) выглядит примерно так:
(((1  2)  (3  4)  (5  6))
((7 8) (9 10) (11 12))
((13 14) (15 16) (17 18)))

а задача состоит в преобразовании до
(((1)  (3)  (5))
((7) (9) (11))
((13) (15) (17)))

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3371   2010-11-12 12:29 GMT+3 часа(ов)      
Да, действительно...)

переделал код, вот что вышло

(defun rev() (progn
(vvod)
(setq i 1)
(setq z(list(car(car(car x)))))
(setq y x)
l1
(setq y (cdr y)))


(setq z (append z (list(car(car(car y))))))

(setq i (+ i 1))

(cond ((< i m)(go l1)))


(princ z) ))




PC-LISP V3.00 Copyright (C) 1986-1990 P.Ashwood-Smith
--- [pc-lisp.l] loaded ---
-->(load 'matr.txt)
--- [matr.txt] loaded ---
t
-->(rev)
chislo strok
2
chislo stolbcov
2
ishodnaya
(((2 3)(4 5))
((6 7)(8 9)))
Ishodnaya matrica

(2 3) (4 5)
(6 7) (8 9)


(2 6)t


токо не могу понять почему только в первых подсписках работает?

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3372   2010-11-12 12:34 GMT+3 часа(ов)      
(setq y (cdr y)))
проблема в этой строчке, но как не пытаюсь, нужный результат не выходит

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3373   2010-11-12 12:37 GMT+3 часа(ов)      
car car car x применяется единожды к каждому подсписку. Должен применяться car car к каждому подсписку пока всех не прошёл.
I wish I'd made you angry earlier

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3375   2010-11-12 12:45 GMT+3 часа(ов)      
ну как я понимаю если исправить сдесь (setq z(list(car(car(car x))))) на
(setq z(list(car(car x)))) то оно выведет не первый элемент подсписка а весь подсписок

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3376   2010-11-12 12:48 GMT+3 часа(ов)      
chislo strok
2
chislo stolbcov
2
ishodnaya
(((1 2)(3 4))
((5 6)(7 ))
Ishodnaya matrica

(1 2) (3 4)
(5 6) (7


((1 2) 5)t

вот что пишет...а должно выйти(1 3 5 7)

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3377   2010-11-12 13:07 GMT+3 часа(ов)      
(defun parsemrx (L)
"this function get first elements of matrix"
(cond
((null L) nil)
(T
(cons (list (caar L)) (parsemrx (cdr L))))))
 
(defun solve ()
(mapcar #'parsemrx (read)))
>> (solve)
>> (((1 2)(3 4))((5 6)(7 8)))
>> (((1) (3)) ((5) (7)))

вот в рамках такого решения просто отображаю список со старым алгоритмом
I wish I'd made you angry earlier

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3378   2010-11-12 13:36 GMT+3 часа(ов)      
проблема токо в том что эту лабу нужно сделать в операторном стиле...

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3379   2010-11-12 14:02 GMT+3 часа(ов)      
вовремя сказал)))))))))))
I wish I'd made you angry earlier

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3381   2010-11-12 14:04 GMT+3 часа(ов)      
да...забыл сказать...может можно как-то исправить мою ф-ю??

(defun rev() (progn
(vvod)
(setq i 1)
(setq z(list(car(car(car x)))))
(setq y x)
l1
(setq y (cdr y))) сдесь трабл...как переделать не знаю( оно выводит 1 элемент в 1 подсписке каждого списка...(вроде прально сказал)


(setq z (append z (list(car(car(car y))))))

(setq i (+ i 1))

(cond ((< i m)(go l1)))


(princ z) ))

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3382   2010-11-12 15:05 GMT+3 часа(ов)      
я нипанимаю ваше творение. это моя вина. не могу запустить pc-lisp
Вроде как хочется использовать два вложенных друг в друга цикла, у вас пока заметил один (это |1 - через лейбл?)
версия на SBCL, два вложенных друг в друга цикла. Внутренний императивно заполняет ряд, внешний присобачивает его к переменной temp.
 
(defvar n nil "эту переменную заполняем сами")
(defvar m nil "эту тоже, они используются в циклах")
(defun transform (mrx)
(let* ((row '()) (temp '()))
(do ((i 0 (1+ i)))
((= i m) temp)
(progn
(setq row '())
( do ((j 0 (1+ j)))
((= j n) nil)
(setq row (append row (list (list (car (nth j (nth i mrx)))))))
)
(setq temp (append temp (list row)))))))

если совсем нужно императивно, вынесете temp как глобальную переменную.

отредактировал(а) megamanx: 2010-11-12 15:54 GMT+3 часа(ов)
I wish I'd made you angry earlier

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3385   2010-11-12 18:56 GMT+3 часа(ов)      
показывал пример...но сказал что нельзя так
матрица может выглядеть как:
(((1 2) (3 4) (5 6))

(( 7 ( 9 10) (11 12))

((13 14 ) ( 15 16) ( 17 1 ))


так и :
((( 1 2 ) 3 5)

(( 7 0 1 )

((14 (15 16) 1 ))


и данная лабораторная работа должна быть выполнена без использования функционалов и рекурсии

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#3386   2010-11-12 19:03 GMT+3 часа(ов)      
Ваш препод идиот.

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3388   2010-11-12 19:05 GMT+3 часа(ов)      
он и сам это знает , наверно, вся группа была в шоке когда он не принял ни единой работы и всем поставил 2 за модуль...

trin

Members


Статус

22 сообщений

Где: Ukraine
Род занятий:
Возраст:

#3389   2010-11-12 19:07 GMT+3 часа(ов)      
обьяснил отказ принятия работы тем что мой первоначальный вариант был более подходящим

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3393   2010-11-12 19:19 GMT+3 часа(ов)      
напиши на луше, тут тема была. На сях.
I wish I'd made you angry earlier

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#3398   2010-11-12 23:47 GMT+3 часа(ов)      
хотя если исходить из самого пессимистического сценария, то неправ я, потому что алгоритм в принципе не учитывает, что матрица может быть неоднородной. Но всё таки... как-то тупо(
ну лано, вот эта штучка обрабатывает и нестандартные матрицы, и без р-и, и без ф-ла.
(defun transform (mrx)
(let* ((row '()) (temp '()))
(do ((i 0 (1+ i)))
((= i m) temp)
(progn
(setq row '())
( do ((j 0 (1+ j)))
((= j n) nil)
(cond
((atom (nth j (nth i mrx)))
(setq row (append row (list (list (nth j (nth i mrx)))))))
(T
(setq row (append row (list (list (car (nth j (nth i mrx)))))))
)))
(setq temp (append temp (list row)))))))
>> (transform '(((1 2) 3 5) (7 0 1) (14 (15 16) 1)))
>> (((1)(3)(5))((7)(0)(1))((14)(15)(1)))
это уже дело принципа

отредактировал(а) megamanx: 2010-11-13 01:46 GMT+3 часа(ов)
I wish I'd made you angry earlier
> 1 <


Онлайн :

0 пользователь(ей), 35 гость(ей) :