|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Си - сложный язык по сравнению с автолиспом
Проектирование несущих строительных конструкций
Москва
Регистрация: 21.06.2012
Сообщений: 9
|
||
Просмотров: 6944
|
|
||||
Цитата:
Не занимайся извращениями - открой для себя IDictionary<Point3d, Int32> и будет тебе счастье. В качестве ключа - точка, в качестве значения - количество совпадений. Хотя... уточни насчёт "совпадающих элементов"... Тебе количество совпадений нужно, или сгруппированные идентификаторы объектов, у которых нужная тебе точка совпадает?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 22.06.2012 в 00:28. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
![]() ![]() ![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Вот, для чего это нужно
Есть намерение сделать МКЭ для строительной механики: пре- и постпроцессоры реализовать в автокаде с использованием lsp файлов, а расчетное ядро сделать отдельным exe, общение .exe-шника с автокадом через .txt файлы, записываемые и читаемые через жесткий диск. Первые наработки lsp для подготовки геометрии в автокаде, списков узлов, элементов, ребер, связей, сил (связи и силы еще не сделаны). Вот здесь была трудность - как составить соответствие, например, узлов. После вычленения из набора примитивов очередного узла, как выяснить, этот узел новый, или с такими координатами узел уже есть в списке. На каждом шаге перебирать все имеющиеся в списке на данный момент узлы, это слишком долго для автокада (проверено на практике). Тогда я сделал хитрушку с использованием (eval (read "....")), где в строку собирается выражение (setq ... ...). И в процессе выполнения программы, таким образом, можно создавать переменные с именами, являющимися результатом вычислений. Не только значение переменной является результатом вычислений, но и ее ИМЯ. При таком инструменте можно обработать набор узлов с отбраковкой повторяющихся не за ~ n*n/4, а за ОДИН проход, т. е. за n операций. Берем очередной узел из набора, создаем строку, связанную с координатами узла, например "nameXYZ" (X, Y, Z - конкретные числа), и проверяем значение переменной nameXYZ. Если значение nil, то nameXYZ присваивается значение 1, и в список узлов записывается очередной узел. Работает быстрее, обработка 1000 элементов занимает 50 сек. В приложенном файле примера есть схема. В lsp есть функция po, она создает списки (глобальные переменные) su, se, sr, sre, списки узлов, элементов, ребер, соответствие ребер и элементов соответственно. Вопрос в том, может такие операции лучше делать методами языка СИ? Или если в этом языке такой возможности нет, то простой перебор в exe файле все равно будет быстрее, чем данный lsp?Пример схемы.dwgПодготовка.LSP |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Боюсь спросить сколько тогда медленно? Я более чем уверен, что ты просто накосячил с алгоритмом - распиши что тебе нужно сделать быстро (входные и выходные данные там где загвоздка), ну можещь и свой список привести из 1000 элементов - посмотрим за сколько секунд его удастся обработать.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Дима_ прав - явные косяки с алгоритмом. Зачем вообще переборы? Про ассоциированные списки в Lisp знаешь? Ведь сам AutoCAD очень быстро выдает запрошенные данные, и не перебирает свою ГБД. Ассоциированный список - это же фактически индексированная таблица в памяти. Если уж задача с обработкой больших объемов данных, которые надо по сути отбирать по какому-то фильтру, да ещё из идеологически противоположных программных систем, можно воспользоваться СУБД. Хотя бы просто (для начала) локальный mdb-файл формата Access. Lisp с ним может работать через ADO посредством SQL-запросов. Данные можно отбирать (из любой системы программирования) также с помощью SQL. Да еще и визуализировать. Объем данных ничем не ограничен, всё выполняется практически мгновенно (если речь не о миллионах записей). И хранятся данные не в памяти, т.е. можно продолжать их обработку в любое время. Наглядный пример быстроты - хотя бы этот форум. Щелкнув по ссылке на этот пост мы передаем в командную строку браузера запрос наподобие Код:
Код:
Последний раз редактировалось ShaggyDoc, 23.06.2012 в 07:02. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Стоп стоп - не путайте человека - индексации ассоацивных списков нет - ищет перебором - хотя конечно делает это достаточно быстро - т.к. в памяти.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Подкажите, есть ли в C# возможность allocatable (не оговаривать жестко размер) для массивов? Нашел только массив типа a[][], но для него строки хотя и разной длины, но их размеры тоже оговорить надо.
|
|||
![]() |
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Можно посмотреть примеры здесь
http://through-the-interface.typepad.com/ http://drive-cad-with-code.blogspot....h-net-api.html http://adndevblog.typepad.com/autocad/ http://www.acadnetwork.com/ http://profile.typepad.com/spiderinnet1 ~'o'~ Последний раз редактировалось Олег (jr.), 25.06.2012 в 00:47. |
|||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Подскажите, почему не получается сделать запись в файл?
Файл создается, но остается пустым после выполнения программы. Фрагмент в программе такой: char a; a = 'N'; FileStream file1; file1 = new FileStream("D:\\text1.txt", FileMode.Create, FileAccess.Write); StreamWriter fs = new StreamWriter(file1); fs.Write(a); fs.Write(1456.15); fs.Write("sdf2"); |
|||
![]() |
|
||||
Цитата:
Самый простой способ записи текста в файл: Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 07.07.2012 в 22:44. |
||||
![]() |
|
||||
Я не телепат - вижу только то, что ты показываешь.
Не достаточно. Ну ну... ![]() Ну так узнай.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Вот эта строка
File.WriteAllText(@"c:\test\MyTextFile.txt", "Раз, два, три - проверка связи...", Encoding.UTF8); работает как часы, только не совсем как я хотел. Она вместо всего, что уже есть в файле, записывает что в кавычках. Вот если бы добавлять запись |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
можешь на примере моего кода показать как их использовать? Я написал file1.Flush(); file1.Close(); file1.Dilpose(); но это не помогло. В справке нет примера, сказано только для чего они, но это просто определения. А в спецификации языка в содержании я не нашел главы как общаться с файлами. У меня книга Э.А.Ишкова "C# Начала программирования", это от туда методика записи в файл FileStream, StreamWriter, Write. И Flush и Dispose там не использовались
|
|||
![]() |
|
||||
2 C# ученик
Если используешь блок usung(...){...}, то нет необходимости вызвать для объекта, инициализированного в скобках, методы Close и Dispose, т.к. Dispose вызывается автоматом, а в его коде вызывается Close. Метод Flush нужно обязательно вызывать перед закрытием, если вручную прописываешь Dispose, либо перед закрывающей "}" блока using. Это следует делать, т.к. на самом деле в поток информация записывается определёнными порциями. Если ты вызвал Write*** или Append*** нет никаких гарантий, что в поток будет записано сразу всё. Часть информации может быть оставлена "на потом", чтобы записаться со следующей порцией информации. Вызывая метод Flush ты тем самым даёшь команду записать всё, что сейчас имеется. Научись не бездумно копировать ведро кода, скинутого тебе, а понимать, что ты делаешь, и как это на самом деле работает... Код из #20 содержит в себе ненужное велосипедостроение, без которого можно было свободно обойтись всего несколькими строками кода. UPD Разжёванную информацию по теме ты найдёшь в книгах Шилдта и Троелсена (на выбор).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 08.07.2012 в 15:33. |
||||
![]() |
|
||||
Проектирование несущих строительных конструкций Регистрация: 21.06.2012
Москва
Сообщений: 9
|
Народ! если кто решает на C# простые задачи строительной механики, то рекомендую делать запись вектора чисел в файл так:
Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 08.07.2012 в 22:02. |
|||
![]() |
|
||||
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Меня всегда удивляло то, что с помощью автолисп и др. языков программирования, из автокада пытаются строить солидворкс, катию, ю г, тот же инвентор и прочие продукты, которые уже разработаны. Ну зачем вам все это надо?..
__________________
iostex |
||||
![]() |
|
||||
Регистрация: 14.06.2011
Сообщений: 47
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: Вот здесь я чуть не погиб...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Соискатель Регистрация: 12.03.2011
Урал
Сообщений: 1,496
|
Здравствуйте! Как задать целое число в С++?
Имеются типы char, short, int (им бы и задал, но ограничено сверху и снизу, как и в остальных случаях), long, long long Вопрос в следующем, как сделать, чтобы при вводе числа учитывались все возможные границы ввода? Хотелось бы разобраться, а не просто плюнуть и задать long long или int Последний раз редактировалось Chardash, 18.12.2013 в 16:12. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Основные плюсы AutoCad по сравнению с ArchiCad/ | Saha | AutoCAD | 34 | 23.07.2009 17:05 |