motofan logo
       
> 

Программисты на помощь., Помогите студенту решить простую задачу!

Stalker 1988
сообщение 19.11.2010, 16:29


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



Доброе время суток.
Прошу помощи в написании программы. Это как бы домашнее задание.

Нужно написать программу которая обрабатывает данные теста по математическим формулам + построение графика.
Вид теста: 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.
[close]


Сообщение отредактировал Stalker 1988 - 20.11.2010, 15:02
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
FEAR4ik
сообщение 19.11.2010, 21:53


Гуру
******

Группа: Пользователи
Сообщений: 727
Регистрация: 1.11.2007
Пользователь №: 152 546
Модель телефона: E398+E1+E2+K1+L9


Настроение:
#keef



Рейтинг: 1049



Название темы не соответствует содержимому. Слово "простую" всё портит...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 20.11.2010, 7:59


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



По словам нашего преподователя, она до боли простая. Только в каком месте не пойму smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
IlluminatI
сообщение 20.11.2010, 10:41


Ветеран
*****

Группа: Пользователи
Сообщений: 670
Регистрация: 15.8.2009
Из: Украина, г.Харьков
Пользователь №: 204 570
Модель телефона: [DROID MAXX][RAZR M]


Настроение:
139



Рейтинг: 520



Stalker 1988,
а какой это курс ?( хотелось бы помочь, но знаний катастрофически не хвататет... )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 20.11.2010, 15:00


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



1 smile.gif
А пока вот, для тех кто не знает как писать программы, но зашел в данную тему wink.gif Архив снизу.
Спойлер прошу открывать после запуска прикола, если вы не знаете что делать)
Подсказка:
Spoiler:
По картинке тыкс
[close]


Сообщение отредактировал Stalker 1988 - 20.11.2010, 15:19
Прикрепленный файл Pricol.rar   ( 329.9 килобайт ) Кол-во скачиваний: 93
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 20.11.2010, 17:35


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Stalker 1988, хм... ну задача реально не сложная, но есть маленькая проблема, мне у самому нужно много сделать))) время, а нет, так что не успею за тебя задачку сделать...
и что за универ такой, на делфе ни в одном университете мира, на сколько я знаю, уже не программирует лет пять как...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 20.11.2010, 17:44


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



Не Delphi а Lazarus, один фиг одно и то же. Подскажи последовательность. Мне просто мыслей не хватает.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chepurnoff
сообщение 20.11.2010, 21:09


Мастер
****

Группа: Разработчики
Сообщений: 179
Регистрация: 15.12.2007
Из: Тюмень - Пенза - Саратов
Пользователь №: 157 192
Модель телефона: E8, VE66, V3i
Прошивка: zMod


Настроение:
Ту бир ор нот ту бир?



Рейтинг: 275



А что обязательно Excel-таблица, просто таблица не катит?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 21.11.2010, 7:35


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



Можно и текстовик с разделителями.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chepurnoff
сообщение 21.11.2010, 12:58


Мастер
****

Группа: Разработчики
Сообщений: 179
Регистрация: 15.12.2007
Из: Тюмень - Пенза - Саратов
Пользователь №: 157 192
Модель телефона: E8, VE66, V3i
Прошивка: zMod


Настроение:
Ту бир ор нот ту бир?



Рейтинг: 275



Ну тогда ничего сложного я там тоже не вижу, только на дельфях неумею pardon.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 22.11.2010, 10:11


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



Дак вот не делфи, а лазарус smile.gif
На си выполнение намного проще)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stalker 1988
сообщение 23.11.2010, 7:08


MotoArhangel
******

Группа: Разработчики
Сообщений: 703
Регистрация: 29.5.2006
Из: Алтайский край
Пользователь №: 85 312
Модель телефона: DEFY \ Atrix 4G
Прошивка: CM10 & MIUI


Настроение:
Ну вот и вернулся =)



Рейтинг: 465.5



Спасибо все.
Chepurnoff, говоришь задача реально не сложная?

вот и это только начало:
Spoiler:

unit ResolveArrays;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils;

type

{ TColTotals }

TColTotals = class(TObject)
private
FColSum: integer;
FJobID: integer;
public
constructor Create;
//Сумма по столбцу
property ColSum: integer read FColSum;
property JobID: integer read FJobID write FJobID;
end;

{ TColList }

TColList = class(TList)
private
FRowSum: integer;
FStudentID: integer;
function Get(Index: Integer): integer;
procedure Put(Index: Integer; const AValue: integer);
public
function Add(AValue: integer): Integer;
property Items[Index: Integer]: integer read Get write Put; default;
property RowSum: integer read FRowSum;
property StudentID: integer read FStudentID write FStudentID;
end;


{ TResolveArray }


TResolveArray = class(TObject)
private
//Список указателей на строки таблицы результатов
FRows: TList;
//Список итогов по столбцам
FColTotals: TList;
//Количество заданий
FColCount: integer;
//Получить значение ячейки таблицы результатов
function GetCell(IndexRow, IndexCol: integer): integer;
function GetColSum(const Index: integer): integer;
//Получить номер задания по номеру столбца
function GetJobID(IndexCol: integer): integer;
//Получить количество строк в таблице ответов
function GetRowCount: integer;
function GetRowSum(const Index: integer): integer;
//Получить номер участника по номеру строки
function GetStudentID(IndexRow: integer): integer;
//Установить оценку за задание в ячейку таблицы ответов
procedure SetCell(IndexRow, IndexCol: integer; const AValue: integer);
//Установить номер задания для стоблца
procedure SetJobID(IndexCol: integer; const AValue: integer);
//Установить номер учащегося по строке
procedure SetStudentID(IndexRow: integer; const AValue: integer);
//Удалить строку ответов
procedure RowDelete(const Index: integer);
//Удалить колонку
procedure ColDelete(const Index: integer);
//Дополнить количество строк до заданного размера
procedure AppendRowTo(const ARowCount: integer);
//Дополнить количество стобцов до указанного
procedure AppendColTo(const AColCount: integer);
public
constructor Create;
destructor Destroy;virtual;
property Cell[IndexRow, IndexCol: integer]: integer read GetCell write SetCell;
property StudentID[IndexRow: integer]: integer read GetStudentID write SetStudentID;
property JobID[IndexCol: integer]:integer read GetJobID write SetJobID;
property RowCount: integer read GetRowCount;
property ColCount: integer read FColCount;
property RowSum[const Index: integer]: integer read GetRowSum;
property ColSum[const Index: integer]: integer read GetColSum;
end;


implementation

{ TResolveArray }

function TResolveArray.GetCell(IndexRow, IndexCol: integer): integer;
begin
if (IndexCol<0) or (IndexCol>ColCount) or (IndexRow<0) or (IndexRow>RowCount) then
Result := -1
else
Result := Integer(TColList(FRows[IndexRow]).Items[IndexCol]);
end;

function TResolveArray.GetColSum(const Index: integer): integer;
begin
if (Index<0) or (Index>=ColCount) then
Result := -1
else
Result := TColTotals(FColTotals[Index]).ColSum;
end;

function TResolveArray.GetJobID(IndexCol: integer): integer;
begin
if (IndexCol<0) or (IndexCol>=ColCount) then
Result := -1
else
Result := TColTotals(FColTotals[IndexCol]).JobID;
end;

function TResolveArray.GetRowCount: integer;
begin
Result := FRows.Count;
end;

function TResolveArray.GetRowSum(const Index: integer): integer;
begin
if (Index<0) or (Index>=RowCount) then
Result := -1
else
Result := TColList(FRows[Index]).RowSum;
end;

function TResolveArray.GetStudentID(IndexRow: integer): integer;
begin
if (IndexRow<0) or (IndexRow>=RowCount) then
Result := -1
else
Result := TColList(FRows[IndexRow]).StudentID;
end;

procedure TResolveArray.SetCell(IndexRow, IndexCol: integer; const AValue: integer
);
begin
AppendRowTo(IndexRow+1);
AppendColTo(IndexCol+1);
with TColTotals(FColTotals[IndexCol]) do
FColSum := FColSum - TColList(FRows[IndexRow]).Items[IndexCol];
TColList(FRows[IndexRow]).Items[IndexCol] := AValue;
with TColTotals(FColTotals[IndexCol]) do
FColSum := FColSum + TColList(FRows[IndexRow]).Items[IndexCol];
end;

