Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.10.2016, 15:33
Smile188 Smile188 вне форума
Прохожий
 
Регистрация: 02.10.2016
Сообщения: 18
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию программа в которой нужно реализовать режим шифровки расшифровки

Помогите пожалуйста немного переделать, программа работает, но нужно сделать так, что бы:
1) режим шифровки и расшифровки был независим от друга
2)при вводе строки кол-во символов должно быть кратно ключу , иначе нужно повторить ввод
__________________________________________________ _______

вот сама задача:

Написать программу в которой нужно реализовать режим шифровки расшифровки, и возможность дополнительного контроля ввода

Входными данными программы должны быть:
- для режима шифрования: строка текста и ключ, указывающий раз-
мер блока и порядок перестановки в пределах этого блока;
-для режима расшифровки: закрытый текст и ключ, указывающий
размер блока и порядок перестановки в пределах этого блока.
Выходными данными являются:
-для режима шифрования: закрытый текст;
-для режима расшифровки: открытый текст.
Используемые переменные:
– s, r – строки открытого и закрытого текста соответственно;
– len – длина текстовой строки;
– a – массив, содержащий числа, определяющие порядок перестановки;
– i, j, v – счетчики циклов и вспомогательная переменная целого типа;
– key – размер блока.

Пример : Открытый текст: "ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ".
Ключ (правило перестановки): группы из 8 букв с порядковыми номерами
1, 2, ..., 8 переставить в порядок 3-8-1-5-2-7-6-4.
Шифртекст: "ФНШОИАВР_СИЕЕЕРПННТВАОКО".




Код:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
program Project1;
 
{$APPTYPE CONSOLE}
 
 
 
uses
windows,
SysUtils;
 
const n=30;
var a,b:array[1..n] of integer;
s,s1,s2,r,ch:string;
i, j, p, key,k:integer;
m:set of byte;
c:char;
 
 
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
r:='';
repeat
 
writeln('Выберите действие');
writeln('1-зашифровать текст');
writeln('2-расшифровать текст');
writeln('другое - выход');
readln(c);
case c of
'1':begin
 
writeln('Введите текст для шифрования: ');
readln(s);
repeat
write('Введите количество цифр в ключе от 2 до ',n,' key= ');
readln(ch);
val(ch,key,k);
until (k=0)and(key in [1..n]); //если число и в интервале 1..n
while length(s) mod key<>0 do s:=s+' ';
writeln('Введите ключ из неповторяющихся чисел от 1 до ',key,' : ');
m:=[];
for i:=1 to key do
begin
repeat
write('a[',i,']=');
readln(ch);
val(ch,p,k);
until(k=0)and(p in [1..key])and not(p in m);
a[i]:=p;
m:=m+[p];
end;
i:=1;
while i<=length(s)-key+1 do
begin
s1:=copy(s,i,key);
s2:='';
for j:=1 to key do
s2:=s2+s1[a[j]];
r:=r+s2;
i:=i+key;
end;
for i:=length(r) downto 1 do
if r[i]=' ' then delete(r,i,1);
writeln('Зашифрованный текст: ');
writeln(r);
write('Нажмите Enter');
readln;
end;
'2':begin
 
if r='' then writeln('Зашифрованный текст еще не создан, вернитесь к пункту 1')
else
begin
//создадим ключ для дешифровки
for i:=1 to key do
begin
for j:=1 to key do
if a[j]=i then b[i]:=j
end;
s:=r;
while length(s) mod key<>0 do s:=s+' ';
r:='';
i:=1;
while i<=length(s)-key+1 do
begin
s1:=copy(s,i,key);
s2:='';
for j:=1 to key do
s2:=s2+s1[b[j]];
r:=r+s2;
i:=i+key;
end;
for i:=length(r) downto 1 do
if r[i]=' ' then delete(r,i,1);
writeln('Расшифрованный текст');
writeln(r);
end;
write('Нажмите Enter');
readln;
end;
else
begin
 
writeln('Программа завершена');
exit;
end;
end;
until not(c in ['1','2']);
End.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025