Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача "Расшифровка"

10K
09 ноября 2006 года
ost-andrew
19 / / 24.01.2006
Сообщение представляет собой строку: S=S1+S2+S3+...Sn, состоящую из любых символов. Шифрование сообщения происходит в K фаз. На каждой фазе строка S заменяется строкой, в которой сначала располагаются символы строки S, стоящие на позициях с номерами, являющимися простыми числами(это первый блок), а затем все остальные символы(второй блок). Простое число - число, имеющее только 2 делителя: 1 и само себя, к примеру 2, 3, 5, 7 и т.д. Относительный порядок символов в каждом из двух блоков остается неизменным. Например строка S=abcdefgh на первой фазе шифруется в S=bcegadfh. Если осуществляется 2-я фаза, то S примет вид S=ceafbgdh.
Требуется написать программу, осуществляющую дешифрацию заданной строки, являющейся результатом шифрования S после K фаз.
Формат входных данных:
Сначала вводится число N (1<N<255) - длина зашифрованного сообщения, потом вводится число K (1<k<100) - кол-во фаз, затем сама строка.
Формат выходных данных:
Вывести только дешифрованную строку.
Примеры входных и выходных данных:
1)Ввод: 8 2 CEaFBGdH
Вывод: aBCdEFGH
2) Ввод: 13 1 рие,с!Пвт Вая
Вывод: Привет, Вася!

Это часть моего решения задачи. Оно не полное. Как дальше решать я не знаю...
Код:
program Ab;
uses crt;
var n: integer; {dlina stroki}
    K: integer; {kol-vo faz}
    i, j: integer; {ciklovye peremennye}
    kolp: integer; {kol-vo prostyh chisel na promezhutke}
    S: string; {stroka}
    Sr: string; {stroka posle shifrovki}
    S1: string;
    Sarr: string;

function isp(n: integer): boolean; {prostoe li chislo?}
var d, r: integer;
begin
d:=2;
repeat
r:=n mod d;
if r <> 0 then d:=d+1;
until r=0;
if d=n then isp:=True else isp:=False;
end;

function ITS(n: integer): string;
var s: string;
begin
Str(n, s);
ITS:=s;
end;

function STI(s: string): integer;
var n, o: integer;
begin
Val(s, n, o);
STI:=n;
end;

Begin
clrscr;
ReadLn(n);
ReadLn(K);
ReadLn(S);
kolp:=0;
for i:=1 to n do if Isp(i) then
begin
Sarr:=Sarr+' '+ITS(i); {zapisyvaem cherez probel prostye chisla}
kolp:=kolp+1; {schitaem ih kol-vo}
end;
Delete(Sarr, 1, 1); {udalaem probel}
for j:=i to K do
begin
S1:=Copy(S, kolp+1, n-kolp-1);
end;
{
}
ReadLn;
End.
547
10 ноября 2006 года
Hydra
488 / / 20.06.2006
Код:
program Ab;
uses crt;
var n: integer; {dlina stroki}
    K: integer; {kol-vo faz}
    i, j: integer; {ciklovye peremennye}
    kolp: integer; {kol-vo prostyh chisel na promezhutke}
    S: string; {stroka}
    Sr: string; {stroka posle shifrovki}
    S1: string;
    Sarr: string;

function isp(n: integer): boolean; {prostoe li chislo?}
var d, r: integer;
begin
d:=2;
repeat
r:=n mod d;
if r <> 0 then d:=d+1;
until r=0;
if d=n then isp:=True else isp:=False;
end;

function decode(s:string):string;
var i:integer; r:string;
begin
r:='';
for i:=1 to length(s) do r:=r+#1;
for i:=1 to length(s) do
 if isp(i) then  begin r:=s[1]; delete(s,1,1); end;
for i:=1 to length(r) do
 if r=#1 then begin r:=s[1]; delete(s,1,1); end;
decode:=r;
end;

Begin
clrscr;
{ReadLn(n);}
{ReadLn(K);} K:=2;
{ReadLn(S);} s:='CEaFBGdH';
kolp:=0;

for i:=1 to K do
 s:=decode(s);
writeln(s);

ReadLn;
End.
10K
10 ноября 2006 года
ost-andrew
19 / / 24.01.2006
Hydra, огромное спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог