Буду очень благодарен, если вы хоть как-то поможете с написанием этой программы:
Зашифруйте фразу, заменив букву а на у, букву и на ю и букву е на букву я. После запроса расшифруйте фразу.
(принцип: в окне пользователя пользователь сам вводит любую фразу, далее заменяются соответствующие буквы и фраза выдается в зашифрованном виде. Далее программа спрашивает: "расшифровать фразу?", если вы отвечаете "да" то происходит обратная замена букв и вывод первоначальной фразы.)
заранее всем благодарен!
Проходишь по строке, анализируя каждый символ... если это а, и или е, заменяешь
как расшифровывать - непонятно.
var
s: string;
i: integer;
begin
readln(s);
for i:=1 to length(s) do begin
case s[i] of
'à': s[i]:='ó';
'è': s[i]:='þ';
'å': s[i]:='ÿ';
end;
end;
writeln(s);
readln
end.
uses crt;
var
i : integer;
s,s1 : string;
c : char;
begin
clrscr;
writeln ('вводи');
readln (s);
s1 := s;
for i := 1 to length(s) do begin
if ord(s[i]) = 160 then
s[i] := chr(227);
if ord(s[i]) = 168 then
s[i] := chr(238);
if ord(s[i]) = 165 then
s[i] := chr(239);
end;
writeln(s);
writeln;
writeln('расшифровать? y/n');
readln©;
if c = 'y' then
writeln(s1);
readkey;
end.
запоминать ничего не надо, символы те же, только наоборот...
непроканает - переделаем)
согласен косяк, это я с просонья)
исправляюсь:
uses crt;
var
i,j,x : integer;
s,s1,s2 : string;
c : char;
begin
clrscr;
writeln ('вводи');
readln (s);
s1 := '';
for i := 1 to length(s) do begin
if ord(s[i]) = 160 then begin
s[i] := chr(227);
str (i, s2);
s1 := s1 + s2;
end;
if ord(s[i]) = 168 then begin
s[i] := chr(238);
str (i, s2);
s1 := s1 + s2;
end;
if ord(s[i]) = 165 then begin
s[i] := chr(239);
str (i, s2);
s1 := s1 + s2;
end;
end;
writeln(s);
writeln;
writeln('расшифровать? y/n');
readln©;
if c = 'y' then
for i := 1 to length(s1) do begin
val (s1[i], j, x);
if ord(s[j]) = 227 then
s[j] := chr(160);
if ord(s[j]) = 238 then
s[j] := chr(168);
if ord(s[j]) = 239 then
s[j] := chr(165);
end;
writeln(s);
readkey;
end.
uses wincrt;
var
ch: array[1..50] of integer; {здесь храним номера измененных символов}
s,c: string;
i,j: integer;
begin
j:=1;
writeln ('введите строку');
readln(s);
for i:=1 to length(s) do
begin
case s[i] of
'и': begin
s[i]:='ю';
ch[j]:=i;
inc(j);
end;
'е': begin
s[i]:='я';
ch[j]:=i;
inc(j);
end;
'а': begin
s[i]:='y';
ch[j]:=i;
inc(j);
end;
end;
end;
writeln('Зашифровано: ',s,'');
writeln;
writeln('расшифровать? y/n');
readln©;
if c='y' then
begin
for i:=1 to j do
begin
case s[ch[i]] of {расшифровываем только символы с сохраненными номерами}
'у': s[ch[i]]:='а';
'я': s[ch[i]]:='е';
'ю': s[ch[i]]:='и';
end;
end;
writeln('Расшифровано: ',s,'');
end;
readln
end.
ascii код точно такой, может с кодировкой чего..
я долго мучился чтоб паскаль русский понимал)
бляха-муха...
тогда программа, которая возвращает код символа:
uses crt;
var
simvol : char;
flag : boolean;
i : integer;
procedure vozvrat;
begin
repeat
clrscr;
writeln('vvodi...esc - vixod!');
simvol:=readkey;
clrscr;
writeln('vvel:',simvol,' kod:',ord(simvol));
readkey;
until ord(simvol) = 27;
readkey;
end;
begin
vozvrat;
end.
Оля,
for j:=1 to 6 do begin- это зачем? Ты для этого разве запоминала J, чтобы потом вводить вручную, сколько символов заменять? Лучше - так:
for i:=1 to j do begin
case s[ch[i]] of ...
УРА!!!!!!!!!!!!!!!!!!!!!!!!!!!
Все работает! Спасибо всем вам большое за помощь!!!!
в особенности Айре!
Даже не предполагал, что столько людей откликнется мне на помощь!
Еще раз спасибо всем!
А у меня несколько вопросов по поводу программы.
Мне не совсем понятно что значат следующие фразы в программе:
ch
length
case
inc
case s[ch[i]] of {сначала вычисляется значение s[ch[i]], а потом смотрится}
'у': s[ch[i]]:='а'; {если s[ch[i]] равно символу 'у', то выполняется одно действие}
'я': s[ch[i]]:='е'; {если s[ch[i]] равно 'я', то - другое, и т.д.}
'ю': s[ch[i]]:='и';
end;