Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на кодирование

Автор: In 29.12.2003 15:20

Помогите решить задачу! Валюсь на сессии..sad.gif
Нужно закодировать вводимую с клавиатуры строку. Символ меняется на последовательность из 4 знаков (букв или цифр). Если символ стоит между 2-мя гласными или 2-мя согласными, то он меняется на иную последовательность, например, из 3 знаков (букв или цифр). И так вся строка!!
Помогите, особые затруднения вызывает часть замены исходного символа на код (этот цикл никак не могу сделать)..sad.gif(

Автор: In 29.12.2003 15:43

вот мои попыткиsmile.gif..правда они не закончены.

Код


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.