ЛР6. Порядковые типы данных

Задание

Разработать модуль на Free Pascal, который позволяет исследовать встроенные порядковые типы. Модуль содержит следующие функции/процедуры:

    Блок 1 (с проверочной программой)

  1. Функция, определяющая корректность названия типа данных. Параметр: строка, содержащая название типа данных. Возвращаемый результат: true - для корректного названия, false - для некорректного. Поддерживаемые названия: Shortint SmallInt Longint Int64 Byte Word Longword QWord Boolean Char.
  2. Функция, генерирующая случайное значение для переменной переданного типа данных.
    Параметр: строка, содержащая название типа данных.
    Результат функции: строковое представление значения полученной переменной.

    Блок 2 (с результирующей программой)

  3. Функция, возвращающая в виде строки одну из характеристик переданного типа данных.
    Параметр 1: строка, содержащая название типа данных.
    Параметр 2: перечислимый тип, описывающий характеристики типа данных - (1) нижняя граница типа; (2) верхняя граница типа; (3) размер типа в байтах;
    Результат функции: строковое представление полученного значения.
  4. Функция, возвращающая в виде строки одну из характеристик переменной переданного типа данных.
    Параметр 1: строка, содержащая название типа данных.
    Параметр 2: перечислимый тип, описывающий характеристики переменной - (1) сгенерированное ранее значение переменной; (2) предыдущее значение переменной; (3) последующее значение переменной; (4) значения байтов, хранящих переменную введенного типа, в порядке их расположения в оперативной памяти.
    Результат функции: строковое представление полученного значения.

Разработать программу, которая получает на вводе строку типа данных. Программа, с использованием функций разработанного модуля, либо выводит сообщение об ошибке, в случае некорректного типа данных, либо выводит характеристики введенного типа данных и характеристики сгенерированной переменной указанного типа.

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

Исследуемый тип: Longint
Нижняя граница: -2147483648
Верхняя граница: 2147483647
Байт на переменную: 4
Случайное значение: 818295054
Предыдущее значение: 818295053
Последующее значение: 818295055
Содержимое оперативной памяти: 14 49 198 48 

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

Для перевода числовых значений в строку следует использовать функцию Str. Для объединения строк следует использовать либо операцию +, либо функцию concat.

Для корректной визуализации всего диапазона типа Char следует возвращать не значение, а ASCII-код символа с префиксным символом #. Например, символ 'A' следует возвратить как строку '#65'.

Получение случайных значений с использованием функции Random ограничено неотрицательным диапазоном типа Int64. Поэтому для получения случайных значений из всего диапазона целочисленных типов данных, а также типов, диапазон которых в положительной области превышает диапазон для типа Longint, рекомендуется получать случайное значение для каждого байта целочисленного типа и сохранять полученный результат в соответствующей области памяти.

*Бонусное задание (+50 баллов)

Задание не является обязательным к выполнению. Задание принимается только после сдачи лабораторной работы. Срок действия задания - до конца льготного периода. Если в течении льготного периода решения отсутствуют, то после его окончания принимается только одно решение.

Дано вещественное значение. Не используя прямо или косвенно средства математического сопроцессора или эмуляции вещественной арифметики (при ее наличии), получить и вывести значение вещественного числа. Использовать побайтовый и побитовый доступ к содержимому вещественной переменной. для стандартизации вывода рекомендуется использовать экспоненциальный формат.