Вычислительные машины,системы и сети

Лист



Часть №1

Задание 1. Выполнить арифметические действия, рассматривая операнды как ЧФЗ справа от МЗР в формате 1-го байта. Определить модуль результата. Формат результата – 2 байта.

  1. Выполним операцию сложения Z = X+Y = 15(10) + 33(10) = 48(10).

X = 15(10) = 0000 1111(2);

Y = 33(10) = 0010 0001(2).

Выполним  сложение в ПК:

Перенос (единицы)

X                                0000 1111


Y                                 0010 0001


Сумма(X+Y)              0011 0000

 

Результат:  Z = 0011 0000(2) = 48(10) .

2. Выполним операцию вычитания Z = X-Y = 15(10) – 33(10) = -18(10).

X = 15(10) = 0000 1111(2); ПК

Быстрый перевод


Y = 33(10) = 1010 0001(2). ПК (-) 


Y = 33(10) = 1101 1111(2) ДК

            0000 1111


            1101 1111


            1110 1110

Вычислим  результат, преобразовав его из ДК в  ПК:

1110 1110(2)   ДК

 

1001 0001(2)  Инверсия всех разрядов, кроме знакового


              1


1001 0010(2)  (ПК)=-18(10)

Результат:  Z = 1001 0010(2) = -18(10) .

  1. Выполним операцию умножения Z = X*Y = 15(10)*33(10) = 495(10).

X = 18(10) = 0000 1111(2); 

Y = 33(10) = 0010 0001(2).

Выполним операцию умножения младшими разрядами вперед:

Y=0010 0001


                                      0000 1111         P1

                                    0000 1111            сдвиг на 1 разряд вправо


                                      0000 0000          Р2м


                                     000001111          Сумма Р1+Р2

                                      0000001111               сдвиг на 1 разряд вправо


                                      00000000                  Р3


                                     0000001111             Сумма Р1+Р2+Р3

                                     00000001111              сдвиг на 1 разряд вправо


                                     00000000                      Р4


                                     00000001111            Сумма Р1+Р2+Р3+Р4

                                     000000001111            сдвиг на 1 разряд вправо


                                     00000000                      Р5


                                               000000001111               Сумма Р1+Р2+Р3+Р4+Р5

                                               0000000001111             сдвиг на 1 разряд вправо


                                               00001111                          Р6


                                               0000111101111            СуммаР1+Р2+Р3+Р4+Р5+Р6

                                               00000111101111

Последние 2 нуля дают  сдвиг вправо на 2 разряда

После сдвига получим        0000000111101111(2)=495(10)

 

Задание 2. Выполнить арифметические действия, рассматривая операнды как ЧПЗ с основанием 2 в следующем формате: несмещенный порядок – 4 бита, мантисса – 8 бит. Формат результата – тот же. Округление производить после приведения операнда к нормализованной форме. Результат нормализовать.

X = 15.33(10);  Y = 33.15(10).

• Преобразуем дробную часть Х, равную 0.33(10), в двоичное число:

2*0,33=0,66        0

2*0,66=1,32        1

2*0,32=0,64        1

2*0,64=1,28        1

2*0,28=0,56        0

2*0,56=1,12        1

2*0,12=0,24        0

2*0,24=0,48        0

Таким образом, 0.33(10) = 0.01010100(2), a X = 15.33(10) = 00001111.01010100(2).

Представим X в формате ЧПЗ, округлив значение мантиссы до 8 разрядов (ненормализованное  число):

Х=1111,01010100

                                Х=0000*1111,0101                           порядок 4

Нормализуем х

Х=0,00111101

Преобразуем дробную часть Y, равную 0.15(10), в двоичное число

2*0,15=0,3                       0


0,3*2=0,6                         0

0,6*2=1,2                         1

0,2*2=0,4                         0

0,4*2=0,8                         0

0,8*2=1,6                         1

0,6*2=1,2                         1

0,2*2=0,4                         0

Таким образом, 0.15(10) = 0.00100110(2), a X = 33.15(10) =100001,00100110(2).

У=100001,00                        порядок = 6

Нормализуем У=0,1000101

Сложение

Х +У 

                   0,00111101


                    0,10000101


                     0,11000010

Проверка  1100002=25+24=32+16=48

                    0,10=0,5

  1. Выполним операцию вычитания Z = X-Y = 15.33(10) - 33.15(10) = -17.82(10).

Х =15,33(10)=1111,01010100(2)

Y=33,15(10)=100001,00100110(2)

Нормализуем числа Х и  Y

Х =0,00111101

Y=0,10000101

Порядок чисел -0100

Переводим Y в ДК

Yдк=1,01111011      знаковый разряд равен 1, значит  число отрицательное 
                            

   Х  +  Y  

                                        0,00111101


                                        1,01111011


                                        1,10111000

Z=0,10111000 переводим в обратный код все разряды кроме знакового

Zок=1,01000111

Переводим число в дополнительный код

Zдк=1,01001000

Проверка  Z=1,010010(2)=24+21=16+2=-18(10)

3. Выполним операцию умножения Z = X*Y =15,33*33,15= 508,1895

Х=15,33(10)=1111,01010100(2)

У=33,15(10)=100001,00100110

 

 

Перемножим  мантиссы сомножителей (вариант умножения  младшими разрядами вперед):

Нормализуем числа

qx=0,11110101

qy=0,10000100


                                          00000000              Р1


                                          00000000  0          сдвиг на 1 разряд вправо


                                          00000000  0             Р2


                                          00000000  0            сумма Р1+Р2

                                          00000000  00         сдвиг  на 1 разряд вправо 


                                           11110101                 Р3


                                           11110101  00         сумма  Р1+Р2+Р3

                                           01111010  100      сдвиг на 1 разряд вправо

                    Следующие 4 нуля дадут сдвиг на 4 разряда вправо

                                          00000111  1010100


                                          11110101                    Р4


                                         11111100   1010100      сумма  Р1+Р2+Р3+Р4

                                            01111110    01010100 сдвиг на 1 разряд  вправо


                                         00000000                       Р5


                                         01111110    01010100 сумма Р1+Р2+Р3+Р4+Р5

                                                                      Результат

Сложим порядки  сомножителей

                       Рх    0011


                       Ру    0110


                Рх+Ру      1001

Результат:  Z = 1001 * 0.11111100(2) = 29 * 0,984375 (10) = 504(10).

 

Задание 3. Выполнить арифметические действия над операндами, представив их в двоично-десятичном коде.

1. Выполним операцию сложения  Z=X+Y= 153(10) + 331(10) = 484(10).

X = 153(10) = 0001 0101 0011(2-10); Y = 331(10) = 0011 0011 0001(2-10).

                         0001  0101  0011    Х


                         0011  0011  0001    У


                        0100  1000  0100      Z’

Перед сложением операнды выравниваются  по крайней правой тетраде. Теперь надо к Z’ добавить избыток (6(10)):

               Z’     0100  1000  0100


Избыток         0110  0110  0110


               Z’6        1010  1110  1010        нескорр. избыточное  Z

              Z’6             1010  1110  1010


коррекция          1010  1010  1010


             Z             0100  1000  0100

                          1         1        1                     отбросить


Результат Z=0100  1000 0100(2-10) =484(10)          

2. Выполним операцию вычитания  Z = X – Y = 153(10) – 331(10) = -178(10).

X = 153(10) = 0001 0101 0011(2-10); Y = 331(10) = 0011 0011 0001(2-10).

 Представим |Y| в ДК с избытком 6:

                        Yок        1100  1100  1110


                                                        0001


                        Yдк        1100  1100  1111

                  Хпк     0001  0101  0011


                  Yдк     1100  1100  1111


                  Z’дк     1110  0010  0010

                                      1        1                 перенос

Отсутствие переноса из старшей тетрады является признаком того, что результат получился в ДК (т.е. отрицательный).

Перейдем к нескорректированному избыточному ПК:

 

                    Z’дк     1110  0010  0010

                    Zдк      0001  1101  1101


                                                   0001


                    Zпк      0001  1101  1110

Произведем коррекцию результата в соответствии с п. 5 алгоритма  выполнения операции вычитания двоично-десятичных чисел

               Zпк      0001  1101  1110


Коррекция       0000  1010  1010


               Z         0001  0111  1000

                                    1        1           переносы отбросить

Результат |Z|= 0001  0111  1000

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

Результат: Z = - ( 0001 0111 1000)(2-10) = -178(10).

3. Выполним операцию умножения  Z = X * Y = 153(10) * 331(10) = 50643(10)

X = 153(10) = 0001 0101 0011(2-10); Y = 331(10) = 0011 0011 0001(2-10).

Для решения примера выберем  вариант перемножения "младшие  разряды вперед". В соответствии с п. 1 алгоритма полагаем сумму  частичных произведений P0=0. (Частичные произведения будем обозначать Pi).

