Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.
Формат представления текущей даты в некоторых системных структурах имеет вид:
№ разряда 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Значение D D D D D M M M M M Y Y Y Y Y Y

где:
D..D - день
M..M - месяц
Y..Y - год после 1980


За основу программы упаковки предлагают взять следущую:
program Project1;
{ $APPTYPE CONSOLE}
uses
 SysUtils;

Var C:Byte;
 F:Byte;
 B:Byte;
 N:Byte;
 UnitStateWord:Word;
begin
 Write('Введите код состояния (0..31) >');
 ReadLn©;
 Write('Введите признак ошибки - (0,1) >');
 ReadLn(F);
 Write('Введите признак занятости - (0,1) >');
 ReadLn(cool.gif;
 Write('Введите количество байт - (0..255) >');
 ReadLn(N);
 UnitStateWord:=(C and $1F) shl 11;
 UnitStateWord:=UnitStateWord or (F and 1) shl 9;
 UnitStateWord:=UnitStateWord or (B and 1) shl 8;
 UnitStateWord:=UnitStateWord or N;
 WriteLn(Format('%d=$%0:x',[UnitStateWord]));
 ReadLn;
end.


Не совсем понимаю как это работает, и что надо исправить чтобы соответствовало условию задачи