49003 (Системы счисления и коды), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Системы счисления и коды", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49003"

Текст 2 страницы из документа "49003"

Проблемы двух нулей нет. +0 = 00000000, -0 = 11111111 + 1 = 00000000 (перенос из старшего бита не учитывается).Сложение производится по обычным для неотрицательных чисел правилам.

00001001 = 9

11110111 =-9

1 00000000

Из этого примера видно, что в каждом разряде двух равных по модулю чисел складываются две единицы, что и определило название способа. Этот метод применяется наиболее часто, и когда говорят о дополнительном коде, то имеется в виду дополнительный "до 2-х" код.

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


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

Общие сведения

Программа написана на языке Turbo Pascal 7.0 . Минимальные требования к конфигурации системы: процессор 80386 и выше. Исполняемый файл MS-DOS "v1_13.exe".

Файл с исходными данными должен находиться в том же каталоге, что и "v1-13.exe", и носить название "in.txt". Файл результатов работы - "out.txt".

Данные должны быть целыми числами(возможно со знаком) в диапазоне от –128..+127, т.к. для реализации задачи была выбрана 8 разрядная двоичная сетка.

Описание использованных функций и процедур

В данной работе для перевода из одной системы в другую используется несколько функций:

  • DecToBase – выполняет перевод из десятичной в 2-16 системы счисления;

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

DecToBase

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

Удобство функции заключается в том, что она чувствительнак знаку числа и по умолчанию при переводе в двоичную систему счисления использует дополнительный "до 1" код, что избавляет нас от написания дополнительной функции перевода.

BaseToInt

Данная функция реализует алгоритм преобразования числа Base- системы счисления в десятичную по следующей формуле:

x = anPn + an-1Pn-1 + ... + a1P1 + a0P0 + a-1P-1 + ... + a-mP-m

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

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

Функции сложения и вычитания

Сложение. Функция 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] = ’0123456789ABCDEF’;

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 : 25

Число 2 : -30

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

Сложение :-5

Вычитание:55

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее