Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

Задание, которое не могу "расшифровать"...   Найти похожие ветки 

 
csh   (2007-05-15 02:14) [0]

Прошу прощения заранее - мой вопрос от бессилия. Пытаюсь оказать помощь сыну, а мои знания в области программирования далее Фортрана не распространяются. Самое обидное, до конца не могу понять задачуь - что надо делать?! В задании написано (буквально с точностью до знвков пунктуации): "Базовый класс: линейный список целых чисел. Конструкторы: копирующий, по столбцу компонента TStringGrid, по ascii-кодам символов строки типа string. Производный класс: список из второй половины исходного списка. Конструкторы: копирующий, по столбцу компонента TStringGrid, по объекту базового класса. Методы выводав строку TStringGrid для обеих класов". Пожалуйста, подскажите, что все-таки надо тут делать??? В чем заключается задание? Еще раз извините и заранее благодарен всем откликнувшимся на мою беду :(


 
Однокамушкин   (2007-05-15 08:43) [1]

Ну как я понял, это надо создать класс который хранит линейных список целых чисел. У базового класса должно быть два конструктора. Первый конструктор принимает в качестве параметра, скажем, TStringGrid и номер столбца, просматривает указанный столбец, извлекает из него все числа и строит список, содержищий их. Второй констркутор этого класса в к4ачестве параметра принимает строку и на её основе строит список чисел, содержищий аски-коды символов, входящих в строку. И есть у этого класса метод, который принимает в качестве параметров TStringGrid и номер строки и заполняет эту строку числами из своего списка. Наследник делает всё то же самое, но его констркуторы игнорируют первую половину списка. Например конструктор на основе TStringGrid начинает помещать в список значения только из нижней половины столбца. А второй его констркутор принимает в качестве параметра объект предка и копирует из него в себя вторую половину его списка. Вот что-то такое...


 
csh   (2007-05-15 09:30) [2]

Спасибо огромное!!!  Буду пытаться в муках творчества (т.е. по книжке Фаронова) "рожать" реализацую уже Вашей трактовки. Эх, если хотя бы знал, в какую сторону и как двигаться...


 
Однокамушкин   (2007-05-15 10:09) [3]

двигаться-то тут просто... Размер списка определяется один раз в конструкторе, значит его лучше реализовать динамическим массивом целых. вот вам для затравки пример с куском базового класса и конструктора по строке

type
 TBaseClass = class
 private
   FList: array of Integer;
 public
   constructor CreateFromString(const S: string);
 end;

constructor TBaseClass.CreateFromString(const S: string);
var
 I: Integer;
begin
 inherited;
 SetLength(FList, Length(S));
 for I := 0 to High(FList) do
   FList[I] := Ord(S[I + 1]);
end;


Теперь вам осталось реализовать для этого класса конструктор CreateFromGridCol и метод LoadToGridRow, и всё готово :)

Метод LoadToFridRow может выглядеть, например, так:

procedure TBaseClass.LoadToGridRow(Grid: TStringGrid; Row: Integer);
var
 I: Integer;
begin
 if Grid.RowCount < Row + 1 then
   Grid.RowCount := Row + 1;
 if Grid.ColCount - Grid.FixedCols < Length(FList) then
   Grid.ColCount := Grid.FixedCols + Length(FList);
 for I := 0 to High(FList) do
   Grid.Cells[Grid.FixedCols + I] := IntToStr(FList[I]);
end;


в общем, думаю, вам хватит, чтобы разобраться :)
end;


 
csh   (2007-05-15 10:31) [4]

Большое Вам человеческое спасибо!!!!!!!!!!!  Теперь, когда Вы практически задачу решили, мы то уж детали добьем.

Спасибо еще раз за участие и сочуствие!


 
Kolan ©   (2007-05-15 10:33) [5]

> CreateFromString

Никогда бы не догодался что это конструктор. Надо overload Create требуемое кол-во раз.


 
csh   (2007-05-15 11:01) [6]

2 kolan: спасибо и Вам за комментарий, но... пока я таких "штучек" (overload Create) не знаю...   :)


 
Однокамушкин   (2007-05-15 11:41) [7]


> Kolan ©   (15.05.07 10:33) [5]
> > CreateFromString
>
> Никогда бы не догодался что это конструктор. Надо overload
> Create требуемое кол-во раз.


рекомендую посоветовать то же самое разработчикам VCL :))) А то например, у TComObject три конструктора: Create, CreateAggregated и CreateFromFactory. и ничего :))) И у TWinControl их два - Create и CreateParented.

и вообще, не понимаю, почему я должен называть конструкторы всегда Create, если язык меня к этому не обяхывает? Это не цэ-плюс-плюс, где все констркуторы имеют одно имя.


 
Desdechado ©   (2007-05-15 15:48) [8]

Имхо, в задании речь о трех конструкторах.
Копирующий конструктор, видимо, должен создавать новый экземпляр списка с содержимым, аналогичным другому списку.


 
csh   (2007-05-15 16:22) [9]

Всем большое-большое спасибо! Все сделали, все получилось и... все уже сдали!



Страницы: 1 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
15-1178037925
sayuki
2007-05-01 20:45
2007.06.03
Version Control


1-1175846980
Bless
2007-04-06 12:09
2007.06.03
зачем нужно TInterfacedObject(Result).FRefCount := 1 ?


11-1160734977
Psychedelic
2006-10-13 14:22
2007.06.03
Как перехватить сообщения без KOL applet и Form.OnMessage


2-1178941012
Iv_
2007-05-12 07:36
2007.06.03
Цветная бегущая строка


1-1176136783
GreyWolf
2007-04-09 20:39
2007.06.03
Build number в Delphi