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

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

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

> Смесь из литер., алгоритм шифрования (перестановка)
кзои
сообщение 7.12.2005 16:29
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Евгений

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


Приветствую всех. Я вообще новичок в програмировании и вот в ВУЗЕ мне предложили одну задачу, я парюсь и не могу зделать самое главное. В двух словах дана таблица (кодировочная). Приводить её не буду, потому как получится, что я озадачиваю вас писать эту программу. Скажу только, что символы кодируются двумя цифрами


И далее идёт алгоритм смеси.
1)смесь разбивается на группы по N=<число слов в тексте>
2)выделяются 1-е, 2-е и т.д. символы из каждой группы
3)подряд идущие пробелы и знаки препинания объединяются в один символ


Выглядит всё это примерно так.

Исходный текст
ПРИМЕР СОСТАВЛЕНИЯ СМЕСИ.

Результат шифрования
ПССРОМИСЕМТСЕАИРВ._Л._Е._Н._И._Я._ _.

Результат дешифровки (N=3)
1) ПСС|РОМ|ИСЕ|МТС|ЕАИ|РВ.|_Л.|_Е.|_Н.|_И.|_Я.|_ _.
2) ПРИМЕР_ _ _ _ _
СОСТАВЛЕНИЯ_
СМЕСИ…….
3) ПРИМЕР_СОСТАВЛЕНИЯ_СМЕСИ.

=================================================

А теперь о самой проблемме, я не могу реализовать сам этот алгоритм (слишком мало опыта), в принципе вся эта таблица уже находится в программе. Подскажите пожалуйста, как такое реализовать при кодировании. Заранее огромное спасибо, извините за лемерство.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 8.12.2005 16:20
Сообщение #2


Гость






Проверяй:
const
max_word = 255;
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
end;

function encode(s: string; var count: byte): string;
var
words: array[1 .. max_word] of wrd_info;
max, i, j, curr_len: byte;

encoded: string;
begin

count := 0; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;

max := 0;
for i := 1 to count do
if max < words[i].len then max := words[i].len;

encoded := '';
for j := 1 to max + 1 do
for i := 1 to count do begin
if j <= words[i].len then encoded := encoded + s[words[i].start + j - 1]
else encoded := encoded + s[words[i].start + words[i].len];
end;

encode := encoded;
end;

function decode(s: string; n: byte): string;
var
decoded: string;
i, j: integer;
begin
decoded := '';
for i := 1 to n do begin

j := i;
while j <= length(s) do begin
decoded := decoded + s[j];
inc(j, n)
end;

end;

i := 2;
while i <= length(decoded) do begin
if decoded[pred(i)] = decoded[i] then
delete(decoded, i, 1)
else inc(i)
end;

decode := decoded;
end;

const
table: array['1' .. '6', '1' .. '8'] of char =
(
('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж'),
('з', 'и', 'й', 'к', 'л', 'м', 'н', 'о'),
('п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц'),
('ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю'),
('я', '1', '2', '3', '4', '5', '6', '7'),
('8', '9', '0', '.', ',', '!', '?', '-')
);

function get_key(ch: char): string;
var i, j: char;
begin
get_key := ' ';
for i := '1' to '6' do
for j := '1' to '8' do
if table[i, j] = ch then begin
get_key := i + j; exit
end;
end;

function s_deshif(s: string): string;
var
rs: string;
i: integer;
begin
rs := '';

i := 1;
while i <= length(s) do begin
if s[i] = ' ' then begin
rs := rs + ' '; inc(i)
end
else begin
rs := rs + table[s[i], s[i+1]]; inc(i, 2)
end;
end;
s_deshif := rs;
end;

procedure encode_file(s_in, s_out: string);

function s_shif(s: string; n: byte): string;
var
rs: string;
i: integer;
begin
rs := '';
for i := 1 to length(s) do
rs := rs + get_key(s[i]);
rs := chr(n) + rs;
s_shif := rs
end;

var
f_in, f_out: text;
s, was_encoded: string;
n: byte;
begin
assign(f_in, s_in); reset(f_in);
assign(f_out, s_out); rewrite(f_out);
while not seekeof(f_in) do begin
readln(f_in, s);
was_encoded := encode(s, n);
writeln(f_out, s_shif(was_encoded, n))
end;
close(f_out);
close(f_in);
end;

procedure decode_file(s_in, s_out: string);
var
f_in, f_out: text;
s: string;
n: byte;
begin
assign(f_in, s_in); reset(f_in);
assign(f_out, s_out); rewrite(f_out);
while not seekeof(f_in) do begin
readln(f_in, s);
n := byte(s[1]); delete(s, 1, 1);
s := s_deshif(s);
writeln(f_out, decode(s, n));
end;
close(f_in);
close(f_out);
end;


begin
encode_file('before.txt', 'after.txt');
decode_file('after.txt', 'restor.txt');
end.


исходный текст - в "before.txt", зашифрованный - в "after.txt", восстановленный - в "restor.txt" ...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
кзои   Смесь из литер.   7.12.2005 16:29
volvo   кзои, я не понял, ты закодировать это не можешь, и...   7.12.2005 16:49
кзои   Мне нужно закодировать и раскодировать файл. А про...   7.12.2005 17:12
volvo   кзои, вот тебе пример реализации самого шифрования...   7.12.2005 20:26
кзои   Знаете, чувствую не решить мне проблемму. Вот в фа...   8.12.2005 11:56
volvo   кзои, в приведенной тобой программе я не разбиралс...   8.12.2005 13:43
кзои   Сначала производится смесь, а потом кодирование. К...   8.12.2005 14:19
volvo   Повторить вопрос?   8.12.2005 14:21
кзои   Получается, что нигде. Сначала всё смешивается, по...   8.12.2005 14:54
volvo   Проверяй: const max_word = 255; delimiter = [#...   8.12.2005 16:20
кзои   Вот, что получилось Текст файла before.txt: Всё, ...   8.12.2005 17:54
volvo   кзои, а в какой кодировке before.txt? А символы в...   8.12.2005 19:10
кзои   Кодировка была DOS, символы большие. Ну в общем сп...   8.12.2005 20:09
кзои   Извините за назойливость :unsure: не могли бы В ...   9.12.2005 19:19


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

 



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