Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 8

Перевести число из десятичной системы счисления в двоичную

14.11.2012, 09:04. Показов 4594. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Помогите, пожалуйста с заданием.

Задание №1. Разработать рекурсивный вариант программы в функциональном стиле для решения предложенной задачи.

Задание №2. Разработать итерационный вариант программы в императивном стиле для решения предложенной задачи.
В теле функций можно использовать только примитивы car, cdr, cons. Все остальные функции должны быть определены через эти примитивы. Задания к контрольной работе приведены ниже.
Само задание:
Переводить число из десятичной системы счисления в двоичную
>(name ‘(2 7) )
(1 1 0 1 1)

У меня есть этот вариант задания решенный в простом виде, а как представить его в виде заданий №1 и №2, у меня соображений нет(

Простой вариант:
Lisp
1
2
3
4
5
6
(defun name(x)
  (let ((r nil))
       (loop
            (setq r (cons (mod x 2) r))
            (setq x (truncate x 2))
            (when (= x 0) (return r)))))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2012, 09:04
Ответы с готовыми решениями:

Переводить число из десятичной системы счисления в двоичную
Разработать итерационный вариант программы в императивном стиле для решения предложенной задачи. В теле функций можно использовать только...

Описать функцию, переводящую целое число из десятичной системы в двоичную
Описать функцию, переводящую целое число из десятичной системы в двоичную. Необходимо реализовать функцию при помощи итерационных циклов и...

Перевести число из q-ичной системы счисления в десятичную
Написать программу перевод(x, q), переводящая исходное число в q-ичной системе счисления в десятичную (q < 10) Помогите,...

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
14.11.2012, 13:40
Твой вариант - это и есть вар. 2 (итерационный).

Вот рекурсивное решение (HomeLisp):

Lisp
1
2
3
4
5
6
7
8
9
(defun dec2bin (x &optional r) (cond ((= x 0) r)
                         (t (dec2bin (\ x 2) (append r (list (% x 2)))))))
 
 
==> dec2bin
 
(dec2bin 27)
 
==> (1 1 0 1 1)
1
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 8
14.11.2012, 15:37  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Твой вариант - это и есть вар. 2 (итерационный).
Спасибо за вариант 1.
А вот с вар. 2 не получится так сделать, т.к использовать нужно только примитивы car, cdr, cons, к сожалению truncate примитивом не является.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
14.11.2012, 18:57
Нет, truncate можно использовать (как вы в common лиспе разделите одно на другое). Задание не вполне корректно.

Добавлено через 39 минут
Кстати, в рекурсивном решении используется append. Вот ее реализация:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun append (x y)
   (cond ((null x) y)
            ((null y) x)
            ((= 1 (length x)) (cons (car x) y))
            (t (cons (car x) (append (cdr x) y)))))
 
==> append
 
(append '(1 2 3) '(4 5 6))
 
==> (1 2 3 4 5 6)
Функция использует length. Вот ее реализация:

Lisp
1
2
3
4
5
6
7
8
9
(defun length (x)
    (cond ((null x) 0)
             (t (+ 1 (length (cdr x))))))
 
==> length
 
(length '(5 6 7))
 
==> 3
Добавлено через 4 минуты
А вот очень кондовое итерационное решение:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun dec2bin (x)
  (prog (r)
@loop  (setq r (cons (% x 2) r))
       (setq x (\ x 2))
       (cond ((= x 0) (return r)))
       (go @loop)))
 
==> dec2bin
 
(dec2bin 5)
 
==> (1 0 1)
 
(dec2bin 6)
 
==> (1 1 0)
 
(dec2bin 3)
 
==> (1 1)
1
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 8
21.11.2012, 23:57  [ТС]
Catstail, доброго времени суток.
Большое спасибо, все подошло, только хоумлисп пришлось скачать, ну да ладно.
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
22.11.2012, 10:42
Lisp
1
2
3
4
5
6
7
(defun deci-bin (n &optional ac)
  (if (zerop n) ac (deci-bin (floor (/ n 2)) (cons (mod n 2) ac))))
 
> (deci-bin 27)
(1 1 0 1 1)
> (deci-bin 10)
(1 0 1 0)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2012, 10:42
Помогаю со студенческими работами здесь

Задачу из шестнадцатеричных в двоичную системы счисления
Помогите срочно решить в код лисп (ДрРакет).

Дано натуральное число n .Подсчитать количество нулей в десятичной системе счисления
Дано натуральное число n .Подсчитать количество нулей в десятичной системе счисления

Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
1. Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления. 2. Перевести...

Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
1. Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления. Для а) и б)...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru