Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 1 1

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

1.   Лабораторная работа №1.

«Преобразование целых десятичных чисел в двоичный вид».

Выполненные работы необходимо присылать тьютору по адресу michnick@aspu.ru. Студенту необходимо выбрать себе один вариант и реализовать программу на любом языке компилируемом языке программирования. Тьютору предоставлять откомпилированный вариант и полные исходные тексты.

 

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

 

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  - операции сдвига вправо и определения размера типа в битах соответственно.

Задание 1. Решение.

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

Dim d As Long, j As Integer, u As String    /// объявляем переменные

 For i = 0 To 31   ///на форме обнуляем массив двоичного числа

  Text2(i).Text = "0"

 Next

 If (Val(Text1.Text) >= -2147483648# And Val(Text1.Text) <= 2147483647 And

 Val(Text1.Text) <> 0) Then /// проверка на допустимые значения

 

 d = Val(Text1.Text) ///считываем число в переменную d

 i = 32

 While (d <> 0) /// и пока она не равна нулю делим на два с остатком

    i = i - 1

    If (d Mod 2) Then

      Text2(i).Text = "1"

    Else

      Text2(i).Text = "0"

    End If

    d = d \ 2

 Wend

       d = Val(Text1.Text) /// еще раз считываем число

      If d < 0 Then /// если оно отрицательно

      Invert_cod_For_dec_in_bin /// вызываем процедуру 

 End If

 Else: MsgBox "Vvedite celoi chislo -2.147.483.648 do 2.147.483.647!", vbOKOnly, "Oshibka"

 End If

Код процедуры Invert_cod_For_dec_in_bin :

Sub Inversia()

  For i = 31 To 0 Step -1 ///начинаем идти с конца массива и меняем нули на единицы и наоборот

    If Val(Text2(i).Text) = 0 Then

        Text2(i).Text = "1"

    Else

        Text2(i).Text = "0"

    End If

  Next i

                ///побайтовое прибавление единицы

               ///начинаем идти с конца массива и как только находим первый ноль меняем его на единицу и все единицы до него меняем на нули

  For i = 31 To 0 Step -1

    If Text2(i).Text = "0" Then

      Text2(i).Text = "1"

      For j = i + 1 To 31

         Text2(j).Text = 0

      Next

      Exit For

    End If

  Next i

End Sub

Задание 2. Решение.

Перевод числа из двоичной системы счисления в десятичную систему счисления.

Разработанный код:

Dim d As Long, j As Integer, u As String /// объявляем переменные

j = 0

d = 0

If Val(Text2(0).Text) = 0 Then ///если данное двоичное число положительно т.е. старший бит равен нулю, то переводим

For i = 31 To 0 Step -1

   Text1.Text = Val(Text1.Text) + (Val(Text2(i).Text) * 2 ^ j)

   j = j + 1

Next i

Else   ///если отрицательно

   Invert_cod_For_bin_in_dec   ///вызываем процедуру 

  d = 0

   j = 0

For i = 31 To 0 Step -1 ///формируем десятичное число в виде строки

   Text1.Text = Val(Text1.Text) + (mas(i) * 2 ^ j)

   j = j + 1

Next i

   u = "-" + Text1.Text ///помещаем знак минус вначале строки

  Text1.Text = u

End If

Код процедуры Invert_cod_For_bin_in_dec :

Dim mas(0 To 31) As Integer

Sub Inversia2()

  For i = 31 To 0 Step -1 ///начиная идти с конца массива, записываем каждый бит в массив mass и меняем нули на единицы и наоборот

    mas(i) = Val(Text2(i).Text)

    If mas(i) = 0 Then

        mas(i) = 1

    Else      mas(i) = 0

    End If

  Next i

             ///побайтовое прибавление единицы

            ///начинаем идти с конца массива и как только находим первый ноль меняем его на единицу и все единицы до него меняем на нули

  For i = 31 To 0 Step -1

    If mas(i) = 0 Then

      mas(i) = 1

      For j = i + 1 To 31

         mas(i) = 0

      Next

      Exit For

    End If

  Next i

End Sub




1. 4 2013 г
2. Налоги. Инвестиции
3. Коллективные трудовые споры и порядок их разрешения
4.  Происхождение предмет и сущность философии
5. Память ПК
6. Ревизия отгруженной продукции, выполненных работ и предоставленных услуг
7. Реферат- Информационные основы процессов управления
8. Тема 9. Правовые основы таможенного контроля Вопросы- Понятие и принципы таможенного контроля
9. тема физического воспитания и ее основы
10. МИФИ Факультет управления и экономики
11. Эмиль или о воспитании вызвала гнев церкви который преследовал Руссо вплоть до его смерти 6
12. Современная организация и перспективы развития ведомственных архивов в РФ
13. Пчелы
14. Финансовые отношения организаций
15. Вечные философские вопросы9
16. Свойство противоположное наследственности но неразрывно с ней связанное это 1 развитие 2 и
17. Анализ процесса создания империи а также систем реформ и нововведений при династии Цин
18. Введение Актуальность данной работы обусловлена многими факторами
19. Суспільне відтворення Процес суспільного виробництва взятий не як одноразовий акт а в безперервному повт.
20. Атомна енергетика та її вплив на довкілля