procedure TResolveArray.SetJobID(IndexCol: integer; const AValue: integer);
begin
AppendColTo(IndexCol+1);
TColTotals(FColTotals[IndexCol]).JobID := AValue;
end;

procedure TResolveArray.SetStudentID(IndexRow: integer; const AValue: integer);
begin
AppendRowTo(IndexRow+1);
TColList(FRows[IndexRow]).StudentID := AValue;
end;

procedure TResolveArray.RowDelete(const Index: integer);
begin
if (Index<0) and (Index >= RowCount) then Exit;
TColList(FRows[Index]).Free;
FRows.Delete(Index);
end;

procedure TResolveArray.ColDelete(const Index: integer);
var
I: integer;
begin
if (Index<0) or (Index >= ColCount) then Exit;
for I:=0 to RowCount do
TColList(FRows[I]).Delete(I);
Dec(FColCount);
TObject(FColTotals[Index]).Free;
FColTotals.Delete(Index);
end;

procedure TResolveArray.AppendRowTo(const ARowCount: integer);
var
I, J: integer;
NewIndex: integer;
begin
for I:=RowCount to ARowCount-1 do
begin
NewIndex := FRows.Add(TColList.Create);
for J:=0 to ColCount-1 do
TColList(FRows[NewIndex]).Add(0);
end;
end;

procedure TResolveArray.AppendColTo(const AColCount: integer);
var
I, J: integer;
begin
if AColCount<ColCount then Exit;
for I:=0 to RowCount-1 do
for J:=ColCount to AColCount-1 do
begin
TColList(FRows[I]).Add(0);
FColTotals.Add(TColTotals.Create);
end;
FColCount := AColCount;
end;

constructor TResolveArray.Create;
begin
inherited Create;
FColCount:=0;
FRows := TList.Create;
FColTotals := TList.Create;
end;

destructor TResolveArray.Destroy;
var
I: integer;
begin
while RowCount>0 do
RowDelete(0);
FRows.Free;
for I:=0 to FColTotals.Count-1 do
TObject(FColTotals[I]).Free;
FColTotals.Free;
inherited Destroy;
end;


{ TColList }

function TColList.Get(Index: Integer): integer;
begin
Result := Integer(inherited Get(Index));
end;

procedure TColList.Put(Index: Integer; const AValue: integer);
begin
if Index < Count then
FRowSum := FRowSum - Get(Index);
inherited Put(Index, TObject(AValue));
FRowSum := FRowSum + Get(Index);
end;

function TColList.Add(AValue: integer): Integer;
begin
Result := inherited Add(TObject(AValue));
end;

{ TColTotals }

constructor TColTotals.Create;
begin
inherited Create;
FColSum := 0;
FJobID := -1;
end;

end.
[close]

Может кто то посоветует вариант по лучше.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Chepurnoff
сообщение 27.11.2010, 13:24


Мастер
****

Группа: Разработчики
Сообщений: 179
Регистрация: 15.12.2007
Из: Тюмень - Пенза - Саратов
Пользователь №: 157 192
Модель телефона: E8, VE66, V3i
Прошивка: zMod


Настроение:
Ту бир ор нот ту бир?



Рейтинг: 275



Да, не сложно, на делфях смотрю многа букав получается)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 27.11.2010, 22:49


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Chepurnoff,
ну дык... если сравнить например...
Код
begin
begin
end;
begin
begin
end;
end;
end.
и
Код
{{}{{}}}

сразу видно laugh.gif
где букв больше... но от этого первый вариант ничуть не сложнее ИМХО...

Stalker 1988,
длинная не значит сложная, извини , я за компом не был, не мог момочь, а с телефона код писать на делфях... полное извращение...
или не делфи, а как ты там говорил лазарус... но по мне те же пасхальные, только в профиль...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Программисты на помощь., Помогите студенту решить простую задачу! · Обо всём · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 10:26

Форум живёт: