Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 18.05.2015
Сообщений: 22
1

Неправильно работает программа шифрования-дешифрования

21.05.2015, 23:15. Показов 766. Ответов 3
Метки нет (Все метки)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Program P_026_CRYPT;
 
Var
  inF , outF :text;
  s :string;
  k :integer;
const
  key = 2;
  inFile = 'C:\FILES\inFile.txt';
  outFile = 'C:\FILES\outFile.txt';
 
function crypt (var s :string) :string;
  var n :integer;
  begin
    for n:=1 to length(s) do
      begin
       crypt[n]:=chr(ord(s[n])+key);
       if ord(crypt[n])>255 then crypt[n]:=chr(ord(crypt[n])-256+32);
      end;
  end;
 
function decrypt (var s :string) :string;
  var n :integer;
  begin
    for n:=1 to length(s) do
      begin
        decrypt[n]:=chr(ord(s[n])-key);
        if ord(decrypt[n])<32 then decrypt[n]:=chr(ord(decrypt[n])+256-32);
      end;
  end;
 
procedure encrypt (var inF , outF :text; k :integer); // 1 - crypt , 2 - decrypt
  var n :integer;
  begin
    reset(inF);rewrite(outF);
    readln(inF,s);
    if k=1 then
      begin
        n:=0;
        while eof(inF) do
          begin
            n:=n+1;
            writeln (outF ,crypt(s));
            readln(inF,s);
          end;
        end
      else
        begin
        n:=0;
          while eof(inF) do
            begin
              n:=n+1;
              writeln(outF,decrypt(s));
              readln(inF,s);
            end;
        end;
 
  end;
{---MAIN---}
begin
  assign(inF,inFile);
  assign(outF,outFile);
  Writeln ('Программа Шифровки');
  Writeln ('1 - зашифровать');
  Writeln ('2 - расшифровать');
  Writeln ('Прочие - выход');
  readln(k);
  case k of
    1 : encrypt (inF , outF , k);
    2 : encrypt (inF , outF , k);
    else Writeln ('Press Enter');
  end;
  close(inF);close(outF);
end.
OutFile остается пустым . Функция encrypt прибавляет к номеру символа const key , decrypt соответственно отнимет .
Процедура encrypt копирует уже зашифрованную строку в OutFile . По крайней мере так задумано
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2015, 23:15
Ответы с готовыми решениями:

Реализовать программу шифрования/дешифрования по алгоритму Афинная система подстановки Цезаря
Помагите пожалуйста!)))

Программа неправильно работает
Здравствуйте!!!Помогите кто может.Перебрала разные варианты...и все равно не выходит. Написала...

Неправильно работает программа со списками
Пишу программу для работы магазина аудио-CD с использованием списков. Делал по примеру аналогичной...

множества. Программа работает неправильно
uses crt; type mn=set of char; var a,b,c:mn; x,y,z:char; procedure enter(var a,b,c:mn); ...

3
281 / 280 / 83
Регистрация: 03.02.2013
Сообщений: 800
22.05.2015, 23:18 2
я не стал вникать глубоко в код, просто прошёлся по нему мельком с момента {---MAIN---}
во первых это
Pascal
1
2
3
4
5
 case k of
    1 : encrypt (inF , outF , k);
    2 : encrypt (inF , outF , k);
    else Writeln ('Press Enter');
  end;
не хорошо, смысл этого case, если выбор сидит в k, в общем либо через case вызываете encrypt /decrypt , как полагается, либо если хотите костыль, как тут - убирайте case и в encrypt определяйте crypt или decrypt, хотя это всё тупо не хватка опыта, в принципе, по сравнению с кодом, что я на этом форуме каждый раз наблюдаю - у вас вполне хороший стиль
теперь к сути ошибок, перехожу в процедуру encrypt, вижу
Pascal
1
 while eof(inF) do
если траснлировать это на русский язык, тут сказано : пока конец файла делай... но с какого петуха здесь должен быть конец файла, если мы его только открыли, конечно надо
Pascal
1
 while not eof(inF) do
т.е. пока не встретился конец файла делай...
потом, гляжу на вызов crypt(s) (тот костыль, о котором я говорил ранее), но ладно, смотрим, что там происходит в функции crypt:
Pascal
1
2
3
 for n:=1 to length(s) do
      begin
       crypt[n]:=chr(ord(s[n])+key);
нет, нет и нет, так не делают, здесь crypt это адрес самой функции, который вы сдвигаете на n байт, вам следует либо вернуть через s результат (раз уж он заявлен, как var s:string), либо, если необходимо сохранить исходную строку, но передать её через var (т.е. только адрес, чтобы не передавать дофига байт) - сделать временную переменную string, типа
Pascal
1
2
3
4
5
6
7
8
 var n :integer;
    tmp:string;
  begin
    SetLength(tmp,Length(s));
    for n:=1 to length(s) do
      begin
       tmp[n]:=chr(ord(s[n])+key);
...
и в конце функции либо crypt:=tmp;, либо Result:=tmp; (что тоже самое)
в итоге должно быть, что-то типа
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function crypt (var s :string) :string;
  var n :integer;
    tmp:string;
  begin
    SetLength(tmp,Length(s));
    for n:=1 to length(s) do
      begin
       tmp[n]:=chr(ord(s[n])+key);
       if ord(crypt[n])>255 then crypt[n]:=chr(ord(crypt[n])-256+32);
      end;
     Result:=tmp;
  end;
дальше пока читать не стал, 3 ошибки достаточно взглядом поймать, подумайте над этим...
0
0 / 0 / 1
Регистрация: 18.05.2015
Сообщений: 22
23.05.2015, 20:56  [ТС] 3
Спасибо за детальное описание ошибок , код наладил . Кстати насчет result фпц выдает ошибку , что такая переменная не идентифицирована
0
281 / 280 / 83
Регистрация: 03.02.2013
Сообщений: 800
23.05.2015, 21:53 4
VmgRembo
Ну я пишу в ситаксисе ObjFPC, по привычке думаю, что он по умолчанию у всех стоит, замените на crypt:=tmp;
тут подробнее - http://www.freepascal.org/docs... fse81.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2015, 21:53

Некорректно работает программа шифрования и дешифрования (ГОСТ 28147-89)
Прошу помочь с обнаружением и устранением ошибки(ошибок) в коде программы, реализующей шифрование и...

Программа шифрования\дешифрования
Уважаемые программисты! Хочу попросить у Вас помощи в написании 2-х программ... Я ещё не очень...

Программа шифрования и дешифрования
Программа должна обеспечивать: • шифрование информации, находящейся в текстовом файле, с записью...

Программа шифрования и дешифрования текста
Ребята заканчиваю учиться на программиста! До диплома осталось 3 дня помогите пожалуйста программой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.