Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2008, 19:26   #1
epica
Новичок
Джуниор
 
Регистрация: 08.03.2008
Сообщений: 1
По умолчанию Зашифровать файл, выполнив циклическую замену каждой русской буквы

Привет! Очень нужна ваша помощь по этим задачам!!! я никак не пойму как их сделать!!!!1
1. Дана строка К, состоящая из 10 цифр, и файл с русским текстом. Зашифровать файл, выполнив циклическую замену каждой русской буквы, стоящей на і-й позиции строки, на букву того же регистра, расположенную в алфавите на K[i]-м месте после шифруемой буквы (символы строки К также перебираются циклически: для i=11 снова используется смещение K[1] и т.д.) Букву ё в алфавите не учитывать, знаки припинания и пробелы не изменять.

2. Заданы N2 {1,2,...,N2} (N>2). Составить алгоритм, который расположит эти числа в N групп так, что одновременно будут выполняться следующие условия:
1. Каждая группа содержит чисел
2. Каждое число принадлежит только одной группе
3. Суммы чисел во всех группах одинаковы

3.Одинокий король долго бродил по бесконечной шахматной доске. Известна последовательность из n его ходов (вверх, вниз, влево, вправо, вверх-влево и т.п.) Составить алгоритм, определяющий, побывал ли король дважды на одном и том же поле.
epica вне форума Ответить с цитированием
Старый 06.11.2008, 19:00   #2
Necro
Пользователь
 
Аватар для Necro
 
Регистрация: 27.02.2007
Сообщений: 22
По умолчанию

Посмотрел первую задачку про шифр Цезаря (паскаля нету, сделал на дельфе 7)
из переменных и констант:
const
rus: array [1..32] of char = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';
rus_up: array[1..32] of char = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';

k:string[10]; - та самая строка k с числами для сдвигов, задается юзверем

пара корявеньких функций:
Код:
function crypt(var a:string):string;
var ii,jj,kk:integer;
begin
   try
   kk:=1;
   s1:='';
  for ii:=1 to length(a) do
         begin
        /// inc(kk);
         if kk=11 then kk:=1;
      for jj:=1 to 32 do
          if a[ii]=rus[jj] then
                  begin
                    if (jj+StrToInt(k[kk]))>32 then s1:=s1+rus[jj+StrToInt(k[kk])-32]
                       else s1:=s1+rus[jj+StrToInt(k[kk])];
                       inc(kk);
                       break;
                  end
          else
            begin
              if a[ii]=rus_up[jj] then
                begin
                  if (jj+StrToInt(k[kk]))>32 then s1:=s1+rus_up[jj+StrToInt(k[kk])-32]
                     else s1:=s1+rus_up[jj+StrToInt(k[kk])];
                     inc(kk);
                     break;
                end
              else
              begin
                if jj=32 then s1:=s1+a[ii];
                continue;
              end;
            end;

      end;
  result:=s1
   except showMessage('Crypt Error!');
   end;///of try

end;

function encrypt(var a:string):string;
var ii,jj,kk:integer;
begin
   try
   kk:=1;
   s1:='';
  for ii:=1 to length(a) do
         begin
         ///inc(kk);
         if kk=11 then kk:=1;
      for jj:=1 to 32 do
          if a[ii]=rus[jj] then
                  begin
                    if (jj-StrToInt(k[kk]))<1 then s1:=s1+rus[jj-StrToInt(k[kk])+32]
                       else s1:=s1+rus[jj-StrToInt(k[kk])];
                       inc(kk);
                       break;
                  end
          else
            begin
              if a[ii]=rus_up[jj] then
                begin
                  if (jj-StrToInt(k[kk]))<1 then s1:=s1+rus_up[jj-StrToInt(k[kk])+32]
                     else s1:=s1+rus_up[jj-StrToInt(k[kk])];
                      inc(kk);
                      break;
                end
              else
              begin
                if jj=32 then s1:=s1+a[ii];
                continue;
              end;
            end;

      end;
  result:=s1
   except showMessage('Crypt Error!');
   end;///of try

end ;
с ними одна проблема:
дешифрует текст первой задачи так:
Цитата:
1. Дана строка К, состоящая из 10 цифр, и файл с русским текстом. Зашифровать файл, выполнив циклическую замену каждой русской буквы, стоящей на і-й позиции строки, на букву того же
регистра, расположенную в алфавите на K[i]-м месте после шифруемой буквы (символы строки К также перебираются циклически: для i=11
снова используется смещение K[1] и т.д.) Букву ё в алфавите не учитывать, знаки уфйумзъзвг и пробелы не изменять.
хз почему это слово не нравится, не понял еще
Necro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа распознавания русской речи - Комбат denis47 Помощь студентам 10 25.06.2016 22:39
Как зашифровать EXE файл? AngelOfDeath Безопасность, Шифрование 1 09.04.2008 19:56
Как зашифровать папку UnD)eaD)Snake Общие вопросы Delphi 6 15.08.2007 17:14
Как произвести замену всех двузначных чисел на "00число которое заменено" ВЯЧ Microsoft Office Excel 5 06.12.2006 01:02