Системи числення та коди

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Завдання на курсову роботу

1. Системи числення

2. Переклад числа з однієї системи в іншу

3. Машинне подання інформації

4. Числа з фіксованою точкою

4.1 Прямий код

4.2 Зворотний код, інверсний або додатковий "до 1"

4.3 Додатковий або додатковий "до 2" код

5. Схема алгоритму

6. Програмна реалізація алгоритму

6.1 Загальні відомості

6.2 Опис використаних функцій і процедур

Бібліографічний список

Додаток

Рязанська державна радіотехнічна академія

Кафедра САПР обчислювальних засобів

Завдання на курсову роботу

з дисципліни "Інформатика"

студентці групи 246

Тема: Системи числення та коди

Термін подання роботи до захисту: 20 травня 2003р.

Завдання:

Розробити програму, що виконує наступні дії:

  1. Зчитує з файлу два числа;

  2. Переводить ці числа в задану систему числення;

  3. Виконує арифметичні дії в заданій системі числення;

  4. Переводить отримані результати у вихідну систему числення і виводить їх у файл.

Форма представлення вихідних даних і результатів

Система числення для вихідних даних і результатів

Система числення для виконання арифметичних дій

Виконувані арифметичні дії

Цілі числа зі знаком

шістнадцяткова

Двійкова, додатковий код

Додавання віднімання

Керівник работи_________________.

Завдання видано 200 р.

Завдання прийнято до ісполненію________.

1. Системи числення

Системою числення називається сукупність прийомів найменування та запису чисел. У будь-якій системі числення для подання чисел вибираються деякі символи (їх називають цифрами), а інші числа виходять в результаті будь-яких операцій над цифрами даної системи числення. Система називається позиційною, якщо значення кожної цифри (її вага) змінюється в залежності від її положення (позиції) в послідовності цифр, що зображують число.

Число одиниць якого-небудь розряду, що об'єднуються в одиницю більш старшого розряду, називають підставою позиційної системи числення. Якщо кількість таких цифр дорівнює P, то система числення називається P-ічной. Основа системи числення збігається з кількістю цифр, що використовуються для запису чисел в цій системі числення.

Запис довільного числа x в P-ічной позиційній системі числення грунтується на представленні цього числа у вигляді многочлена

x = a n P n + a n -1 P n -1 + ... + A 1 P 1 + a 0 P 0 + a -1 P -1 + ... + a-m P-m

Арифметичні дії над числами в будь-якій позиційній системі числення здійснюються за тими ж правилами, що і десятковій системі, так як всі вони грунтуються на правилах виконання дій над відповідними многочленами. При цьому потрібно тільки користуватися тими таблицями додавання і множення, які відповідають даній підставі P системи числення. В електронних обчислювальних машинах застосовують позиційні системи числення з недесяткових підставою: двійкову, вісімкову, шістнадцяткову і деякі інші. Найбільшого поширення в обчислювальних машинах має двійкова система числення. У цій системі використовуються тільки дві цифри: 0 (нуль) і 1 (одиниця). Двійкове зображення числа вимагає більшого (для багаторозрядного числа приблизно в 3,3 рази) кількості розрядів, ніж його десяткове подання.

Проте застосування двійкової системи дозволяє зменшити загальну кількість апаратури і створює великі зручності для проектування цифрових обчислювальних машин, так як для представлення в машині розряду двійкового числа може бути використаний будь-який простий елемент, що має всього два стійких стани. Такими елементами, наприклад, є реле, тригерні схеми і т.п. Для представлення десяткового розряду потрібно було б чотири таких елемента. Крім двійкової системи числення в обчислювальній техніці використовується також інші системи з недесяткових підставою - вісімкова і шістнадцяткова, що мають підставою відповідно числа 8 і 16. У вісімковій системі вживаються вісім цифр: 0, 1, 2, 3, 4, 5, 6, 7. У шістнадцятковій системі для зображення чисел вживається 16 чисел від 0 до 15. При цьому, щоб одну цифру не зображати двома знаками, доводиться вводити спеціальні позначення для цифр, великих дев'яти. Перші десять цифр цієї системи позначають цифрами від 0 до 9, а старші п'ять цифр - латинськими літерами: A, B, C, D, E, F.

