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

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

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

> Шифровка строк, Нужна помощь в корректировании
сообщение
Сообщение #1


Новичок
*

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

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


Дорогие и многоуважаемые модераторы!А также другие форумчане!Пожалуйста помогите!

Задача(1):
Дано: Строка s1 и ключ.
Получить зашифрованную строку s2! У s2 длина равна длине s1!!!
Вот программа, но она для частного случая, т.к. если k будет не 3 то тогда придется присваивать иксу не ‘а’, а другую букву!
Код
uses crt;
var s:string;
   i:byte;
BEGIN
    clrscr;
    write('Введите строку для шифровки: ');
    readln(s);
    for i:=1 to length(s) do
              else if s[i]='X' then s[i]:='A'
             else if s[i]='Y' then s[i]:='B'
             else if s[i]='Z' then s[i]:='C'
             else if s[i]='x' then s[i]:='a'
             else if s[i]='y' then s[i]:='b'
             else if s[i]='z' then s[i]:='c'
             else s[i]:=chr(ord(s[i])+3);
    writeln(s);
    readln;
END.

Надо учитывать, что каждой букве соответствует свое число!
Например, A=65, B=66,C=67 и т.д.

Задача(2):
Дано: ключ и s2.
Расшифровать строку s2 и получить (найти) строку s1!

Задача(3):
Дано: s2, ключ неизвестен( ключ находится в пределах [2;26]
Расшифровать строку s2.В файле out.txt будет 26 строк, рядом со строками будет ключ!

Задача(4)
Дана строка s1 и плавающий ключ. Зашифровать строку s1 получить строку s2!
Плавающий ключ- это ключ который не постоянен для каждой буквы! Т.е каждая буква имеет свой определенный ключ!

Т.Е. надо сделать следующее:
Файл shi1.dat-надо расшифровать(т.е в программе надо указать будет этот файл (или путь к нему))
Файл f3.dat-надо расшифровать(т.е в программе надо указать будет этот файл (или путь к нему))
Файл f1.dat-надо зашифровать двумя способами(это задача 1 и задача4)(т.е в программе надо указать будет этот файл (или путь к нему))

Вот я составил эти программы, но они работают неправильно!Пожалуйста исправьте ошибки! sad.gif sad.gif sad.gif
Код
procedure p1;
var s,s2:string;
k,i:byte;
begin
assign(input,'f1.dat');reset(input);
assign(output,'f1_out.dat');rewrite(output);
readln(s);readln(k);
s2:='';
for i:=1 to length(s) do
begin
if ord(s[i])+k<255 then
s2:=s2+chr(ord(s[i])+k) else
s2:=s2+chr(ord(s[i])+k-254);
end;
writeln(s2);
close(input);close(output);
end;

procedure p2;
var   s,s2:string;
k,i:byte;
begin
assign(input,'shi1.dat');reset(input);
assign(output,'shi1_out.dat');rewrite(output);
readln(s);
readln(k);
s2:='';
for i:=1 to length(s) do         begin
if ord(s[i])-k>0 then
s2:=s2+chr(ord(s[i])-k) else
s2:=s2+chr(ord(s[i])-k+254);
end;
writeln(s2);
close(input);close(output);
end;

procedure p3;
var a:array[1..26] of string;
s:string;
i,k:byte;
begin
assign(input,'f3.dat');reset(input);
assign(output,'f3_out.dat');rewrite(output);
readln(s);
for i:=1 to 26 do a[i]:='';
for k:=1 to 26  do
for i:=1 to length(s) do
begin
if ord(s[i])-k>0 then
a[k]:=a[k]+chr(ord(s[i])-k) else
a[k]:=a[k]+chr(ord(s[i])-k+254);
end;

for k:=1 to 26 do
writeln(a[k],' ',k);

close(input);close(output);
end;


procedure p4;
var a:array[1..26] of string;
b:array[1..255] of integer;
code:integer;
s,st:string;
i,k:byte;
begin
assign(input,'f4.dat');reset(input);
assign(output,'f4_out.dat');rewrite(output);
readln(s);
readln(st);
k:=length(st);

for i:=1 to k do val(st[i],b[i],code);
      st:='';
for i:=1 to k do
begin
if ord(s[i])+b[i]<255 then
st:=st+chr(ord(s[i])+b[i]) else
st:=st+chr(ord(s[i])+b[i]-254);
end;
 writeln(st);
close(input);close(output);
end;


BEGIN
p1;
p2;
p3;
p4;
END.

Всем заранее спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
сообщение
Сообщение #2


Гость






timur, выделяем само кодирование и декодирование в отдельные функции, и вся дальнейшая работа делается элементарно... Вот эти 2 функции:
const
alpha: string =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function encode(s: string; key: byte): string;
var
i, p: integer;
begin
for i := 1 to length(s) do begin
p := pos(s[i], alpha);
if p > 0 then begin

inc(p, key);
if p > length(alpha) then
dec(p, length(alpha));

s[i] := alpha[p];
end;
end;
encode := s;
end;

function decode(s: string; key: byte): string;
var i, p: integer;
begin
for i := 1 to length(s) do begin
p := pos(s[i], alpha);
if p > 0 then begin
dec(p, key);
if p < 0 then
inc(p, length(alpha));

s[i] := alpha[p];
end;
end;
decode := s;
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


А как указать путь к файлам?
Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!

Добавлено:
Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)!Пожалуйста помогите!
Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!
Ну, и что? Сдавайте... Можно было бы и за 10 минут до сдачи вспомнить...
Я не пишу готовых программ, кстати, во многом благодаря пользователю с ником alina, которому никогда нельзя было угодить... Так вот теперь пускай этот же пользователь попробует угодить преподавателю.

Цитата
Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)

timur, также известный как alina и adelina !!! angry.gif Пора бы уже привыкнуть к тому, что я НЕ ДАЮ непроверенных решений! Если это лежит здесь, значит, это было скопировано из окна редактора после проверки...

Все претензии - к прокладке между стулом и клавиатурой!
 К началу страницы 
+ Ответить 

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

 





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