You are on page 1of 16

8/!Pqfsbupsz!

lpoxfstkj

214

Operatory konwersji s to funkcje, suce do konwersji typw i jednostek (inaczej mwic, zamiany jednej wielkoci na drug). W swoich programach bdziesz ich bardzo
czsto uywa. Poniej, w porzdku alfabetycznym, zostan omwione standardowe
funkcje AutoLISPu przeznaczone do konwersji zmiennych rnych typw.
AutoLISP w razie potrzeby samoczynnie dokonuje jedynie konwersji liczb cakowitych na rzeczywiste, pozostae konwersje trzeba wymusza przez uycie odpowiednich operatorw.

Programy omwione w tym rozdziale:


PROG_008.LSP
Przykad uycia operatora konwersji ascii.
PROG_009.LSP
Przykad niejawnego porwnywania kodw ASCII.
PROG_010.LSP
Przykad uycia operatora konwersji rtos wersja 1.
PROG_011.LSP
Przykad uycia operatora konwersji rtos wersja 2.

)bohupg!tusjoh!\npef^*
*
)bohupg!
Funkcja wykonuje konwersj acucha string, reprezentujcego kt w formacie wywietlanym okrelonym przez argument mode, na warto zmiennoprzecinkow (typu real).
Funkcja zwraca wynik w radianach.

215

BvupMJTQ!!qsbluzd{oz!lvst
Warto argumentu mode

Format acucha

stopnie

stopnie/minuty/sekundy

grady

radiany

jednostki geodezyjne

Przykadowo:
(angtof
(angtof
(angtof
(angtof
(angtof

"180"
"180"
"180"
"180"
"180"

zwraca
zwraca
zwraca
zwraca
zwraca

0)
1)
2)
3)
4)

3.14159
3.14159
2.82743
4.07081
3.14159

)bohupt!bohmf!\npef!\qsfdjtjpo^^*
*
)bohupt!
Funkcja bierze kt angle (wyraony liczb rzeczywist typu real, okrelajc miar kta
w radianach) i zwraca go w postaci acucha alfanumerycznego o formacie zalenym
od argumentw mode, precision, od wartoci zmiennej systemowej UNITMODE AutoCADa oraz od wartoci zmiennej wymiarowania DIMZIN. Argumenty mode i precision
s liczbami typu integer, ktre okrelaj rodzaj jednostek i dokadno wartoci ktowych. Wartoci argumentu mode s takie same, jak w funkcji angtof. Argument precision jest liczb typu integer, ktra ustala wymagan dokadno wartoci ktowych,
okrelajc ilo miejsc dziesitnych po przecinku.
Przykadowo:
(angtos
(angtos
(angtos
(angtos
(angtos

3.14159
3.14159
3.14159
3.14159
3.14159

0
1
2
3
4

2)
2)
2)
2)
2)

zwraca
zwraca
zwraca
zwraca
zwraca

"180.00"
"180d0'"
"200.00g"
"3.14r"
"N 90d0' W"

)btdjj!
*
)btdjj!tusjoh*
jj!
Funkcja zwraca liczb typu integer, otrzyman w wyniku konwersji pierwszego znaku
w acuchu alfanumerycznym przekazanym w argumencie string na jego kod ASCII.
Przykadowo:
(ascii "A")

zwraca 65

8/!Pqfsbupsz!lpoxfstkj
(ascii "a")
(ascii "nowy")

216

zwraca 97
zwraca 110 kod litery "n"

Rnica pomidzy kodem litery maej a odpowiadajcym jej kodem litery duej
wynosi 32. Waciwo ta zostanie wykorzystana przy budowie funkcji do
obrbki tekstw.

!)bupg!tusjoh*
*
!)bupg!
Funkcja zwraca wynik konwersji acucha tekstowego przekazanego w argumencie
string na warto typu real (liczba rzeczywista).
Przykadowo:
(atof "1.25")
(atof "10")

zwraca 1.25
zwraca 10

Jeeli acuch nie reprezentuje liczby cakowitej lub rzeczywistej,funkcja zwraca


warto 0.0.

Przykadowo:
(atof "a")
(atof "")

zwraca 0.0
zwraca 0.0

)bupj!tusjoh*
*
)bupj!
Funkcja zwraca wynik konwersji acucha tekstowego przekazanego w argumencie
string na liczb cakowit typu integer.
Przykadowo:
(atoi "1.25")
(atoi "10")

zwraca 1
zwraca 10

Jeeli acuch nie reprezentuje liczby cakowitej lub rzeczywistej, funkcja


zwraca warto 0.

Przykadowo:
(atoi "a")
(atoi "")

zwraca 0
zwraca 0

217

BvupMJTQ!!qsbluzd{oz!lvst

)dis!ovncfs*
*
)dis!
Funkcja zwraca wynik konwersji liczby typu integer, reprezentujcej kod ASCII, na
odpowiadajcy temu kodowi znak, przedstawiony jako jednoznakowy acuch tekstowy
(warto typu string).
Przykadowo:
(chr 65)
(chr 66)
(chr 97)

zwraca "A"
zwraca "B"
zwraca "a"

)dwvoju!
*
)dwvoju!wbmvf!gspn!up*
voju!
Funkcja przelicza warto lub wsprzdne punktu, wyraone w miarach jednego
ukadu jednostek, na wartoci w innych jednostkach. Po udanym przeliczeniu, funkcja
zwraca wyznaczon w wyniku konwersji now warto lub nowe wsprzdne punktu.
Jeeli nazwa jednostki nie jest znana (nie zostaa znaleziona w pliku ACAD.UNT) lub
dwie podane jednostki dotycz miar rnych wielkoci (jak na przykad prba zamiany
cali na miesice), funkcja zwraca nil.
Argument value jest wyraony wartoci liczbow, przeznaczon do przeliczenia. Moe
on by rwnie list, zawierajc dwie lub trzy liczby do przeliczenia (punkt 2W lub
3W). Argument from okrela jednostki, w ktrych podana jest wielko, a argument to
okrela jednostki, na ktre wielko ma zosta przeliczona. Argumenty from i to mog
by nazwami dowolnych jednostek, zapisanymi w pliku ACAD.UNT.
Przykadowo:
(cvunit
(cvunit
(cvunit
(cvunit
(cvunit
(cvunit

1 "min" "sec")
1 "min" "s")
1 "min" "s")
1.0 "inch" "cm")
1.0 "cal" "cm")
1.0 "cal" "cm")

zwraca
zwraca
zwraca
zwraca
zwraca
zwraca

60.0
nil
60.0
2.54
nil
2.54

wersja angielska
wersja angielska
wersja polska
wersja angielska
wersja angielska
wersja polska

Powysze przykady pokazuj nam, e zawarto pliku ACAD.UNT posiada


rnice w nazwie wielkoci miar w wersji angielskiej i polskiej AutoCADa.
Musisz o tym pamita, gdy funkcj t masz w pliku, ktry chcesz uruchamia
na obydwu wersjach AutoCADa naley wtedy dokona niezbdnych zmian
w plikach ACAD.UNT.
Plik ACAD.UNT jest to plik tekstowy w formacie ASCII. Powinien on si znajdowa w podkatalogu SUPPORT.

8/!Pqfsbupsz!lpoxfstkj

218

)ejtupg!tusjoh!\npef^*
*
)ejtupg!
Funkcja wykonuje konwersj acucha przekazanego w argumencie string, zawierajcego warto rzeczywist w formacie wywietlania okrelanym przez argument mode,
na warto typu real.
Argument mode okrela jednostki, w ktrych sformatowany jest acuch string.
Warto argumentu mode

Format acucha

Wykadniczy

Uamki dziesitne

Stopy i dziesitne uamki cala

Stopy i zwyke uamki cala

Uamki zwyke

Przykadowo:
(distof "125E2")
(distof "1.25")
(distof "1 1/4")

