-
На базе визуального компонента TstringGrid реализовать класс который реализует двухмерный массив. Количество рядков и столбцов должно задаваться через свойство. Элементы массива отображать в соответствующих ячейках компонента. На базе данного класса реализовать СЛАУ Гаусса.Мне сказали что нужно создать новый компонент на базе TstringGrid. Люди я новичок в этом помогите пожалуйста разобраться..
-
> На базе данного класса реализовать СЛАУ Гаусса
в грид коэффициенты вводить? так для этого новый компонент не нужен
-
В грид кофициенты через свойство вводить нужно. А компонент нада обязательно)
-
> На базе визуального компонента TstringGrid реализовать класс который реализует двухмерный массив. StringGrid - это и есть визуализация двухмерного массива > Количество рядков и столбцов должно задаваться через свойство RowCount, ColCount
-
DimaBr спс.. У меня есть еще вопрос а Слау Гауса в компоненте писать или же в главном модуле проекта?
-
Как лично вам хочется, или как указано в тех-задании
-
DimaBr пожалуйста посмотри мой код ,а то я незнаю правильно ли написал... ето код компонента
unit StringGridmass1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
Tmass=array of Real; Tmatrix=array of Tmass;
TStringGridmass1 = class(TStringGrid) private function GetCols(Index: Integer): TStrings; function GetRows(Index: Integer): TStrings; procedure SetCols(Index: Integer; const Value: TStrings); procedure SetRows(Index: Integer; const Value: TStrings); { Private declarations } protected { Protected declarations }
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState; Sender: TObject;State: TGridDrawState); public { Public declarations }
// Конструктор, создающий массив с указанным размером constructor Create(AOwner: TComponent); override; destructor Destroy; override;
procedure Per(k,n:integer;var a:Tmatrix;var b:Tmass); Procedure PrChod(n:integer;var a:Tmatrix;var b:Tmass); Procedure ObrChod(n:integer;a:Tmatrix;b:Tmass;var x:Tmass);
property Cols[Index: Integer]: TStrings read GetCols write SetCols; property Rows[Index: Integer]: TStrings read GetRows write SetRows;
// Соответственно, нужно возвращать размеры массива
//function sizeX : integer; //function sizeY : integer; published { Published declarations } end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Samples', [TStringGridmass1]); end;
{ TStringGridmass1 } // constructor TStringGridmass1.Create(AOwner: TComponent); begin inherited; Create(AOwner); end; // destructor TStringGridmass1.Destroy; begin
inherited; end;
procedure TStringGridmass1.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState; Sender: TObject ; State: TGridDrawState); var lRow, lCol: LongInt; S: string; begin with Sender as TStringGrid, Canvas do begin if (gdSelected in State) then begin Brush.Color := clHighlight; { *** } end else if (lRow < FixedRows) or (lCol < FixedCols) then begin Brush.Color := FixedColor; end else begin Brush.Color := Color; end; FillRect(ARect); SetBkMode(Handle, TRANSPARENT); TextOut(ARect.Left + 2, ARect.Top + 2, Cells[lCol, lRow]); end; end;
function TStringGridmass1.GetCols(Index: Integer): TStrings; begin
end;
function TStringGridmass1.GetRows(Index: Integer): TStrings; begin
end;
procedure TStringGridmass1.SetCols (Index: Integer; const Value: TStrings); begin
end;
procedure TStringGridmass1.SetRows(Index: Integer; const Value: TStrings); begin
end;
// Слау Гаусса >>>>>>>>>>>
procedure TStringGridmass1.Per(k, n: integer; var a: Tmatrix; var b: Tmass); var j,i:integer;z:Real; begin z:=a[k,k];i:=k; for j:=k+1 to n-1 do begin if abs(a[j,k])>z then begin z:=a[j,k];i:=j; end; end; if i>k then for j:=k to n-1 do begin z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z; end; z:=b[i];b[i]:=b[k];b[k]:=z; end;
//прямой ход Гаусса>>>>>>>>>>>
procedure TStringGridmass1.PrChod(n: integer; var a: Tmatrix; var b: Tmass); var k,j,i:integer; r:real; begin for k:=0 to n-1 do begin if a[k,k]=0 then Per(k,n,a,b);//перестановка строк for j:=k+1 to n-1 do //пересчет коэффициентов begin r:=a[j,k]/a[k,k]; for i:=k to n-1 do begin a[j,i]:=a[j,i]-r*a[k,i]; end; b[j]:=b[j]-r*b[k]; end; end; end;
//обратный ход Гаусса>>>>>>>>>>>>
procedure TStringGridmass1.ObrChod(n: integer; a: Tmatrix; b: Tmass; var x: Tmass); var k,j:integer;r,g:real; begin for k:=n-1 downto 0 do begin r:=0; for j:=k+1 to n-1 do begin g:=a[k,j]*x[j]; r:=r+g; end; x[k]:=(b[k]-r)/a[k,k]; end; end;
end.
-
1. constructor TStringGridmass1.Create(AOwner: TComponent);
begin
inherited;
end; 2. Ничего не понятно, что вы храните в гиде 3. Зачем вручную рисуете ячейки ? 4. Что за посторонние массивы ?
-
Масивы работают с Слау Гауса...В гриде нужно хранить елементы массива. А ячейки я просто забыл закоментировать.
-
Я в этом деле новенький...
-
Спасибо и на єтом))
-
Удалено модератором
-
Подскажите пожалуйста как в компоненте вписать массив в Stringrid ? Чтобы каждое число массив было в отдельной ячейке?
-
Cells[X,Y] := Value;
|