Главная страница
    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.011 c
2-1148942125
alec_sey
2006-05-30 02:35
2006.06.18
Массивы


2-1148902961
Ezorcist
2006-05-29 15:42
2006.06.18
Написание компонента от TClientSocket


15-1147741674
Imbac
2006-05-16 05:07
2006.06.18
Коррекция зрения


1-1147258212
TUser
2006-05-10 14:50
2006.06.18
Где-то лежат dcu про запас


15-1148312666
Bogdan1024
2006-05-22 19:44
2006.06.18
квартиру в кредит





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский