Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 15:32   #1
kmvas
Новичок
Джуниор
 
Регистрация: 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. Причина: Задача решена
kmvas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление разницы дат 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