![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте, нужна ваша помощь. Задание таково: у нас есть программа, которая считывает матрицу из файла и выводит её сумму в memo в виде строки "Сумма элементов матрицы=....". Нужно сделать так, чтобы по нажатию кнопки сохранить, программа сохраняла эту строку с суммой эл в файл , где лежала матрица(т.е теперь у нас файл с матрицей и с этой строкой). Теперь,если мы вызываем этот же файл, программа должна сверить сумму эл матрица в файле с суммой в этой строке, которая лежит в файле, и если сумма совпадает написать " файл обработан", если матрица была изменена, то он опять сверяет сумму со строкой(сумма получается уже другая) и должен снова посчитать сумму матрица и вывести её в мемо.
Вот код по подсчету суммы эл матрицы. Код:
unit UnProt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFMain = class(TForm) BTInput: TButton; BTexit: TButton; Memo1: TMemo; OD1: TOpenDialog; Label1: TLabel; Label2: TLabel; procedure BTexitClick(Sender: TObject); procedure BTInputClick(Sender: TObject); private { Private declarations } public { Public declarations } end; type TMatrix = Array of Array of real; var FMain: TFMain; implementation {$R *.dfm} procedure TFMain.BTexitClick(Sender: TObject); begin if (messagedlg('Вы действительно хотите выйти?',mtconfirmation,[mbYes,mbNo],0)=mryes) then close; end; procedure TFMain.BTInputClick(Sender: TObject); var M: TMatrix; summ:real; F: TextFile; c: Char; i, j: Integer; s:string; begin if od1.Execute then AssignFile(F,od1.filename); Reset(F); j := 0; i := 0; summ:=0; // читаем пока не конец файла while not Eof(F) do begin j := 0; // читаем пока не встретится перенос строки while not Eoln(F) do begin SetLength(M, i + 1); // увеличиваем размер строк у матрицы на +1 SetLength(M[i], j + 1); // увеличиваем размер столбцов для первой строки Read(F, M[i, j]); // считываем данные j := j + 1; // счетчик столбцов end; Read(F, c); // заглушка, чтобы передвигаться по файлу i := i + 1; // счетчик строк end; memo1.visible:=true; // вывод результата for i := 0 to Length(M) - 1 do begin for j := 0 to Length(M[i]) - 1 do begin S := S + floatToStr(M[i, j]) + ' '; summ:=summ+M[i, j]; end; S := S + #13#10; end; memo1.Lines.Add(s); memo1.Lines.Add(('Сумма элементов матрицы='+floattostr(summ))); end; end. |