Регистрация: 09.12.2010
Сообщений: 7
|
Вычисления массивов. Дельфи
Собственно, задачка:
Создать приложения для вычисления и отображения 2-х одномерных массивов B и С. Элементы массивов должны быть получены из исходной целочисленной матрицы А в результате вычисления формул: a[р,j]/ a[р-1,j] (для массива В) и a[р,j]/ a[р+1,j] (для массива С). Организовать выбор номера строки р матрицы А. В случае выбора в качестве р номера первой или последней строки организовать замену на номер последней или первой строки соответственно. Массивы должны формироваться при нажатии на кнопку «Пуск».
Проблемы в следующем: иногда не работает кнопка "Load", не пойму с чем связано. И еще никак не могу загрузить матрицу А из файла, загружается только последняя строка. Помогите, пожалуйста!
Написал вот код
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids;
type
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
f1,f:textfile;
A:array of array of extended;
c,r:integer;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k:integer;
begin
if opendialog1.Execute then
if fileexists(opendialog1.FileName) then begin
assignfile(f1,opendialog1.filename);
reset(f1);
readln(f1,c);
readln(f1,r);
stringgrid1.ColCount:=c;
stringgrid1.rowCount:=r;
stringgrid2.ColCount:=c;
stringgrid3.ColCount:=c;
spinedit1.MinValue:=0;
spinedit1.MaxValue:=r-1;
setlength(a,c,r);
try
try
for i:=0 to r-1 do
for j:=0 to c-1 do begin
read(f1,k);
a[j,i]:=k;
stringgrid1.Cells[j,i]:=inttostr(k);
end;
finally
closefile(f1);
end;
except
on einouterror do showmessage('Ошибка при работе с файлом!!!');
on econverterror do showmessage('Ошибка преобразования типов!!!');
end;
end
else showmessage('Файл не найден');
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,d,n:integer;
b:extended;
begin
n:=spinedit1.Value;
d:=stringgrid1.rowCount;
try
for i:=0 to d-1 do begin
for j:=0 to c-1 do begin
if a[j,n]<=0 then raise erangeerror.Create('Îøèáêà ïðè ôîðìèðîâàíèè ìàññèâà!!! '+inttostr(j+1)+'-é ýëåìåíò ìàññèâà <=0');
if n=0 then begin
stringgrid2.Cells[j,0]:=floattostrf(a[j,n]/a[j,d-1],fffixed,3,1);
stringgrid3.Cells[j,0]:=floattostrf(a[j,n]/a[j,n+1],fffixed,3,1);
end;
if n=d-1 then begin
stringgrid2.Cells[j,0]:=floattostrf(a[j,n]/a[j,n-1],fffixed,3,1);
stringgrid3.Cells[j,0]:=floattostrf(a[j,n]/a[j,0],fffixed,3,1);
end;
if (0<n)and(n<d-1) then begin
stringgrid2.Cells[j,0]:=floattostrf(a[j,n]/a[j,n-1],fffixed,3,1);
stringgrid3.Cells[j,0]:=floattostrf(a[j,n]/a[j,n+1],fffixed,3,1);
end;
end;
end;
except
on econverterror do showmessage('Îøèáêà ïðåîáðàçîâàíèÿ òèïîâ!!!');
on ezerodivide do messagedlg('Ïîïûòêà äåëåíèÿ íà íîëü',mterror,[mbok],0);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var j:integer;
str,str1:string;
begin
if savedialog1.Execute then begin
assignfile(f,savedialog1.filename);
try
try
rewrite(f);
writeln(F,' ÌÀÑÑÈÂ Â ');
for j:=0 to c-1 do
str:=str+stringgrid2.cells[j,0]+'; ' ;
writeln(f,str);
writeln(f);
WRITELN(F,' ÌÀÑÑÈÂ Ñ ');
for j:=0 to c-1 do
str1:=str1+stringgrid3.cells[j,0]+'; ' ;
writeln(f,str1);
finally
closefile(f);
end;
except
on einouterror do showmessage('Îøèáêà ïðè ðàáîòå ñ ôàéëîì!!!');
on econverterror do showmessage('Îøèáêà ïðåîáðàçîâàíèÿ òèïîâ!!!');
end;
end
else showmessage('Ôàéë íå íàéäåí!!!');
end;
end.
Последний раз редактировалось Arm!n; 09.12.2010 в 23:03.
|