|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Чуть-чуть вопросов по алгоритму
Здравствуйте, уважаемые форумчане. К сожалению, не учился на программиста, поэтому такие вещи, как блок-схема и алгоритм вызывают затруднение. Есть 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
|
||||
|
||||
Цитата:
Код:
var i: Integer; begin for i := 1 to 116 do begin (FindComponent('image'+IntToStr(i)) as TImage).Canvas.Pen.Color := clRed; end; end; |
#3
|
||||
|
||||
Цитата:
|
#4
|
||||
|
||||
Я бы не рисовал в отдельных картинках.
Я бы рисовал на канве паинтбокса, для всех 116. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
В DrawGrid.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
||||
|
||||
А зачам их всех разом отображать? Если число сотрудников прибавится, то всю программу переписывать.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
Найди студента, за 500р. набросает программу.
А сам ты потратишь в 10-ток раз времени больше. |
#8
|
||||
|
||||
Ладно, сам в понедельник вторник буду мучить if then else, попробую какую никакую логику изобразить
|
#9
|
|||
|
|||
Для начала надо сформировать правильный список точек.
Я бы делал так (это для отдельного человека). 1. Список будет состоять из записей, в которых содержится отметка времени и тип отметки (пришел/ушел). 2. Далее сортируем список по отметкам времени. 3. Теперь "сливаем" (для простоты) подряд идушие отметки одинакового типа (в зависимости от типа отметки "сливаются" вправо или влево). 4. Контролируем, что первая отметка есть приход и последняя - уход. Если не так, то добавляем соотв. отметки в 0:00 и 24:00. 5. Рисуем по графику. Если как следует подумать, то, возможно, весь алгорим получится уложить в один цикл, хотя сомневаюсь. А вообще, такие данные надо заранее нормализовать и потом уже готовые использовать. Например, на уровне разбора/импорта лога нормализуем данные и сохраняем их в оперативную БД. Далее рисуем по готовым данным уже из БД. |