Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на массив и кодировку
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Лекса
Срочно нужно написать программу. Условие:

"Для заданного массива (можно взять любой файл), рассматривая его как двоичное кодирование. вычислить коэффициенты экономии или перерасхода памяти (отношения использованных объёмов при разных способах хранения) при хранении его в виде длин цепочек с полубайтовым, байтовым и двухбайтовым представлением длин цепочек."

Может у кого есть готовая или кто нибудь по быстрому накатает. Заранее всем спасибо.
Malice
По быстрому никто катать не будет. Что-то уже сделал ? Показывай. В принципе все просто, осталось уточнить формат кодирования (мне кажется условие неоднозначно). Я вижу 2 возможных варианта (приведу на примере байта):
1. первый байт - значение, второй количество. значение=[0,1];
2. только количество. Считаем, что 1-цы и нули чередуются. Тогда пусть сперва всегда 0, дальше по очереди (если нет, то количество=0, тоже самое при недостатке разрядов в количестве).
Лекса
Возможно. Только мне кажеться что начинать нужно не с нуля, а с единици. И уже их количество считать.
Malice
Цитата(Лекса @ 18.04.2006 17:21) *
Возможно. Только мне кажеться что начинать нужно не с нуля, а с единици. И уже их количество считать.

Не понял, что возможно, и какая разница с чего начинать. Вот набросок второго варианта:
uses crt;
const max:array [0..2] of word =($f,$ff,$ffff);
var q:byte;
f:file of byte;
j,b,i,c:byte;
l,ct:longint;
begin
assign (f,'c:\test.dat');
for j:=0 to 2 do begin
l:=0; reset (f); c:=0; ct:=0;
repeat
read(f,b); q:=128;
for i:=7 downto 0 do begin
if (b and q) shr i=c then begin
inc (ct);
if ct>max[j] then begin
inc(l,2); ct:=1; end;
end else begin c:=1-c; ct:=1; inc(l); end;
q:=q shr 1;
end;
until eof(f);
inc(l);
writeln (max[j],'=',l*((1 shl j)/2):0:1, ' bytes');
end;
close(f);
readln;
end.
Лекса
Спасибо, пашет как лошадь. Глотает даже музыку и анимацию.
Я только хотел уточнить. Он при выводе пишет:
15=*.*
255=*.*
56535=*.*

15 - это длинна строки в полбайта, 255 - в байт, а 65535 - в два байта?
Malice
Цитата(Лекса @ 19.04.2006 18:34) *

Спасибо, пашет как лошадь. Глотает даже музыку и анимацию.

Пожалуйста. smile.gif Разобрался хоть ?
Цитата

15 - это длинна строки в полбайта, 255 - в байт, а 65535 - в два байта?

Да, именно так.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.