|
Lisp »Tips 'n Tricks
»Lisp & Array
»1
»2
»3
»4
»5
»6
»7
»8
»9
»10
LSTAR
;|
LSTAR.LSP
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Generatore di matrici bidimensionali
Inizializza la lista A come un array NRxNC
Esempio NR=3, NC=4:
0 1 2 3
(
0 ( 1.0 2.0 3.0 4.0)
1 ( 5.0 6.0 7.0 8.0)
2 ( 9.0 10.0 11.0 12.0)
)
|;
(defun lstArray (NR NC / i j L e str)
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq str (strcat "\n Inserire elemento A[" (itoa i) "],[" (itoa j) "]: "))
(setq e (getreal str))
(setq L (append L (list e)))
(setq j (1+ j))
)
(setq A (append A (list L)))
(setq L nil)
(setq i (1+ i))
)
(princ "\n")
(setq A A)
)
(defun c:lstar ( / NR NC A
str i j e
)
; 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
|;
(setq A (lstArray NR NC))
;|
legge l'array A
|;
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i A)))
(setq str (strcat " A[" (itoa i) "],[" (itoa j) "]=" (rtos e 2 2)))
(princ str)
(setq j (1+ j))
)
(princ "\n")
(setq i (1+ i))
)
; ripristina l'ambiente
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
Command: lstar
Numero righe [3]: Invio
Numero colonne [4]: 3
Inserire elemento A[0],[0]: 1
Inserire elemento A[0],[1]: 2
Inserire elemento A[0],[2]: 3
Inserire elemento A[1],[0]: 4
Inserire elemento A[1],[1]: 5
Inserire elemento A[1],[2]: 6
Inserire elemento A[2],[0]: 7
Inserire elemento A[2],[1]: 8
Inserire elemento A[2],[2]: 9
A[0],[0]=1 A[0],[1]=2 A[0],[2]=3
A[1],[0]=4 A[1],[1]=5 A[1],[2]=6
A[2],[0]=7 A[2],[1]=8 A[2],[2]=9
Analisi del Lisp
(defun lstArray (NR NC / i j L e str)
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq str (strcat "\n Inserire elemento A[" (itoa i) "],[" (itoa j) "]: "))
(setq e (getreal str))
(setq L (append L (list e)))
(setq j (1+ j))
)
(setq A (append A (list L)))
(setq L nil)
(setq i (1+ i))
)
(princ "\n")
(setq A A)
)
|
La funzione (ltsArray numero_righe numero_colonne) genera una lista di n liste di numeri reali, con n uguale alla variabile numero_righe.
La funzione inserisce il valore numerico reale e digitato dall'utente alla richiesta Inserire elemento A[0],[0]: in una lista di appoggio provvisoria L.
La lista provvisoria viene chiusa quando la variabile contatore j è uguale a NC (numero colonne) e il contenuto aggiunto alla lista A, quindi la lista L viene svuotata (setq L nil).
L'ultima istruzione (setq A A) imita il return f(x) del linguaggio C.
L'istruzione (setq A (lstArray NR NC)) salva in A il risultato della funzione (lstArray).
Per leggere il contenuto della 'matrice' uso due cicli while e la funzione (nth).
L'istruzione (setq e (nth j (nth i A))) salva in e l'elemento collocato nella lista-riga i di A alla posizione-colonna j.
(setq i 0)
(while (< i NR)
(setq j 0)
(while (< j NC)
(setq e (nth j (nth i A)))
(setq str (strcat " A[" (itoa i) "],[" (itoa j) "]=" (rtos e 2 2)))
(princ str)
(setq j (1+ j))
)
(princ "\n")
(setq i (1+ i))
)
|
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 18 Giugno 2005
|
|