Форум программистов, компьютерный форум CyberForum.ru

Запомнить последовательность чисел в объекте целого типа - C++

Восстановить пароль Регистрация
 
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
26.09.2013, 19:58     Запомнить последовательность чисел в объекте целого типа #1
Такой вопрос.
У меня есть последовательность чисел. Необходимо закодировать ее в один объект целого типа (на бинарном уровне), а после, при необходимости, ее от туда извлечь. Как это сделать? (интересует только бинарный способ).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2013, 19:58     Запомнить последовательность чисел в объекте целого типа
Посмотрите здесь:

C++ Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида:....
После ввода с клавиатуры произвольного одномерного массива целых чисел (объекта данного класса),в пределах целого типа вывести в два столбика положите C++
Описать функцию SumRange(A, B) целого типа, находящую сумму всех целых чисел от A до B C++
Описать функцию RootsCount(A, B, C) целого типа C++
C++ генератор случайных чисел в объекте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
26.09.2013, 21:45     Запомнить последовательность чисел в объекте целого типа #2
Определитесь с тем, сколько бит занимает каждое число.
Далее сдвигайте очередное число на нужное к-во бит
и записывайте в результат с помощью побитового или ( | ).
Второй вариант - использовать возможность указывания
количества бит в структуре
C++
1
2
3
4
struct pack
{
   long int a1:4[16];
};
Добавлено через 1 час 34 минуты
К сожалению, "Нельзя организовывать массивы битовых полей".
Придется расписать все поля отдельно.
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
29.09.2013, 14:57  [ТС]     Запомнить последовательность чисел в объекте целого типа #3
Интерисует первый вариант.
Привидите пример (запихнуть последовательность чисел и извлечь их), а я вам за это плюсик.
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
29.09.2013, 15:21     Запомнить последовательность чисел в объекте целого типа #4
Я так понимаю, Вам нужна архивация, потому как именно она занимается подобного рода вещами. Закодировать в 32 бита, можно не так много чисел.

Известный предел архиваторов - 1.5 бита на символ char. На другой int, следовательно, 4*1.5 - 6 бит. Так что при самом лучшем стечении звезд, мирового хаоса и лучших алгоритмах кодирования, Вы в среднем сможете засунуть в int не более 5 интов.

Больше вариантов то и нет. В первом и во втором предложенном примере невозможно будет восстановить последовательность имея только этот несчастный объект. Нужна дополнительная информация о положении.

Добавлено через 7 минут
Эффективный алгоритм кодирования: RLE->BWT->RLE->MTF->ARI
RLE - Кодирование повторений (run lengt encoding)
BWT - Преобразование Барроуза Уиллера
MTF - Алгоритм Книжной полки (move to front)
ARI - Арифметическое кодирование

Такая последовательность даст эффективность на уровне gzip (в некоторых случая даже круче, проверял лично)
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
29.09.2013, 15:24  [ТС]     Запомнить последовательность чисел в объекте целого типа #5
Задача следующего характера.
(массивы использовать запрещено)
Ввести определенное число целых, сохранить их в одном объекте. И после вытолкнуть их оттуда.
Я сделал так:

C++
1
2
3
4
int val1 = 0;
 
цикл...
val1 = val1 * 10 + вводимое число;
и извлек:
C++
1
2
for(; val1 > 0; val1 /= 10)
cout<<(val1 % 10)<<" ";
Проблема такого подхода - возможность сохранения только одноцифровых чисел. Понятно, что для двухцифровых делаем то же самое только делитель ставим равным 100. Но чем больше делитель тем быстрее происходит переполнение.

И тут меня натолкнули на мысль, что проблему можно решить на бинарном уровне.
Сомневаюсь, что только алгоритмами архивации. Может есть что-то еще?

Добавлено через 1 минуту
Но в любом случае архивацию рассмотрю
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
29.09.2013, 15:34     Запомнить последовательность чисел в объекте целого типа #6
Этот объект int? long long? есть знак у входных чисел? А то я могу использовать неявные объекты-массивы, например map или string.

Ваш пример некорректный, если я введу 1 и -1 то получу 9.
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
29.09.2013, 15:36  [ТС]     Запомнить последовательность чисел в объекте целого типа #7
работат только с положительными
это объект int
знака у входных нет
массивы использовать нельзя
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
29.09.2013, 15:45     Запомнить последовательность чисел в объекте целого типа #8
Поздравляю, поместить в int последовательность других int из более чем 32-х штук - невозможно. Исключительно по той причине, что нижний предел Энтропии информации равен 1 биту. Бит не раздробишь, иначе информация будет зависимой (шанс следующего вводимого числа будет зависеть от шансов предыдущих введенных).
Так можете и написать в своем ответе к заданию. Странно, кто Вам задал такое задание? Это или уловка, или человек чего-то не понимает.

Или второй вариант - вы что-то недоговариваете.
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
29.09.2013, 15:49  [ТС]     Запомнить последовательность чисел в объекте целого типа #9
Заданию уже давно здал. Препод принял первый вариант, и как раз ляпнул про бинарный уровень, вот я и рыскаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2013, 16:03     Запомнить последовательность чисел в объекте целого типа
Еще ссылки по теме:

Измените структуру CStash чтобы данные хранились в объекте типа vector<char> C++
Создать динамический массив целого типа C++
Ввести массив, состоящий из 9 элементов (девять двузначных чисел) целого типа C++

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

Или воспользуйтесь поиском по форуму:
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
29.09.2013, 16:03     Запомнить последовательность чисел в объекте целого типа #10
Ну в общем-то Вам сказаны все способы. Ваш способ слишком быстро приведет к переполнению или будет слишком сильно ограничивать диапазон элемента последовательности, так что - архивация. Ваш вопрос из разряда фундаментальных, если бы был способ лучше, то мы бы передавали фильмы одним или двумя интами и никому нафиг не нужны были бы соединения в несколько Мб, флешки и прочие технологии ))
Yandex
Объявления
29.09.2013, 16:03     Запомнить последовательность чисел в объекте целого типа
Ответ Создать тему
Опции темы

Текущее время: 12:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru