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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 14:38   #1
danas
 
Регистрация: 22.05.2013
Сообщений: 9
По умолчанию шифровка текста

Необходимо закодировать файлы. Для этого придумали следующий алгоритм.
Каждая строка файла кодируется отдельно.
В каждой строке ищутся отдельные слова, и все символы слова сдвигаются по алфавиту циклически вправо на длину слова.
Словом считается любая последовательность подряд идущих символов латинского алфавита, строчных и прописных.
Циклический сдвиг символа по алфавиту вправо на X — замена символа на символ, стоящий в алфавите на X позиций дальше. Если при этом происходит выход за пределы алфавита, счёт начинается с начала алфавита.
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна закодировать строку по указанному алгоритму.
заранее спасибо!


Я написала следую программу, но в зашифрованном тексте нет пробелов и последнее слово не выводится. В чем ошибка?
Код:
uses crt;
var s:string; i,j,l,k,d:integer;  z:char;
begin clrscr;
readln(s); k:=0;
for i:=1 to length(s) do begin
if (s[i]<>' ') and (s[i] in['a'..'z']) then k:=k+1 else if k>0 then begin
d:=k; k:=0;
for j:=1 to  d do begin
z:=chr(ord(s[j])+d);
case s[j] of
'a'..'z': if z>'z' then write(chr(ord(z)-26) ) else write (z )
 else write(s[j]);end;end;end;end;end.
danas вне форума Ответить с цитированием
Старый 17.10.2013, 16:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

чтобы легче анализировать код форматируем его(делаем отступы) !
Код:
uses crt;
var s:string; i,j,l,k,d:integer;  z:char;
begin
  clrscr;
  readln(s); k:=0;
  for i:=1 to length(s) do begin
    if  // (s[i]<>' ') and если уж буква то точно непробел лишнее условие! 
                           (s[i] in['a'..'z']) then k:=k+1 
    else // if k>0 then нам не надо проверять если k=0 то и d=0 и цикл ВСЕ равно не будет выполняться !!
         // зато "небуквы" спокойно выведутся даже если перед ними не было букв (два и более пробелов подряд)  
         begin
      d:=k; k:=0; 
      for j:=1 to d do begin // мы выводим ровно столько букв сколько есть в слове (без следующих пробелов!)
        z:=chr(ord(s[j])+d); //вот интересно мы каждый раз шифруем первое слово строки ? j=1, ...d 
        if z>'z' then z:=chr(ord(z)-26);
         //поскольку мы точно знаем что выводим буквы (!!c учетом исправления предыдущего замечания!!) можно и не проверять лишний раз
         //case s[j] of 
         //'a'..'z': if z>'z' then write(chr(ord(z)-26) ) else write (z )
         //else write(s[j]);
         //end;
        write(z); 
      end;
      write(s[j]); // и в вот теперь когда вывод слова окончен мы можем просто вывести известный нам "небуквенный" символ! 
                   //!!  правда здесь мы окажемся есть только строго перед этим было невыведеное слово (k>0 !) в тексте НЕТ двух пробелов подряд.
    end;
  end;

end.
а ведь ПРОПИСНЫЕ буквы у вас не шифруются, и даже не считаются буквами
Цитата:
Код:
s[i] in['a'..'z']
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.10.2013, 16:26   #3
danas
 
Регистрация: 22.05.2013
Сообщений: 9
По умолчанию

А можно верный вариант предложить
danas вне форума Ответить с цитированием
Старый 17.10.2013, 16:40   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
А можно верный вариант предложить
Конечно же можно. Исправьте замечания и будет верный!
P.S. собственно они УЖЕ исправлены, кроме
Цитата:
//вот интересно мы каждый раз шифруем первое слово строки ? j=1, ...d
и
Цитата:
а ведь ПРОПИСНЫЕ буквы у вас не шифруются, и даже не считаются буквами
З.Ы. разберитесь хотя бы с первым (шифрование первых букв строки).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.10.2013 в 16:55.
evg_m вне форума Ответить с цитированием
Старый 18.10.2013, 10:18   #5
danas
 
Регистрация: 22.05.2013
Сообщений: 9
По умолчанию

все равно не получается, помогите если не сложно полной программой
danas вне форума Ответить с цитированием
Старый 18.10.2013, 10:22   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
все равно не получается,
а что именно?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.10.2013, 15:00   #7
danas
 
Регистрация: 22.05.2013
Сообщений: 9
По умолчанию

Почему неверно?

Код:
for j:=1 to d do begin // мы выводим ровно столько букв сколько есть в слове (без следующих пробелов!)
        z:=chr(ord(s[j])+d);
danas вне форума Ответить с цитированием
Старый 21.10.2013, 17:10   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Почему неверно?
исходный вопрос был
Цитата:
но в зашифрованном тексте нет пробелов
// мы выводим ровно столько букв сколько есть в слове (без следующих пробелов!)
ответ потому что мы их не выводим.(выводим только слово, но не пробелы)
и главное КАКИЕ буквы(символы) мы здесь шифруем?
каждый раз первые
Код:
for j:=1 to d do begin
z:=chr(ord(s[j])+d);
чтобы стало понятнее, попробуй не выводить каждый раз по букве а сначала просто заменять эти буквы в исходной строке
сделай вот такую замену
Код:
s[j]:=z; // write(z);
и общий вывод всей строки после цикла
Код:
readln(s);
for i:=1 to length(s) do begin
......
end;

writeln(s); !!!!!!!!!!!!!!
writeln(s);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.10.2013 в 17:19.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифровка текста в С++ Аруми Помощь студентам 3 26.12.2011 21:26
Шифровка текста Аруми Помощь студентам 0 20.12.2011 20:09
Шифровка текста doter Общие вопросы по Java, Java SE, Kotlin 1 20.12.2011 09:54
шифровка текста candalik Помощь студентам 3 23.12.2010 22:01
Шифровка текста С++ deathsurgut Общие вопросы C/C++ 3 01.10.2007 18:58