Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 08.04.2021
Сообщений: 38

Придумать алгоритм сжатия без потери данных

24.12.2021, 12:22. Показов 2695. Ответов 25
Метки vba (Все метки)

Студворк — интернет-сервис помощи студентам
Есть большая последовательность из букв A и B.
Придумать алгоритм сжатия без потери данных и алгоритм распаковки.

Пример последовательности:
AAAAAAAAAAAAABBBBBBBBBAAAAAAAAAAAAABBBAA AAAAAAAABBBBBBBBBBBV
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2021, 12:22
Ответы с готовыми решениями:

выручайте basic10
Подсчитать величину прибыли за отчётный период, если стоимость бензина равна 10 руб/л

Выручайте, знаний не хватает
Доброго всем дня. Пытался решить практическую задачу. Заключается она в своевременном сигнализировании о готовности всех комплектующих,...

Вложенные циклы. Товарищи, выручайте
Ребят вот задание у меня, полвечера уже не могу понять как это все написать... Вычислить A=x*y*k 1<=x<=3 hx=0.5 ...

25
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
25.12.2021, 14:57
Студворк — интернет-сервис помощи студентам
А нет ли реализаций на VBA более сильных алгоритмов, типа арифметического сжатия или LZW, Huffman, LZMA ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
27.12.2021, 08:57
Zeag, у меня есть самоделки. Но они скорее для иллюстрации работы, чем для реального сжатия. Думаю выложить их в раздел "Авторские разработки и полезные коды"
0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
27.12.2021, 10:29
Уважаемый Catstail, думаю, это будет полезно. Разумеется, сравнимого с настоящими архиваторами сжатия и обилия ключей вряд ли на VBA можно достичь, но все же пригодится.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
27.12.2021, 10:55
Цитата Сообщение от Zeag Посмотреть сообщение
вряд ли на VBA можно достичь
- если взяться всерьез, то можно приблизиться. Но смысла уже нет.
0
860 / 510 / 187
Регистрация: 09.03.2009
Сообщений: 1,732
27.12.2021, 11:23
Думаю, приблизиться можно через DLL разве. Битовых операций же в VBA нет, а эмуляция через свои структуры данных не то. Сжатие будет, может, а скорость нет. Вот кусок из одного упаковщика, как это реализовать на VBA? Понятно, что можно все, но вопрос эффективности.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void put_code(WORD c) {
    if(free_bits >= code_size) {
        w_buf <<= code_size;
        w_buf |= c;
        if(free_bits == code_size) {
            fwrite(&w_buf, 2, 1, outfile);
            free_bits = 16;
            return;
        }
        free_bits -= code_size;
    }
    else {
        w_buf <<= free_bits;
        w_buf |= c >> (code_size - free_bits);
        fwrite(&w_buf, 2, 1, outfile);
        w_buf = c;
        free_bits += 16 - code_size;
    }
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38228 / 21160 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
28.12.2021, 09:05
Zeag, работа с битами средствами VB/VBA - не особая проблема:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
':::
'::: Занести битовый код в выходной буфер (BufOut)
':::
Private Sub PutBit(Code&)
 
      For i% = 1 To Size
            
          k& = Deg2(Size - i%)
            
          If (Code& And k&) <> 0 Then Curr = Curr + (2 ^ (Nbit - 1))
          
          Nbit = Nbit - 1
 
          If Nbit = 0 Then
          
             Out_Byte$ = Chr$(Curr)
 
             ptrOut = ptrOut + 1
             
             Mid$(BufOut$, ptrOut, 1) = Out_Byte$
 
             Curr = 0
 
             Nbit% = 8
             
          End If
          
      Next i%
 
End Sub
 
':::
'::: Получить бит из буфера
':::
 
Private Sub GetCode(CC&)
 
       CC& = 0
 
       For i% = Size To 1 Step -1
 
           k% = (Curr And (2 ^ (Nbit - 1)))
 
           If k% <> 0 Then CC& = CC& + (2 ^ (i% - 1))
 
           Nbit = Nbit - 1
 
           If Nbit = 0 Then
 
              C_C$ = Mid$(BUF, ptrBuf, 1)
 
              ptrBuf = ptrBuf + 1
 
              Curr = Asc(C_C$)
 
              Nbit = 8
              
           End If
           
       Next i%
 
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2021, 09:05

обработка массива в Ексель: Застряла на пунктах 2 и 4 - ГОРЮ!!! Выручайте!
1.Записать в массив с именем Р данные, хранящиеся в ячейках С4:F9 листа Excel c именем «Эксперимент» 2.Найти среднее арифметическое...

Вычислить скалярное произведение двух векторов Х и Y размером 4. Программисты, выручайте
Необходимо, условия : - Представить описание блоков блок-схемы, как в примере выполнения задачи. - Составить блок-схему алгоритма...

Ребята прошу выручайте!
Ребята прошу нужна помощь!!!!! Не могу доделать скрипт - знаний и гугла не хватает. Есть ли кто нибудь, кто сможет помочь? во вложении сам...

Ребятки выручайте очень нужно
Разработать проект, запрашивающий дату рождения пользователя и рассчитывающий, в какой день им было прожито 5000 дней и в какой — будет...

Выручайте народ. Связь 2х Combobox
Здравствуйте, подскажите пожалуйста... как сделать так, чтобы при выборе данных в 1ом combobox менялись данные на выбор в другом? Конкретно...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru