|
Lisp »Tips 'n Tricks
»Lisp & Array
»1
»2
»3
»4
»5
»6
»7
»8
»9
»10
Per sommare 2 (o più) matrici degli stessi ordini M,N si sommano gli elementi omologhi.
Le singole somme costituiscono gli elementi della matrice somma (che mantiene gli stessi ordini M,N).
A=[ai,j], B=[bi,j] di dimensione MxN
C=[ci,j]=A+B
ci,j=ai,j+bi,j, i=1,2...M, j=1,2...N
S2M
;|
S2M.LSP
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Somma gli Elementi di 2 Matrici bidimensionali
|;
(defun lstArray ( NR NC nome / i j L X e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq str (strcat "\n Inserire elemento " nome "[" (itoa i) "],[" (itoa j) "]: "))
(setq e (getreal str))
(setq L (append L (list e)))
(setq j (1+ j))
)
(setq X (append X (list L)))
(setq L nil)
(setq i (1+ i))
)
(princ "\n")
(setq X X)
)
;|
mostra il contenuto della lista 'matrice' nome
|;
(defun scriveArray ( NR NC nome lista / i j e str )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i lista)))
(setq str (strcat nome "[" (itoa i) "],[" (itoa j) "]=" (rtos e 2 2)))
(princ str)
(setq j (1+ j))
)
(princ "\n")
(setq i (1+ i))
)
(princ "\n")
)
;|
somma gli elementi dell'array A
con gli elementi dell'array B
return X=A+B
Esempio
A =((-1.0 3.0)(1.0 5.0))
B =(( 0.0 1.0)(2.0 3.0))
C=A+B=((-1.0 4.0)(3.0 8.0))
|;
(defun s2Ar ( NR NC A B / i j e1 e2 L X )
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e1 (nth j (nth i A)))
(setq e2 (nth j (nth i B)))
(setq L (append L (list (+ e1 e2))))
(setq j (1+ j))
)
(setq X (append X (list L)))
(setq L nil)
(setq i (1+ i))
)
(setq X X)
)
(defun c:s2m ( / NR NC
A B C
)
; eco OFF
(setvar "cmdecho" 0)
;|
input numero righe = NR
numero colonne = NC
|;
(setq NR (getint "\n Numero righe [3]: "))
(if (= NR nil)(setq NR 3))
(setq NC (getint "\n Numero colonne [4]: "))
(if (= NC nil)(setq NC 4))
;|
inizializza la lista 'array' A
|;
(princ "\n Inizializzazione matrice A")
(setq A (lstArray NR NC " A"))
;|
inizializza la lista 'array' B
|;
(princ "\n Inizializzazione matrice B")
(setq B (lstArray NR NC " B"))
;|
mostra il contenuto dell'array A
|;
(scriveArray NR NC " A" A)
;|
mostra il contenuto dell'array B
|;
(scriveArray NR NC " B" B)
;|
somma gli elementi dell'array A
con gli elementi dell'array B
|;
(setq C (s2Ar NR NC A B))
;|
mostra il contenuto dell'array C=A+B
|;
(princ "\n C=A+B\n")
(scriveArray NR NC " C" C)
;|
ripristina l'ambiente
|;
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: s2m
Numero righe [3]: 2
Numero colonne [4]: 2
Inizializzazione matrice A
Inserire elemento A[0],[0]: -1
Inserire elemento A[0],[1]: 3
Inserire elemento A[1],[0]: 1
Inserire elemento A[1],[1]: 5
Inizializzazione matrice B
Inserire elemento B[0],[0]: 0
Inserire elemento B[0],[1]: 1
Inserire elemento B[1],[0]: 2
Inserire elemento B[1],[1]: 3
A[0],[0]=-1 A[0],[1]=3
A[1],[0]=1 A[1],[1]=5
B[0],[0]=0 B[0],[1]=1
B[1],[0]=2 B[1],[1]=3
C=A+B
C[0],[0]=-1 C[0],[1]=4
C[1],[0]=3 C[1],[1]=8
Command: s2m
Numero righe [3]: 2
Numero colonne [4]: 2
Inizializzazione matrice A
Inserire elemento A[0],[0]: 1
Inserire elemento A[0],[1]: 2
Inserire elemento A[1],[0]: 3
Inserire elemento A[1],[1]: 4
Inizializzazione matrice B
Inserire elemento B[0],[0]: 0
Inserire elemento B[0],[1]: 0
Inserire elemento B[1],[0]: 0
Inserire elemento B[1],[1]: 0
A[0],[0]=1 A[0],[1]=2
A[1],[0]=3 A[1],[1]=4
B[0],[0]=0 B[0],[1]=0
B[1],[0]=0 B[1],[1]=0
C=A+B
C[0],[0]=1 C[0],[1]=2
C[1],[0]=3 C[1],[1]=4
Command: s2m
Numero righe [3]: 3
Numero colonne [4]: 3
Inizializzazione matrice A
Inserire elemento A[0],[0]: 3
Inserire elemento A[0],[1]: 5
Inserire elemento A[0],[2]: 3
Inserire elemento A[1],[0]: 0
Inserire elemento A[1],[1]: 0
Inserire elemento A[1],[2]: 1
Inserire elemento A[2],[0]: 1
Inserire elemento A[2],[1]: 2
Inserire elemento A[2],[2]: 0
Inizializzazione matrice B
Inserire elemento B[0],[0]: 3
Inserire elemento B[0],[1]: 0
Inserire elemento B[0],[2]: 1
Inserire elemento B[1],[0]: 5
Inserire elemento B[1],[1]: 0
Inserire elemento B[1],[2]: 2
Inserire elemento B[2],[0]: 3
Inserire elemento B[2],[1]: 1
Inserire elemento B[2],[2]: 0
A[0],[0]=3 A[0],[1]=5 A[0],[2]=3
A[1],[0]=0 A[1],[1]=0 A[1],[2]=1
A[2],[0]=1 A[2],[1]=2 A[2],[2]=0
B[0],[0]=3 B[0],[1]=0 B[0],[2]=1
B[1],[0]=5 B[1],[1]=0 B[1],[2]=2
B[2],[0]=3 B[2],[1]=1 B[2],[2]=0
C=A+B
C[0],[0]=6 C[0],[1]=5 C[0],[2]=4
C[1],[0]=5 C[1],[1]=0 C[1],[2]=3
C[2],[0]=4 C[2],[1]=3 C[2],[2]=0
3 5 3 3 0 1 6 5 4
A = 0 0 1 B = 5 0 2 C=A+B = 5 0 3
1 2 0 3 1 0 4 3 0
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Giugno 2005
|
|