IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> помогите написать 1 програмку, замена букв в строке
director
сообщение 17.05.2007 20:47
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Буду очень благодарен, если вы хоть как-то поможете с написанием этой программы:
Зашифруйте фразу, заменив букву а на у, букву и на ю и букву е на букву я. После запроса расшифруйте фразу.
(принцип: в окне пользователя пользователь сам вводит любую фразу, далее заменяются соответствующие буквы и фраза выдается в зашифрованном виде. Далее программа спрашивает: "расшифровать фразу?", если вы отвечаете "да" то происходит обратная замена букв и вывод первоначальной фразы.) mega_chok.gif
заранее всем благодарен!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.05.2007 20:56
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Проходишь по строке, анализируя каждый символ... если это а, и или е, заменяешь
как расшифровывать - непонятно.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 17.05.2007 20:56
Сообщение #3


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


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.

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


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nikita182
сообщение 18.05.2007 1:24
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +





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(c);
 if c = 'y' then
  writeln(s1);
 readkey;
end.





вот и вся расшифровка)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 18.05.2007 5:54
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


Цитата(nikita182 @ 18.05.2007 5:24) *

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

умно smile.gif но помоему непроканает.. нужно как то запоминать какие символы в введенной строке были зашифрованы, а при расшифровке именно их и расшифровывать, а не другие.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 18.05.2007 11:09
Сообщение #6


Гость






запоминать ничего не надо, символы те же, только наоборот...
 К началу страницы 
+ Ответить 
nikita182
сообщение 18.05.2007 11:11
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


непроканает - переделаем)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2007 11:13
Сообщение #8


Гость






Цитата
символы те же, только наоборот...
Да?

"Это я, привет!" - зашифруй и дешифруй... Я хочу видеть, что ты получишь в результате...
 К началу страницы 
+ Ответить 
nikita182
сообщение 18.05.2007 12:04
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


согласен косяк, это я с просонья)
исправляюсь:




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(c);
 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.





 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2007 12:12
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
согласен косяк, это я с просонья)
исправляюсь:

А у меня она не шифрует вообще.. Может коды символов разные?

Раз уж сделала, то выложу и свой вариант:
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(c);
 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.


Сообщение отредактировано: Айра - 18.05.2007 12:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nikita182
сообщение 18.05.2007 12:15
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


ascii код точно такой, может с кодировкой чего..
я долго мучился чтоб паскаль русский понимал)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2007 12:25
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
ascii код точно такой, может с кодировкой чего..

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

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

Сообщение отредактировано: Айра - 18.05.2007 12:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nikita182
сообщение 18.05.2007 12:33
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


бляха-муха...
тогда программа, которая возвращает код символа:



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.





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



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2007 12:36
Сообщение #14


Гость






Оля,
    for j:=1 to 6 do begin
- это зачем? Ты для этого разве запоминала J, чтобы потом вводить вручную, сколько символов заменять? Лучше - так:
    for i:=1 to j do begin
      case s[ch[i]] of ...


Сообщение отредактировано: volvo - 18.05.2007 12:37
 К началу страницы 
+ Ответить 
director
сообщение 18.05.2007 12:40
Сообщение #15





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


УРА!!!!!!!!!!!!!!!!!!!!!!!!!!! good.gif
Все работает! Спасибо всем вам большое за помощь!!!!
в особенности Айре! give_rose.gif
Даже не предполагал, что столько людей откликнется мне на помощь!
Еще раз спасибо всем!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2007 12:47
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
бляха-муха...

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

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

Ой.. честно, не догадалась, что можно сделать лучше(( Сейчас исправлю, и буду учиться дальше smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
director
сообщение 18.05.2007 15:27
Сообщение #17





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


А у меня несколько вопросов по поводу программы.
Мне не совсем понятно что значат следующие фразы в программе:
ch
length
case
inc
unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2007 16:13
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
Мне не совсем понятно что значат следующие фразы в программе:

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

Сообщение отредактировано: Айра - 18.05.2007 16:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nikita182
сообщение 19.05.2007 12:18
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 60
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Цитата(Айра @ 18.05.2007 13:25) *

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


wincrt)) это не проблема..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 17.07.2025 20:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"