cg-Cad

Lisp »Tips 'n Tricks »Uso di Foreach (II) »(I)

Il lisp graph modificato permette di salvare su file txt il diagramma di una generica funzione f(x).

graph2.lsp

;| 
  Graph2.lsp by Claudio Piccini (1/03/2004)
  www.cg-cad.com
  
  Salva su file graph.txt il diagramma 
  della funzione f(x)

  Basato su:
  Program 4.7 - "Manuale del Pascal",
                K. Jensen, N.Wirth
|;

(defun dis_f (funz / xlines scale zeroy delta i
                     xlimit nomedir nf f1 point
                     x y round yposition
                     spazio asterisco 
 )
 (setq xlines 16)
 (setq scale 32)
 (setq zeroY 34)
 (setq delta (/ 1.0 xlines))
 (setq i 0)
 (while (< i 100)
  (setq xlimit (append xlimit (list i)))
  (setq i (1+ i))
 )
 (setq nomeDir (getvar "dwgprefix"))
 (setq nf (strcat nomeDir "graph.txt"))
 (setq f1 (open nf "w"))
 (foreach Point Xlimit 
  (setq x (* Delta Point)) 
  (setq y (eval (read funz)))
  (if (>= (* Scale y) 0)
   (setq Round (fix (+ (* Scale y) 0.5)))
   (setq Round (fix (- (* Scale y) 0.5)))
  )
  (setq YPosition (+ Round ZeroY))
  (setq spazio "")
  (repeat YPosition
   (setq spazio (strcat spazio " ")) 
  )
  (setq asterisco (strcat spazio "*"))
  (write-line asterisco f1)
 )
 (close f1)
)

(defun c:graph2 ( / funz )
 (setq funz (getstring "\nFunzione (ad es. \"(sin x)\"): "))
 (dis_f funz)
)
;;;eof

Test del lisp

Command: graph2
Funzione (ad es. "(sin x)"): "(* (exp (* x -1))(sin (* 2 pi x)))"
                                  *
                                              *
                                                      *
                                                           *
                                                           *
                                                        *
                                                  *
                                          *
                                  *
                           *
                      *
                   *
                   *
                     *
                         *
                             *
                                  *
                                      *
                                         *
                                           *
                                           *
                                          *
                                        *
                                     *
                                  *
                               *
                              *
                             *
                            *
                             *
                               *
                                *
                                  *
                                    *
                                     *
                                     *
                                     *
                                     *
                                    *
                                   *
                                  *
                                 *
                                *
                                *
                                *
                                *
                                 *
                                 *
                                  *
                                   *
                                   *
                                   *
                                   *
                                   *
                                   *
                                  *
                                  *
                                  *
                                 *
                                 *
                                 *
                                 *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *
                                  *

Command: graph2
Funzione (ad es. "(sin x)"): "(sin(* 2 pi x))"

                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *
                                                                  *
                                                                *
                                                         *
                                              *
                                  *
                      *
           *
    *
  *
    *
           *
                      *
                                  *
                                              *
                                                         *
                                                                *

(setq y (eval (read funz)))
Ad esempio funz="(+ 1 x)"
(setq y (read funz)) = (+ 1 x)
(eval y) = x + 1

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 1 Marzo 2004