Билеты по сапр 70-85


Билет№70
Программирование ввода. Особенности.
(P-список из двух чисел (координаты точек))
GETINT S N Ввод целого числа с клавиатуры. S — текст подсказки. ( SETQ n ( GETINT «\nВведите число точек: » ) )
GETPOINT [P1] S P Ввод координат точки при помощи мышки. S — текст подсказки. Если задана точка P1, то от нее к текущей точке отображается «резиновая линия». ( SETQ p ( GETPOINT ( LIST 0 0 ) «\nУкажите начальную точку: » ) )
GETREAL S N Ввод вещественного числа с клавиатуры. S — текст подсказки. ( SETQ x ( GETREAL «\nВведите координату Х: » ) )
GETSTRING [N] S S Ввод текстовой строки с клавиатуры. S – текст подсказки. Если B указан и не равен нулю, то вводимая строка может содержать пробелы, иначе пробел рассматривается как признак конца ввода. ( SETQ s( GETSTRING «\nEnter your name: » ) )
GRAPHSCR — NIL Включает графический экран Автокада. ( GRAPHSCR )
INITGET N NIL Устанавливает защиту от неправильного ввода на одну следующую GET-функцию. N — сумма следующих значений: 1 — запрет пустого ввода; 2 — запрет ввода нуля;
4 – запрет ввода отрицательных чисел. ( INITGET 1 )
( SETQ a ( GETREAL «?» ) )

Билет№72
Функции вывода информации на экран. Управление выводом. Особенности.
(A-любой атом)
PRIN1 [A или E] — Если вызывается без параметров, не возвращает ничего. Особенно удобна для «тихого» завершения программы. ….
( PRIN1 )
) ; КОНЕЦ ПРОГРАММЫ
PRINT A или E A или E Выводит на текстовый экран выражение A. ( PRIN1 ( + 2 2 ) )
PROMPT S NIL Выводит на текстовый экран строку S. ( PROMPT «\nHello, world!»)
TEXTSCR — NIL Включает текстовый экран Автокада. ( TEXTSCR )

