Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите доработать шифр

Автор: Nastya 11.12.2016 22:16

var
s, key: string;
index: array[1 .. 255] of integer;
i, j, T: integer;

len, curr: integer;
begin
s := 'Анастасия';
key := '987321456';
len := length(key);
for i := 1 to len do index[i] := i;
for i := 1 to len do
for j := len downto i + 1 do
begin
if key[index[j - 1]] > key[index[j]] then
begin
T := index[j - 1]; index[j - 1] := index[j]; index[j] := T;
end;
end;
for i := 1 to len do
begin
curr := index[i];
while curr <= length(s) do
begin
write(s[curr]);
inc(curr, len);
end;
end;
writeln;
end.
_________
Помогите сделать так, чтобы ввод текста, размер ключа, сам ключ и вывод текста вводилось в ручную!Пожалуйста!

Автор: Федосеев Павел 12.12.2016 13:56

program Anastasia;

var
s: string;
index, key: array[1 .. 255] of integer;
i, j, T: integer;

len, curr: integer;
begin
Write('Введите текст: ');
readln(s);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

for i := 1 to len do
index[i] := i;
for i := 1 to len do
for j := len downto i + 1 do
begin
if key[index[j - 1]] > key[index[j]] then
begin
T := index[j - 1];
index[j - 1] := index[j];
index[j] := T;
end;
end;
for i := 1 to len do
begin
curr := index[i];
while curr <= length(s) do
begin
Write(s[curr]);
Inc(curr, len);
end;
end;
writeln;
end.


Автор: Nastya 12.12.2016 19:29

Цитата(Федосеев Павел @ 12.12.2016 13:56) *

program Anastasia;

var
s: string;
index, key: array[1 .. 255] of integer;
i, j, T: integer;

len, curr: integer;
begin
Write('Введите текст: ');
readln(s);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

for i := 1 to len do
index[i] := i;
for i := 1 to len do
for j := len downto i + 1 do
begin
if key[index[j - 1]] > key[index[j]] then
begin
T := index[j - 1];
index[j - 1] := index[j];
index[j] := T;
end;
end;
for i := 1 to len do
begin
curr := index[i];
while curr <= length(s) do
begin
Write(s[curr]);
Inc(curr, len);
end;
end;
writeln;
end.




__________________
спасибо Вам огромное!!!!!!!!!!!!!! rolleyes.gif good.gif yes2.gif
Извиняюсь за беспокойство, но не могли бы вы мне помочь написать программу расшифровки? Буду очень вам признательна! !zdarov.gif

Автор: Федосеев Павел 12.12.2016 21:19

program Anastasia;

var
key: array[1 .. 255] of integer;
i, j: integer;

len, curr: integer;

encString, decString: string;
begin
Write('Введите текст: ');
readln(encString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

decString := encString;
j := 1;
for i := 1 to len do
begin
curr := key[i];
while curr <= length(encString) do
begin
decString[curr] := encString[j];
Inc(j);
Inc(curr, len);
end;
end;
writeln(decString);
end.


Автор: Nastya 12.12.2016 23:08

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

program Anastasia;

var
key: array[1 .. 255] of integer;
i, j: integer;

len, curr: integer;

encString, decString: string;
begin
Write('Введите текст: ');
readln(encString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

decString := encString;
j := 1;
for i := 1 to len do
begin
curr := key[i];
while curr <= length(encString) do
begin
decString[curr] := encString[j];
Inc(j);
Inc(curr, len);
end;
end;
writeln(decString);
end.



_______
Простите, но я наверное не так выразилась... Я имела ввиду, чтобы была программа шифровка и в ней же расшифровка и наоборот. Например, я ввела имя, закодировала его, а потом ввела ключ и раскодировала. Так возможно? Я просто не очень разбираюсь.. Пожалуйста, помогите smile.gif unsure.gif

Автор: Федосеев Павел 13.12.2016 1:49

За сегодняшний день:
1. Перечислите как должно выглядеть. Что нужно набирать.

Автор: Nastya 13.12.2016 11:53

Цитата(Федосеев Павел @ 13.12.2016 1:49) *

За сегодняшний день:
1. Перечислите как должно выглядеть. Что нужно набирать.

______________
Задайте текст:
скороновыйгод
Закодированная строка:
нвоыгйдоксоро
Декодирование:
скороновыйгод
............................
только чтобы с вводом и выводом данных.
Примерно так. Если возможно такое сделать, то пожалуйста, будьте добры, помогите.

Автор: Федосеев Павел 13.12.2016 13:28

program Anastasia;

var
encString, decString: string;
index, key: array[1 .. 255] of integer;
i, j, T: integer;

len, curr: integer;
begin
writeln('Кодирование текста');
Write('Введите текст: ');
readln(decString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;
for i := 1 to len do
index[i] := i;
for i := 1 to len do
for j := len downto i + 1 do
begin
if key[index[j - 1]] > key[index[j]] then
begin
T := index[j - 1];
index[j - 1] := index[j];
index[j] := T;
end;
end;
j := 1;
encString := decString;
for i := 1 to len do
begin
curr := index[i];
while curr <= length(decString) do
begin
encString[j] := decString[curr];
Inc(curr, len);
Inc(j);
end;
end;
writeln(encString);

writeln('Декодирование текста');
Write('Введите текст: ');
readln(encString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

decString := encString;
j := 1;
for i := 1 to len do
begin
curr := key[i];
while curr <= length(encString) do
begin
decString[curr] := encString[j];
Inc(j);
Inc(curr, len);
end;
end;
writeln(decString);
end.


Автор: Nastya 13.12.2016 21:49

Цитата(Федосеев Павел @ 13.12.2016 13:28) *

program Anastasia;

var
encString, decString: string;
index, key: array[1 .. 255] of integer;
i, j, T: integer;

len, curr: integer;
begin
writeln('Кодирование текста');
Write('Введите текст: ');
readln(decString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;
for i := 1 to len do
index[i] := i;
for i := 1 to len do
for j := len downto i + 1 do
begin
if key[index[j - 1]] > key[index[j]] then
begin
T := index[j - 1];
index[j - 1] := index[j];
index[j] := T;
end;
end;
j := 1;
encString := decString;
for i := 1 to len do
begin
curr := index[i];
while curr <= length(decString) do
begin
encString[j] := decString[curr];
Inc(curr, len);
Inc(j);
end;
end;
writeln(encString);

writeln('Декодирование текста');
Write('Введите текст: ');
readln(encString);
Write('Введите длину ключа: ');
readln(len);
Write('Введите числа ключа через пробел: ');
for i := 1 to len do
Read(key[i]);
readln;

decString := encString;
j := 1;
for i := 1 to len do
begin
curr := key[i];
while curr <= length(encString) do
begin
decString[curr] := encString[j];
Inc(j);
Inc(curr, len);
end;
end;
writeln(decString);
end.



______________________________
Спасибо Вам огромное за помощь! yes2.gif Вы мне очень помогли! good.gif smile.gif Всего вам самого наилучшего! give_rose.gif