Как зациклить ввод данных
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как зациклить ввод данных

Как зациклить ввод данных

Ответ
Поиск в этой теме
Непрочитано 27.01.2011, 09:21 #1
Как зациклить ввод данных
solo123
 
Регистрация: 19.08.2009
Сообщений: 91

Как зациклить ввод данных так, чтобы каждый следующий ввод имел другую переменную например n2 вместо n1,n3 вместо n2, и тд.
количество циклов бесконечно до ввода(< 5>) [стоп]
( DEFUN c:zik ( / n1 )
(vl-load-com)
(setq n1 (getint " Введите направление (<1>) [прямо/право/лево/назад/стоп]: ")))
Просмотров: 9612
 
Непрочитано 27.01.2011, 10:16
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


(while (= n1 5)....)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 10:48
#3
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


вообще вот так
Код:
[Выделить все]
 (setq i 0)
(initget
  1
  "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5"
)
(while (/= (setq temp
		  (getkword
		    "Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>: "
		  )
	   )
	   "5"
       )
  (set (read (strcat "n" (itoa (setq i (1+ i)))))
       (atoi temp)
  )
  (initget
    1
    "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5"
  )
)
Но так ни кто не делает, лучше заносить значения в список
Код:
[Выделить все]
 (initget
  1
  "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5"
)
(while (/= (setq temp
		  (getkword
		    "Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>: "
		  )
	   )
	   "5"
       )
  (setq k-list (cons temp k-list))
  (initget
    1
    "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5"
  )
)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 27.01.2011, 11:25
#4
solo123


 
Регистрация: 19.08.2009
Сообщений: 91


Большое спасибо! Особенно Disney , без Вашей помощи ещёбы сидел и тупил.
solo123 вне форума  
 
Непрочитано 27.01.2011, 17:08
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Disney Посмотреть сообщение
Но так ни кто не делает, лучше заносить значения в список
Код:
[Выделить все]
 (setq
	DirectionList '()
	optns (list "ПРямо" "ВПраво" "ВЛево" "Назад" "Конем" "Слоном" "НеЗнаю" "КудаПодальше" "СТоп")
	def   (last optns)
	split (lambda (y) (strcat (car optns) (apply 'strcat (mapcar '(lambda (x) (strcat y x)) (cdr optns))))))
(while (/= def (progn (initget (split " "))
						 (setq CurrentDirection (cond ((getkword (strcat "\nУкажите направление [" (split "/") "] <" def ">: " )))
													  (def)))))
  (setq DirectionList (append DirectionList (list (vl-position CurrentDirection (reverse (cdr (reverse optns)))))))
)

Последний раз редактировалось gomer, 28.01.2011 в 22:55.
gomer вне форума  
 
Непрочитано 27.01.2011, 17:22
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: Когда я вижу вызываемую в цикле конструкцию наподобие (setq k-list (cons temp k-list)) - у меня приливает адриналин - рекурсия по ней "плачет".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 19:03
#7
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Дима_, так ты не стесняйся, пиши...
Глядишь и нас потихоньку научишь\приучишь, а то логику кем-то написанной рекурсии я понимаю, а самому написать ума не хватает
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 27.01.2011, 20:18
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Disney Посмотреть сообщение
а то логику кем-то написанной рекурсии я понимаю, а самому написать ума не хватает
Код:
[Выделить все]
 ((lambda (f-rec get-key) (f-rec (get-key)))
 (lambda (x)
   (if (not(= x "5")) (cons x (f-rec (get-key)))))
 (lambda ()
   (initget 1 "1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5")
   (getkword "Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:")))
Offtop: осторожно она (логика) затягивает
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 20:43
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
осторожно она (логика) затягивает
рекурсии это конечно хорошо, НО:
1. Забываем про эру ДОС: "1-..." - это моветон!
2. Перестаем игнорировать нули, они в лиспе много стоят!
3. (initget 1 ... <1>: Вообще бред...

зы... подправил #5

Последний раз редактировалось gomer, 27.01.2011 в 21:05.
gomer вне форума  
 
Непрочитано 27.01.2011, 21:39
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


initget и getkword - я бессовестно скопировал с Диснея - он просил логику показать - насчет 1... - моветон это отсутствие нормального гуя, а если пишешь на автолиспе - то тут без "мовитонирования" никак - привет от автодеск так сказать.
p.s. по факту целиком, дружелюбный пользователю - по сегодняшним меркам, проект на чистом лисп не напишешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 21:55
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
отсутствие нормального гуя
Тут гуй ни к чему, гуй уже в акад встроен с 2006 версии... хотя может юзеру и западло набирать две буквы вместо цифры... для цыфирей есть getint, но и он тут ни к селу ни к городу...
з.ы. по моему я пока рулю в #5
gomer вне форума  
 
Непрочитано 27.01.2011, 22:05
#12
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
целиком, дружелюбный пользователю - по сегодняшним меркам, проект на чистом лисп не напишешь
это если с рекурсией
ShaggyDoc вне форума  
 
Непрочитано 27.01.2011, 22:15
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от gomer Посмотреть сообщение
Тут гуй ни к чему, гуй уже в акад встроен с 2006 версии...
Но только не в автолисп - там все, сюдя по всему, на dcl закончилось.
Цитата:
Сообщение от gomer Посмотреть сообщение
по моему я пока рулю в #5
по твоему наверно да - но по моему ты там "перерулил" - что мешает сразу "нужные" значения в список собирать, зачем результат преобразования в переменную записывается (у функций принято результат на выходе возращать - а не в переменной - тем более в жестко заданной).

Цитата:
это если с рекурсией
а что Вы хоть как на автолиспе немодальное окно напишете? Вот такое например:
Вложения
Тип файла: rar clip0001.rar (39.8 Кб, 46 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 27.01.2011 в 22:34.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 22:39
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Но только не в автолисп - там все, сюдя по всему, на dcl закончилось.
Я имею ввиду дин ввод, а в брикскад есть выпадающее экранное меню для опций... чем не гуй
Цитата:
Сообщение от Дима_ Посмотреть сообщение
что мешает сразу "нужные" значения в список собирать
то что не зависит от пользователя, выполняется в любой последовательности не нарушающей логику программы...
#3 и #8 возвращает список реверсивный исходному: первое введенное действие оказывается последним в списке... преобразовывать все равно надо, с другой стороны ползователю не надо!!! помнить "коды" шагов и сопоставлять их с описанием... лишнее это, потому что это должна делать программа...
это и называется д.и. имхо
gomer вне форума  
 
Непрочитано 27.01.2011, 22:47
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от gomer Посмотреть сообщение
#3 и #8 возвращает список реверсивный исходному: первое введенное действие оказывается последним в списке...
а давайте #8 запустить попробуем:
Код:
[Выделить все]
Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:1-прямо
Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:2-право
Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:3-лево
Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:4-назад
Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>:5-стоп
("1" "2" "3" "4")
и что мы видим? а если нужно вместо "1" вставлять - "прямо" так это ИХМО и надо делать при составлении списка - а не лишний раз прогонять.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.01.2011, 23:14
#16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
а давайте #8 запустить попробуем:
э, мдя, согласен... сорри... хотел написать "кажется" но отвлекся... никак не врублюсь в рекурсии
("1" "2" "3" "4") все равно нужно обрабатывать...
Дима_, ваш код, возможно, можно еще оптимизировать т.к. f-rec встречается дважды (или нет... если я не прав)
gomer вне форума  
 
Непрочитано 28.01.2011, 06:08
#17
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
1. Забываем про эру ДОС: "1-..." - это моветон!
2. Перестаем игнорировать нули, они в лиспе много стоят!
ну это к автору темы, но я думаю ему сейчас не до этого, первые программы не должны быть корректными, правильными и красиво написанными, они должны вообще хотя бы работать .
Цитата:
Сообщение от gomer Посмотреть сообщение
3. (initget 1 ... <1>: Вообще бред...
Конечно бред , но я же не бью себя в грудь, что я великий программист, зато я отличный геодезист!
initget 1 - лень было пустой ввод обрабатывать
<1> - а это как Дима отмазался "я бессовестно скопировал с solo123"

Цитата:
Сообщение от gomer Посмотреть сообщение
никак не врублюсь в рекурсии
А я врубился
вот Димина функция, только по Евгению Елпанову, через defun
Код:
[Выделить все]
 (defun rec-f (key)
  (if (not (= key "5"))
    (cons
      (atoi key)
      (rec-f
	(get_key)
      )
    )
  )
)
(defun get_key ()
       (initget
	"1-прямо 2-право 3-лево 4-назад 5-стоп _1 2 3 4 5"
       )
  (cond
    ((getkword
       "Введите направление [1-прямо/2-право/3-лево/4-назад/5-стоп] <1>: "
     )
    )
    ("1")
  )
)

;;;вызов функции
;;;(rec-f
;;;  (get_key)
;;;)
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 28.01.2011 в 06:41.
Disney вне форума  
 
Непрочитано 28.01.2011, 06:54
#18
VH_


 
Регистрация: 20.05.2010
Сообщений: 26


Антоним к слову "назад" - не "прямо", а "вперед".
VH_ вне форума  
 
Непрочитано 28.01.2011, 08:44
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Disney Посмотреть сообщение
А я врубился
в квадратных скобках должно быть 5 не потакайте афтару пишите правильно
gomer вне форума  
 
Непрочитано 28.01.2011, 09:51
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Вообще-то для выбора направления (1-прямо/2-право/3-лево/4-назад) не надо задавать столько ключевых слов и делать getkword.

Смысл "следующего" направления есть, когда известно предыдущее. Чтобы повернуть вправо, влево и т.д. достаточно запросить одну точку. В зависимости от того, где указана точка, программа должна сообразить, в какую сторону поворачивать.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как зациклить ввод данных



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Табличный ввод данных в ЛИРЕ. dagget Лира / Лира-САПР 20 24.12.2019 13:49
Ввод данных по умолчанию swkx Программирование 20 23.09.2010 14:58
VBA. Многократный ввод данных и изменение положения объектов Markiza-2010 Программирование 6 28.06.2010 02:30
Ввод данных в АВТОЛИСПе vovkam LISP 3 19.06.2009 19:41
LISP - ввод данных Torino LISP 4 02.08.2004 12:33