Нужна целая задача по нахождению длины строчки - Lisp

Узнай цену своей работы

Формулировка задачи:

Прочитать трехмерный массив из стандартного потока ввода. Массив может содержать элементы различных типов – целые, вещественные, комплексные числа, строки, символы, списки, другие массивы. Необходимо найти сумму длин строк, не содержащих символов #\a, #\i и #\u. Если строк в массиве нет, результат – 0. Совсем не понимаю,как делать

Решение задачи: «Нужна целая задача по нахождению длины строчки»

textual
Листинг программы
(defvar arr)
(defvar res)  
  
(defun task-3 (a)
 (let ((la (array-dimensions a)) (s 0) (v nil))
   (dotimes (i (car la) s)
     (dotimes (j (cadr la) t)
       (dotimes (k (caddr la) t)
         (setf v (aref a i j k))
         (print v) (terpri)
         (when (stringp v)
            (unless (or (position #\a v)
                        (position #\i v)
                        (position #\u v)) (setf s (+ s (length v))))))))))
 
(setf arr (read))
#3A(((1 "abcd") ("ijk" "klm") ("xvn" "uxy")) ((1 2) ("zzzzzzzzzz" 4) (5 6)))
 
(setf res (task-3 arr))
(print res)

Объяснение кода листинга программы

В данном коде на языке Lisp выполняется следующая задача: необходимо посчитать количество символов в каждой строке массива. Пояснение к коду:

  1. Создаются две переменные: arr и res.
  2. В переменную arr считывается массив.
  3. Функция task-3 принимает в качестве аргумента массив a.
  4. В функции создаются три переменные: la, s и v.
  5. Переменная la содержит размеры массива, а переменные s и v инициализируются нулевыми значениями.
  6. С помощью цикла dotimes перебираются все индексы массива.
  7. В каждой итерации цикла для текущего индекса перебираются все символы строки, используя вложенный цикл dotimes.
  8. Если текущий символ является буквой, то с помощью функции aref извлекается символ по индексу из массива, и его значение присваивается переменной v.
  9. Значение переменной v выводится на экран, а затем увеличивается значение переменной s на длину текущей строки.
  10. После окончания второго вложенного цикла проверяется, является ли значение переменной v строкой.
  11. Если это так, то проверяется наличие в строке символов 'a', 'i' и 'u'.
  12. Если все три символа отсутствуют в строке, то значение переменной s увеличивается на длину строки.
  13. После окончания первого вложенного цикла выводится на экран значение переменной res, которое и является ответом на задачу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы