Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.09.2012, 14:59
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию Чуть-чуть вопросов по алгоритму

Здравствуйте, уважаемые форумчане. К сожалению, не учился на программиста, поэтому такие вещи, как блок-схема и алгоритм вызывают затруднение. Есть 2 вопроса, простой и сложнее) :
1. Есть код, например :
image1.canvas.pen.color := clRed;
image2.canvas.pen.color := clRed;
...
image116.canvas.pen.color := clRed;
- сто двадцать раз повторять как бы не торт, возможно же как то оформить в цикл?
2. Все по прежнему по поводу программки, тритий вопрос) :
Есть файлик вида :
Василий;9:05:48;Пришел
Николай;12:03:57;Пришел
Василий;15:03:12;Ушел
Василий;17:45:00;Пришел
Николай;18:00:00;Ушел
Василий;18:01:00;Ушел
Программе нужно на шкале времени зеленым показать, когда был на работе Василий. А как мы видим - он был с девяти утра, до трех дня, и в конце дгя на 15 минут заходил.
Программно, я вот что придумал :
положил на форму image1, длинной ровно 720 (это важно), шириной 9.
Беру из строки время, часы множу на 60 и прибавляю минуты - получается первая точка, когда он пришел. То же самое делаю с точкой ухода. Мы получаем кол-во минут с начала дня когда она пришел и кол-во минут с начала дня когда ушел. Т.к. минут с сутке ровно 1440, а пикселей на канвасе 720 - то просто делим числа / 2 и получаем точку уже на канве. Думаю вроде понятно рассказал.
Но возникли сложности!
Как грамотно построить массив точек, если есть такие камни :
1. Нельзя последовательно создать точку пришел / ушел, по четности, т.е. не обязательно первая запись в файле будет "пришел", а вторая "Ушел", и не обязательно двадцатая будет "Ушел" :
1.1. Вася может остаться в ночь, а отсчет идет с 00(в файле).
1.2. В файле лога может быть записи, что он уходил несколько раз подряд / или приходил несколько раз подряд - эти моменты программа должна игнорировать.
1.3. Абсолютно неизвестно, сколько раз он может приходить / уходить.
*****
Программная часть вопроса сейчас в принципе не вызывает затруднения (спасибо Полисмену огромное), а вот с алгоритмом беда(((...
Может ли кто добрый озвучить, как это можно проще сделать? Просто мысли и идеи?
Заранее спасибо
Ответить с цитированием
  #2  
Старый 20.09.2012, 15:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от alexusankov
Здравствуйте, уважаемые форумчане. К сожалению, не учился на программиста, поэтому такие вещи, как блок-схема и алгоритм вызывают затруднение. Есть 2 вопроса, простой и сложнее) :
1. Есть код, например :
image1.canvas.pen.color := clRed;
image2.canvas.pen.color := clRed;
...
image116.canvas.pen.color := clRed;
- сто двадцать раз повторять как бы не торт, возможно же как то оформить в цикл?
Код:
var
  i: Integer;
begin
  for i := 1 to 116 do
  begin
    (FindComponent('image'+IntToStr(i)) as TImage).Canvas.Pen.Color := clRed;
  end;
end;
p.s. Откуда столько картинок на форме? Вручную бросал что-ли?
Ответить с цитированием
  #3  
Старый 20.09.2012, 15:31
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Код:
var
  i: Integer;
begin
  for i := 1 to 116 do
  begin
    (FindComponent('image'+IntToStr(i)) as TImage).Canvas.Pen.Color := clRed;
  end;
end;
p.s. Откуда столько картинок на форме? Вручную бросал что-ли?
Ну да, Василий не один, сотрудников 116).
Ответить с цитированием
  #4  
Старый 20.09.2012, 16:13
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я бы не рисовал в отдельных картинках.
Я бы рисовал на канве паинтбокса, для всех 116.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 20.09.2012, 16:31
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В DrawGrid.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 20.09.2012, 21:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А зачам их всех разом отображать? Если число сотрудников прибавится, то всю программу переписывать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 20.09.2012, 23:16
Narutomix Narutomix вне форума
Прохожий
 
Регистрация: 20.09.2012
Сообщения: 4
Репутация: 5
По умолчанию

Найди студента, за 500р. набросает программу.

А сам ты потратишь в 10-ток раз времени больше.
Ответить с цитированием
  #8  
Старый 21.09.2012, 12:42
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Ладно, сам в понедельник вторник буду мучить if then else, попробую какую никакую логику изобразить
Ответить с цитированием
  #9  
Старый 21.09.2012, 19:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Для начала надо сформировать правильный список точек.
Я бы делал так (это для отдельного человека).
1. Список будет состоять из записей, в которых содержится отметка времени и тип отметки (пришел/ушел).
2. Далее сортируем список по отметкам времени.
3. Теперь "сливаем" (для простоты) подряд идушие отметки одинакового типа (в зависимости от типа отметки "сливаются" вправо или влево).
4. Контролируем, что первая отметка есть приход и последняя - уход. Если не так, то добавляем соотв. отметки в 0:00 и 24:00.
5. Рисуем по графику.

Если как следует подумать, то, возможно, весь алгорим получится уложить в один цикл, хотя сомневаюсь. А вообще, такие данные надо заранее нормализовать и потом уже готовые использовать. Например, на уровне разбора/импорта лога нормализуем данные и сохраняем их в оперативную БД. Далее рисуем по готовым данным уже из БД.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter