Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Разработать программу шифрования текстовых файлов (http://www.tehnari.ru/f41/t106402/)

Programmer8 16.01.2016 19:52

Разработать программу шифрования текстовых файлов
 
Программа должна выполнить следующие действия: организовать построчное чтение данных из файла, увеличить на 1 код каждого символа строки, записать строку в выходной файл, аналогичным образом выполнить расшифровку зашифрованного файла. Каждое действие оформляется как подпрограмма. Главная программа реализует только диалоговый цикл взаимодействия с пользователем.

Не поможете с данным заданием? Заранее благодарен.

AlexZir 16.01.2016 19:55

Язык программирования какой?

Vladimir_S 16.01.2016 19:57

Цитата:

Сообщение от Programmer8 (Сообщение 1199121)
Не поможете с данным заданием? Заранее благодарен.

Нет.
Потому как Вы, проявив стойкость и мужество, не выдали нам Тайну Языка Программирования, на котором должна быть написана программа.
Преклоняемся.

Programmer8 16.01.2016 20:03

Язык программирования Pascal

AlexZir 16.01.2016 20:19

Алгоритм для функции шифрования следующий:
1) Заводите необходимое количество переменных для работы с файлами, символами и числами.
2) Связываете файловые переменные с соответствующими текстовыми файлами.
3) В цикле организуете считывание из исходного файла символов до тех пор, пока не конец файла.
3.1) Преобразуете символ в код символа, увеличиваете его на 1 и преобразуете обратно.
3.2) Записываете полученный символ в результирующий файл.
4) конец.

Алгоритм для функции дешифровки следующий:
1) Заводите необходимое количество переменных для работы с файлами, символами и числами.
2) Связываете файловые переменные с соответствующими текстовыми файлами.
3) В цикле организуете считывание из исходного файла символов до тех пор, пока не конец файла.
3.1) Преобразуете символ в код символа, уменьшаете его на 1 и преобразуете обратно.
3.2) Записываете полученный символ в результирующий файл.
4) конец.

Vladimir_S 16.01.2016 20:28

Да ладно, делов-то на пять минут:
Код:

Var
 f1,f2:Text;
 N1,N2:String;
 ED:byte;

Function Encode_String(S:String):String;
var
 i,L:byte;
 S1:String;
begin
 S1:='';
 L:=Length(S);
 for i:=1 to L do S1:=S1+Chr(Ord(S[i])+1);
 Encode_String:=S1;
end;

Function Decode_String(S:String):String;
var
 i,L:byte;
 S1:String;
begin
 S1:='';
 L:=Length(S);
 for i:=1 to L do S1:=S1+Chr(Ord(S[i])-1);
 Decode_String:=S1;
end;

Procedure Encode_File(Nm1,Nm2:String);
var S:String;
begin
 Assign(f1,Nm1);
 Reset(f1);
 Assign(f2,Nm2);
 Rewrite(f2);
 Repeat
  Readln(f1,S);
  Writeln(f2,Encode_String(S));
 Until EoF(f1);
 Close(f1);
 Close(f2);
end;

Procedure Decode_File(Nm1,Nm2:String);
var S:String;
begin
 Assign(f1,Nm1);
 Reset(f1);
 Assign(f2,Nm2);
 Rewrite(f2);
 Repeat
  Readln(f1,S);
  Writeln(f2,Decode_String(S));
 Until EoF(f1);
 Close(f1);
 Close(f2);
end;

Begin
 Repeat
  Writeln('Choose the action: 1 - encode');
  Writeln('                  2 - decode');
  Writeln('                  0 - quit');
  Readln(ED);
  Case ED of
  1: begin
      write('Initial file name (full path): ');
      readln(N1);
      write('Encoded file name (full path): ');
      readln(N2);
      Encode_File(N1,N2);
      end;
  2: begin
      write('Encoded file name (full path): ');
      readln(N1);
      write('Decoded file name (full path): ');
      readln(N2);
      Decode_File(N1,N2);
      end;
  end;
  Writeln;
 Until ED=0;
End.


Vladimir_S 16.01.2016 20:30

Лёш, тут есть одна хитрость: нужно обходить преобразования кодов перевода строки. Поэтому лучше как у меня, построчно.

AlexZir 16.01.2016 20:39

Ну да, EOL надо пропускать :)

Programmer8 16.01.2016 20:56

Огромное спасибо вам:) Особенно Vladimir_S, проверил работает в точности как надо:)

Vladimir_S 16.01.2016 21:19

Только вот что... сейчас подумал. Надо бы "обойти" 255-й символ ("я" в Windows-кодировке). Если такой попадется - катастрофа! Важно?


Часовой пояс GMT +4, время: 05:17.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.