Понедельник, 18 Ноября 2024, 10:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Лабораторная по Паскалю
ТехникДата: Суббота, 15 Сентября 2012, 11:51 | Сообщение # 1
Глава X-ray Games
Сейчас нет на сайте
Доброго времени суток, в вузе задали написать лабу на Паскале. Смысл задания в следующем: есть вещественное число,есть массив из 6 элементов типа байт,надо узнать где у этого вещественного числа мантисса,а где порядок,используя абсолютную перменную. То,что порядок идет перед мантиссой уже понял, но как его вытянуть из эл-тов массива,ведь первый бит указывает знак числа,а в первом эл-те сразу 8 бит. Или есть мысль побитовой работы с каждым элементом. Но стоит ли, может есть что-нибудь проще?
Code

var r:real;
       m:array[1..6] of byte absolute r;

begin
       readln(r);

       {пытаюсь вывести значения,которые находятся в массиве,
         но там нет ничего близкого к значению порядка и мантиссы}
        {...}
end.
TimKruzДата: Суббота, 15 Сентября 2012, 16:44 | Сообщение # 2
старожил
Сейчас нет на сайте
Quote (Техник)
ведь первый бит указывает знак числа,а в первом эл-те сразу 8 бит

Не первый, а седьмой, потому что биты в байте нумеруются справа налево начиная с нуля: 7-6-5-4-3-2-1-0.
Если по условию задачи нельзя использовать тип shortint, то можно использовать условие типа if m[1]>127 then, потому что если включён (=1) седьмой бит, то значение переменной равно или больше 128 (до 255).
Можно ещё использовать какую-нибудь логическую операцию, например, m[1] and 128 - результат либо 128 (7-й включён), либо 0 (7-й выключен).
Ещё можно использовать битовый сдвиг вправо/влево - shr/shl. Например, логически сдвинув вправо на 7 бит, получим значение седьмого бита - результат будет либо 0, либо 1, потому что седьмой бит окажется нулевым, а остальные потеряются.


ТехникДата: Воскресенье, 16 Сентября 2012, 08:53 | Сообщение # 3
Глава X-ray Games
Сейчас нет на сайте
А как определить в каких байтах лежит мантисса,а в каких порядок?
ArchidoДата: Воскресенье, 16 Сентября 2012, 11:38 | Сообщение # 4
Сэнсэй
Сейчас нет на сайте
Quote (Техник)
А как определить в каких байтах лежит мантисса,а в каких порядок?

Так гуглить, не? Институт тем и примечателен, что учит быстро и правильно искать необходимую информацию wink

На самом деле не все так просто.
Если нужен именно 6-ти байтовый Real, то необходимо указывать Real48 - это и есть хитрый и устаревший 6-байтовый флоат, у которого совсем не все как у людей. В более ли менее современных делфях тип Real является 8-ми байтным, аля Double. Если нужен Double, то и массив должен состоять из 8-ми элементов соответственно.
Если хорошенько загуглить, то можно найти неплохой мануалчег по языку и его типам в том числе:


Вот это современный Real аля Double (8 байт). 1 бит - знак, следующие 11 - порядок, остальное - мантисса. Собсна, вытаскивать нужно в обратном порядке.

А вот он Real48:


Знак на том же месте, но порядок и мантиссу тут поменяли местами. 1 бит - знак, следующие 39 - мантисса, и 8 - под порядок.
В этом случае порядок окажется в первом элементе массива E := m[1], в остальных пяти мантисса + знак. Знак можно получить как Sign := (m[6] shr 7);

Вообще интересно, что тебе дальше с этим нужно делать? smile

Для примера можно сделать как-нибудь так:
Code

   F: Real48;
   M: array[1..6] of Byte absolute F;
   Bits: array[0..47] of Byte;

   I, J: Integer;
begin
   F := -5.656;

   for I := 1 to 6 do
     for J := 0 to 7 do
       begin
         Bits[47 - ((I - 1) * 8 + J)]:= (M[I] shr J) and 1;
       end;

В массиве Bits будет F в двоичной системе в виде, собсна, битов. Их положение и порядок совпадают с тем, что приведено на картинках. Берешь нужные и усе happy


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Воскресенье, 16 Сентября 2012, 12:14
ТехникДата: Понедельник, 17 Сентября 2012, 20:30 | Сообщение # 5
Глава X-ray Games
Сейчас нет на сайте
А как можно сделать автоматическое определение где мантисса,а где порядок?
ArchidoДата: Вторник, 18 Сентября 2012, 04:26 | Сообщение # 6
Сэнсэй
Сейчас нет на сайте
Quote (Техник)
А как можно сделать автоматическое определение где мантисса,а где порядок?

Никак нельзя, да и в чем смысл? Обычно вещественных типов всего несколько штук и по каждому можно найти информацию о его представлении в памяти, нафига что-то автоматически определять то?

Ты лучше расскажи, что конкретно в задании требуется, а то такое чувство, что ты сам точно не знаешь что нужно.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Вторник, 18 Сентября 2012, 06:45
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг