Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

Массивы   Найти похожие ветки 

 
alec_sey   (2006-05-30 02:35) [0]

Люди добоые подскажите почему возникает ошибка и как её исправить
С фиксированным массивом всё нормально а с динамическим почему то
ошибка и именно внутри другого цикла(ниже ошибка помечена)
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Mask, Gauges;

type
 TForm1 = class(TForm)
   Button1: TButton;
   MaskEdit1: TMaskEdit;
   OpenDialog1: TOpenDialog;
   SaveDialog1: TSaveDialog;
   MaskEdit2: TMaskEdit;
   Button2: TButton;
   Button3: TButton;
   MaskEdit3: TMaskEdit;
   Label2: TLabel;
   Label1: TLabel;
   Label3: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
   f1,f2:file;
    b:array of integer;
   fr,b1:array of integer;

implementation

uses Math;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
with OpenDialog1 do begin
if not execute then exit else
 MaskEdit1.Text:=OpenDialog1.FileName;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with SaveDialog1 do begin
if not execute then exit else
 MaskEdit2.Text:=SaveDialog1.FileName;
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
s:string;
j,x:integer;
begin
s:=MaskEdit3.Text;
SetLength(b,Length(s));
SetLength(b1,Length(s));
SetLength(fr,Length(s));

for j:=1 to Length(s) do
fr[j-1]:=strtoint(s[j]);

AssignFile(f1,MaskEdit1.Text);
AssignFile(f2,MaskEdit2.Text);
 reset(f1);
 Rewrite(f2);
while not Eof(f1) do
begin
BlockRead(f1,b,1);
for x:=1 to Length(s) do
b1[x-1]:=b[x-1] xor fr[x-1];// здесь ошибка
BlockWrite(f2,b1,1);
Label3.Caption:="Çàøèôðîâàí&#2 37;î "+IntToStr(FileSize(f2))+" áàéò";
Application.ProcessMessages;
end;
end;

end.


 
Rial ©   (2006-05-30 02:51) [1]

fr[j-1]:=strtoint(s[j]);
Так ведь s[j] - это символ. Странная операция, хотя при наличии
хорошей погоды все будет нормально.

Мне не очень понятно, что происходит в программе.
Точнее понятно, что происходит, а вот что хотелось тебе - нет.
Опиши задачу, ее явно можно проще решить.

А главная ошибка вот:

BlockRead(f1,b,1);
и
BlockWrite(f2,b1,1);

b и b1 - это лишь указатели на динамически распределенную память.
Ты их изменяешь, и в результате указатели указывают черт знает куда ...

К тому же, SizeOf(Integer)=4, почему из файла читается по одному байту?
Надо объявить не Array of Integer,а Array of Byte;
Что, собственно, почти и есть строка ...

И читать надо хотябы так(читаем сразу весь массив):
N:=BlockRead(f1,Pointer(b)^,SizeOf(Byte)*Length(b));

BlockWrite(f1,Pointer(b1)^,SizeOf(Byte)*Length(b1));

N возвратит кол-во реально прочитанных байт.
Его и проверишь.

А по секрету говоря, Array of - это зло :)).


 
alec_sey   (2006-05-30 03:01) [2]

s[j] это числа так что ничё тут такого нету, А вообше нужно считать блок
затем каждый I-й елемент блока xorom сопоставить с введённым I-м елементом числовой строки и записть его



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.017 c
2-1149226966
KygECHuK
2006-06-02 09:42
2006.06.18
Uses


11-1128965722
Riton
2005-10-10 21:35
2006.06.18
TKOLTreeview - item reaching


10-1120548108
WG
2005-07-05 11:21
2006.06.18
Глюк при передаче данных в Excel, не опознает дату


3-1145945499
sally
2006-04-25 10:11
2006.06.18
Список источников ODBC


3-1145957654
kyn66
2006-04-25 13:34
2006.06.18
SQL-запрос с параметрами выдает ошибки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский