Автор: In 29.12.2003 15:20
Помогите решить задачу! Валюсь на сессии..
Нужно закодировать вводимую с клавиатуры строку. Символ меняется на последовательность из 4 знаков (букв или цифр). Если символ стоит между 2-мя гласными или 2-мя согласными, то он меняется на иную последовательность, например, из 3 знаков (букв или цифр). И так вся строка!!
Помогите, особые затруднения вызывает часть замены исходного символа на код (этот цикл никак не могу сделать)..(
Автор: In 29.12.2003 15:43
вот мои попытки..правда они не закончены.
Код
program academy3;
const
A:set of char=['B'..'D', 'F'..'H','J'..'N','P'..'T',
'V'..'X','Z','z'];
B:set of char=['A','E','I','O','U','Y'];
n=2;
m=13;
type
mas=array[1..n,1..m] of string[4];
var
text,result:string; {Исходная и конечная строка}
q:integer; {Элементы строки}
s,s1:mas;
i,j,i1,j1:integer;
begin
Writeln ('Введите 2 цифры от 01 до 26 и 2 буквы ');
begin
for i:=1 to n do
for j:=1 to m do
Readln(s[i,j]);
end;
Writeln ('Введите 2 цифры от 26 до 54 и 2 буквы');
begin
for i1:=1 to n do
for j1:=1 to m do
Readln(s1[i1,j1]);
end;
Writeln ('Введите строку не более 266 символов на английском заглавыми буквами');
Readln(text);
for q:=1 to 255 do
begin
Read(text[2]);{читаем второй символ строки}
if (text[q] in A) and (text[q+2] in B) then
text:=text+s[1;1]
begin
end;
end;
end.
Автор: trminator 29.12.2003 16:20
Код
program coding;
var s : string;
pas1, pas2 : string;
const sogl : set of char = ['q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
glasn: set of char = ['e','y','u','i','o','a'];
procedure code(var s:string; const pas1, pas2: string);
var sn : string;
i : integer;
begin
sn:=pas1+s[1];
for i:=2 to length(s)-1 do
begin
if ((s[i-1] in glasn)and(s[i+1] in glasn))
or
((s[i-1] in sogl)and(s[i+1] in sogl))
then sn:=sn+pas2+s[i]
else sn:=sn+pas1+s[i]
end;
sn:=sn+pas1+s[length(s)];
s:=sn
end;
procedure decode(var s:string; const pas1, pas2: string);
var i : integer;
sn : string;
begin i:=1; sn:='';
while i<=length(s) do begin
if s[i] = pas1[1] then begin
inc(i, length(pas1));
sn:=sn+s[i]
end else begin
inc(i, length(pas2));
sn:=sn+s[i]
end;
inc(i)
end;
s:=sn
end;
begin
Write('Ввелите строку для кодирования ');ReadLn(s);
Write('Введите первый пароль ');ReadLn(pas1);
Write('Введите второй пароль ');ReadLn(pas2);
code(s, pas1, pas2);
Write('Закодировали: ');writeLn(s);
decode(s, pas1, pas2);
Write('Раскодировали: ');writeLn(s)
end.