zwraca 1.25
zwraca 1.25
zwraca 1.25

)gjy!
*
)gjy!ovncfs*
y!
Funkcja zwraca wynik konwersji argumentu number na liczb typu integer. Argument
number moe by typu real lub integer.
Przykadowo:
(fix 1.25)
(fix 10)

zwraca 1
zwraca 10

)gmpbu!ovncfs*
*
)gmpbu!
Funkcja zwraca wynik konwersji argumentu number na liczb typu real. Argument
number moe by typu real lub integer.
Przykadowo:
(float 2.55)
(float 20)

zwraca 2.55
zwraca 20.0

219

BvupMJTQ!!qsbluzd{oz!lvst

)jupb!jou*
)jupb! *
Funkcja zwraca wynik konwersji liczby typu integer przekazanej w argumencie int na
acuch cyfr (warto typu string).
Przykadowo:
zwraca "12"
zwraca "5"

(itoa 12)
(itoa 5)

)supt!ovncfs!\npef!\qsfdjtjpo^^*
*
)supt!
Funkcja zwraca acuch alfanumeryczny, ktry reprezentuje argument number (warto
typu real) w sposb zaleny od argumentw mode, precision, wartoci zmiennej
systemowej UNITMODE oraz zmiennej wymiarowania DIMZIN programu AutoCAD.
Argumenty mode i precision s typu integer i okrelaj system i dokadno zapisu
jednostek liniowych.
Warto argumentu mode

Sposb zapisu

Zapis wykadniczy

Uamki dziesitne

Stopy, cale i dziesitne uamki cali

Stopy, cale i uamki zwyke cali

Dowolne uamki zwyke

Przykadowo:
(rtos
(rtos
(rtos
(rtos

2.5
2.5
2.5
2.5

1
2
2
2

0)
0)
2)
4)

zwraca
zwraca
zwraca
zwraca

"2.5000E+00"
"2"
"2.50"
"2.5000"






Zapis ,  i  pokazuje nam, jak za pomoc argumentu precision moemy


sterowa liczb cyfr po kropce dziesitnej.

Omawiajc operatory konwersji, naley pamita o dwch wanych konwersjach:


stopnie-radiany oraz radiany-stopnie. Sprawa ta jest tym bardziej wana, jeli programujemy w AutoLISPie. Musisz sobie zapamita nastpujc rzecz:
Wszystkie wartoci ktw, jakie naley wprowadzi w odpowiedzi na standardowe
komendy AutoCADa, musz by podane w stopniach, natomiast wszystkie wartoci
ktw, jakie naley wprowadzi jako argumenty standardowych funkcji AutoLISPu,
musz by podane w radianach.

8/!Pqfsbupsz!lpoxfstkj

21:

Odpowiednie funkcje do tych konwersji mog wyglda nastpujco:


;konwersja stopnie-radiany
(defun DTR (x)
(* pi (/ x 180.0))
);DTR
;konwersja radiany-stopnie
(defun RTD (x)
(* 180.0 (/ x pi))
);RTD

Wywoanie tych funkcji moe by nastpujce:


(setq kat_rad (DTR 180))
=> !kat_rad => 3.14159
(setq kat_st (RTD 3.14159)) => !kat_st => 180.0

Na koniec omawiania operatorw konwersji chciabym przytoczy jeszcze cztery krtkie


przykady ich uycia.

Qs{zlbe!2
W przykadzie tym, poprzez uycie funkcji ascii wymuszamy wprowadzenie tylko
maej litery alfabetu.
;*************************************************PROG_008
;Przyklad uzycia operatora konwersji ASCII.
;
;=================================================
(textpage) ;przejscie na ekran tekstowy
;
(princ "\nPrzyklad wykorzystania funkcji (ascii string).")
(setq jeszcze T)

(while jeszcze

(progn
(setq
litera (getstring "\nWprowadz mala litera alfabetu: ") 
kod (ascii litera)

);setq
(if (and (>= kod 97)(<= kod 122))

(progn

(princ "\nWprowadziles litere ")
(princ litera)
(princ "\nKod ASCII dla tej litery = ")
(princ kod)
(setq jeszcze nil)
);progn
(progn ;else

(princ "\nNALEZY WPROWADZIC MALA LITERA ALFABETU !!!")

);progn
);if
);progn
);while jeszcze

221

BvupMJTQ!!qsbluzd{oz!lvst
;
;=================================================
;
(princ)
;
;*************************************************KONIEC

Wykonanie powyszego programu moe by nastpujce:


Command: (load "prog_008")

Przyklad wykorzystania funkcji (ascii string).


Wprowadz mala litera alfabetu: a

Wprowadziles litere a
Kod ASCII dla tej litery = 97
Command:

Omwmy teraz wyrnione linie programu:


 Nadajemy zmiennej jeszcze warto T, umoliwiajc tym samym wejcie
w ptl while. Gdyby w tej linii zmienna jeszcze miaa warto nil, ptla while
nie zostaaby wykonana.
 To tutaj wchodzimy w ptl while.
 Wykorzystujc funkcj getstring, oczekujemy na wprowadzenie z klawiatury
maej litery alfabetu (oczywicie, uytkownik programu moe wprowadzi
dowolny znak alfanumeryczny, a nawet dowolny cig znakw). Wprowadzony
znak (cig znakw) zostaje podstawiony pod zmienn litera.
 To tutaj wykorzystujemy operator konwersji ascii, ktry zwraca kod ASCII
pierwszego znaku z acucha alfanumerycznego argumentu litera. Kod ten
zostaje podstawiony pod zmienn kod.
 Za pomoc operatorw porwnania i logicznych sprawdzamy, czy zostaa
wprowadzona maa litera alfabetu.
 Ta grupa instrukcji (zgrupowana instrukcj progn), ma zosta wykonana, gdy
wprowadzono ma liter alfabetu. Uywajc instrukcji princ, wypisujemy na
ekranie wprowadzon liter oraz jej kod ASCII. Nastpnie zmiennej jeszcze
nadajemy warto nil, umoliwiajc tym samym opuszczenie ptli while.
 Ta grupa instrukcji ma zosta wykonana, gdy nie wprowadzono maej litery
alfabetu. Uywajc instrukcji princ, wypisujemy na ekranie komunikat ostrzegawczy dla uytkownika, po czym wracamy na pocztek ptli while.

Qs{zlbe!3
W programie PROG_008 dokonana zostaa tzw. jawna konwersja kodw ASCII
poprzez uycie funkcji ascii zmienna litera zostaa zamieniona na odpowiadajcy jej
kod ASCII. Kod ten by porwnywany w instrukcji warunkowej if (linia  programu
PROG_008).

8/!Pqfsbupsz!lpoxfstkj

222

Mona rwnie dokonywa tzw. niejawnego porwnywania kodw. W kodzie rdowym porwnujemy wtedy ze sob dwa dowolne stringi, np. (= "a" "a") (= "B" "Z") (=
"1" "?") (= "acad" "ACAD"), itp. Poniewa, jak ju wspomniaem wczeniej, wszystkie
znaki maj swoj reprezentacj kodow, w rzeczywistoci interpreter AutoLISPu i tak
dokonuje porwnania ich kodw ASCII.
Oto program, wykorzystujcy tzw. niejawne porwnywanie kodw ASCII:
;*************************************************PROG_009
;Przyklad niejawnego porownywania kodow ASCII.
;
;=================================================
(textpage) ;przejscie na ekran tekstowy
;
(princ "\nPrzyklad niejawnego porownywania kodow ASCII.")
(setq jeszcze T)
(while jeszcze
(progn
(setq
litera (getstring "\nWprowadz mala litera alfabetu: ")
);setq
(if (and (>= litera "a")(<= litera "z"))

(progn
(princ "\nWprowadziles litere ")
(princ litera)
(princ "\nKod ASCII dla tej litery = ")
(princ (ascii litera))

(setq jeszcze nil)
);progn
(progn ;else
(princ "\nNALEZY WPROWADZIC MALA LITERA ALFABETU !!!")

);progn
);if
);progn
);while jeszcze
;
;=================================================
;
(princ)
;
;*************************************************KONIEC

Wykonanie powyszego programu jest identyczne z wykonaniem programu PROG_008


uytkownik nie dostrzee adnych rnic pomidzy nimi. Wybr, ktr z metod
zastosowa, pozostawiam Czytelnikom. Metoda zastosowana w programie PROG_009
od razu pokazuje nam, jakie znaki ze sob porwnujemy nie musimy wertowa
wtedy tablicy kodw ASCII w poszukiwaniu znaku o podanym kodzie.
Omwmy teraz wyrnione linie programu, obrazujce zmiany w kodzie rdowym
w stosunku do programu PROG_008:
 To wanie tutaj dokonujemy niejawnego porwnania kodw ASCII, porwnujc ze sob dwa dowolne cigi znakw alfanumerycznych.

223

BvupMJTQ!!qsbluzd{oz!lvst
 Aby wypisa kod ASCII pierwszego znaku dowolnego stringu, musimy uy
funkcji ascii w celu jego uzyskania.
Przykadowo:
(setq litera "a")
(princ litera)
(princ (ascii litera))

wypisuje "a"
wypisuje a
wypisuje 97

i zwraca "a"
i zwraca "a"
i zwraca 97

Qs{zlbe!4
Przykad ten pokazuje wykorzystanie funkcji rtos w celu uzyskania rnej postaci
wywietlania podanej liczby cakowitej lub rzeczywistej.
;*************************************************PROG_010
;Przyklad uzycia operatora konwersji RTOS - wersja 1.
;
;=================================================
(textpage) ;przejscie na ekran tekstowy
;
(princ

(strcat
"\nPrzyklad wykorzystania funkcji "
"(rtos number [mode [precision]])."
);strcat
);princ
(initget (+ 1 2))

(setq

liczba (getreal "\nPodaj liczbe rzeczywista rozna od zera: ")

);setq
(princ

(strcat
"\nPodana liczba: "
(rtos liczba)

"\nPostac wykladnicza: "
(rtos liczba 1)
"\nPostac dziesietna: "
(rtos liczba 2)
"\nPostac calowa (dziesietna): "
(rtos liczba 3)
"\nPostac calowa (ulamkowa): "
(rtos liczba 4)
"\nPostac ulamkowa: "
(rtos liczba 5)
"\n"
"\nPostac dziesietna z 1 miejscem po przecinku: "
(rtos liczba 2 1)
"\nPostac dziesietna z dwoma miejscami po przecinku: "
(rtos liczba 2 2)
"\nPostac dziesietna z czterema miejscami po przecinku : "

(rtos liczba 2 4)
);strcat
);princ

8/!Pqfsbupsz!lpoxfstkj

224

;
;=================================================
;
(princ)
;
;*************************************************KONIEC

A oto przykadowy wygld ekranu po wykonaniu programu:


Command: (load "prog_010")

Przyklad wykorzystania funkcji (rtos number [mode


[precision]]).
Podaj liczbe rzeczywista rozna od zera: 1.25

Podana
Postac
Postac
Postac
Postac
Postac

liczba: 1.25
wykladnicza: 1.2500E+00
dziesietna: 1.2500
calowa (dziesietna): 1.2500"
calowa (ulamkowa): 1 1/4"
ulamkowa: 1 1/4"

Postac dziesietna z jednym miejscem po przecinku: 1.3


Postac dziesietna z dwoma miejscami po przecinku: 1.25
Postac dziesietna z czterema miejscami po przecinku: 1.2500
Command:

Omwmy teraz wyrnione fragmenty programu:


 Wypisujemy na ekranie tekstowym komunikat:
Przyklad wykorzystania funkcji (rtos number [mode
[precision]]).

Do wypisania tego komunikatu stosujemy funkcj princ, ktrej argumentem jest


funkcja strcat, czca dwa acuchy w jeden.
 Zawamy zakres liczb rzeczywistych, podanych w odpowiedzi na funkcj
getreal. Odpowied nie moe zawiera samego nacinicia klawisza ENTER
(tzw. pusty ENTER), nie bdzie akceptowana rwnie jako prawidowa odpowied podanie cyfry zero.
 Pobieramy z klawiatury liczb rzeczywist i podstawiamy j pod zmienn liczba.
 Wypisujemy wprowadzon liczb oraz jej posta w rnych wywoaniach
funkcji konwersji rtos.
 Dziki funkcji konwersji rtos mamy moliwo uzyskania rnych postaci tej
samej liczby.

Qs{zlbe!5
W przykadzie powyej, jeli podae np. liczba = 1.25, zapis w postaci wykadniczej
wyglda nastpujco:

225

BvupMJTQ!!qsbluzd{oz!lvst
Postac wykladnicza: 1.2500E+00

Zapis ten, na pozr dobry, posiada jedno mae ale. Ot, funkcja rtos dokonuje
konwersji podanej liczby na acuch alfanumeryczny. Dlaczego wic zapis w postaci
wykadniczej nie wyglda nastpujco?
Postac wykladnicza: "1.2500E+00"

Ot, do wypisania rnych postaci tej samej liczby, zastosowana zostaa nastpujca
konwencja:
(princ
(strcat
lancuch_1
lancuch_2
.........
lancuch_n
);strcat
);princ

Tak wic wyraenie:


(princ
(strcat
"\nPostac wykladnicza: "
(rtos liczba 1)
);strcat
);princ

zamienia si na:
(princ
(strcat
"\nPostac wykladnicza: "
"1.2500E+00"
);strcat
);princ

co daje z kolei:
(princ "\nPostac wykladnicza: 1.2500E+00")

a to powoduje wypisanie tekstu:


Postac wykladnicza: 1.2500E+00

Co wic zrobi, jeli chcemy, aby dana liczba zostaa wypisana jako acuch?
Zapis:
(princ "Postac wykladnicza: \"1.2500E+00\"")

moemy zastosowa tylko wwczas, gdy dana liczba jest nam z gry wiadoma.
Pomocna okae si tutaj standardowa funkcja AutoLISPu prin1.
Format funkcji prin1 jest nastpujcy:

8/!Pqfsbupsz!lpoxfstkj

226

(prin1 [expr [file-desc]])

Funkcja wypisuje argument expr na ekranie monitora i zwraca go jako wynik. Argument expr moe by dowolnego typu nie musi to by acuch alfanumeryczny.
W przypadku wystpowania opcjonalnego argumentu file-desc, jeeli jest to deskryptor
pliku otwartego do zapisu, argument expr jest zapisywany do pliku dokadnie w takiej
formie, w jakiej pojawiby si na ekranie monitora. Zapisywane jest tylko podane expr,
bez dodanych znakw spacji lub nowej linii.
Przykadowo, jeeli dokonane zostay przypisania:
(setq
a 1.25
b (rtos 1.25 2 2)
c "Taki sobie string"
);setq

wwczas:
(prin1 'a)
(prin1 a)
(prin1 b)
(prin1 c)
string"

wypisuje
wypisuje
wypisuje
wypisuje

A
i zwraca A
1.25
i zwraca 1.25
"1.25" i zwraca "1.25"
"Taki sobie string" i zwraca "Taki sobie

Wyraenie z funkcj prin1 bez argumentw wypisuje i zwraca acuch pusty.


Tak wic, jeeli prin1 bez adnego argumentu zostanie uyta w zdefiniowanej
funkcji uytkowej jako ostatnie wyraenie, to po jej zakoczeniu zostanie
wypisana tylko pusta linia, co umoliwia "niezauwaalne" zakoczenie realizacji
funkcji. Jest to rwnowane z wywoaniem funkcji princ bez argumentw.

Wrmy jednak do naszego przykadu. Chcemy, aby nasza linia tekstu wygldaa
nastpujco:
Postac wykladnicza: "1.2500E+00"

Gdyby zastosowa nastpujc konwencj:


(prin1
(strcat
"\nPostac wykladnicza: "
(rtos liczba 1)
);strcat
);prin1

wwczas otrzymamy:
"Postac wykladnicza: 1.2500E+00"

Jak wic widzimy, cae wyraenie nie moe by argumentem funkcji prin1. Musimy
tutaj poczy wynik zastosowania funkcji princ z wynikiem zastosowania funkcji
prin1.

227

BvupMJTQ!!qsbluzd{oz!lvst
Prawidowy zapis wyglda wic nastpujco:
(princ "\nPostac wykladnicza: ")
(prin1 (rtos liczba 1))

A oto i nasz program, po odpowiednich zmianach:


;*************************************************PROG_011
;Przyklad uzycia operatora konwersji RTOS - wersja 2.
;
;=================================================
(textpage) ;przejscie na ekran tekstowy
;
(princ
(strcat
"\nPrzyklad wykorzystania funkcji "
"(rtos number [mode [precision]])."
);strcat
);princ
(initget (+ 1 2))
(setq
liczba (getreal "\nPodaj liczbe rzeczywista rozna od zera: ")

);setq
(princ
(strcat
"\nPodana liczba: "
(rtos liczba)
);strcat
);princ
(princ "\nPostac wykladnicza: ")
(prin1 (rtos liczba 1))
(princ "\nPostac dziesietna: ")
(prin1 (rtos liczba 2))
(princ "\nPostac calowa (dziesietna): ")
(prin1 (rtos liczba 3))
(princ "\nPostac calowa (ulamkowa): ")
(prin1 (rtos liczba 4))
(princ "\nPostac ulamkowa: ")
(prin1 (rtos liczba 5))
(princ "\n")
(princ "\nPostac dziesietna z 1 miejscem po przecinku: ")
(prin1 (rtos liczba 2 1))
(princ "\nPostac dziesietna z dwoma miejscami po przecinku: ")

(prin1 (rtos liczba 2 2))


(princ "\nPostac dziesietna z czterema miejscami po
przecinku : ")
(prin1 (rtos liczba 2 4))
;
;=================================================
;
(princ)
;
;*************************************************KONIEC

8/!Pqfsbupsz!lpoxfstkj

228

Wygld ekranu po wykonaniu programu moe wyglda nastpujco:


Command: (load "prog_011")

Przyklad wykorzystania funkcji (rtos number [mode


[precision]]).
Podaj liczbe rzeczywista rozna od zera: 1.25

Podana
Postac
Postac
Postac
Postac
Postac

liczba: 1.25
wykladnicza: "1.2500E+00"
dziesietna: "1.2500"
calowa (dziesietna): "1.2500""
calowa (ulamkowa): "1 1/4""
ulamkowa: "1 1/4""

Postac dziesietna z jednym miejscem po przecinku: "1.3"


Postac dziesietna z dwoma miejscami po przecinku: "1.25"
Postac dziesietna z czterema miejscami po przecinku:
"1.2500"
Command:

Tak wic, umiejtne poczenie funkcji princ i prin1 umoliwia wyprowadzenie


dowolnego wyraenia tak na ekran, jak i do pliku tekstowego.

Rozdzia ten zapozna Ci z operatorami konwersji AutoLISPu. Operatory te s pomocne wszdzie tam, gdzie trzeba zamieni jedn wielko (jednostk) na drug. Odpowiednie zastosowanie operatorw konwersji w poczeniu z funkcjami princ, prin1
oraz strcat pozwala na utworzenie dowolnie skomplikowanego acucha tekstu.
W nastpnym rozdziale omwimy ptle i konstrukcje sterujce.

229

BvupMJTQ!!qsbluzd{oz!lvst

You might also like