logo search
ифа_экзамен(шпоры)

Кодирование информации в эвм. Формы и форматы представления числовых данных в эвм - нормальная форма, порядок, характеристика.

Число можно представить в различной форме записи, например:

А = 55,25 = 5525 • 10-2 = 0,5525 • 102 = 0,005525 • 104.

Зн тА

Зн РА

РA

тA

0

1

2

7

8

9

30

31

Любое число в нормальной форме представляется в виде:

A = ±mA * q±Pa (1.7)

где тА — мантисса числа А,

qоснование системы счисления,

РАпорядок.

Для однозначности представления чисел исполь­зуется нормализованная форма, при которой мантисса должна отвечать условию:

1

− <= |m| < 1.

q

Ограничение справа требует, чтобы мантисса представлялась правильной дробью, ограничение сле­ва — чтобы после запятой присутствовала значащая цифра (не 0).

По сравнению с естественной формой, диапазон представления чисел в нормальной форме при той же разрядной сетке увеличился на 10 порядков.

Особенностями нормальной формы в ЭВМ ЕС яв­ляются следующие:

1. Смещение числовой оси порядков в область по­ложительных значений для облегчения действий над порядками, не имеющими знака. Обычно 7 разрядов отводится под значение порядка и его знак.

Следовательно, числовая ось порядков находится

в диапазоне -26 <= Р <= 26-1 или -64 <= Р <= 63 — порядок числа).

Смещенный порядок (называемый характеристи­кой) определяется его смещением на +26 = 6410 = 4016. В этом случае характеристика Рх — Р + 40 не имеет знака.

Теперь характеристика может принимать значения в диапазоне

0 <= Px <= 127 = 7F16 и под ее значение, как уже было сказано, отводятся 7 разрядов (максимальное значение порядка 27-1 = 127).

Очевидно, если Рх = 40, то Р = 0, если Рх < 40,

то порядок отрицательный Р < 0, при Рх > 40 — порядок положительный Р > 0. Если Рх<0 или Рх > 7F, то значение характеристики пропадает и результаты искажаются.

2. Мантиссы и порядки чисел выражаются в шестнадцатиричной системе счисления в двоичном виде, что обеспечивает увеличение диапазона представления чисел, так как изменение характеристики на 1 приводит к сдвигу мантиссы на одну шестнадцатиричную цифру, т. е. сразу на одну двоичную тетраду. Действительно,

если в формулу (1.7) подставить q = 16, то

Amах = (1 − 16 -6 ) * 1663 ≈ 1 * (24)63 ≈ (1019)4 = 1076.

Таким образом, значение порядка увеличилось в 4 раза.

9.Действия над числами, представленными в естественной форме.

Сложение целых чисел с разными знаками Алгоритм вычислений: 1) Определить дополнительный код для отрицательного числа. 2) Выполнить сложение прямого кода положительного числа и дополнительного кода отрицательного. 3) Если в процессе сложения произошел согласованный перенос единицы, то это означает, что полученный результат положительный и представлен в прямом коде. 4) Если в процессе сложения согласованный перенос единицы из старшего разряда отсутствовал, то результат сложения есть отрицательное число и представ- лен в дополнительном коде.

Сложение чисел с одинаковыми знаками Алгоритм сложения: 1) только для отрицательных слагаемых определить дополнительный код. 2) Если в процессе сложения двух положительных чисел присутствовал перенос единицы из старшего разряда, а при сложении двух отрицательных отсутст- вовал, то произошло переполнение разрядной сетки и результат не верен. 53 3) При сложении двух положительных чисел результат получается в прямом коде. 4) При сложении двух отрицательных чисел результат получается в дополни- тельном коде.

10.Действия над числами, представленными в нормальной форме. Сложение чисел с одинаковыми знаками в нормальной форме Алгоритм сложения: 1) если знаки слагаемых одинаковы (положительные или отрицательные), то сумми- руются модули мантисс (прямые коды) 2) При сложении положительных чисел результат будет положительный, при сло- жении отрицательных - отрицательным. 3) В обоих случаях результат будет получен в прямом коде. 55 56 4) Если происходит перенос 1 из старшего разряда мантиссы в 7-ой разряд (в поле характеристики), то это говорит о нарушение нормализации мантиссы В этом слу- чае: a) Мантисса сдвигается на одну шестнадцатеричную цифру вправо. b) Старшая тетрада мантиссы заполняется 00012 или на 116, c) Характеристика результата увеличивается на единицу.

Сложение чисел с разными знаками в нормальной форме Алгоритм сложения: 1) для отрицательной мантиссы определить дополнительный код. 2) Сложить дополнительный код отрицательного числа и прямой положительного. 3) Определить знак результата a) Результат положительный, если произошел перенос 1 из старшего разряда мантиссы в 7-ой разряд. b) Результат отрицательный, если перенос 1 в 7-ой разряд отсутствует, при этом мантисса результата представлена в дополнительном коде. 4) Если при сложении кодов чисел с разными знаками происходит денормализация мантиссы суммы, то a) Значащие цифры мантиссы сдвигаются относительно влево на одну ше- стнадцатеричную цифру. b) Характеристика уменьшается на единицу.

11.Алгоритмы поиска.

Алгоритм – это организованная последовательность конечного числа точных и понятных действий, необходимых для решения любой задачи данного класса.

Св-ва алгоритмов

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

2.Понятность. Алгоритм должен быть понятен исполнителю и исполнитель должен быть в состоянии выполнить его команды.

3.Определенность. Запись алгоритма должна быть четкой, полной и продуманной, чтобы у исполнителя не возникло проблем самостоятельного решения.

4.Результативность. Завершение работы алгоритма определяет результат.

5.Массовость. Возможность применения алгоритма для широкого круга задачь.

Этапы построения алгоритма.

1.Постановление задачи.

2.построение модели.

3.Разработка алгоритма.

4.Реализаця алгоритма.

5.анализ результатов.

Способы задания алгоритмов

1.на естественном языке(словесное описание)

2.на языке описания алгоритмов(псевдо язык)

3.на языке схем(блок-схем)

  1. Алгоритмы сортировки. Простые методы сортировки.

См.в.11

Сортировка представляет собой процесс упорядочения множества подобных информационных объектов в порядке возрастания или убывания их значений.

Целью алгоритма сортировки является переорганизация записей в файле так, чтобы они располагались в нем в каком-либо строго определенном порядке (обычно в алфавитном или числовом).

Пусть на дана последовательность элементов: a1, a2, ..., an сортировка означает - перестановку этих элементов в таком порядке:    ak1,ak2, .. ,akn, что при заданной функции упорядочивания f(x), справедливо отношение : f(ak1) <=    f(ak2)<= ..    <= f(akn) - функция упорядочивания не вычисляется, а содержится    в каждом элементе в виде явной компоненты и ее значение называют ключом элемента. Следовательно, для представления i-ого элемента последовательности наилучшим образом подходит структура записи. Определим тип элемента, который будем использовать в алгоритмах сортировки следующим образом :     type elem = Record     key: integer;     описание др. компонентов     end; Поле key - служит только для идентификации элемента.

Как здесь видно ключи являются только частью записи (часто очень маленькой их частью), используются для управления процессом сортировки.

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

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

Обычно, главное, что будет нас интересовать в алгоритме - это время его работы. Время работы алгоритма характеризуется числом необходимых сравнений обозначаемых через С и    число     м необходимых пересылок элемента - M.

Простые алгоритмы, которые мы рассмотрим, для сортировки N элементов имеют время работы пропорциональное N2, в то время как более сложные алгоритмы используют время пропорциональное NlogN. (Можно доказать, что никакой алгоритм сортировки не может использовать менее, чем N logN сравнений между ключами.)

Количество используемой дополнительной памяти алгоритма сортировки - это еще один важный фактор, который мы будем принимать во внимание. Вообще говоря, методы сортировки делятся на три типа(по времени):

  1. методы сортировки которые сортируют без использования дополнительной памяти, за исключением, возможно, небольшого стека и/или массива;

  2. методы которые используют для сортировки связанные списки и поэтому используют N дополнительных указателей хранящихся в памяти;

  3. методы, которые нуждаются в дополнительной памяти для хранения копии сортируемого файла.

Стабильность - еще одна немаловажная характеристика методов сортировки. Метод сортировки называется стабильным если он сохраняет относительных порядок следования записей с одинаковыми ключами.

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

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

Стабильность с легкостью принимается за норму; к нестабильности люди относятся с недоверием. На самом же деле, лишь немногие методы достигают стабильности без использования дополнительного времени или места.

Следующая программа, для сортировки трех записей, предназначена для иллюстрации основных соглашений, которые мы будем использовать. В частности, главная программа любопытна в том, что она работает только для N=3; смысл в том, что любая программа сортировки может быть сведена к процедуре sort3 этой программы.

Три оператора присвоения, каждый из которых сопровождается оператором if на деле реализуют операцию "обмена". Мы вставляем ее непосредственно в программный код вместо использования вызова процедуры, поскольку они являются основой многих алгоритмов и часто попадают внутрь цикла.

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

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

Если сортируемые записи довольно большие, то обычно пытаются избежать их передвижения посредством "косвенной сортировки": при этом сами записи не переупорядочиваются, а вместо этого переупорядочивается массив указателей (индексов), так, что первый указатель указывает на самый маленький элемент и так далее. Ключи могут храниться либо с записями (если они большие), либо с указателями (если они маленькие). Если необходимо, то после сортировки записи можно упорядочить, как это описано дальше.

Программа демонстрирует основные принципы работы с массивом и сортирует 3 элемента.

program treesort; const maxN=100; var a : array [1..maxN] of integer;     N, i : integer; procedure Sort3; var t:integer; begin if ( a[1] > a[2] ) then         begin t := a[1]; a[1] := a[2]; a[2] := t; end;     if ( a[1] > a[3] ) then         begin t := a[1]; a[1] := a[3]; a[3] := t; end;     if ( a[2] > a[3] ) then         begin t := a[2]; a[2] := a[3]; a[3] := t; end; end; begin     readln( N );     for i:=1 to N do read(a[i]);     if N=3 then sort3;     for i:=1 to N do write(a[i]);     writeln; end; Программа sort3 использует даже более ограниченный доступ к файлу: это три операции вида "сравнить две записи и обменять их если нужно, чтобы поместить запись с меньшим ключом на первое место". Программы ограниченные к таким операциям интересны, поскольку они подходят для реализации на аппаратном уровне. Мы изучим из более подробно позднее. Используя программы которые работают на глобальном массиве, мы тем самым игнорируем "пакетные проблемы" которые могут доставить немало хлопот в некоторых языках программирования. Стоит ли передавать массив процедуре сортировки как параметр? Можно ли использовать одну и ту же процедуру сортировки для сортировки массива целых и массива вещественных (и для массива произвольно сложных записей)? Даже с нашими простыми допущениями, мы должны обходить отсутствие в Паскале динамических массивов посредством задания массива максимального размера.