|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.12.2010, 15:32 | #1 |
Новичок
Джуниор
Регистрация: 10.12.2010
Сообщений: 1
|
Вычисление диапазонов дат, Delphi (Решено)
Есть массив [1..31] типа integer, содержащий значения 0 или 1 (если сотрудник присутствовал на работе - то 1, если нет - 0). Нумерация массива соответствует дате в месяце. Необходимо вычислить диапазоны дат, когда сотрудник присутствовал на работе. Например: обработка массива 1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,1,1,1,1 должна давать такой результат: с 01.12.2010 по 05.12.2010; с 07.12.2010 по 08.12.2010; с 28.12.2010 по 31.12.2010
Заранее спасибо! Решил самостоятельно. Спасибо всем, кто пытался помочь! var Form1: TForm1; A: array [1..32] of string; //Объявляем массив вместо 31 из 32 элементов, чтобы исключить ошибку обработки '1' в конце строки implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var st, s: string; dnach, dp, dok, d, i, ii: integer; begin A[1]:='0'; A[2]:='0'; A[3]:='0'; A[4]:='0'; A[5]:='0'; A[6]:='0'; A[7]:='0'; A[8]:='0'; A[9]:='0'; A[10]:='0'; A[11]:='0'; A[12]:='0'; A[13]:='0'; A[14]:='1'; A[15]:='1'; A[16]:='1'; A[17]:='1'; A[18]:='0'; A[19]:='0'; A[20]:='0'; A[21]:='0'; A[22]:='0'; A[23]:='0'; A[24]:='0'; A[25]:='0'; A[26]:='0'; A[27]:='0'; A[28]:='0'; A[29]:='0'; A[30]:='0'; A[31]:='1'; A[32]:='0'; for i:=1 to 32 do s:=s+A[i]; Edit1.Text:=s; for i:=1 to 32 do begin dp:=0; d:=Pos('1',s); if d>0 then //Если в строке найдена 1, то begin dnach:=d; //Фиксируем дату начала диапазона while (StrToInt(A[d])>0) and (d<32) do //Пока значение d в массиве A >0, выполнять begin dp:=dp+1; //Увеличиваем счетчик кол-во дней подряд if d<32 then d:=d+1 //Увеличиваем счетчик на 1 else Break; end; dok:=dnach+dp-1; //Вычисляем дату окончания диапазона st:=st+' с '+IntToStr(dnach)+' по '+IntToStr(dok)+';'; //Заполняем переменную string for ii:=dnach to dnach +dp-1 do //Заменяем 1 на 0 в проверенных символах begin //и присваиваем обновленное значение строке Delete(s,ii,1); Insert('0',s,ii); end; end; end; Edit1.Text:=Copy(st,1,Length(st)-1); //Помещаем в TEdit без последнего символа ';' end; end. Последний раз редактировалось kmvas; 11.12.2010 в 11:48. Причина: Задача решена |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычисление разницы дат | Dux | Общие вопросы Delphi | 10 | 14.09.2010 15:41 |
Работа с именами диапазонов | rick1177 | Microsoft Office Excel | 5 | 01.08.2010 12:38 |
Необходимо создать списки из диапазонов IP | Azz100 | JavaScript, Ajax | 0 | 26.05.2010 23:51 |
Сложение Диапазонов | valerij | Microsoft Office Excel | 19 | 02.04.2009 13:52 |
Выбор диапазонов диаграмм | apfu00 | Microsoft Office Excel | 4 | 03.02.2009 17:04 |