Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
1. Лабораторная работа №1.
«Преобразование целых десятичных чисел в двоичный вид».
Целью данной работы является моделирование преобразований целочисленных величин как в операционной системе, так и в процессоре.
1.1 Задание на лабораторную работу.
С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран.
Программа должна поддерживать все целочисленные типы данных языка реализации (char, int, long int, unsigned int, unsigned long int для языка C/C++, integer, byte, word, shorting, longint для Pascal/Delphi).
Отрицательные числа выводятся в дополнительном коде.
Необходимо также решить обратную задачу: преобразовать двоичное число в десятичный вид.
Замечания:
1. Дополнительный код образуется из прямого путем инверсии бит и прибавления единицы:
Пример: -5: 5 = 00000101, -5 = not(5)+1 = 11111010+1 = 11111011
2. Запрещается использовать для машинно-зависимые методы и библиотеки языков программирования.
1. В качестве одного из вариантов решения предлагается следующие алгоритм на псевдоязыке:
program Translate1;
s : string;
begin
enter(a);
s:=;
while a<>0 do
if (abs(a) mod 2) then s:=1+s else s:=0+s;
a:=abs(a) div 2;
end while;
if a<0 then
mind:=0;
for i:=1 to 8 do
k:=val(s[8-i+1])+1+mind;
s[8-i+1]:=k;
if k=2 then begin
s[8-i+1]:=0; mind:=1;
endif
if k=3 then begin
s[8-i+1]:=1; mind:=1;
endif
endfor
endif
end;
где div и mod - операции целочисленного деления и деления по модулю соответственно.
program Translate1;
s : string;
begin
enter(a);
s:=;
while a<>0 do
if (abs(a) shr 1) and (1 shl (sizeof(a)+1) + 1) then s:=1+s else s:=0+s;
a:=abs(a) shr 2;
end while;
if a<0 then
mind:=0;
for i:=1 to 8 do
k:=val(s[8-i+1])+1+mind;
s[8-i+1]:=k;
if k=2 then begin
s[8-i+1]:=0; mind:=1;
endif
if k=3 then begin
s[8-i+1]:=1; mind:=1;
endif
endfor
endif
end;
где shr и sizeof - операции сдвига вправо и определения размера типа в битах соответственно.
С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран. Ниже приведен разработанный код:
program algoritm;
uses crt ;
var s,sbox:string;
I, step, dva, n, l, delo: intger;
begin
{Алгоритм перевода}
Writeln (Введите двоичное число:);
read (dva);
s:=IntToStr(dva); записываем двоичное число как строку
l:=length (s); длина строки
for i:=1 to l do делаем для каждого символа
begin
dva:=StrToInt (s [i] ); записываем текущее число
step:=l-I; степень
if dva>0 then
begin
for n:=1to step do
dva:=dva*2;
delo:=delo+dva; складываем
end;
end;
Writeln(Десятичное число:,delo);
end.
Разработанный код:
program algoritm;
uses crt ;
var i, ost,des,n: integer;
m: array [1..99] ofinteger;
begin
Writeln (Введите двоичное число:);
read (des);
n:=0;
i:=0;
repeat
inc (n); сколько раз делим
inc (i); текущий элемент
ost;=des mod 2; остаток
des:=des div 2; делим десятичное число
m [i]:=ost; записываем в массив остаток (элемент двоичного числа - 0 или 1)
until des=0 делим пока не останется 0
writeln (Двоичное число:);
for i:=n downto 1 do выводим наше двоичное число с конца
write (m[i], );
end.