Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите написать 1 програмку
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
director
Буду очень благодарен, если вы хоть как-то поможете с написанием этой программы:
Зашифруйте фразу, заменив букву а на у, букву и на ю и букву е на букву я. После запроса расшифруйте фразу.
(принцип: в окне пользователя пользователь сам вводит любую фразу, далее заменяются соответствующие буквы и фраза выдается в зашифрованном виде. Далее программа спрашивает: "расшифровать фразу?", если вы отвечаете "да" то происходит обратная замена букв и вывод первоначальной фразы.) mega_chok.gif
заранее всем благодарен!
мисс_граффити
Проходишь по строке, анализируя каждый символ... если это а, и или е, заменяешь
как расшифровывать - непонятно.
Артемий
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.

а на основе расшифровку попробуй сделать сам...
nikita182



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.





вот и вся расшифровка)
samec
Цитата(nikita182 @ 18.05.2007 5:24) *

вот и вся расшифровка)

умно smile.gif но помоему непроканает.. нужно как то запоминать какие символы в введенной строке были зашифрованы, а при расшифровке именно их и расшифровывать, а не другие.
Гость
запоминать ничего не надо, символы те же, только наоборот...
nikita182
непроканает - переделаем)
volvo
Цитата
символы те же, только наоборот...
Да?

"Это я, привет!" - зашифруй и дешифруй... Я хочу видеть, что ты получишь в результате...
nikita182
согласен косяк, это я с просонья)
исправляюсь:




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.
nikita182
ascii код точно такой, может с кодировкой чего..
я долго мучился чтоб паскаль русский понимал)
Айра
Цитата
ascii код точно такой, может с кодировкой чего..

Сейчас проверила (одна программка умеет находить коды), у меня:
а = 224
е = 229
и = 232
у = 243
ю = 254
я = 255
Воть так.
Цитата
я долго мучился чтоб паскаль русский понимал)

А у меня с этим проблем не было, правда есть некоторые другие)))
nikita182
бляха-муха...
тогда программа, которая возвращает код символа:



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.





сам подставит))



volvo
Оля,
    for j:=1 to 6 do begin
- это зачем? Ты для этого разве запоминала J, чтобы потом вводить вручную, сколько символов заменять? Лучше - так:
    for i:=1 to j do begin
case s[ch[i]] of ...
director
УРА!!!!!!!!!!!!!!!!!!!!!!!!!!! good.gif
Все работает! Спасибо всем вам большое за помощь!!!!
в особенности Айре! give_rose.gif
Даже не предполагал, что столько людей откликнется мне на помощь!
Еще раз спасибо всем!
Айра
Цитата
бляха-муха...

не хорошо.. спокойно smile.gif
Цитата
тогда программа, которая возвращает код символа:

У меня все равно мои цифры получаются. Просто у нас сама кодировка может быть разная, забей на это))
Цитата
это зачем? Ты для этого разве запоминала J, чтобы потом вводить вручную, сколько символов заменять?

Ой.. честно, не догадалась, что можно сделать лучше(( Сейчас исправлю, и буду учиться дальше smile.gif
director
А у меня несколько вопросов по поводу программы.
Мне не совсем понятно что значат следующие фразы в программе:
ch
length
case
inc
unsure.gif
Айра
Цитата
Мне не совсем понятно что значат следующие фразы в программе:

ch - в своей программе я так обозвала)) массив, содержащий номера изменяемых символов.
length - строковая функция, которая вычисляет длину (количество символов) в строке. Т.е. length(s) вычислит, сколько символов в строке s.
case - это оператор выбора. Он позволяет выбрать из нескольких вариантов и для каждого можно прописать соответствующее действие. Например, в этом фрагменте:
case s[ch[i]] of  {сначала вычисляется значение s[ch[i]], а потом смотрится}
'у': s[ch[i]]:='а'; {если s[ch[i]] равно символу 'у', то выполняется одно действие}
'я': s[ch[i]]:='е'; {если s[ch[i]] равно 'я', то - другое, и т.д.}
'ю': s[ch[i]]:='и';
end;


inc - процедура, увеличивающая значение числа в скобках inc(j), по умолчанию на 1, а если написать так: inc(j,5), то, соответственно, на пять.
Если еще что непонятно, спрашивай, объясним smile.gif
nikita182
Цитата(Айра @ 18.05.2007 13:25) *

А у меня с этим проблем не было, правда есть некоторые другие)))


wincrt)) это не проблема..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.