13.11.2008 10:09    

fox
listeyi dizeye çevirmeye çalışıyorum, acaba listedemi hata yapıyorum yoksa strcat komutunda mı?

Kod:

(setq egen (itoa genislik))
(setq eyuk (itoa yukseklik))
(setq etir (itoa tirnak))
(setq ekal (itoa kalinlik))
(setq liste ("omega" egen "x" eyuk "x" etir "x" ekal))
(setq blname (strcat liste))

13.11.2008 10:12    

ehya
genişlik yüksekli v.s. onları nasıl kodladığını da bi görebilsek????

13.11.2008 10:14    

fox
Kod:

(setq pt0 (getpoint "\nOmeganın taban orta noktasını seçin:"))
(initget 7)
(setq genislik (getreal "\nGenişlik:"))
(initget 7)
(setq yukseklik (getreal "\nYükseklik:"))
(initget 7)
(setq tirnak (getreal "\nTırnak:"))
(initget 7)
(setq kalinlik (getreal "\nSac Kalınlığı:"))
(setq egen (itoa genislik))
(setq eyuk (itoa yukseklik))
(setq etir (itoa tirnak))
(setq ekal (itoa kalinlik))
(setq liste ("omega" egen "x" eyuk "x" etir "x" ekal))
(setq blname (strcat liste))


yoksa şuan aklıma gelen şeymi itoa yerine rtos komutunumu kullanacaz.

13.11.2008 10:20    

ehya
itoa komutu tam sayıları dizgiye çevirmede kullanılır. getreal ile istenilen gerçek sayıları çevirmede kullanılamaz. bu tür çevirilerde RTOS komutunu kullanın.

örnek kod:
(setq egen (rtos genislik 2 2))

genislik girdisinden sonraki birinci 2 sayısı decimal olacağını belirtir. İkinci 2 sayısı ise virgülden sonraki sayılarda 2 basamağın dikkate alınacağını ifade eder.



Download --> Lispler bölümünde Autolisp kitabında bu komutları tek tek anlatmıştım. İncelemenizde fayda var.

13.11.2008 10:26    

fox
zaten şuan ordaki konuların içerseindeyim ehya sayfa numaraları olmadığı için aşağı yukarı yapmaktan gözlerim şaşı oldu:)
peki strcat kısmı doğru mu bu şekilde listeyi birleştirebilirmiyim??

birde virgülden sonraki hassiyet için 0 yazdığımda tam sayı olarak alabilirmiyim yoksa bu sayıyı başka bir yerde tam sayıyamı çevirmem gerekiyor?

fox (13.11.2008 10:31 GMT)

13.11.2008 10:53    

ehya
kod uygulaman aşağıdaki gibi olmalı. birden fazla dizgiyi liste yapmak için strcat fonksiyonunu başta kullanmalısın...

Kod:

(setq pt0 (getpoint "\nOmeganın taban orta noktasını seçin:"))
(initget 7)
(setq genislik (getreal "\nGenişlik:"))
(initget 7)
(setq yukseklik (getreal "\nYükseklik:"))
(initget 7)
(setq tirnak (getreal "\nTırnak:"))
(initget 7)
(setq kalinlik (getreal "\nSac Kalınlığı:"))
(setq egen (rtos genislik 2 0))
(setq eyuk (rtos yukseklik 2 0))
(setq etir (rtos tirnak 2 0))
(setq ekal (rtos kalinlik 2 0))
(setq liste (strcat "omega" egen "x" eyuk "x" etir "x" ekal))

13.11.2008 13:28    

fox
soruyu sorduktan sonra net koptu ve yazdığın kodu yeni görebildim.cevabı göremeyince bende deneye deneye dediğin şekli bulana kadar epey bi yaz boz yaptım.
kitapta if komutunu bulamadım nasıl kullanabileceğim hakkında bilgi verebilirmisin?

13.11.2008 13:36    

ehya
if-then-else

yani bu böyle ise şu olsun, değilse öbürü olsun diye düşünebiliriz.

mesela kullanıcıya bir isim sordurtalım. Eğer bu isim bizim istediğimiz ile aynı ise sonucu DOĞRU diyelim. aynı değil ise YANLIŞ diyelim

(setq isim (getstring "\nİsmi yazın"))

Kod:

(if (= isim "EHYA")
(alert "\nDOĞRU")
(alert "\nYANLIŞ"))



ismi sordurttum. İsim ehya ile aynı olursa sonuç DOĞRU diyerek bi uyarı tablosu çıkacak. Farklı birşey yazılırsa YANLIŞ diyecek...

13.11.2008 13:48    

fox
yani tüm programla dillerindeki gibi mantık.peki sitedeki bazı kodlarda gördüm sonrasında progn la komut başlıyor bunuda kitapta göremedim ve benim yapmak istediğim şey yukarda birleştirdiğim dizeyi ilk olarak insert komutunda kullanacam ve bu isimde bir blok varsa mevcut bloğu çağırmasını eğer yoksa yazmış olduğum kodları uygulayarak yeni parça çizmesini sağlayacağım bunun için sanırım sadece yukardaki kodlar yetmiyor.

13.11.2008 13:53    

ehya
if den sonraki progn seçeneği, ilk değerlendirmede birden fazla satır yazılacak ise kullanılır.

örnek :

Kod:

(setq isim (getstring "\nİsim girin:"))
(if (= isim "ehya")
(progn
(setq tamisim (strcat isim " -->Autocadokulu.com<--"))
(alert tamisim))
(progn
(alert "\nYANLIŞ")))

13.11.2008 14:04    

fox
sor sor bitmiyor bir türlü.
diyelimki lisp içersinde oluşturmuş olduğum dizedeki isimde bir blok var tersten gittiğimizi düşünürsek bu blok yoksa yeni bi parça çizip bunu blok yapsın.genelde bu işlem hep nil olarak anlatılmış fakat bunu blok olarak düşünürsek arayacağımız geçersiz blok ismi komut satırında yazan *invalid* midir yoksa bunada nil mi diyeceğiz.

13.11.2008 14:12    

ehya
aradığın blok isminde dosya yok ise bunun sonucu nil dir. invalid değeri blok varmış gibi devam ettiğinden oluşan hatadan oluşur..
eğer nesnenin blok olmasını sağlamak istiyorsan bunun için if seçeneğini kullanmalısın.. blok varsa bunu yap. yoksa seçilen nesneleri blok yap demelisin.

13.11.2008 14:15    

fox
verdiğin bilgiler için çok sağol yarın bu lisp tamamdır.

> 1 <
Copyright © 2004-2022 SQL: 0.996 saniye - Sorgu: 78 - Ortalama: 0.01277 saniye