IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на расшифрование текста
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Женский

Репутация: -  0  +


Проверьте код на ошибки. Не разберусь в чем проблема.
Открытый текст: ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ.
Ключи: k1 5-3-1-2-4-6; k2 4-2-3-1.
Матрица из четырех столбцов и шести строк. Запись по строкам осуществляется в соответствии с ключом k1, а чте-
ние по столбцам – в соответствии с ключом k2
Шифртекст: "ПСНОРЙЕРВАИК_ЕАНФОИЕОТШВ".

Program rasshifr;
const n=10;
var
text, dtext:string;
c:char;
key1, key2:array[1..n] of integer;
textmatr:array[1..6,1..4] of string;
i, j, v, len:integer;
Begin
write('Введите текст для шифрования: ');
read(text);
writeln('-------------------------------------------------');
len:=length(text);
If len=24 then
begin
writeln('Введите первый ключ из 6 цифр: ');
repeat
v:=0;
for i:=1 to 6 do
begin
read©;
key1[i]:=c
end;
for i:=1 to 5 do
for j:=i+1 to 6 do
if key1[i]=key1[j] then inc(v);
if v<>0 then
begin
writeln ('Ошибка! Символы ключа не уникальны!');
writeln('Введите первый ключ из 6 цифр: ');
end
until v=0;
for j:=1 to 4 do
for i:=1 to 6 do
textmatr[i,key2[j]]:=dtext[(j-1)*6+i];
text:='';
for i:=1 to 6 do
for j:=1 to 4 do
text:=text+textmatr[key1[i],j];
writeln('Расшифрованный текст:',' ',text)
end
else writeln('Неверно')
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Воспользуйтесь функцией val ссылка на описание
Или сразу считывайте key1[i] без промежуточной переменной c.
Или, если там будут только цифры (0...9), то key1[i]:=ord(c )-ord('0')

Сообщение отредактировано: Федосеев Павел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Женский

Репутация: -  0  +


Цитата(Федосеев Павел @ 26.09.2016 12:41) *

Воспользуйтесь функцией val ссылка на описание
Или сразу считывайте key1[i] без промежуточной переменной c.
Или, если там будут только цифры (0...9), то key1[i]:=ord(c )-ord('0')


Я переделала все в процедуру. Теперь проблема такая: не выводится расшифрованный текст.
program rasshifr;
const n=15;
type mas=array[1..n] of integer;
var
k, l: string;
len, key: integer;
Procedure rasshifr(var b:mas;s,r:string);
var i,j,v,p:integer;
begin
Write('Введите текст для расшифрования: ');
Read®;
Writeln('-------------------------------------------------');
Write('Введите количество цифр в ключе: ');
Readln(key);
len := length®;
while len mod key <> 0 do
begin
r := r + ' ';
len := len + 1;
end;
writeln('Введите ключ из ', key, ' цифр: ');
repeat
v := 0;
for i := 1 to key do
begin
read(p);
a[i] := p
end;
for i := 1 to key - 1 do
for j := i + 1 to key do
if (a[i] = a[j]) then inc(v);
if v <> 0 then
begin
writeln('Ошибка! Символы ключа не уникальны!');
write('Введите ключ из ', key, ' цифр: ');

end;
i := 1;
while (i <= key) and (a[i] >= 1) and (a[i] <= key) do
Inc(i);
if i <= key then
begin
writeln('Ошибка! Выход из диапазона!!');
writeln('Введите ключ из ', key, ' цифр: ');
Inc(v);
end;
until v = 0;

setLength(s, len); // Задает строку нужного размера len

while v <> len do
begin
for i := 1 to key do
s[i + v] := r[a[i] + v];
v := v + key
end;
writeln('--------------------------------------------------');
write('Расшифрованный текст: ');
for i := 1 to len do
write(s[i]);
writeln
end;
Begin
rasshifr(a,k,l);
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.09.2025 13:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name