Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизCтроки и Файлы Найти похожие ветки
← →
gamez (2008-04-22 17:44) [0]Необходимо зашифровать файл
Пишет такую ошибку
Debugger Exception Notification
Project LAB.exe raised execprion class EAccessViolation with message "Access violation at address 00461BC1 in module LAB.exe".
Write of address 00000000".
F1,F2: file of byte;
b: byte;
i,j: integer;
N: integer;
key :array of byte;
----------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
// key := strtoint(edit2.Text);
key[0] := 1;
key[1] := 2;
key[2] := 3;
key[3] := 4;
AssignFile(f1,edit1.text);
Reset(f1) ;
AssignFile(f2,edit3.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = 3 then n := 0;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo1.Lines.LoadFromFile(edit3.text);
ShowMessage("Файл успешно зашифрован");
end;
← →
{RASkov} © (2008-04-22 17:46) [1]> [0] gamez (22.04.08 17:44)
Устанавливать размер нужно динамическим массивам....
← →
Palladin © (2008-04-22 18:08) [2]
> key := strtoint(edit2.Text);
чего бы это значило...
помимо длины динмассива, переменная n инициализирована Пушкиным А.С.
← →
korneley © (2008-04-22 18:28) [3]
> помимо длины динмассива, переменная n инициализирована Пушкиным
> А.С.
И растет постоянно, никакого key[] не хватит.
← →
gamez (2008-04-22 18:32) [4]Как сделать динамическим массивом.
Я сделал переменную key масивом типа Byte и указал четыре из них.
Может если сделать так
key :array [0..3] of byte;
Но это не выход потому что кодов может быть и не три а больше.
А граница получается что ограничивается цифрой 3.
Как сделать подругому.
Объясните.
← →
Palladin © (2008-04-22 18:34) [5]
> korneley © (22.04.08 18:28) [3]
расти она будет только до трех
> gamez (22.04.08 18:32) [4]
а мы устанавливать длинну динамического массива не умеем? ну раз не умеем значит самое время научится, то есть посмотреть почитать в справке про динамические массивы
← →
gamez (2008-04-22 18:41) [6]Что просто задать длину для переменной key? или что еще?
setlength(key,3);
← →
Palladin © (2008-04-22 18:44) [7]а что тебе еще нужно то? ну отобрать у Пушкина А.С. право инициализации значения n
← →
korneley © (2008-04-22 18:48) [8]
> расти она будет только до трех
Ну, дык, если начальное значение меньше трех, то да ;)
← →
Palladin © (2008-04-22 18:51) [9]
> korneley © (22.04.08 18:48) [8]
никаких "если", дойдет до maxint+4 и вернется в зад к нулю )
← →
gamez (2008-04-22 18:56) [10]Уже инициализировал Я эту переменну.
Вот проблема.
Значит нужно:
1) Записать слово в компоненте TEdit2
2) В цикле до конца этого слова к переменой key[i]
нужно присвоить порядковый номер каждой буквы слова.
Получается не разбериха в типах с TEdit2 нельзя записать в тип char
а потом и порядковый номер как записать в переменую key[i]
N,C: integer;
buf: string;
_____________________________________________
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
n:=0;
buf := edit2.Text;
C:= length(buf);
setlength(key,C);
for I := 0 to C do
key[i] := buf[i];
AssignFile(f1,edit1.text);
Reset(f1) ;
AssignFile(f2,edit3.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = C then n := 0;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo1.Lines.LoadFromFile(edit3.text);
ShowMessage("Файл успешно зашифрован");
end;
← →
Palladin © (2008-04-22 18:59) [11]1. читаем в справке как индексируются символы в строке
2. временная строка buf не нужна, Edit.Text и без buf является string
← →
Palladin © (2008-04-22 19:00) [12]а, ну и прикинь действительно символ не совместим с integer, вот так все ужасно, тебе наверное нужно как то будет превратить символ в число
← →
gamez (2008-04-22 19:01) [13]Как работать в этом месте
.....
key[i] := buf[i];
....
Без это переменной.
Разве можно в Edit индексировать строку.
← →
Palladin © (2008-04-22 19:02) [14]
> Разве можно в Edit индексировать строку.
а кто говорил про Edit. ты разве к Edit обращаешься?
← →
gamez (2008-04-22 19:03) [15]Palladin © (22.04.08 19:00) [12]
То есть тип Char превратить Byte ..
← →
Palladin © (2008-04-22 19:05) [16]
> gamez (22.04.08 19:03) [15]
ага... с помощью таких волшебных вещей как приведение типа... достаточно знать что символы "0".."9" в ASCII распологаются последовательно и что
byte("0")=48, а
byte("9")=57
← →
Palladin © (2008-04-22 19:06) [17]даже и значения не важны... главное что они последовательно располагаются...
← →
gamez (2008-04-22 19:14) [18]что то есть но рашифровать не получется.
// шифрование
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
n:=0;
buf := edit2.Text;
C:= length(buf);
setlength(key,C);
for I := 0 to C do
key[i] := byte(buf[i]);
AssignFile(f1,edit1.text);
Reset(f1) ;
AssignFile(f2,edit3.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = C then n := 0;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo1.Lines.LoadFromFile(edit3.text);
ShowMessage("Файл успешно зашифрован");
end;
// Разшифрование
procedure TForm1.Button3Click(Sender: TObject);
begin
memo2.Clear;
n:=0;
buf := edit6.Text;
C:= length(buf);
setlength(key,C);
for I := 0 to C do
key[i] := byte(buf[i]);
AssignFile(f1,edit4.text);
Reset(f1) ;
AssignFile(f2,edit5.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = C then n := 0;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo2.Lines.LoadFromFile(edit3.text);
ShowMessage("Файл успешно зашифрован");
end;
← →
Palladin © (2008-04-22 19:20) [19]
> gamez (22.04.08 19:14) [18]
1 строки индексируются с 1 (один)
2 я спрашиваю, зачем тебе buf?
← →
gamez (2008-04-22 19:28) [20]Вот испаравил. Работает только почемуто проблема возникает если шифр из одной буквы состоит. Тогда не правильно шифруется и дешифруется.Почему?
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
n:=0;
C:= length(edit2.Text);
setlength(key,C);
for I := 0 to C do
key[i] := byte(edit2.Text[i]);
AssignFile(f1,edit1.text);
Reset(f1) ;
AssignFile(f2,edit3.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = C then n := 1;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo1.Lines.LoadFromFile(edit3.text);
ShowMessage("Файл успешно зашифрован");
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
memo2.Clear;
n:=0;
C:= length(edit6.Text);
setlength(key,C);
for I := 0 to C do
key[i] := byte(edit6.Text[i]);
AssignFile(f1,edit4.text);
Reset(f1) ;
AssignFile(f2,edit5.text);
rewrite(f2) ;
While Not Eof(f1) do
begin
Read(f1, b);
n := n + 1;
if n = C then n := 1;
b := b Xor key[n];
Write(f2, b);
end;
CloseFile(f1);
CloseFile(f2);
memo2.Lines.LoadFromFile(edit5.text);
ShowMessage("Файл успешно зашифрован");
end;
← →
Palladin © (2008-04-22 19:29) [21]я тебе реально задрался говорить, что строки индексируются с ЕДИНИЦЫ.. и только то, что это конференция для начинающих, не дает мне тебя прямо назвать тупым животным! (С) BOR
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c