![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
RussoTuristo |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задание: Написать программу подсчета количества атомов в заданном интервале уровней для заданного списка.
Код (setq m nil);количество атомов (setq A '( 11 12 13 14 15 16 ( 11 12 13 14) 18));список (setq a1 2);левая граница (setq a2 6);правая граница //(setq a1 (getint "element1:")) //(setq a2 (getint "element2:")) (setq p (- a2 a1)); количество элементов в "нужной части" (setq n a1) (while (> n 0);отрезаю "голову" списка, чтобы оставить только нужную для анализа часть (progn (cdr A) (- n 1)) ) (setq z 0) (while (> p 0) ; Проверяю является ли текущий элемент списка атомом (progn (if (= Atom(nth z 'A) T) (+ 1 m) ; Если да, то увеличиваю m ) (+ z 1)); наращиваю z, чтобы посмотреть след. элемент списка (setq p (- p 1)); Пока не просмотрю все элементы из нужной части ) (print m); Вывод m Вроде всё нормально, не уверен с проверкой на то, является ли элемент атомом, просто не очень удобный Компилятор, не понимаю, что не так... |
![]() ![]() |
RussoTuristo |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: ![]() ![]() ![]() |
Немного сам не понял задачу, для заданных уровней - означает вложенность списков друг в друга (Например: (1 2 3(4 5 (6 (7)))) У 7 - уровень вложенности 4).
Прогу вроде переписал и теперь в принципе думаю она должна работать, но препод у нас долбанутый, даже Lisp нам еще не показывал (есть куча всяких прог на лиспе, но не знаю как их запускать, набираешь например My() прога что-то делает, а дальше не ввода данных, ничего ... может делаю что не то ... проги все 100% рабочие) Но проблема в другом, раньше вроде все работало, а теперь пишет неверное сформированный список на входе ... Я его задаю неправильно? Код (Defun Find() (Setq A '(1 2 3 4 5 6 7 8 9)) (Setq a1 2); Искать атомы начиная с уровня а1 (Setq a2 5); И до уровня а2 (Setq k (length A)) (Setq Scobka1 (vl-string-elt "(" 0)); Если встретили "(" Ниже к count1 прибавится 1 (Setq Scobka2 (vl-string-elt ")" 0)); Если встретили ")" Ниже count1 уменьшится на 1 (Setq Probel (vl-string-elt " " 0)); Если встретили пробел (Setq i 0) (Setq count 0); (Setq count1 0); (While (< i k) (if (= Scobka1 (nth i A)) (Setq count1 (+ count1 1))) (if (= Scobka2 (nth i A)) (Setq count1 (- count1 1))) (if (= Probel (nth i A)) (if (>= count1 a1) (if (<= count1 a2) (Setq count (+ count 1)) (Setq i (+ i 1)))) ) (print count) ) По количеству открывающих/закрывающих скобок ищем уровень вложенности, и сравниваем с заданным, если то, что надо - увеличиваем count на 1... |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 2:19 |