Билет№73
Работа с файлами. Понятие дескриптора. Вывод на печать в AutoLISP.
Ф-я вывода в файл или на экран (PRINC <выражение>[<дескриптор>]) отличие в том, что строковое выражение пишется без кавычек и обрабатываются управляющие символы (\n, \t).
Printc “\nError!” ->Error!
Print <выражение>[<дескриптор>] – Подобна prin1, но результат печатается с новой строки и после него обязательно ставится пробел.
Ф-я записи
(Write-Char <число>[<дескриптор>]. Записывает одну из литер, Asci код которой задан числом
(write-char 65) -> A

Билет№74
Функции, применяемые для создания списков.
Создание и обработка списков. И другие операции
1. (SetQ p1(Getpoint ` (10 20 30)))
2. Указание примитива на экране и формирование набора данных в виде списка с помощью ф-ии EntGet
3. Конструирование списков из данных, определённых в программе (List 10 20 30). Список создаётся из любого числа элементов, в качестве которых м.б. атомы или др. списков.
Ф-я Quote и её назначение
(Quote <выражение>) – функция подавляет оценку выражения – т.е. выдаёт его как есть, а не производит внутренних вычислений.
(CONS <элемент><список>) – добавляет элемент в список
(Cons 5(15 20 30))->(5 15 20 30)
(Cons 0 “Layer”)->(0.”Layer”)
(Append <список1><список2>…) – формирует общий список из других списков

(Reverse <список>) – изменяет очерёдность списка наоборот
(Setq A’(15 10)
B’(4 5)
C(Append A B)
);
(Reverse C)->(5 4 10 15)
(Subst <новый элемент><старый элемент><список>) – ф-я просматривает список и каждый найденный старый элемент будет заменён новым
(SetQ E’(A B (CD) B))
(Subst ‘G ‘B E)-> (A G (CD) G)
Замене подвергаются элементы списка на верхнем уровне.

Билет№75
Функции, используемые для выделения элементов списка.
(Listp <элемент>) – проверка явл. ли элемент списком. Результат T или Nil.
(APPLY ‘<имя ф-ии><список>) выполн. Над элементами списка действительно заданными функцией
(APPLY ‘MIN’(12 40 3 40.7 8 )->8)
(APPLY ‘+(15 10 40))
(Forech <переменная><список><выражение>…) – организует циклическое выполнение операций, т.е. позволяет пройтись по всем элементам списка и подставит. в заданное выражение, которое вычисляется. Результат последнее вычисленное выражение.
(MAPCAR ‘<имя ф-ии><спис1><спис2>…) организует цикл над данными, предоставленными списками.
(Setq S (MapCar ‘*(12 18 36) (3 21))) ->(’36 36 36)

Билет№77
Функции, обеспечивающие работу со списками.
(L-любой список)
CADR L1 AL Возвращает второй элемент списка L (например, координату Y точки) ( CADR ( LIST 10 20 ) )
CAR L1 AL Возвращает первый элемент списка L (например, координату X точки) ( CAR a )
LIST AL1 AL2 [… ALN*] L Объединяет все свои аргументы в один список ( LIST x y )
NTH N L AL Возвращает элемент списка L с порядковым номером N (первый элемент имеет номер ноль!) ( NTH 1 a )

Билет№79
Функции для работы с системными переменными. Обработка символьных таблиц.
Следует учесть, что некоторые системные переменные определены только для чтения, такие системные переменные переустанавливать нельзя.
(GETVAR <имя переменной>)
для считывания значения системной переменной в программе.
(SETQ A(GETVAR “ANGBASE”))
присваивает A значение переменной ANGBASE.
В ходе работы системы AutoCad создаются символьные таблицы типа LTYPE, LAYER, определяются типы линий, слои и т.д. Данные из этих таблиц м.б. считаны функцией
TBLNEXT
TBLSEARCH
Содержимое таблиц менять не разрешается.
(TBLNEXT <имя таблицы><первый символ>). Имя таблицы в виде символьной константы.
В случае повторного обращения к таблице функция возвращает данные, соответствующие точке вхождения. Если 1-ый символ отсутствует или равен NULL, то чтение таблицы начинается сначала. Если вхождение найдено, то возвращается список кодов и значение типа данных. Точки входа, вызываемые из таблицы BLOCK, содержат группу с кодом (-2) с именем 1-го элемента в описании блока. Это имя можно использовать применительно к функции ENTG и ENTNEXT.
(TBLSEARCH <имя таблицы><символ>[<следующий>])
просматривая имя таблицы ищет заданный символ и возвращает в качестве результата. При наличии следующего, ищется следующий символ.
(TBLSEARCH “DIMSTYLE” “STANDARD”) – (2, “STANDARD”).
GETVAR S AL или S или B Возвращает значение системной переменной Автокада с именем S. ( GETVAR «DIMTXT» )
SETVAR S AL или S или B AL или S или B Устанавливает новое значение системной переменной Автокада с именем S. ( SETVAR «dimext» 3.5 )

Билет№80
функции, используемые для работы с наборами примитивов.
Графический примитив – это функционально определенный простейший объект графической БД чертежа.
Объекты, с которыми работают программы на языке AutoLisp делятся на:
1) отдельные примитивы, созданные программой или графическим редактором;
2) наборы примитивов.
Все они м.б. обозначены с помощью переменных. Примитивы бывают простыми (линия, окружность, строка,…) и составные (вставки блоков, полилинии,….).
Составные примитивы делятся на субпримитивы.
(ENTNEXT [<примитив>])
выбор следующего примитива.
<примитив> – внутрипрограммное имя примитива. Результат: если примитив не указан, то возвращается первый из примитивов чертежа, который не удален; если указан простой примитив, то возвращается следующий за ним. Если указан составной примитив, то возвращается 1-ый субпримитив указанного примитива. Если указан субпримитив, то возвращается субпримитив, следующий за ним. Если указанный примитив отсутствует, то возвращается NIL
(SETQ N1 (ENTNEXT)) переменной N1 присваивается 1-ый примитив рисунка.
(SETQ N2 (ENTNEXT N1)) переменной N2 присваивается следующий за N1 примитив.
(ENTLAST) функция выбора последнего неудаленного примитива.
Субпримитив не применяется.
(ENTSEL [<подсказка>]) функция выбора примитива на экране. Выбор производится указанием курсора. Если <подсказка> отсутствует, выводится сообщение “Select object”. Результат возвращается в виде 2-х элементов:
1) внутрипрограммное имя примитива;
2) точка, в которой было произведено указание
(SETQ S1(ENDSEL “Please choose on entitg:”))
(SETQ NAME(CAR S1))
(SETQ POINT(CADR S1))
(ENTDEL <имя примитива>) удаление примитива
Результат действия функции следующий:
1) Примитив, который был в графической БД чертежа удаляется
2) Примитив, который был в графической БД чертежа восстанавливается в чертеже, если был удален в текущем сеансе. Субпримитивы так не удаляются.
(REDRAW <имя примитива>) управление отображением примитива. Позволяет восстановить изображение примитива после очистки экрана.
(REDRAW <имя примитива><режим>)
<режим>:
1 – примитив перерисовывается
2 – примитив стирается
3 – примитив отсвечивается
4 – подсветка примитива снимается
(SETQ S1 (ENTSEL))
(REDRAW S1 3) подсветка
(REDRAW S1 4) снять подсветку

Билет№81
Модификация состава набора примитивов. Используемые функции.
Модификация данных о примитиве
(ENTMOD <список>) изменяет параметры примитива в графической БД чертежа
Механизм обновления данных:
– извлечение информации с помощью ENTGET;
– изменение списка, описывающего примитив с помощью SUBST;
обновление информации в БД чертежа с помощью ENTMOD
(SETQ ENAME (ENTNEXT))
;занести в переменную ENAME следующий примитив
(SETQ EINF (ENTGET ENAME))
;занести в переменную EINF информацию о примитиве ENAME
(SETQ EINF ; модификация переменной EINF
(SUBST (CONS 8 “1”) ; путем создания списка для слоя
(ASSOC 8 EINF) ; (добавив) и выполнив
EINF)
)
(ENTMOD EINF)
На функцию ENTMOD накладывается ряд ограничений:
1) Не может быть изменен тип примитива (это можно сделать, если предварительно удалить его с помощью ENTDEL, а затем создать с помощью COMMAND).
2) Объекты, на которых ссылается список примитива, должны быть к данному моменту определены (за исключением имени слоя).
3) Слой м.б. задан и новый, который в данный момент отсутствовал.

Функция ENTMOD может выполняться над примитивом и субпримитивом. Если объекты являются субпримитивами, то видимого изменения не произойдет.
Формирование и анализ наборов графических примитивов
Набор примитивов – это совокупность графических примитивов, объединенных по логическому или физическому принципу.
Операции с наборами:
1) Создание набора примитивов
(SSGET [<режим>] [<точка1>] [<точка2>] [<список точек>]
[<фильтр-список>])
Функция возвращает определение (внутрипрограммное имя) выбранного примитива или набора примитивов.
<режим> – это параметр, определяющий способ формирования набора. Они бывают следующие:
– “W” – выбор примитивов рамкой (окном), которые определяются точкой 1 и 2.
– “C” – выбор примитивов, пересекаемых окном
– “L” – выбор последнего созданного на чертеже примитива
– “P” – выбор текущего набора
– “F” – выбор примитивов разомкнутой ломанной линией
– “CP” – выбор примитивов секущим многоугольником
– “WP” – выбор примитивов, заданных текущим фильтром-списком
<точка1>и <точка2> – задают диагональ рамки.
При их отсутствии точки указываются курсором.
Пример:
(SSGET) ; обычный способ формирования наборов
(SSGET “P”) ; выбор текущего набора
(SSGET “L”) ; выбор последнего набора
(SSGET ‘(10 20)) ; выбор примитивов, проходящих через точку (10 20)
(SSGET “W” ‘(5 10), ‘(20 30)) ; выбор примитивов, попавших в пределы рамки, но не пересекаемых ею
<список точек> – список точек, определяющий вершины ломаной.
<фильтр-список> – средство точного управления выбором по заданному условию. Условие – это список, элементами которого являются подсписки в виде точечных пар
Точечная пара содержит код, значение.
В качестве кодов могут быть:
0 – примитивы одного типа;
2 – примитивы, входящие во вставки блоков;
6 – примитивы, имеющие меньше одного типа;
7 – примитивы, характеризующиеся единой гарнитурой шрифта;
8 – примитивы одного слоя;
62 – примитивы, имеющие одинаковый номер цвета.
Если в качестве значения указывается 0, то выбираются все примитивы, принадлежащие одному блоку. Если 256 – все примитивы, принадлежащие одному слою.
(SSGET “X” (LIST (CONS 0 “CIRCLE”))) – создание набора из всех окружностей данного чертежа
(SSGET “X” ‘((8.”LEVEL2”) (0.”LINE”))) – создание набора из всех линий, принадлежащих слою LEVEL2
(SETQ SDEL (SSGET “X” ‘(6. “CENTER”)))
(COMMAND “ERASE” SDEL)
(SSGET “x”((0 “CIRCLE”)(-4 “>=”)(40_5.0))) созд. Набора из окружностей, у которых радиус ?5.
Для точек сравнения координаты X,Y могут быть сцеплены в одну строку символов, где операторы перечисляются через запятую.
Если оператор в строке пропущен и нет сравнения для координаты Z, то по умолчанию принимают * (т.е. все значения).
Векторы направления (имеющие координату 210)могут сравниваться только с помощью операторов: * , =, !=.
Использовать операторы сравнения со строковыми значениями нельзя, т.к. необходимо пользоваться символами глобальной замены.
Вышеописанные операторы сравнения являются двоичными операторами, однако можно создавать логические выражения для тестирования нескольких списков (подсписков) для создания групповых операторов.
(-4.”<AND”) <один или несколько операндов> (-4 “AND>”) объединение нескольких условий <и> заданного значения. (-4 “OR>”) <один или несколько операндов > (-4 “OR>”) Выбирают или тот участок или другой.
(-4 “XOR>”) <два операнда>(-4 “XOR>”)
(-4 “NOT>”)<один операнд>(-4 “NOT>”) – кроме указанной точки (операнд) выбир. Все есте-е значения.

Билет№83
Работа с данными примитивов и модификация примитивов.
Формирование списка данных примитива:
(ENTGET <имя примитива> [<список>])
функция формирует и возвращает список, содержащий данные о примитиве, который задан <именем примитива>. Аргумент <список> позволяет задать имена зарегистрированных приложений. При этом будут возвращены расширенные данные, связанные с именем примитива. Структура списка зависит от типа примитива и подчиняется следующим правилам:
1) Каждый элемент списка является списком;
2) Большинство субсписков имеют вид точечных пар, кроме тех, что описывают точки;
3) Первый элемент каждого субсписка – это код данных, 2-ой и последний элементы – его значения.
4) Первый субсписок имеет вид:
(-1.<имя примитива>)
2-ой имеет вид:
(0. <имя примитива>)
3-ий:
(8. <имя слоя>)
5) Затем указываются только те атрибуты примитива, значения которых отличаются от установленных по умолчанию.
6) Указываются характеристики примитива, состав которых зависит от его типа.
Например, для отрезка прямой:
Тип “LINE”
(10. <коорд. начальной точки>)
(11. <коорд. конечной точки>)
Тип “CIRCLE”
(10. <коорд. центра>)
(40. <радиус>)
Тип “ARC”
(10. <коорд. центра>)
(40. <радиус>)
(50. <нач. угол>)
(51. <конеч. угол>)
Модификация данных о примитиве
(ENTMOD <список>) изменяет параметры примитива в графической БД чертежа
Механизм обновления данных:
– извлечение информации с помощью ENTGET;
– изменение списка, описывающего примитив с помощью SUBST;
обновление информации в БД чертежа с помощью ENTMOD
(SETQ ENAME (ENTNEXT))
;занести в переменную ENAME следующий примитив
(SETQ EINF (ENTGET ENAME))
;занести в переменную EINF информацию о примитиве ENAME
(SETQ EINF ; модификация переменной EINF
(SUBST (CONS 8 “1”) ; путем создания списка для слоя
(ASSOC 8 EINF) ; (добавив) и выполнив
EINF)
)
(ENTMOD EINF)
На функцию ENTMOD накладывается ряд ограничений:
1) Не может быть изменен тип примитива (это можно сделать, если предварительно удалить его с помощью ENTDEL, а затем создать с помощью COMMAND).
2) Объекты, на которых ссылается список примитива, должны быть к данному моменту определены (за исключением имени слоя).
3) Слой м.б. задан и новый, который в данный момент отсутствовал.
Функция ENTMOD может выполняться над примитивом и субпримитивом. Если объекты являются субпримитивами, то видимого изменения не произойдет.

Билет№84
Средства и способы управления временем и памятью. Рекомендации.
Рекомендации по работе с памятью:
1) Общее:
— Можно сокращать количество различных переменных за счет повторного использования старых переменных для других целей. При этом, однако, могут возникнуть трудности с пониманием описания пр-мы. Необходимо следить за тем, чтобы при использовании такого приема не было попытки одновременного использования старого и нового значения переменной.
(SETQ A “First name: 15”)
. . .
(SETQ A (ENTSEL “select entity: ”))
. . .
(PRINC A) ?NIL
результат будет связан с тем, что после выполнения 2-ой функции SETQ A строковое значение А теряется.
— Если можно обойтись без переменной, то эту возможность нужно использовать.
(SETQ A (ENTSEL))
(SETQ B (CAR A))
(SETQ C (ENTGET B))
(SETQ E (ASSOC 0 C))
(SETQ D (CDR E))
(SETQ E (CDR (ASSOC 0 (ENTGET (CAR (ENTSEL)))))).
2) Специальные рекомендации:
— Последовательную работу (цикл) с различными примитивами можно организовать двумя способами:
1.Записать имена примитивов в список.
2.Сформировать набор из этих переменных (предпочтительнее).
-Следует ограничивать длину имени переменной 6 символами (занимает меньше места в памяти)
-Применение специальной функции AutoLisp позволяющей изменить размер и способ выделения памяти для различн. программных продуктов, так в результате выполнения функции VMON все последующие операции, описанные с помощью функции DEFUN, не будут постоянно находиться в памяти: при обращении к ним они будут загружаться, а затем выгружаться. Это может привести к увеличению времени работы, но позволит создавать более сложные пр-мы.
-Более универсальным средством управления памятью является операция обращения имен функции переменных в NIL.
Использование HEAP и STACK в случае с DOS – верхний HEAP управляет областью памяти, которая хранит имена переменных и функций, а STACK управляет содержимым.
Для определения размера памяти используется переменная среды:
LISPHEAP ? LISPSTACK
SETQ LISPHEAP=20000
SETQ LISPSTACK =25000.
Рекомендации по сокращению времени работы:
-Необходимо сократить число действий, попадающих внутрь цикла.
-Если какая-либо последовательность действий повторяется более одного раза, надо ввести дополнительную переменную и записать в ней результат действия, а затем пользоваться этой переменной. Если результат какого-либо действия не зависит от того цикла, то это действие выходит за пределы цикла.
1.(WHILE (<X 100)
(SETQ Y (+ Y (SIN X))
Z(/ (SIN X) (SINA))
X (1+ X)
);end setq
); end while.
2.(SETQ SIN A (SIN A ))
(WHILE (<X 100)
(SETQ SIN X (SIN_X)
Y(+ Y SINX)
Z(/ SINX SINA)
A(1+X)
)
)
сокращение времени в 2 раза достигнуто за счет потери части памяти под 2-е переменные SINA и SINX.
-Если возможно, следует заменять последовательность команд системы AutoLisp одной командой. При выполнении простых построений лучше использовать комплексные (OFFSET, ARRAY) команды.
-Довольно много времени занимает регенерация чертежа, поэтому следует сокращать или избегать команд требующих регенерации.
-Значительное ускорение при циклическом выполнении программ можно получить путем отключения эха выполнения команд и отмены простановки маркеров. Для этого применяются функции:
CMDECHD – отключает режим эхо выдачи сообщений на экран.
BLIPMODE – режим простановки маркеров.
(SETQ “CMDECHD” 0)
(SETQ “BLIPMODE” 0).
-Иногда в процессе отладки программ приходится включать какие-либо текстовые (графические) поясняющие сигналы. Если программа отлажена, то эти сигналы следует убрать.

Билет№85
Использование компилятора AutoLISP. Назначение. Порядок. Приемы.
Использование компилятора языка AutoLisp
Порядок компиляции:
1.Подготовить и ввести исходный текст программы используя окна текстового редактора.
2.Отладить программу с помощью интерпретатора.
3.Откомпилировать программу. Visual Lisp имеет 2 компилятора:
1)компилятор с непосредственным выполнением для быстрого тестирования и отладки новой программы.
2)Компилятор который размещает компилируемые программы с тем же именем, что
и исходные, но с расширением FAS.
Откомпилированные программы работают быстрее несли запущенны с VisualLisp.
Приложения могут быть автономными и сопровождаемыми.
Visual LISP Run – Time Support System — система поддержки выполнения программ на Visual Lisp.
Откомпилировать программу можно с помощью LSP – компилирующих функций (для одиночного файла). Если приложение состоит из нескольких файлов, загруженных одновременно, то используя интегрирующее средство управления проектов Visual LISP для компиляции файлов. Организатор проекта автоматически перетранслирует файлы, которые применились, обеспечивает поиск необходимых данных, и может оптимизировать выполнение функций.

Загрузка...