Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
-Strelok-
1 / 1 / 0
Регистрация: 10.09.2013
Сообщений: 7
#1

Поправить код по шифрованию методом простой перестановки - Turbo Pascal

10.09.2013, 11:43. Просмотров 2980. Ответов 5
Метки нет (Все метки)

Доброго времени суток, форумчане!
Нужно зашифровать вводимый текст методом простой перестановки по ключу на языке Turbo Pascal.
Сам начал. Шифрует, вроде, нормально. Нужно чтобы расшифровывал по этому же ключу в этом же окне.
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
program crypt;
uses Crt;
var
    word:string;
    a,i,j,n:integer;
        key:array[1..5] of integer;
begin
    i:=1;
        ClrScr;
    write('Input string (<=255 simbols): ');
    readln(word);
    write('Enter key: ');
        for j:=1 to 5 do
        begin
         read(key[j]);
        end;
        readln;
        j:=1;
        n:=0;
        a:=0;
    while a<=(length(word)+4)  do
 
    begin
        i:=key[j];
                i:=i+n;
        write(word[i]);
        j:=j+1;
                if j>5 then
                begin
                     j:=1;
                     n:=n+5;
                end;
        a:=a+1;
    end;
    readln;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 11:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поправить код по шифрованию методом простой перестановки (Turbo Pascal):

Отсортировать массив простым выбором и методом простой перестановки - Turbo Pascal
Отсортировать одномерный массив: 1) простым выбором; 2) методом простой перестановкой;

Решение СЛАУ методом простой итерации или методом Зейделя - Turbo Pascal
Решение СЛАУ методом простоой интерпритации или методом Зейделя. Напишете пожалуйста пример решения

Поправить код программы - Turbo Pascal
program tabl; var x,y:real; const xn=0;xk=1;dx=0.1; begin x:=xn; repeat begin y:=exp (-x)*sin(x); writeln(x:4:3,' ',y:4:3); ...

Поправить код программы - Turbo Pascal
program tabl; var x,y:real; const xn=0;xk=1;dx=0.1; begin x:=xn; while x&lt;=xk do begin y:=exp(-x)+sin(x); writeln(x:4:3,'...

3 задания, нужно поправить код! - Turbo Pascal
Доброго времени суток, я новичок в паскале и пока ещё не во всём разобрался и вот возникли проблемки в прогах, помогите пофиксить плиз! ...

Массивы и процедуры. Поправить код! - Pascal
Дан целочисленный массив A. Написать программу, включающую две процедуры с параметрами. Первая процедура считает количество повторений...

5
Mishania
77 / 77 / 33
Регистрация: 26.09.2012
Сообщений: 341
11.09.2013, 15:41 #2
-Strelok-,

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
function CryptChar(arg: char):char;
var
   x: integer;
begin
     x:=Ord(arg)+Ckey;
     if x>255 then x:=x-256+32;
     CryptChar:=Char(x);
end;
function EnCryptChar(arg: char):char;
var
   x: integer;
begin
     x:=Ord(arg)-Ckey;
     if x<32 then x:=x+256-32;
     EnCryptChar:=Char(x);
end;
procedure CryptString(var arg: string);
var
   k: integer;
begin
     for k:=1 to Length(arg) do arg[k]:=CryptChar(arg[k]);
end;
procedure EnCryptString(var arg: string);
var
   k: integer;
begin
     for k:=1 to Length(arg) do arg[k]:=EnCryptChar(arg[k]);
end;
procedure CryptFile(const aFile: string; aOper: boolean);
const CFixName='Crypt.txt';
var
   FileIn: text;
   FileOut: text;
   S: string;
begin
     if aOper then begin
                   Assign(FileIn,aFile);
                   Assign(FileOut,CFixName);
                   end
              else begin
                   Assign(FileIn,CFixName);
                   Assign(FileOut,aFile);
                   end;
           Reset(FileIn);
           Rewrite(FileOut);
     while not Eof(FileIn) do begin
           Readln(FileIn,S);
           if aOper
                    then CryptString(S)
                    else EnCryptString(S);
           Writeln(FileOut,S);
                               end;
           Close(FileIn);
           Close(FileOut);
end;
var
   S: string;
   Oper: boolean;
   Ckey: integer;
begin
     Write('Vvedite klyuch:');
     Write('Ukazhite operaciyu (1 - shifrovat, prochie - deshifrovat):');
     Readln(S);
     Oper:=S='1';
     if Oper
             then Write('Vvedite imya shifruemogo fajla:')
             else Write('Vvedite imya rasshifrovannogo fajla:');
     Readln(S);
     CryptFile(S,Oper);
end.
0
-Strelok-
1 / 1 / 0
Регистрация: 10.09.2013
Сообщений: 7
30.09.2013, 21:07  [ТС] #3
Как сделать, чтобы результат сохранялся в переменную cryptWord?
Расставляет все правильно, но не сохраняет и не выводит, кстати,(только там, где для проверки вывод сделал), а сама перем. S в конце оказывается пустой
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
var i,j,a,n: integer;
    S,noCryptWord : string;
    cryptWord : string;
    key : array[1..5] of integer;
begin
     writeln('Ââåäèòå êëþ÷: ');
     for j:=1 to 5 do read(key[j]);
     {Г·ГЁГІГ*ГҐГ¬ âõîäГ*ГіГѕ ГґГ°Г*çó}
     write ('Input data: ');
     readln(noCryptWord);
     S:= '';   //ñîçäГ*ГҐГ¬ ïóñòîé ГЎГіГґГҐГ°
     for i:=1 to Length(noCryptWord) do
     begin
          S:=S+' ';    //Г§Г*Г¤Г*ГҐГ¬ Г°Г*çìåð ГЎГіГґГҐГ°Г*
     end;
     i:=0;
     j:=1;
     a:=1;
     n:=0;
     {Г§Г*øèôðîâûâГ*ГҐГ¬ ñëîâî}
     while a<=(length(noCryptWord)) do
     begin
             i:=key[j];
             i:=i+n;
             write('i=',i,'     ');   //ñäåëГ*Г« äëÿ ïðîâåðêè
             S[j] := noCryptWord[i]; //ГўГ±ГІГ*ГўГЁГ¬ ñèìâîë Гў ГЎГіГґГҐГ°
             writeln('S',j,'=',S[j]); //ñäåëГ*Г« äëÿ ïðîâåðêè
             j:=j+1; //îòñ÷èòûâГ*ГҐГІ ïîçèöèþ Гў áóôåðå
             if j>5 then
             begin   //ïðîâåðÿåì ГЄГ®Г*ГҐГ¶ áëîêГ*
                  j:=1;
                  n:=n+5;
             end;
             a:=a+1;
     end;
cryptWord:=S;
 
writeln(cryptWord);  //âûâîäèì Г§Г*øèôðîâГ*Г*Г*îå ñëîâî
end.
0
-Strelok-
1 / 1 / 0
Регистрация: 10.09.2013
Сообщений: 7
04.10.2013, 12:06  [ТС] #4
Спасибо! С шифрованием сам нашел ошибку, осталось дешифрацию сделать.

Добавлено через 2 часа 22 минуты
Хех, сам сделал))
Вот исходник с комментами, может кому пригодится
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
var i,j,a,n,x: integer;
    S,noCryptWord,cryptWord : string;
    key : array[1..5] of integer;
begin
     writeln('Введите ключ: ');
     for j:=1 to 5 do read(key[j]);  //вводим ключ через Enter
     {читаем входную фразу}
     write ('Введите фразу для шифровки: ');
     readln(noCryptWord);
     noCryptWord:=noCryptWord+'    ';
     S:= '';   //создаем пустой буфер
     for i:=1 to length(noCryptWord) do
     begin
          S:=S+' ';    //задаем размер буфера
     end;
     i:=0;
     j:=1;
     a:=1;
     n:=0;
     x:=1;
     {зашифровываем слово}
     while a<=(length(S)) do
     begin
             i:=key[j];
             i:=i+n;
             S[x] := noCryptWord[i]; //вставим символ в буфер
             j:=j+1; //отсчитывает позицию в буфере
             if j>5 then
             begin   //проверяем конец блока
                  j:=1;
                  n:=n+5;
             end;
             a:=a+1;
             x:=x+1;
     end;
cryptWord:=S;
writeln(cryptWord);  //выводим зашифрованное слово
     {расшифровываем}
     n:=0;
     x:=1;
     j:=1;
     a:=1;
     S:= '';   //создаем пустой буфер
     for i:=1 to Length(CryptWord) do
     begin
          S:=S+' ';    //задаем размер буфера
     end; i:=0;
     while a<=(length(S)) do
     begin
             i:=key[j];
             i:=i+n;
             S[i] := CryptWord[x]; //вставим символ в буфер
             j:=j+1; //отсчитывает позицию в буфере
             if j>5 then
             begin   //проверяем конец блока
                  j:=1;
                  n:=n+5;
             end;
             a:=a+1;
             x:=x+1;
     end;
cryptWord:=S;
writeln(cryptWord);  //выводим расшифрованное слово
end.
0
ivan0000
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 3
05.10.2013, 17:22 #5
Напиши пожадуйста пример, как пользоваться твоим кодом который ниже: когда открылось окно программы, что нужно вводить.

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
program crypt;
uses Crt;
var
    word:string;
    a,i,j,n:integer;
        key:array[1..5] of integer;
begin
    i:=1;
        ClrScr;
    write('Input string (<=255 simbols): ');
    readln(word);
    write('Enter key: ');
        for j:=1 to 5 do
        begin
         read(key[j]);
        end;
        readln;
        j:=1;
        n:=0;
        a:=0;
    while a<=(length(word)+4)  do
 
    begin
        i:=key[j];
                i:=i+n;
        write(word[i]);
        j:=j+1;
                if j>5 then
                begin
                     j:=1;
                     n:=n+5;
                end;
        a:=a+1;
    end;
    readln;
end.
0
-Strelok-
1 / 1 / 0
Регистрация: 10.09.2013
Сообщений: 7
07.10.2013, 08:20  [ТС] #6
Сначала вводишь фразу, которую нужно зашифровать, затем, через Enter (поскольку ключ типа массив) вводишь 5-ти значный ключ(цифры не должны повторяться)!
1
07.10.2013, 08:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 08:20
Привет! Вот еще темы с ответами:

Шифрование методом одиночной перестановки с использованием ключа - Pascal
Подскажите пожалуйста как написать программу, что бы шифрования производилось методом : одиночно перестановки с исп ключа, двойной...

Решения СЛАУ методом простой итерации - Turbo Pascal
Код решения СЛАУ методом простой итерации. Program Metod_Prostoy_Iteracii ; Uses crt; const n=3; e=0.001; Type matrix= array of...

Нахождение корня методом простой итерации - Pascal
Доброе время суток всем. Помогите разобраться пожалуйста! Мне нужно получить значение переменной B, решив нелинейное уравнение...

Сортировка массива методом простой выбор? - Pascal
Сортировка массива методом простой выбор. Составить программу демонстрирующую на экран код сортировки.


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

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

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