Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 545

•  TDictionary Custom Sort  5 704

•  Fast Watermark Sources  5 491

•  3D Designer  8 010

•  Sik Screen Capture  5 789

•  Patch Maker  6 275

•  Айболит (remote control)  6 278

•  ListBox Drag & Drop  5 140

•  Доска для игры Реверси  94 319

•  Графические эффекты  6 460

•  Рисование по маске  5 525

•  Перетаскивание изображений  4 659

•  Canvas Drawing  5 042

•  Рисование Луны  4 771

•  Поворот изображения  4 311

•  Рисование стержней  3 036

•  Paint on Shape  2 268

•  Генератор кроссвордов  3 135

•  Головоломка Paletto  2 463

•  Теорема Монжа об окружностях  3 252

•  Пазл Numbrix  2 128

•  Заборы и коммивояжеры  2 773

•  Игра HIP  1 750

•  Игра Go (Го)  1 666

•  Симулятор лифта  1 993

•  Программа укладки плитки  1 717

•  Генератор лабиринта  2 153

•  Проверка числового ввода  1 843

•  HEX View  2 134

•  Физический маятник  1 841

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Кодирование русского текста методом сдвига




Автор: ___Nikolay
WEB-сайт: http://delphiworld.narod.ru

unit uMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls, Spin;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    mmText: TMemo;
    Label1: TLabel;
    seN: TSpinEdit;
    Label2: TLabel;
    btEncode: TButton;
    btDecode: TButton;
    procedure btEncodeClick(Sender: TObject);
  private
    { Private declarations }
    procedure Encode(bCode: boolean; n: integer); // Encode - ПРОЦЕДУРА
                                                  // bCode  - зашифровать/расшифровать
                                                  // n      - шаг смещения
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// ПРОЦЕДУРА КОДИРОВАНИЯ
procedure TForm1.Encode(bCode: boolean; n: integer);
const
  sMsgRangeErr = 'Значение шага должно быть от %d до %d!';

  // Крайние символы для кодирования
  chBigFirstLetter: char = 'А';
  chBigLastLetter: char = 'Я';

  chFirstLetter: char = 'а';
  chLastLetter: char = 'я';
var
  iMinOrd: integer; // Код символа с наименьшим кодом
  iMaxOrd: integer; // Код символа с наибольшим кодом
  i: integer; // Для фикла
  iTempOrd: integer; // Код подставляемого символа
  ch: char; // Каждый символ текста
  s: string; // Преобразуемый текст
begin
  // Проверка шага на диапазон допустимых значений
  if (n > Ord(chBigLastLetter) - Ord(chBigFirstLetter)) or (n < 1) then
  begin
    MessageDlg(Format(sMsgRangeErr, [1, Ord(chBigLastLetter) - Ord(chBigFirstLetter)]), mtError, [mbOk], 0);
    Exit;
  end;

  s := Trim(mmText.Text);
  if s <> '' then // Если есть текст
    for i := 1 to Length(s) do // Проходит каждый символ
    begin
      ch := s[i];

      // Если очередной символ нужно кодировать
      if ch in [chBigFirstLetter .. chBigLastLetter] then // Заглавные буквы
      begin
        iMinOrd := Ord(chBigFirstLetter);
        iMaxOrd := Ord(chBigLastLetter);
      end
      else
      if ch in [chFirstLetter .. chLastLetter] then // Строчные буквы
      begin
        iMinOrd := Ord(chFirstLetter);
        iMaxOrd := Ord(chLastLetter);
      end
      else // Символ кодировать не нужно
        continue;

      if bCode then // Закодировать
      begin
        iTempOrd := Ord(ch) + n; // Получаем потенциальную позицию
        if iMaxOrd - iTempOrd < 0 then // Если символ зашел за границу предельного
          ch := Chr(iMinOrd + abs(iMaxOrd - iTempOrd) - 1) // Возьмем символ с другого конца круга
        else // Если нет..
          ch := chr(iTempOrd); //..все нормально
      end
      else // Раскодировать
      begin
        iTempOrd := Ord(ch) - n; // Получаем потенциальную позицию
        if iMinOrd - iTempOrd > 0 then // Если символ зашел за границу предельного
          ch := Chr(iMaxOrd - (iMinOrd - iTempOrd - 1)) // Возьмем символ с другого конца круга
        else // Если нет..
          ch := chr(iTempOrd); //..все нормально
      end;

      s[i] := ch;
    end;
  mmText.Text := s;
end;

procedure TForm1.btEncodeClick(Sender: TObject);
begin
  Encode(boolean((Sender as TButton).Tag), seN.Value);
end;

end.
Скачать весь проект




Похожие по теме исходники

Оптимальное кодирование информации

Сортировка методом Хоара




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте