IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Декодирование сообщения
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Женский

Репутация: -  0  +


Пожалуйста, пожалуйста, помогите с решением...очень нужно, очень срочно..

Дан следующий алфавит и соответствующие буквам коды: пробел=000, а1=100, а2=1100, а3=10100, а4=11100,
а5=100100, а6=110100, а7=101100,а8=111100.
Нужно написать программу и блок-схему, декодирующую сообщение, т.е. мы вводим код - программа выдает буквы.
00 - признак конца символа
00000 - пробел.

Вообще, нужно декодировать сообщение со следующими кодами, но мне кажется, это несколько усложняет задачу??
пробел=000, а1=100, а2=1000, а3=1100, а4=10000, а5=10100, а6=11000, а7=11100, а8=101000.
Так сообщение обладает меньшей избыточностью, но как в таком случае распознавать пробелы непонятно...

Блин, да мне хоть в каком виде....

Сообщение отредактировано: Нике -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот это кто-нибудь объяснить может:

Цитата
00 - признак конца символа


Цитата
а5=100100


blink.gif

Выходит a5 = a1a1 ? Тогда различить это невозможно.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(klem4 @ 17.11.2006 15:38) *

Выходит a5 = a1a1 ? Тогда различить это невозможно.
Да, Клем, смотри второй вариант, в конце первого сообщения. Я тоже на это напоролся сначала (см. мой первый мессадж). Вообще, за такой способ излагать условие, Нике следовало бы примерно наказать, а не решать ей задачи..

Итак, вот мой код. Только что сообразил, что он, скорее всего не сможет справиться с закодированным текстом, начинающемся с пробела (то есть 000). С остальными вроде работает.. Тестировалось в FPC при включенной совсместимости с TP.
Программа читает входной поток из файла nike.dat (ниже нсть пример его содержимого и прога, генерящая такие файлы).
{ for Nike }
{ Just another weird decoder }

const
N=8; { number of characters }
Abc:array[1..N]of byte=(1,2,3,4,5,6,7,10); { alphabet }

function Symb(x:byte):integer; { get a symbol by nomber }
var
i:integer;
begin
i:=1;
while (i<=N)and(Abc[i]<>x) do Inc(i);
Symb:=i
end;

function Legal(x:byte):boolean; { check if a combination is a symbol }
var
i:integer;
begin
i:=1;
while (i<=N)and(Abc[i]<>x) do Inc(i);
Legal:=i<=N
end;

var
F:file of byte;
i,z,p,Sp:integer;
x,b:byte;
Ok,done:boolean;
Tx:string;

begin
Assign(f,'nike.dat'); { input file }
Reset(F);
z:=0; { zeros counter }
x:=0; { a binary combination read from file }
p:=0; { input character counter }
Tx:=''; { output text }
Ok:=true; { error (reversed) }
while Ok and not EoF(F) do begin
Read(F,b); { read a symbol }
Inc(p); { increase input counter }
Sp:=0; { spaces counter }
repeat
done:=true; { if not Done, then repeat }
case b-48 of { b-48 is 0 or 1 }
0: begin
Inc(z);
if EoF(F) then begin
Done:=false;
b:=49
end
end;
1: case z of
0,1: begin
x:=x shl (z+1) +1;
z:=0
end;
2: if Legal(x) then begin
Tx:=Tx+Chr(Symb(x)+48);
for i:=1 to Sp do Tx:=Tx+' ';
x:=1;
z:=0
end
else Ok:=false;
3,4: begin
x:=x shl 1;
Dec(z);
done:=false
end;
else begin
Inc(Sp);
Dec(z,3);
done:=false
end
end
end
until done
end;
if Ok then WriteLn(Tx)
else WriteLn('Input error at pos ',p);
ReadLn
end.

Вот пример файла nike.dat :

10010001100000100001010000011000000100010000000000111001100010100000101000000000
0001000

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

А это прога, которая генерит входные файлы по строке, задаваемой константой s :
const
s='123 45 6 24 765 8 2';

const
N=8;
Font:array[1..N]of String=
('1','10','11','100','101','110','111','1010');

var
i:integer;
F:text;
t:char;

begin
Assign(F,'Nike.dat');
ReWrite(F);
for i:=1 to Length(s) do begin
t:=s[i];
if t=' ' then Write(F,'000') else Write(F,Font[Ord(t)-48],'00');
end;
Close(F)
end.

Вот, пожалуй, и все пока.
smile.gif
Вопросы?..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Нике   Декодирование сообщения   15.11.2006 19:59
lapp   Не совсем ясно. Коды разной длины.. ? Ты ничего н…   16.11.2006 18:31
lapp   Извиняюсь, кажется разобрался.. Да, второе услов…   17.11.2006 12:05
Нике   Интерес? Конечно есть!! Мне в понедельник …   17.11.2006 16:17
Malice   Я не понял суть проблемы :( Учитывая, что у тебя к…   17.11.2006 16:57
lapp   Задача, конечно, странная.. Хотел бы я посмотреть…   17.11.2006 18:28
klem4   Вот это кто-нибудь объяснить может: :blink:…   17.11.2006 18:38
lapp   Выходит a5 = a1a1 ? Тогда различить это невозможн…   17.11.2006 19:11
volvo   klem4, a5 = 10100, а не 100100... Все ясно, я …   17.11.2006 18:53
klem4   Уфффф я вот тут тоже насочинял)))))))) uses crt; …   17.11.2006 20:44
Нике   lapp, klem4, спасибо вам огромное!! :) …   18.11.2006 21:34
lapp   А блок-схема получится огромная.. Согласен, немал…   19.11.2006 18:06
Нике   Разобралась в программе, написанной klem4. :) Пр…   19.11.2006 22:33
klem4   Это я для удобства сделал чтобы не придумывать т…   19.11.2006 23:04
FreeMan   Чтото типа этого должно сработать. провереть не мо…   20.11.2006 14:29
lapp   Чтото типа этого должно сработать. провереть не м…   20.11.2006 15:54
klem4   FreeMan, не правильно твоя процедура работает ... …   20.11.2006 16:03


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.04.2024 8:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name