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  +


Чтобы мне долго не гадать - в чём заключается проблема?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Федосеев Павел @ 22.09.2016 20:21) *

Чтобы мне долго не гадать - в чём заключается проблема?


key1[i]:=c
Нельзя преобразовать тип char к integer.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

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

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


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

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


Новичок
*

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

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

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


Так оно даже не компилируется.

Как-то не чувствуете вы структуру программы. Интерфейс должен быть отделён от алгоритма обработки. Это означает, что ввод от пользователя должен быть в основной программе (или отдельной процедуре), далее вызов процедуры обработки (в которой только вычисления), далее в основной программе вывод результата.

Так делают, чтобы отлаживать обработку на тестовых данных, "зашитых" в программу в виде констант.

Исправляйте. Только поторопитесь - сегодня я ещё могу посещать форум, но на днях могу уехать в командировку.

------------------------------------

Что-то вы разные методы кодирования приводите в первом и пятом сообщениях...

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


Новичок
*

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

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


Цитата(Федосеев Павел @ 27.09.2016 19:36) *

Так оно даже не компилируется.

Как-то не чувствуете вы структуру программы. Интерфейс должен быть отделён от алгоритма обработки. Это означает, что ввод от пользователя должен быть в основной программе (или отдельной процедуре), далее вызов процедуры обработки (в которой только вычисления), далее в основной программе вывод результата.

Так делают, чтобы отлаживать обработку на тестовых данных, "зашитых" в программу в виде констант.

Исправляйте. Только поторопитесь - сегодня я ещё могу посещать форум, но на днях могу уехать в командировку.

------------------------------------

Что-то вы разные методы кодирования приводите в первом и пятом сообщениях...


Я ввела, но не выходит у меня никак с выводом результата. Совсем никак.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

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

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


Так. Смотрите - в начале темы вы привели программу, работающую с матрицей, а последняя программа работает через массив. Т.е. это абсолютно разные алгоритмы. А кроме того, у них разные тестовые примеры и я даже не знаю, что требуется вводить и что получить.

Таким образом я не понимаю о чём идёт речь во фразе: "Я ввела, но не выходит у меня никак с выводом результата. Совсем никак."

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

Что нужно от вас:
1. Тестовый пример входных и выходных данных.
2. Компилирующийся исходник.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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