Y= 0011  0011  0001 


                                        Х=0001  0101  0011

                                  1(10)  0000  0000  0000            Р0=0


                                          0001  0101  0011            Р1(1-е част.произв.)


                                         0001  0101  0011           сумма Р0+ Р1

                                                   0000 0001  0101  0011 сдвиг вправо


                      3(10)           0001  0101  0011


                                       0001  0101  0011            Р2(2-е част.произв.)


                                       0001  0101  0011

                                          Сдвиг вправо


                                       0001  0101  0011                               


                  3(10)               0001  0101  0011            Р3(3-е част.произв.)


                                       0001  0101  0011

  Формирование второго и третьего частичных произведений – более длительная операция, поскольку вторая и третья анализируемые тетрады содержат 3(10), поэтому каждая операция суммирования требует проверки необходимости коррекции. Вычислим P2 ( P2 = Р3 ), последовательно суммируя слагаемые, образующие P2:

 

 

Х         0001  0101  0011         первое слагаемое  Р2


Х        0001  0101  0011          второе слагаемое Р2


 Р2’     0010  1010  0110          коррекция


           0000  0110 0000


   Р2    0011  0000  0110


   Х     0001  0101  0011          третье слагаемое Р2


          0100  0101  1001           полное Р2,коррекции не требует

Таким образом, второе (а также и  третье) частичное произведение, состоящее  из трех слагаемых, имеет вид 

P2 = Р3 = 0100  0101  1001(2-10).

Теперь можно вычислить сумму  первого, второго и третьего частичного произведений, т.е. результат.

Р1    0000  0000  0001  0101  0011   первое сдвинутое частичное произведение


Р2    0000  0100  0101  1001             второе сдвинутое частичное произведение


         0000  0100  0110  1110  0011    сумма Р1 и Р2, 4 тетрада требует корректировки


      0000  0000  0000  0110  000            коррекция


      0000  1000  1100  1101  0011            сумма Р1+ Р2 


 Р3  0100 0101  1001                       третье частичное произведение


         0100  1010  0000  0100  0011        сумма Р1+ Р2 +Р3, корректировка требуется


       0000  0000  0110  0000  0000          коррекция


       0100 1010  0110  0100   0011  требует коррекции 2 тетрада


        0000  0110  0000  0000  0000    коррекция


      0101  0000  0110  0100 0011 скорректированная сумма Р1+ Р2 +Р3,

Результат Z=0101  0000 0110  0100  0011(2-10)=50643

 

Часть № 2 Варианты задач  на программирование

 

Вариант № 1

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

 

Алгоритм разработки программы

Данная  программа  был разработан в среде MicrosoftVisualStudio 2010 на языке программирования C#. Согласно заданию необходимо разработать программу для пользователей, с помощью которой можно реализовывать преобразования целых и вещественных двоичных чисел в десятичные и обратно.

Поскольку данная программа  является приложением Windows, то для ее реализации будем использовать стандартный подход для написания программ под Windows с использованием графического интерфейса. Отдельно создадим форму с элементами управления, для различных элементов управления сопоставим процедуры-обработчики. Далее, как только происходит событие на каком-то из элементов управления (щелчок мыши, нажатие на кнопку, и т.д.), операционная система посылает приложению соответствующее сообщение, и запускается соответствующий обработчик именно для этого события. Тогда решение задачи можно разбить на три этапа:

  1. Разработка визуального интерфейса пользователя, на основе экранных форм среды MicrosoftVisualStudio 2010 и элементов управления, предназначенных для ввода исходных данных, запуска действий по обработке исходных данных, вывода результата обработки.
  2. Разработка обработчиков событий от элементов экранных форм, разработка алгоритмов и программных кодов действий обработки данных согласно заданию;
  3. Подготовка тестовых исходных данных и отладка программы.

 

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

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

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

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

Программа должна быть реализована  с графическим интерфейсом пользователя в среде Microsoft Visual Studio 2010 и должна выполнять следующие функции:

  1. Перевод  целых и вещественных чисел из двоичной системы счисления в десятичную систему счисления.
  2. Перевод  целых и вещественных чисел из десятичной системы счисления в двоичную систему счисления.

 

 Преимущества и основные возможности языка C# и концепции .NET

Проанализировав основные особенности языка программирования C#, а также исследовав структуру  и принципы построения программ на этом языке, можно выделить основные преимущества языка C# и платформы .NET.

Язык программирования C# призван практически реализовать компонентно-ориентированный подход к программированию, который способствует меньшей машинно-архитектурной зависимости результирующего программного кода, большей гибкости, переносимости и легкости повторного использования (фрагментов) программ.

Принципиально важным отличием от предшественников является изначальная  ориентация на безопасность кода (что  особенно заметно в сравнении  с языками C и C++).

Унифицированная, максимально  близкая по масштабу и гибкости к  CommonTypeSystem, принятой в Microsoft .NET, система типизации является важным преимуществом языка C#.

Язык программирования C# является «родным» для создания приложений в среде Microsoft .NET, поскольку наиболее тесно и эффективно интегрирован с ней.

