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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > помогите поправить программку на lisp

помогите поправить программку на lisp

Ответ
Поиск в этой теме
Непрочитано 14.09.2010, 11:52 #1
помогите поправить программку на lisp
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 257

Добрый день.
Код:
[Выделить все]
; расчет падения напряжения

(defun c:raschdu (/ start text) 
	
	(setq p1 (getreal  "\nМощность: "))
	(setq dlin_1 (getstring  "\nДлинна: [10] "))
	
	(if (= dlin_1 "" )(setq dlin_1 "10") )
	(setq dlin (atof dlin_1))
	(setq cos_st (getstring  "\nКосинус: [0.95] "))
	(if (= cos_st "" )(setq cos_st "0.95") )
	(setq cos_s (atof cos_st))


	(setq u1s (getstring  "\nНапряжение: [220] "))	
	(setq names (strcat u1s))

; проблемная строчка как будет правильно !!!
; если names = "220", то u1=220, u1t=220 , dva_provod =2

 	(if ( = names "220") ((setq u1 220)(setq u1t 220)(setq dva_provod 2))); ***
	(if ( = names "380") ((setq u1 658.18 )(setq u1t 380)(setq dva_provod 1))); ***
	(if ( = names "") (setq u1 220 ))
	
	;расчет
	(setq p10 (* p1 1000))
	(setq p1_1 (/ p10 u1))
	(setq i1 (/ p1_1 cos_s))
	
	(setq text "\n I= : ")
	(setq text_t (rtos i1 2 2)) 
	(princ (strcat text text_t))

	(setq s1_0 (getstring  "\nСечение [1.5]: "))
	(if (= s1_0 "" )(setq s1_0 "1.5") )
	(setq s1 (atof s1_0))

	(setq p1_2 (* i1 dlin))
	(setq p1_3 (* p1_2 0.0175))
	(setq p1_4 (* p1_3 dva_provod));***
	(setq du1 (/ p1_4 s1))

	(setq du1_2 (/ du1 u1t)) ; ***
	(setq du1_3 (* du1_2 100))

	; вывод 
	(setq text "\n сечение= : ")
	(setq text_t (rtos s1 2 2))
	;(princ (strcat text text_t))

	(setq text "\n Длинна= : ")
	(setq text_t (rtos dlin 2 2))
	;(princ (strcat text text_t))
	
	(setq text "\n I= : ")
	(setq text_t (rtos i1 2 2)) 
	;(princ (strcat text text_t))

	(setq text "\n dU%= : ")
	(setq text_t (rtos du1_3 2 2))
	(princ (strcat text text_t))
  
	(princ)
)
Просмотров: 3083
 
Непрочитано 14.09.2010, 12:01
1 | #2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Код:
[Выделить все]
(if ( = names "220") (PROGN (setq u1 220)(setq u1t 220)(setq dva_provod 2)))
или
Код:
[Выделить все]
(if ( = names "220") (setq u1 220 u1t 220 dva_provod 2))
Do$ вне форума  
 
Непрочитано 14.09.2010, 20:15
#3
gomer

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
(setq dlin_1 (getstring "\nДлинна: [10] "))
Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
(setq cos_st (getstring "\nКосинус: [0.95] "))

Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
(setq names (strcat u1s))
gomer вне форума  
 
Непрочитано 15.09.2010, 06:16
1 | #4
ShaggyDoc

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


gizmo_zx, эту программу надо переделывать в принципе, иначе она абсолютно ненадежна - достаточно где-то не сделать ввод и все дальше ломается.

1. В начале надо присвоить какие-то значения по умолчанию всем запрашиваемым данным - самые распространенные варианты. В идеале - если восстанавливаются использованные ранее когда-то.

2. Сделать в цикле один запрос с опциями и возможностью отказа от расчета. Здесь должен и сразу результат расчета выводиться.

При выборе опций - ввод выбранного параметра. С непременной проверкой на отказ и пустой ввод. При изменении любого параметра сразу выполняется расчет и возврат к 2.

3. Убрать все эти многочисленные, но ненужные setq.

Все будет просто (для пользователя) удобно и надежно.

Ну, а конструкцию if я бы заменил на cond. Это еще и с легкой возможностью расширения.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 15.09.2010, 13:27
#5
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
...
конечно здоробы это все поправить, но это моя первая программа на lisp.
Я могу писать только VB и то немного....
gizmo_zx вне форума  
 
Непрочитано 15.09.2010, 13:43
#6
Disney

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


gizmo_zx, правильно, у нас у всех были первые программы, это только gomer всё знал и умел заранее
Ты начни по пунктам, как написал ShaggyDoc, а что не получиться - спрашивай.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 15.09.2010, 14:34
#7
ShaggyDoc

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
конечно здоробы это все поправить, но это моя первая программа на lisp.
Я могу писать только VB и то немного....
Так это видно. То, что первая - не страшно. У всех были первые. У всех плохие были, и это не стыдно. Плохо, когда так же пишется сотая программа.

Разумеется, многим здесь раз плюнуть написать такую программу, причем в разных вариантах. Но лучше, если ты её сам доведешь до ума с нашей помощью.

Вот сейчас она действительно написана в стиле Бейсика, причем не VB, а каких-то древних версий, наподобие GWBasic - последовательные шаги.

А надо писать, как делается в AutoCAD. Практически любая программа сразу предлагает что-то ввести (обычно точку), но при этом имеет значения по умолчанию (для штатных команд они обычно в системных переменных зашиты). Но, с помощью опций командной строки (дублируемых в контекстном меню) можно какие то исходные данные изменить.

Вот и подумай сначала - нужна ли тебе такая микро-расчетная программа в Автокад? Она же только результат по формуле вычисляет. Да на экран показывает. Здесь Автокад не нужен. Можно хоть в Excel, хоть на VB, хоть просто на калькуляторе - тот же последовательный ввод нескольких чисел.

А вот если бы, например, длину надо было измерить в чертеже, тогда смысл бы был. Первым запросом было бы указание первой точки начала "длины". Причем длину можно бы несколько раз вводить - по точкам, указанием на объект, прямым вводом. А потом, если бы еще и результат надо было в чертеж написать, то еще больше бы смысла в использовании Автокада было. Бы.

Так что думай....
ShaggyDoc вне форума  
 
Непрочитано 15.09.2010, 19:33
#8
gomer

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


Цитата:
Сообщение от Disney Посмотреть сообщение
только gomer всё знал и умел заранее
Мне вот интересно: был ли составлен алгоритм программы, блок схема...
Программка очень смахивает на студенческую...
Неплохо бы еще автору почитать 'Учебное пособие по AutoLISP' в справке AutoCAD
gomer вне форума  
 
Непрочитано 15.09.2010, 19:44
1 | #9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


А нужна ли вообще блок-схема? Анахронизм тот еще, мне кажется...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.09.2010, 20:10
1 | #10
gomer

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


А как же! Чтоб не возникало таких "программ"
Откройте любой самоучитель для игры на любом музыкальном инструменте... С чего начинается обучение? С ТЕОРИИ! Почему? Потому что лажа сразу слышна...
Блок-схемы развивают навыки мышления... позволяют не держать ВСЕ в голове, отображая программу в наглядном виде... Нужны ли они? Наверное нужны, так как до сих пор существует множество программ для составления блок-схем

В принципе тема исчерпала себя во втором посте... Я написал, где плохо... До конца не досмотрел... не захотел... Если автор поймет почему плохо, хорошо... если нет... На нет и суда нет

Последний раз редактировалось gomer, 15.09.2010 в 20:16.
gomer вне форума  
 
Непрочитано 15.09.2010, 20:25
1 | #11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


gomer, я под впечатлением от Брукса и Макконнелла и не такое могу выдать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.09.2010, 15:55
#12
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Всем спасибо за критику.
Конечно по возможности буду перерабатывать...
т.к. это часть (надеюсь) будущей большой програмки
gizmo_zx вне форума  
 
Непрочитано 16.09.2010, 17:21
#13
Disney

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


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
т.к. это часть (надеюсь) будущей большой програмки
Сразу совет, большие программки надо делать из маленьких функций, иначе к концу написания большой программы не разберёшься, что? от куда? и зачем?...
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > помогите поправить программку на lisp

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
lisp помогите обработать список Apelsinov LISP 33 16.07.2021 15:56
Lisp, помогите с алгоритмом "подтягивания" поллиний 2123 LISP 1 03.02.2010 23:58
Auto Lisp. Помогите с легкой программой. BARS_1985 LISP 6 27.09.2007 11:10
LISP помогите разобраться. Elenaka LISP 5 20.10.2006 18:15
Помогите отладить lisp программу Мишаня LISP 7 31.07.2006 12:54