2. Переклад числа з однієї системи в іншу

Правила перетворення в вісімкових і шістнадцяткових чисел у двійкові виключно прості, оскільки підстави цих систем є цілі ступеня числа два: 8 = 3 лютого 1916 = 2 4. Для перекладу вісімковим в двійкову форму достатньо замінити кожну цифру вісімковим відповідним трехразрядного двійковим числом. Таким же чином для переходу від шістнадцятковій системи до двійкової кожна цифра замінюється відповідним чотирирозрядний двійковим числом (див. таблицю). Наприклад, вісімкове число 306,4 у двійковій формі запису має вигляд:

Для переходу від двійкової системи числення до вісімковій (або шістнадцятковій) системі поступають таким чином: рухаючись від коми вліво і вправо, розбивають двійкове число на групи по три (чотири) розряду, доповнюючи при необхідності нулями крайні ліву і праву групи. Потім кожну групу з трьох (чотирьох) розрядів замінюють відповідної вісімковій (шістнадцятковій) цифрою (див. таблицю).

Десяткове зображення

Двійкове зображення

Вісімкове зображення

Шістнадцяткове зображення

0

00000

0

0

1

00001

1

1

2

00010

2

2

3

00011

3

3

4

00100

4

4

5

00101

5

5

6

00 110

6

6

7

00 111

7

7

8

0 1000

10

8

9

0 1001

11

9

10

0 1010

12

A

11

0 1011

13

B

12

0 1100

14

C

13

0 1101

15

D

14

0 1110

16

E

15

0 1111

17

F

16

10000

20

10

При перекладі чисел з десяткової системи числення в систему з основою P> 1 зазвичай використовують наступний алгоритм:

1) якщо переводиться ціла частина числа, то вона ділиться на P, після чого запам'ятовується залишок від ділення. Отримане приватне знову ділиться на P, залишок запам'ятовується. Процедура триває до тих пір, поки приватне не стане рівним нулю. Залишки від ділення на P виписуються в порядку, зворотному їх отримання;

2) якщо переводиться дробова частина числа, то вона множиться на P, після чого ціла частина запам'ятовується і відкидається. Знову отримана дробова частина множиться на P і т.д. Процедура триває до тих пір, поки дробова частина не стане рівною нулю. Цілі частини виписуються після двійковій комою в порядку їх отримання. Результатом може бути або кінцева, або періодична двійкова дріб. Тому, коли дріб є періодичною, доводиться обривати множення на будь-якому кроці і задовольнятися наближеною записом вихідного числа в системі з основою P.

3. Машинне представлення інформації

Мікропроцесори обробляють впорядковані виконавчі набори. Мінімальною одиницею інформації є один біт.

Далі йдуть - тетрада (4 біти), байт (byte 8 біт), подвійне слово (DoubleWord 16 біт) або довге (LongWord 16 біт) і учетверенное слова. Молодший біт зазвичай займає крайню праву позицію.

4. Числа з фіксованою точкою

Такі числа можуть бути як цілими, так і дробовими. Точка подумки фіксується поруч з будь-яким розрядом. Якщо вона розташовується праворуч від молодшого біта, то число ціле, якщо ліворуч від старшого - число дробове. Далі будуть розглядатися тільки цілі числа з фіксованою крапкою, для нецілих чисел частіше застосовується показова форма, про яку піде мова далі.

Природним поданням цілого невід'ємного числа є двійкова система числення. Кодування негативних чисел проводиться трьома найбільш вживаними способами, в кожному з яких крайній лівий біт - знаковий. Від'ємне число відповідає одиничний біт, а позитивного - нульовий. Кожен спосіб оцінюється за швидкістю і витратам на виконання додавання і зміни знаку числа, тому що віднімання є складання зі зміненим знаком одного операнда.

4. 1 Прямий код

Зміна знака проводиться просто, шляхом інверсії біта знака. Нехай 00001001 = 9, тоді 10001001 = -9. Якщо при складанні двох чисел в цьому коді знаки збігаються, то труднощів немає. Якщо знаки різняться необхідно знайти найбільше число, відняти з нього менше, а результату присвоїти знак найбільшого доданка.

4. 2 Зворотний код, інверсний або додатковий "до 1"

Зміна знака проводиться просто - інверсією всіх біт: 00001001 = 9, а 11110110 = -9. Складання також виконується просто, тому що знакові біти можна складати. При перенесенні одиниці з лівого (старшого) біта, вона повинна складатися з правим (молодшим). Наприклад: 7 + (-5) = 2.

00000111 = 7

11111010 =- 5 (інверсія 00000101 = 5)

1 00000001

1 00000010 = 2

Додавання у зворотному коді відбувається швидше, оскільки не потрібно прийняття рішення, як у попередньому випадку. Однак підсумовування біта перенесення вимагає додаткових дій. Іншим недоліком цього коду є подання нуля двома способами, тому що інверсія 0 ... 00 дорівнює 1. .. 11 і сума двох різних за знаком, але рівних за значенням чисел дає 1 ... 11.Напрімер: (00001001 = 9) + (11110110 = -9) = 11111111. До речі, з цього прикладу зрозуміло чому код називається додатковим "до 1".

4. 3 Додатковий або додатковий "до 2" код

Число з протилежним знаком знаходиться інверсією вихідного і додаванням до результату одиниці. Наприклад, знайти код числа -9.

00001001 = 9 11110111 =- 9

11110110 - інверсія 00001000 - інверсія

1 січня

11110111 =- 9 00001001 = 9

Проблеми двох нулів немає. +0 = 00 млн, -0 = 11111111 + 1 = 00 млн (перенесення з старшого біта не враховується). Складання виробляється за звичайними для невід'ємних чисел правилами.

00001001 = 9

11110111 =- 9

1 00000000

З цього прикладу видно, що в кожному розряді двох рівних по модулю чисел складаються дві одиниці, що й визначило назву способу. Цей метод застосовується найчастіше, і коли говорять про додатковому коді, то мається на увазі додатковий "до 2-х" код.

5. Схема алгоритму

6. Програмна реалізація алгоритму

Загальні відомості

Програма написана на мові Turbo Pascal 7.0. Мінімальні вимоги до конфігурації системи: процесор 80386 і вище. Виконуваний файл MS - DOS "v 1_13. Exe".

Файл з вихідними даними повинен знаходитися в тому ж каталозі, що і "v 1-13. Exe", і носити назву "in. Txt". Файл результатів роботи - "out. Txt".

Дані повинні бути цілими числами (можливо зі знаком) в діапазоні від -128 .. +127, тому що для реалізації завдання була обрана 8 розрядна двійкова сітка.

Опис використаних функцій і процедур

У даній роботі для переведення з однієї системи в іншу використовується кілька функцій:

  • DecToBase - виконує переклад з десяткової в 2-16 системи числення;

  • BaseToInt - зворотний переклад з Base-системи числення в десяткову СС;

DecToBase

Ця функція є програмним осуществлеіем алгоритму перетворення числа з десяткової системи числення в будь-яку іншу, описаного вище.

Зручність функції полягає в тому, що вона чувствітельнак знаку числа і за замовчуванням при перекладі в двійкову систему числення використовує додатковий "до 1" код, що рятує нас від написання додаткової функції перекладу.

BaseToInt

Ця функція реалізує алгоритм перетворення числа Base - системи числення в десяткову за такою формулою:

x = a n P n + a n -1 P n -1 + ... + A 1 P 1 + a 0 P 0 + a -1 P -1 + ... + A-m P-m

p-підстава СС; Х - десяткове подання числа.

Функція визначає знак числа за рахунок обліку інверсії: тому використовуємо 8 розрядну двійкову сітку і числа зі знаком, то має 128 негативних і 127 позитивних значень і нуль (всього 256), тобто негативна величина лежить в діапазоні беззнакових значень 128 .. 256. А вираз (256 - <x>), де <x> - беззнакові величина після перетворення, є модуль негативного числа.

Функції додавання і віднімання

Додавання. Функція BinPlus

Функція бінарного складання працює за наступним алгоритмом.

Вирахування. Функція BinMinus.

Принцип робота даної функції заснований на тотожності a - b = a + (- b).

Бібліографічний список

  1. Turbo Pascal 7.0. (Том 1) / Фаронов., Пітер. Прес., 2000р.

  2. "Введення в інформатику. Лабораторні роботи." / Авт.-сост. А.П. Шестаков; Перм. ун-т. - Перм, 1999. (Ч. I - 56 с.)

  3. Основи інформатики / Савельєв О.Я. , МГТУ ім. Баумана.

Додаток

Вихідний текст програми

{Для реалізації даної програми взята 8 розрядна двійкова сітка}

{Отже діапазон значень повинен бути з межах від -127 .. 127}

Program CourceProject_v1_13;

uses Crt;

const

Group = '246';

Name =''; {Прізвище І.О. студента}

PrepName =''; {Прізвище І.О. викладача}

InFileName = 'in.txt';

OutFileName = 'Out.txt';

function StrToVal (Ch: Char): byte;

var value, code: integer;

begin

val (Ch, value, code);

StrToVal: = value;

end;

function ValToStr (val: byte): Char;

var ch: string;

begin

Str (val, ch);

ValToStr: = ch [1];

end;

{Переклад з десяткової в 2-16 систему числення}

function DecToBase (Decimal: LongInt; const Base: Byte): String;

const

Symbols: String [16] = '0123456789 ABCDEF';

var

scratch: String;

remainder: Byte;

temp: byte;

begin

{Інверсія числа якщо знак його "-"}

if Decimal <0 then Decimal: = (256 - abs (Decimal));

scratch: = '';

repeat

remainder: = Decimal mod Base; {залишок від ділення}

scratch: = Symbols [remainder + 1] + scratch;

{Символ соотв. залишку}

Decimal: = Decimal div Base;

{Собс-но поділ}

until (Decimal = 0);

DecToBase: = scratch;

end;

{Переклад з 2-16 в 10ю систему числення}

function BaseToInt (Value: String; Base: byte): LongInt;

var

i, m, Result, c: Integer;

begin

Result: = 0;

m: = 1;

for i: = Length (Value) downto 1 do

begin

if i = (Length (Value) -1) then m: = base;

case Value [i] of

'A': c: = 10;

'B': c: = 11;

'C': c: = 12;

'D': c: = 13;

'E': c: = 14;

'F': c: = 15;

else

c: = StrToval (Value [i])

end; {case}

result: = result + m * c;

m: = m * base;

end;

{Знаходимо знак числа}

if result> 127 then result: = result - 256;

BaseToInt: = Result;

end;

{Підготовка чисел до вип. арифм. дій}

procedure Prepare (var Value1, Value2: string; var Len: byte);

var

i, j, m: byte;

temp: string;

begin

{Вибираємо найдовше число}

i: = length (Value1);

j: = length (Value2);

len: = i;

if i> j then

begin

len: = i;

{Доповнюємо меншу рядок нулями до рівного Колва символів}

for m: = 1 to (I - j) do insert ('0', Value2, 1);

end

else {j> i}

begin

len: = j;

{Доповнюємо меншу рядок нулями до рівного Колва символів}

for m: = 1 to (J - i) do insert ('0', Value1, 1);

end;

end;

{Двійкове додавання}

function BinPlus (BIN1, BIN2: string): String;

var summ: string [50];

temp, pl_razryad: integer;

k, m: byte;

begin

summ: ='';

pl_razryad: = 0;

{Підготовка до складання чисел}

Prepare (BIN1, BIN2, k);

for m: = k downto 1 do

begin

{Складаємо відповідні розряди + "що на розум пішло"}

temp: = StrToVal (BIN1 [m]) + StrToVal (BIN2 [m]) + pl_razryad;

{Обнуляємо те що на "розум пішло"}

pl_razryad: = 0;

If temp> 7 then

begin

inc (pl_razryad);

temp: = temp - 2;

end;

{Позбавляємося від переповнення розрядної сітки}

if length (summ) <= 8 then insert (ValToStr (temp), summ, 1);

end;

{ЯкщП після складання двох чіслел щось залишилося "в умі"

додаємо ще один розряд}

if pl_razryad <> 0 then insert (valtostr (pl_razryad), summ, 1);

BINPlus: = summ;

end;

{Двійкове віднімання}

function BinMinus (BIN1, BIN2: string): String;

var inverseBIN2: string [8];

begin

{Тому віднімання є складання першої величини і

другої величини взятої з інверсією, то можна

робити так}

{Інверсія величини BIN2}

inverseBIN2: = DecToBase (- BaseToInt (BIN2, 2), 2);

{Складання BIN1 та інверсної Bin2}

BinMinus: = BinPlus (BIN1, inverseBIN2);

end;

{Висновок лого}

procedure Logo;

var

i: byte;

begin

ClrScr;

{Отрісуем рамку}

GotoXY (1, 1);

TextColor (3);

for i: = 1 to 80 do Write ('*');

for i: = 1 to 22 do Write ('*', '*': 79);

for i: = 1 to 80 do Write ('*');

{Кінець рамки}

{Виводимо текст}

GotoXY (25,10);

Write ('К У Р С О В А Я Р А Б О Т А');

GotoXY (27,12);

Write ('з дисципліни "ІНФОРМАТИКА"');

GotoXY (65, 17);

Write ('Виконала:');

GotoXY (65, 18);

Write ('ст. Гр.', Group);

GotoXY (65, 19);

Write (Name);

GotoXY (65, 20);

Write ('Перевірив:');

GotoXY (65, 21);

Write (PrepName);

end;

var

FileIn: Text; {Файл вихідних даних}

FileOut: Text; {Файл результатів виконання програми}

Int1, Int2: integer; {вих. дані з файлу}

Hex1, BIN1: String; {Число в різних системах числення}

Hex2, BIN2: String; {Число в різних системах числення}

ResMin, ResPlus: string; {Результат виконання ар. дій}

begin {тіло}

Logo; {Показуємо лого нашої роботи}

GotoXY (23,25);

WriteLn ('Для продовження натисніть будь-яку клавішу ...');

repeat

until KeyPressed;

{Читаємо з файлу необхідні дані}

Assign (FileIn, InFileName); Reset (FileIn);

ReadLn (FileIn, Int1); {читаємо перше число}

ReadLn (FileIn, Int2); {читаємо друге число}

Close (FileIn);

{Створюємо умови для роботи програми}

HEX1: = DecToBase (int1, 16); {Переводимо перше число у HEX}

HEX2: = DecToBase (int2, 16); {Переводимо друге число в HEX}

BIN1: = DecToBase (BaseToInt (HEX1, 16), 2); {переклад з 16 в двійкову з - му}

BIN2: = DecToBase (BaseToInt (HEX2, 16), 2); {переклад з 16 в двійкову з - му}

ResPlus: = BINPlus (BIN1, BIN2); {Виконуємо складання 2 й с - ме}

{Наводимо р-т складання до заданого виду, тобто в 16ю з-му}

ResPlus: = DecToBase (BaseToInt (ResPlus, 2), 16);

ResMin: = BINMinus (BIN1, BIN2); {Виконуємо віднімання 2 й с - ме}

{Наводимо р-т вирахування до заданого виду, тобто в 16ю з-му}

ResMin: = DecToBase (BaseToInt (ResMin, 2), 16);

Assign (FileOut, OutFileName); Rewrite (FileOut);

WriteLn (FileOut, 'Вихідні дані:');

WriteLn (FileOut, 'Кількість 1: ', BaseToInt (HEX1, 16));

WriteLn (FileOut, 'Кількість 2: ', BaseToInt (HEX2, 16));

WriteLn (FileOut);

WriteLn (FileOut, 'P езультат виконання програми: ');

WriteLn (FileOut, 'Додавання:', BaseToInt (ResPlus, 16));

WriteLn (FileOut, 'Віднімання:', BaseToInt (ResMin, 16));

Cloose (FileOut);

end.

Файл вихідних даних (in. Txt)

25

-30

Файл результату роботи програми (out. Txt)

Вихідні дані:

Число 1: 5 лютого

Число 2: -3 0

Результат виконання програми:

Додавання: -5

Віднімання: 55

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
76.6кб. | скачати


Схожі роботи:
Позиційні системи числення Двійкова система числення
Коди без пам`яті Коди Хаффмена Коди з пам`яттю
Коди Фібоначі Коди Грея
Циклічні коди Коди БЧХ
Системи числення
Системи числення
Системи числення 2
Позиційні системи числення
Системи числення Складання алгоритмів
© Усі права захищені
написати до нас