Языку C# присущи следующие характеристики:

1)гибкость(программы могут выполняться на удаленном компьютере)

2)мощность(имеет такой  же набор команд как и С++, но со сглаженными ограничениями)

3)легкость в использовании(изменяет  команды, ответственные за большинство  ошибок в С++)

4)визуальная ориентированность(быстрое создание сложных форм с раскрывающимися списками, окнами с закладками, сгруппированными кнопками, полосами прокрутки и фоновыми изображениями)

Объединение лучших идей современных  языков программирования (Java, C++, VisualBasic и др.) делает язык C# не просто суммой их достоинств, а языком программирования нового поколения.

Словесный алгоритм программы

Программа начинается с вызова обработчиков событий от элементов экранных форм. Первоначально на экране появляется  окно программы с необходимыми полями ввода чисел. Для ввода чисел в двоичной системе счисления необходимо заполнить соответствующее поле цифрами с двоичном формате, т.е. 0 и 1. Для запуска перевода чисел, необходимо нажать клавишей мыши на стрелку-обработчик запросов, или нажать кнопку Enter, после чего, в поле десятичных чисел появится результат счисления. При необходимости перевода чисел из десятичной системы счисления в двоичную, в поле ввода десятичных чисел вводится число в десятичном формате, и, аналогично нажимается стрелка перевода, в поле ввода  двоичных чисел, никакие другие цифры кроме 1 и 0 вводится не будут. Если необходимо перевести вещественное число, то целая часть отделяется от дробной символом «.» (точка). Если введенное число отрицательное, то в результат приписываем знак «-». Реализован 4-х байтовый формат.

4-x байтовая ячейка памяти. В  ячейке должна содержаться следующая  информация о числе:

- порядок;

- значащие цифры мантиссы.

8 бит 1-го байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы (24 разряда).

Хранение результата вычислений удобнее хранить в стеке.

Стек – это область памяти, специально выделяемая для временного хранения данных программы. Отличительной особенностью стека является особая организация обращения к нему со стороны МП. Запись и чтение данных в стеке осуществляется в соответствии с принципом LIFO (Last In First Out) – «последним пришел, первым ушел». Таким образом, информация в стеке размещается в строгой последовательности – ячейка памяти, заполненная последней, считывается первой, а ячейка памяти заполненная первой извлекается последней. В ячейки стека информация заносится последовательно и извлекается в порядке обратном порядку занесения. Таким образом, стек функционирует как память с последовательным доступом. По мере записи данных в стек он растёт в сторону младших адресов.

Алгоритм перевод из десятичной системы счисления в двоичную систему счисления.

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

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

Алгоритм перевода смешанного десятичного числа в двоичное:

перевести целую часть, затем перевести дробную часть,сложить полученные результаты.

Алгоритм перевода целого десятичного  числа в двоичное:

последовательно выполнять деление  целого десятичного числа и получаемых целых частных на 2 до тех пор, пока не получится частное, меньшее 2;

записать полученные остатки в  обратной последовательности.

 

Спецификация  переменных

     Таблица 1 – Спецификация переменных

Идентификатор

Тип

Описание

Х

double

Изначальное введенное  число

whole

int

Целая часть дробного числа

 fract

float

Дробная часть числа

i

int

Счетчик


 

Приложение А

(блок схема алгоритма перевода с десятичной системы в двоичную систему)

начало


А


 

 

 

 

Вывод содержимого стека


Остаток от деления на 2 записываем в стек


 

оороорооороро

Разложение  целой части, пока число >1


Выделяем  дробную часть 


Выделяем  целую часть


Берем модуль числа


Дописываем  «-» в ответ


Число<0


Вводим  число



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение Б

(продолжение)

Запись  целой части 1 или 0


Умножаем  дробную часть на 2


Разложение  дробной части, пока !=0


Дописываем  «.»


Дробная часть >0


А


 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запись  в результат



Вывод результата



 

конец



 

 

 

 

Приложение В

  (блок схема алгоритма перевода двоичной системы в десятичную систему)

начало


     


Конец


 

 

 

 

 

 

 

 

 

 

Вывод результата


Заносим в результат


Справа  налево умножаем на 2 степени разряда  с 0


Заносим в результат


число умножаем на 2 в степени разряда, начиная с-1


 

От точки  до конца строки переводим дробную  часть


Заносим в результат


число умножаем на 2 в степени разряда, начиная  с нулевого


 

Справа  налево переводим целую часть


Если нашли  точку


Дописываем  «-»в ответ


Если первый символ «-»


Вводим  число



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение  Г

Вычислительные машины,системы и сети