{$MODE FPC} //диалект FPC {$COPERATOR ON} //Allow C like operators //Включите в настройках компилятора поддержку C подобных операторов, это указание может не работать program TimeLimit; uses SysUtils, DateUtils; type F=file of TDateTime; var MyFile: F; //файл дат const path = ''; //путь SleepTime : word=2; //перерыв между записями, положительное число function Date():string; //функция возращает текущую дату строкой var D : TDateTime; begin D:=Now; Date:=IntToStr(YearOf(D)); if (MonthOf(D)<10) then Date+='0'; Date+=IntToStr(MonthOf(D)); if (DayOf(D)<10) then Date+='0'; Date+=IntToStr(DayOf(D)); end; procedure OpenOrCreateFile (const Name: string; var WorkFile:F); //Open Or Create File:) , где Name -- имя файла, WorkFile -- файловая переменная begin assign(WorkFile,(path+Name+'.txt')); //MyFile -- переменная-файл If FileExists(Name) Then reset(WorkFile) //append (WorkFile) //открытие на редактирование else rewrite(WorkFile); while not EOF do //должно гарантировать смещения курсора на последнюю позицию seek(WorkFile, (FILEPOS(WorkFile)+1)); end; procedure print (var WorkFile:F); //печатает дату в файл //поидее должна печатать новую дату, если комп не работал/его выключали //или писать новую дату на место старой даты. var Time:TDateTime; begin {у меня есть сильное сомнение по оптимальности данного разветления} if FILEPOS(WorkFile)>0{?} then begin //если сегодня машина уже работала seek(WorkFile, FILEPOS(WorkFile)-1); read(MyFile, Time); //читаем превыдущую запи if ((Time - DateOf(now)) <> SleepTime) then begin //если машину выключали seek(WorkFile, FILEPOS(WorkFile)+1); //inc(seek); write(MyFile,DateOf(now)) //написать новую дату end else begin //если машину не выключали write(MyFile, DateOf(now)); //написать новую дату end; end else write(MyFile, TimeOf(now)) ; //написать новую дату end; begin repeat OpenOrCreateFile(path+Date(),MyFile); //имя файла -- текущаяы дата print(MyFile); //запись close(MyFile); //закрыть файл sleep(SleepTime); //перерыв until true; end.