Jump to content

LISP divdimensiju masīvu apstrāde


ExDec
 Share

Recommended Posts

Sveiki, Boot.lv biedri!

 

Uzreiz pasaku, ka šis ir vajadzīgs augstskolai, neprasu neko gatavu, bet varbūt ir kāds, kas var palīdzēt vismaz norādot kā varētu darīt.

 

Ir jāapstrādā dots divdimensiju masīvs, kur katrā rindā ir atšķirīgs kolonnu skaits. Jāsaskaita katrā rindā pozitīvie un negatīvie elementi, tas pats jāizdara arī ar katru kolonnu. Ar rindām problēmu nav, tas ir izdarīts, ar kolonnām būtu arī skaidrs kā to panākt - samainot kolonnas un rindas ar vietām un izmantojot tās pašas rindu funkcijas.

Problēmas parādās pie rindu un kolonnu apmaiņas. Vēršos šeit, jo diemžēl internets nav diez ko atsaucīgs šajās lietās un pats esmu nocīnījies jau labu laiku.

 

Atvainojos, ka kods patiesībā ļoti haotisks, bet pašlaik ne tam ir nozīme. Apmaiņas funkcijas vietu iekrāsoju sarkanu. Pašlaik tur esošais kods izvada pirmās kolonnas elementus katru jaunā rindā.

(SETQ Q(QUOTE (( 2 -3  4 0 -2)(-4  0  2)(-3  3 -4 3))))

(DEFUN AddPoz (L) (COND 
((NULL L)0)((ATOM (CAR L))
	(COND ((>(CAR L)0)
		(+ (CAR L) (AddPoz (CDR L))))
		((CAR L) (AddPoz (CDR L)))))
		(T(+ (AddPoz (CAR L)) (AddPoz (CDR L)))))
)

(DEFUN AddNeg (L) (COND 
((NULL L)0)((ATOM (CAR L))
	(COND ((<(CAR L)0)
		(+ (CAR L) (AddNeg (CDR L))))
		((CAR L) (AddNeg (CDR L)))))
		(T(+ (AddNeg (CAR L)) (AddNeg (CDR L)))))
)

(DEFUN +Row (L) (SETQ X
	(COND ((NULL L) L)
	(T (CONS (AddPoz (CAR L)) (+Row (CDR L))))
	)
)
)

(DEFUN -Row (L) (SETQ Y
	(COND((NULL L) L)
    (T (CONS (AddNeg (CAR L)) (-Row (CDR L))))
	)
)
)

(DEFUN PrintRow (L I)
	(SETQ G(LOOP FOR X IN L
		FOR Y IN I
		COLLECT (LIST X Y)
		)
	)
	(DOLIST (X G) (PRINT X))
)

(DEFUN Inv (L)
	(WHEN L	
		(PRINT (CAR(CAR L)))
			(Inv (CDR L))
	)
)

(+Row Q)
(-Row Q)
(PrintRow X Y)
(Inv Q)

ATBILDE SAŅEMTA, SLĒDZU CIET! PALDIES!

Labots - ExDec
Link to comment
Share on other sites

Guest
Slēgta tēma, pievienot komentāru nav iespējams.
 Share

×
×
  • Izveidot jaunu...