Лабораторная 1. Порядковые типы данных в оперативной памяти

Разработать консольную программу, получающую на вводе строку, значение которой может быть равным одному из следующих вариантов:
Shortint SmallInt Longint Longword Int64 Byte Word Cardinal QWord.

Если введенная строка не соответствует ни одному из приведенных вариантов, вывести на экран слово Error и завершить работу программы.

Для введенного типа данных вывести на экран (1) нижную границу типа, (2) верхнюю границу типа, (3) размер типа в байтах. Заполнить переменную введенного типа случайным значением из диапазона от нижней до верхней границы типа. Вывести на экран (4) полученное значение, (5) предыдущее и (6) последующее значение. Вывести на экран (7) значения байтов, хранящих переменную введенного типа, в порядке их расположения в оперативной памяти.

Запрещается использовать константные значения характеристик типа. Значения всех характеристик типа следует вычислять, используя специальные функции для работы с порядковым типом данных (low, high и т.д.).

Пример вывода для типа Longint:

Исследуемый тип: Longint
Нижняя граница: -2147483648
Верхняя граница: 2147483647
Байт на переменную: 4
Случайное значение: 818295054
Предыдущее значение: 818295053
Последующее значение: 818295055
Содержимое оперативной памяти: 14 49 198 48 
Для получения случайных значений из всего диапазона конкретного типа данных следует вывести корректную формулу, которую можно статистически проверить следующим образом:
// программа для статистической проверки вероятности появления случайных значений по конкретной формуле
// в данном случае формула содержит ошибку, благодаря которой не учитываются 3 возможных значения 
// вариант решения представлен для типа shortint, однако полученные результаты будут реальны 
// для любого целочисленного типа (integer, longint, smallint, int64)

{$R+} // обязательная проверка на выход из диапазона
var
    i:longint;
    x:array[shortint]of longint;
    b:shortint;
begin

randomize;
for i:=1 to 1000000 do
begin
 //проверка формулы
 b:=(random(high(shortint))+1)+low(shortint)+(random(high(shortint))+1);
 inc(x[b]);
end;

for i:=low(shortint) to high(shortint) do
begin
 if x[i]=0 then begin
  writeln(i,' not found');
 end;
end;

readln;

end.