Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.03.2025
Сообщений: 29

Упаковка чисел

30.10.2025, 10:39. Показов 867. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При передаче данных по сети важно их эффективно кодировать, чтобы лучше использовать пропускную способность канала. Мы опишем процедуру декодирования чисел при одном эффективном способе их кодирования. Этот способ использует переменную длину кодов, для обеспечения единственности декодирования ни один код числа не является префиксом кода другого числа. Вы же должны реализовать процедуру оптимального кодирования.

Метод применим для кодирования целых чисел от −263 до 263−1 (тип long в Java, int64 в Дельфи, __int64 в C++). Упакованное число занимает от 1 до 9 байт, в зависимости от своего значения.

Декодирование происходит следующим образом. Сначала рассматривается первый байт числа. Просматривая его биты от старшего к младшему, найдем первый ноль. Пусть q – количество просмотренных при этом единиц (если первый байт равен 0xff, то q=8). Число q означает, сколько следующих байтов относятся к декодируемому числу. Если q=8, то эти байты – стандартная восьмибайтная запись числа, причем старшие байты идут сначала.

В противном случае выполним следующее. Если q+2-й бит первого байта равен нулю (биты нумеруются с единицы, сначала идет старший бит, если q=7, то рассматривается старший бит второго байта) то старшие единицы первого байта заменяются на нули, и число дополняется нулевыми байтами до размера 8 байтов. Иначе (если соответствующий бит равен единице) q+1-й бит (который всегда равен нулю) заменяется на единицу, число же дополняется слева байтами 0xff до восьми байтов. В обоих случаях получается стандартная восьмибайтная запись числа, причем старшие байты идут сначала.

Вам заданы несколько целых чисел, закодируйте каждое из них таким образом, чтобы длина закодированного числа была минимальной возможной, и оно декодировалось в исходное число.



Первая строка содержит n – количество тестовых примеров (1 ≤ n ≤ 104). Следующие n строк содержат по одному числу в интервале между -263 и 263-1 включительно.

выведите n строк, каждая строка должна содержать закодированную версию соответствующего числа, записанную как последовательность шестнадцатеричных цифр, старшие байты должны идти сначала. Используйте строчные буквы английского алфавита.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2025, 10:39
Ответы с готовыми решениями:

Упаковка в Unit'ы подпроцедур
Есть программа, которую надо упаковать в unit. Но в программе в процедурах есть подпроцедуры и их...

Распаковка и упаковка файлов
нужно написать прогу для распаковки и упаковки текстового документа на Паскале АБС

количество целых чисел среди чисел заданого множества чисел
здравствуйте дорогие форумчане:):):):) пожалуйста помогите решить задачку *напишите программу,...

1
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,420
06.11.2025, 20:28
Лучший ответ Сообщение было отмечено ohio как решение

Решение

Для сдачи роботу на проверочный сайт можно так:
Pascal
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
##
  var d := '0123456789abcdef'.ToCharArray;
  var n: array of int64;
  SetLength(n, ReadlnInteger);
  for var i := low(n) to high(n) do readln(n[i]);
  for var i := low(n) to high(n) do
    begin
      var t: int64;
      var b, m, p: byte;
      var w: string := '';
      if n[i] < 0 then t := not n[i] else t := n[i];
      case t of
        $0..$3f: (b, m, p) := ($0, $7f, $0);
        $40..$1fff: (b, m, p) := ($1, $3f, $80);
        $2000..$fffff: (b, m, p) := ($2, $1f, $c0);
        $100000..$7ffffff: (b, m, p) := ($3, $f, $e0);
        $8000000..$3ffffffff: (b, m, p) := ($4, $7, $f0);
        $400000000..$1ffffffffff: (b, m, p) := ($5, $3, $f8);
        $20000000000..$ffffffffffff: (b, m, p) := ($6, $1, $fc);
        $1000000000000..$7fffffffffffff: (b, m, p) := ($7, $0, $fe)
        else (b, m, p) := ($8, $0, $ff)
      end;
      for var j := 1 to b do 
        begin
          w := d[n[i] and $f0 shr 4] + d[n[i] and $f] + w;
          n[i] := n[i] shr 8
        end;
      n[i] := n[i] and m or p;
      w := d[n[i] and $f0 shr 4] + d[n[i] and $f] + w;
      writeln(w)
    end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2025, 20:28
Помогаю со студенческими работами здесь

Из множества целых чисел 1..20 выделить: множество чисел, делящихся на 6 без остатка; множество чисел делящихся без остатка на 2 или на 3. Полученные
Из множества целых чисел 1..20 выделить: множество чисел, делящихся на 6 без остатка; множество...

Дана последовательность натуралных чисел a1,а2,аn. создать массив из четных чисел этой последовательность. если таких чисел нет то вывести сообщение о
Дана последовательность натуралных чисел a1,а2,аn. создать массив из четных чисел этой...

Из множества целых чисел получить множество чисел, являющихся квадратами четных чисел
Из множества целых чисел получить множество чисел, являющихся квадратами четных чисел и вывести их...

Найти суммы двух случайных чисел. a) целых чисел из диапазона от 50 до 100 b) вещественных чисел от 3х с половиной до 8
помогите решить Найти суммы двух случайных чисел. a) целых чисел из диапазона от 50 до 100 b)...

Задано N количество чисел последовательности и последовательность из N чисел. Найти и вывести произведение этих чисел и первое положительно число
Задано N количество чисел последовательности и последовательность из N чисел. Найти и вывести...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru