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

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

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

> Декодирование сообщения
Нике
сообщение 15.11.2006 15:59
Сообщение #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.
Так сообщение обладает меньшей избыточностью, но как в таком случае распознавать пробелы непонятно...

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

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


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

 



- Текстовая версия 19.07.2025 3:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"