Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

простая замена


ksenia ©   (2006-05-31 14:25:00) 

Всем здрасте!
Господа, посмотрите пожалуйста.....не получается....в чем ошибка?
Хочу зашивровать слово....методом шифра простой замены. Метод основан на замене каждой буквы сообщения на другую букву того же алфавита, путем смещения от исходной буквы на 3 буквы.

const alfpor: array [1..5,1..8] of string=(('A','B','C','D','E','F','G','H'),
                                        ('I','J','K','L','M','N','O','P'),
                                        ('Q','R','S','T','U','V','W','X'),
                                        ('Y','Z','0','1','2','3','4','5'),
                                        ('6','7','8','9','a','b','c','d'));

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var str,str1:String;
   ks,i,j,a,b:integer;
begin
 str:=Edit1.Text;
 ks:=Length(str);
 Edit1.Text:=IntToStr(ks);
 for i:=1 to ks do
    begin
      if str[i]=alfpor[a][b]then
      begin
      str1:=alfpor[a][b];
      alfpor[a][b]:=alfpor[a+3][b+3];
      alfpor[a+3][b+3]:=str1;
      Memo1.Lines.Add(str1);
      end;
    end;
end;


ksenia   (2006-05-31 15:28:00) [1]

а как мне ограничить кол-во символов..., т.е., например, я не хочу чтобы у меня буквы ABC заменялись на №%:?


ksenia   (2006-05-31 15:24:00) [2]

...Понятно....


Kolan   (2006-05-31 15:19:00) [3]


>
> А расскажи еще ....зачем мы присваиваем  пробел, result
> := '';
> для чего он нужен?
>

Это не пробел, а пустая строка. Можно сказать, что ты очищаешь строку.
Дело в том, что ты всё время добавляешь к Result что-то:
result := result + Chr(Ord(st[i]) + 3);

Представь что там был мусор, например: "аывавы23к2ктаЕ;№%:Ка34"
Если ты не сделаешь
result := '';,
то будешь прибавлять символы к мусору получится неверно.
А так перед началом выполнения -   result := result + Chr(Ord(st[i]) + 3);ты всё очишаешь..

Аналогия - расчет суммы. Перед циклом её(сумму) всегда обнуляют...


ksenia   (2006-05-31 15:07:00) [4]

Спасибо тебе большое за пример, он работает...и за объяснение...

А расскажи еще ....зачем мы присваиваем  пробел, result := '';
для чего он нужен?


Laymer   (2006-05-31 14:59:00) [5]

Chr и Ord две функции
Chr преводит из числа в символ.
Ord наоборот, ты получаеш код символа.


ksenia   (2006-05-31 14:52:00) [6]


> А твоя прога работать и не будет, если это весь кусочек
> кода. Чтоб найти букву в двумерном масиве тебе еще придется
> вводить два массива!!!


Объясни, пож-та,  подробней....как это сделать?

что значат Chr, Ord?


Laymer   (2006-05-31 14:46:00) [7]


> ksenia ©

А твоя прога работать и не будет, если это весь кусочек кода. Чтоб найти букву в двумерном масиве тебе еще придется вводить два массива!!!


Laymer   (2006-05-31 14:41:00) [8]

А если еще проивить фантазию то можно четные буквы менять на +32 а не четные на -32 или еще как - нить


Laymer   (2006-05-31 14:40:00) [9]

Почемубы не изменять просто код буквы

var str: string;

function StrMove(st: string): string;
var i: integer;
begin
 result := '';
 for i := 1 to Length(st) do
   result := result + Chr(Ord(st[i]) + 3);
end;
...

str := StrMove(str);


Наверх

Титульная страница Поиск, карта сайта Написать письмо