Доброе время суток.
Прошу помощи в написании программы. Это как бы домашнее задание.
Нужно написать программу которая обрабатывает данные теста по математическим формулам + построение графика.
Вид теста: excel страница с границами 40столбцов на не известное количество строк, заполненная 1 и 0.
Как выяснилось позже, еще и с возможностью работы без наличия на компьютере Microsoft office.
Я в шоке!!! C чего начать?
Как понимаю нужно начинать с Collection?
Вот немного начал:
Сообщение отредактировал Stalker 1988 - 20.11.2010, 15:02
Прошу помощи в написании программы. Это как бы домашнее задание.
Нужно написать программу которая обрабатывает данные теста по математическим формулам + построение графика.
Вид теста: excel страница с границами 40столбцов на не известное количество строк, заполненная 1 и 0.
Как выяснилось позже, еще и с возможностью работы без наличия на компьютере Microsoft office.
Я в шоке!!! C чего начать?
Как понимаю нужно начинать с Collection?
Вот немного начал:
Spoiler:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
{ TMyCollectionItem }
TMyCollectionItem = class(TCollectionItem)
private
FMark: byte;
FObj: TObject;
procedure SetMark(const AValue: byte);
procedure SetObj(const AValue: TObject);
public
constructor Create(ACollection: TCollection); override;
destructor Destroy; override;
published
property Mark: byte read FMark write SetMark;
property Obj: TObject read FObj write SetObj;
end;
TMyCollection = class(TCollection)
private
FItemSum: integer;
function GetItem(Index: Integer): TMyCollectionItem;
function GetItemSum: integer;
procedure SetItem(Index: Integer; Value: TMyCollectionItem);
public
constructor Create(AItemClass: TCollectionItemClass);
function Add: TMyCollectionItem;
property Items[Index: Integer]: TMyCollectionItem read GetItem write SetItem;
property ItemSum: integer read FItemSum;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
FCollection: TMyCollection;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
FCollection := TMyCollection.Create(TMyCollectionItem);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FCollection.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FCollection.Add;
ShowMessage(IntToStr(FCollection.Count));
end;
{ TMyCollectionItem }
procedure TMyCollectionItem.SetMark(const AValue: byte);
var
P: TMyCollection;
begin
if AValue=FMark then Exit;
P := Self.Collection as TMyCollection;
P.ItemSum := P.ItemSum - FMark;
FMark := AValue;
P.ItemSum := P.ItemSum + FMark;
end;
procedure TMyCollectionItem.SetObj(const AValue: TObject);
begin
if FObj=AValue then exit;
if FObj<>nil then
FObj.Free;
FObj:=AValue;
end;
constructor TMyCollectionItem.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FObj := nil;
end;
destructor TMyCollectionItem.Destroy;
begin
if FObj<>nil then
FreeAndNil(FObj);
inherited Destroy;
end;
{ TMyCollection }
function TMyCollection.GetItem(Index: Integer): TMyCollectionItem;
begin
Result := (inherited GetItem(Index)) as TMyCollectionItem;
end;
function TMyCollection.GetItemSum: integer;
begin
Result := 0;
for I:=0 to Count-1 do
Result := Result + Items[I].Mark;
end;
procedure TMyCollection.SetItem(Index: Integer; Value: TMyCollectionItem);
begin
inherited SetItem(Index, Value);
end;
constructor TMyCollection.Create(AItemClass: TCollectionItemClass);
begin
inherited Create(AItemClass);
FItemSum := 0;
end;
function TMyCollection.Add: TMyCollectionItem;
begin
Result := (inherited Add) as TMyCollectionItem;
end;
initialization
{$I unit1.lrs}
end.
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
{ TMyCollectionItem }
TMyCollectionItem = class(TCollectionItem)
private
FMark: byte;
FObj: TObject;
procedure SetMark(const AValue: byte);
procedure SetObj(const AValue: TObject);
public
constructor Create(ACollection: TCollection); override;
destructor Destroy; override;
published
property Mark: byte read FMark write SetMark;
property Obj: TObject read FObj write SetObj;
end;
TMyCollection = class(TCollection)
private
FItemSum: integer;
function GetItem(Index: Integer): TMyCollectionItem;
function GetItemSum: integer;
procedure SetItem(Index: Integer; Value: TMyCollectionItem);
public
constructor Create(AItemClass: TCollectionItemClass);
function Add: TMyCollectionItem;
property Items[Index: Integer]: TMyCollectionItem read GetItem write SetItem;
property ItemSum: integer read FItemSum;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
FCollection: TMyCollection;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
FCollection := TMyCollection.Create(TMyCollectionItem);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FCollection.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FCollection.Add;
ShowMessage(IntToStr(FCollection.Count));
end;
{ TMyCollectionItem }
procedure TMyCollectionItem.SetMark(const AValue: byte);
var
P: TMyCollection;
begin
if AValue=FMark then Exit;
P := Self.Collection as TMyCollection;
P.ItemSum := P.ItemSum - FMark;
FMark := AValue;
P.ItemSum := P.ItemSum + FMark;
end;
procedure TMyCollectionItem.SetObj(const AValue: TObject);
begin
if FObj=AValue then exit;
if FObj<>nil then
FObj.Free;
FObj:=AValue;
end;
constructor TMyCollectionItem.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FObj := nil;
end;
destructor TMyCollectionItem.Destroy;
begin
if FObj<>nil then
FreeAndNil(FObj);
inherited Destroy;
end;
{ TMyCollection }
function TMyCollection.GetItem(Index: Integer): TMyCollectionItem;
begin
Result := (inherited GetItem(Index)) as TMyCollectionItem;
end;
function TMyCollection.GetItemSum: integer;
begin
Result := 0;
for I:=0 to Count-1 do
Result := Result + Items[I].Mark;
end;
procedure TMyCollection.SetItem(Index: Integer; Value: TMyCollectionItem);
begin
inherited SetItem(Index, Value);
end;
constructor TMyCollection.Create(AItemClass: TCollectionItemClass);
begin
inherited Create(AItemClass);
FItemSum := 0;
end;
function TMyCollection.Add: TMyCollectionItem;
begin
Result := (inherited Add) as TMyCollectionItem;
end;
initialization
{$I unit1.lrs}
end.
[close]
Сообщение отредактировал Stalker 1988 - 20.11.2010, 15:02