Vytisknout stránku | Zavřít okno

n-krát

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=5335
Datum vytištění: 13.kvě.2026 v 09:15


Téma: n-krát
Odeslal: michaelflyer
Předmět: n-krát
Datum odeslání: 23.říj.2007 v 16:22
Dobrý deň.

Neviem si rady v LIPe s funkciou opakovať niečo n krát....
Napr.: Zadám hodnoty výšok, n1 až nk. Potom chcem robiť _offset n1 až nk. k= „nekonečno“
Alebo nanášanie kružníc na priamku v rôznych vzdialenostiach n1 až nk.

Vopred ďakujem.



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 23.říj.2007 v 16:55
Těch funkcí pro cyklus je v LISP vícero - např. repeat, while, foreach (viz Nápověda)

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: michaelflyer
Datum odeslání: 24.říj.2007 v 12:36
Neviem ako by to malo vlastne vyzerať. Prosím vás mohli by ste mi dať cestu na ten návod? Nejako sa tu moc dobre nevyznám.
Ďakujem...


Odeslal: Vladimír Michl
Datum odeslání: 24.říj.2007 v 13:52
"Návod na programování" neumím, ale cyklus má vypadat např. takto:
 
(repeat 37
 (command "XY" ....)
)
 
Základní příklady a pomoc najdete v nápovědě nebo v online příručce http://www.cadforum.cz/cadforum/tema.asp - Programování AutoCADu (vývojové prostředky).


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: michaelflyer
Datum odeslání: 05.lis.2007 v 16:27
Dobrý deň.
Nejako som to pochopil (hádam)...
Len mám problém s while :-(
Vyhlasuje mi po to:
; error: bad argument type: lselsetp nil
a už mi nechce opakovať „výber“...

(defun c:ko ()
(progn
(setq f (open "F:\\kusovník.txt" "W"))

(while (/= vyber "")
    (progn
      (initget 1 "M S")
      (setq vyber (getkword "\nZadaj prvok [Madlo,Stlp]:"))

      (if (= vyber "M")
     (progn
      (princ "\n" f)
      (princ "MADA" f)
     )
      )

      (if (= vyber "S")
     (progn
      (princ "\n" f)
      (princ "STLPY" f)
     )
      )

      (while (and (/= nazov "") (/= rozmer ""))
     (progn

      (prompt "\nVyber nazov dielca:")
      (setq nazov (ssget))

      (prompt "\nVyber nazov dielca:")
      (setq rozmer (ssget))

      (setq entita1 (ssname nazov 0))
      (setq zoznam_ent1 (entget entita1))
      (setq a (cdr (assoc 1 zoznam_ent1)))

      (setq entita2 (ssname rozmer 0))
      (setq zoznam_ent2 (entget entita2))
      (setq a (cdr (assoc 42 zoznam_ent2)))

      (princ "\n" f)
      (princ a f)
      (princ "        " f)
      (princ b f)
     )
      )
    )
)
(close f)
)
)


Odeslal: Ferdinand
Datum odeslání: 06.lis.2007 v 11:26
Až tak moc to s lispem neumím, ale nemělo by být
      (while (and ((/= nazov "") (/= rozmer "")))
Question
Co znamená "b" v řádku
      (princ b f)
Question


-------------
-FerTh-


Odeslal: michaelflyer
Datum odeslání: 06.lis.2007 v 15:21
Ďakujem....to b...
Našli ste mi ďalšiu chybu.

      (setq entita2 (ssname rozmer 0))
      (setq zoznam_ent2 (entget entita2))
      (setq a (cdr (assoc 42 zoznam_ent2))) ;;;TU MABYT NAMIESTO "a" "b".

Ale vrátim sa k:
(while (and ((/= nazov "") (/= rozmer "")))
toto mi nechce vobez zobrať. vyhlasuje mi to chybu
Možno to má niečo spoločné so (ssget)


Odeslal: Ferdinand
Datum odeslání: 06.lis.2007 v 16:29

Zkusit ten cyklus pomocí příkazu foreach Question

...anebo (nevím, jestli to takhle lze dohromady)
(while (if (and (....))))


-------------
-FerTh-


Odeslal: michaelflyer
Datum odeslání: 06.lis.2007 v 20:47
Problém je v tom že while testuje podmienku (ak podmienka nevyhovuje príkazy sa opakuje). Ale foreach zase vyberá každý prvok zo zoznamu a opakuje danú funkciu naň.
Ja si neviem predstaviť ako by to malo robiť na túto funkciu:

(prompt "\nVyber nazov dielca:")
      (setq rozmer (ssget))

      (setq entita2 (ssname rozmer 0))
      (setq zoznam_ent2 (entget entita2))
      (setq a (cdr (assoc 42 zoznam_ent2)))

Mysleli ste asi na funkciu princ, ktorú by mi opakovalo. Lenže to by som musel nejako vytvoriť zoznam vybraných položiek. A to je problém, pretože sú typu a1 až an....
Ja som tiež len začiatočník...


Odeslal: michaelflyer
Datum odeslání: 17.bře.2008 v 11:26
Dobrý deň.
Prosím Vás o radu. Dávam sem jednoduchý príklad. Nechápem prečo mi to nefunguje :-( Viem, že mi tam niečo chýba, ale neviem sa dopracovať k tomu, že čo :-(
Chcem dosiahnuť aby mi pripočítalo 0.1 k hodnote "a" až do vtedy (sa to bude opakovať), pokiaľ sa nebude "=" hodnote "b".

(defun c:OPAKUJ     ()
(setq a (getreal "n\Zadaj hodnotu (a) ktorá je väčšia ako b:"))
(setq b (getreal "n\Zadaj hodnotu (b) ktorej sa to má rovnať:"))
(if (/= a b)
    (progn
     (while (= a b)
     (setq a (+ a 0.1))
     (princ a)
        )

    )
)
)

Vopred Ďakujem.


Odeslal: Vladimír Michl
Datum odeslání: 17.bře.2008 v 12:05
Pro porovnávání reálných čísel není vhodné při programování testovat přesnou shodu (či neshodu) - dochází k zaokrouhlování reprezentace hodnoty. Použijte > nebo >=.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: chlebovsky
Datum odeslání: 17.bře.2008 v 13:41
začnu od začátku, taková malá chybička v zadávání, a) musí být menší jako b)
 
dále na začátku né n\  ale \n naopak pro nový řádek
 
pak if (< a b)
 
 
ale hlavně
While = dokud je splněna podmínka.
 
To znamená že vy potřebujete aby probíhalo tak dlouho dokud a < b
popř. a <= b
 
takže napsat
(while (<= a b)
pak fungovat bude
 
a možná na konec bych dal (princ a)(princ "\n")
nebo rovnou (princ (strcat "\nHodnota je : " (rtos a 2 2)))
 
Embarrassed


-------------
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l


Odeslal: michaelflyer
Datum odeslání: 18.bře.2008 v 11:10
To len jeden znak mi tam chýbal?! Mňa šľak trafí!!! Ja sa stým mordujem jeden celý deň a nechápal som prečo to nefunguje!

Ďakujem za pomoc.
Ďakujem aj za opravu „drobných“ chýb. Zbáchal som to narýchlo. Samozrejme, že ma to neospravedlňuje :-)
Ešte raz ďakujem...



Vytisknout stránku | Zavřít okno