0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
1 | |
Из вектора двоичных разрядов получить десятичное число31.10.2015, 14:28. Показов 1847. Ответов 15
Метки нет (Все метки)
0
|
31.10.2015, 14:28 | |
Ответы с готовыми решениями:
15
Десятичное число, представленное списком десятичных цифр, представить списком двоичных разрядов Число двоичных разрядов Получить третье число путем логического сложения четных разрядов первого числа и нечетных разрядов второго Функция преобразующая строку двоичных цифр в целое десятичное число |
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
|
|
31.10.2015, 14:30 | 2 |
Вот такое нужно?
Преобразовать набор нулей и единиц (двоичное число) в десятичное
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
31.10.2015, 15:24 [ТС] | 3 |
Да, но надо связать это с одномерным типом-массивом(вектором)
0
|
Модератор
10049 / 5393 / 3351
Регистрация: 17.08.2012
Сообщений: 16,494
|
||||||
03.11.2015, 10:08 | 4 | |||||
Идиотское требование. Достаточно было бы и строки символов, но... Если прям таки чтобы был тип одномерный массив... Тогда как-то так, с проверкой ввода, диапазон чисел - longint:
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
04.11.2015, 14:47 [ТС] | 5 |
Спасибо большое за программу. Не могли бы вы пояснить 1 и 17 строки своей программы?
0
|
Модератор
10049 / 5393 / 3351
Регистрация: 17.08.2012
Сообщений: 16,494
|
|
08.11.2015, 11:44 | 6 |
1 - описание типа для одномерного массива из байтов длиной, равной количеству бит в типе longint, индексация массива начинается с 0. Примечание: sizeof(что-то там) возвращает размер в байтах этого чего-то там. Для получения размера в битах умножаем на 8, для получения нужного диапазона индексов 0..31 (а не 0..32) вычитаем 1.
17 - преобразуем символ номер i из строки s в байт. Известно, что младший ниббл двоичных кодов цифровых символов соответствует количеству, который этот цифровой символ обозначает. В данном случае, все четыре младших бита кода символа не представляют интереса, достаточно знать значение только самого младшего бита. С помощью операции <что-то там> and 1 происходит установка в 0 всех разрядов чего-то там, за исключением младшего (нулевого), поскольку число 1 содержит нули во всех разрядах, кроме нулевого. Таким образом получаем значение (именно значение, то есть, число, соответствующее количеству, а не обозначение, то есть символ, соответствующий количеству) символа номер i из строки s, и помещаем это число в элемент массива d с соответствующим индексом. length(s) - i есть пересчёт номера символа в строке (нумерация символов в строке идёт слева направо, и начинается с единицы) в индекс массива, соответствующий номеру разряда в двоичном представлении числа. Нулевому разряду числа (и, в данном случае, нулевому индексу элемента массива d) соответствует самый последний (правый) символ строки, то есть, символ с номером length(s), первому разряду - символ с номером length(s) - 1, и так далее.
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
09.11.2015, 18:29 [ТС] | 7 |
Большое Вам спасибо за объяснение
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
12.11.2015, 15:57 [ТС] | 8 |
Вышла проблема...преподавателю не понравилось, что программа написана с использованием string. Не подскажите, как обойтись без этого типа?
0
|
Модератор
10049 / 5393 / 3351
Регистрация: 17.08.2012
Сообщений: 16,494
|
||||||
15.11.2015, 10:24 | 9 | |||||
Сообщение было отмечено ZX Spectrum-128 как решение
Решение
Идиотизм. Ну да ладно. Можно по одной цифре вводить, проще всего начиная с младших разрядов. Но - это как-то не по людски. Ладно, бог с нею, по одной цифре в строке, но, всё же, начиная со старших разрядов, и с проверкой ввода. Вводить будем в тот же массив, начиная с индекса 0, а затем поменяем последовательность цифр на обратную.
Можно было бы вводить число из одной строки, посимвольно, но, полагаю, не прокатит: придётся читать именно по символу, а это - тип char, который, скорее всего, тоже табу.
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
15.11.2015, 15:06 [ТС] | 10 |
А как сделать так, чтобы, если вводим менее 32 разрядов, при выводе двоичного представления числа не было лишних разрядов с нулями?
0
|
Модератор
10049 / 5393 / 3351
Регистрация: 17.08.2012
Сообщений: 16,494
|
||||||
15.11.2015, 16:01 | 11 | |||||
Ох, программа из поста #9... Я выложил по ошибке промежуточный вариант программы, а не окончательный. Он рабочий, но мои пояснения для k теряют смысл.
Без ведущих нулей можно. Однако, вывод перестанет быть информативным. Дело в том, что 31 (старший) разряд - это разряд знака числа. Если он равен 1, то число отрицательное. Поэтому, чтобы не возникало разночтений, я и вывожу все разряды, с 31 по 0. Без вывода незначащих разрядов, и, так как массив d инициализирован нулями, получается даже проще:
1
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
15.11.2015, 16:08 [ТС] | 12 |
Спасибо большое за то, что помогли с программой. Хотелось бы уточнить, в 30 строке вашей программы так и должно быть n:=0, а не k:=0? И не могли бы вы пояснить роль t в 26 строке?
0
|
Модератор
10049 / 5393 / 3351
Регистрация: 17.08.2012
Сообщений: 16,494
|
||||||
15.11.2015, 17:01 | 13 | |||||
Да, теперь так и должно быть. В целях упрощения, я закрепил за каждой переменной определённое её назначение, как описано постом выше.
Согласно указанному, t - это буферная переменная. На самом деле, в цикле (строки 24 - 29) происходит обмен между элементами массива d[i] и d[k - i]. Ну и, всё просто... d[i] запоминаем в t, затем переписываем из d[k - i] в d[i], и вот он, момент истины... Если бы не было запомнено старое значение d[i], оно было бы потеряно. Далее в d[k - i] пишем t, которое есть ни что иное, как старое значение d[i]. Всё, d[i] и d[k - i] местами поменяны. Для чего нужно что-то там менять местами? Это всё оттого, что я сделал ввод цифр числа по-человечески: от старшего разряда к младшему. Длина числа заранее неизвестна, поэтому сначала оно вводится "зеркально": на месте младшего разряда запоминается самый старший разряд, и так далее. После того, как число введено, количество разрядов становится известным, и этот обмен нужен только для того, чтобы разместить разряды числа в элементы массива с соответствующими номерами: младший разряд - в нулевой элемент, и так далее. Можно и не менять, однако, тогда придётся сразу запоминать двоичную цифру в соответствующем элементе массива d. Так как заранее количество разрядов неизвестно, на деле это обозначает ввод числа, начиная с самого младшего разряда. То есть, к примеру, число 1310 = 11012 придётся вводить как 1011, а не 1101. Такой ввод не является общепринятым. На всякий случай, вариант с таким вот "не таким" вводом, естественно, уже без цикла обмена:
1
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
16.11.2015, 14:29 [ТС] | 14 |
Большое спасибо, что помогли разобраться, вы меня спасли.
0
|
Cyborg Drone
|
16.11.2015, 15:28
#15
|
Не по теме: Нет, не совсем так. Может быть, конечно, я Вас и спас, однако, если мерять уж совсем грубо, все вопросы на форуме делятся на две разновидности: "помогите" и "помогите (в смысле: Вы чо, не пояли? Сделайте за меня, разбираться с этой пфнёй у меня нет ни малейшего желания)". Профит Вам, что Вы не относитесь к категории ленивых неучей, так что помогать Вам было просто и легко. И получается, что Вы помогли себе сами: Вы решали проблему, нашли способ её решения и решили её. Не получили готовое решение, а именно решили. Да, я, конечно, помогал Вам, по мере возможности, что, зачем, куды и как. Однако, в отличие от второй описанной мной категории, Вы Ваши знания преумножили (блин, слово какое пафосное, аж зубы ломит), и, полагаю, уже можете повторить подвиг (ну вот, опять...) выполнения подобного задания. Прошу прощения за несколько сумбурное повествование, но, надеюсь, Вы меня поняли.
0
|
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 30
|
|
18.11.2015, 17:44 [ТС] | 16 |
Да, я понял вас.
0
|
18.11.2015, 17:44 | |
18.11.2015, 17:44 | |
Помогаю со студенческими работами здесь
16
Преобразование строки двоичных цифр в эквивалентное ей целое десятичное число Циклический сдвиг вправо массива байт на заданное число двоичных разрядов Пользователь вводит вещественное число вывести его в 2-ой СС с точностью до 10 двоичных разрядов Написать процедуру и функцию преобразования строки двоичных цифр в целое десятичное число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |