Системы счисления

Автор: Пользователь скрыл имя, 13 Декабря 2011 в 17:07, курсовая работа

Описание работы

Цель исследования: Выявить и систематизировать материалы по теме: «Системы счисления и основы двоичных кодировок».

Содержание

Введение
1.История развития систем счисления 3
Зарождение систем счисления 2
1.2 Образование десятичной системы счисления 4
11. Системы счисления 5
2.1 Позиционные и непозиционные системы счисления 5
2.2 Двоичная(бинарная) система счисления 6
2.3 Восьмеричная система счисления. 6
2.4 Десятеричная система счисления 6
2.5 Шестнадцатеричная система счисления 7
111. Представление чисел в ЭВМ 8
3.1Представление чисел с фиксированной и плавающей запятой. 8
3.2 Числа с фиксированной запятой 8
3.3 Числа с плавающей запятой 9
3.4 Прямой, обратный и дополнительный коды.
Модифицированный код 10
1111.Перевод чисел 13
4.1 Представление двоичных чисел и перевод их в десятичные 13
4.2 Преобразование десятичных чисел в двоичные 13
4.2.1 Метод деления 13
4.2.2 Метод умножения 14
5.Постановка задачи 15
6.Внешнее проектирование программы 15
7.Математическая модель 16
8.Кодирование и отладка программы 17
9.Таблица тестов 23
Заключение
Список использованных источников

Работа содержит 1 файл

kursovik.doc

— 426.00 Кб (Скачать)

      Пример иллюстрирует процесс получения десятичного числа из двоичного. 

      Перевод двоичного числа  в десятичное 

        

      4.2  Преобразование десятичных  чисел в двоичные 

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

      4.2.1 Метод деления 

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

      Разделим  нацело десятичное число на двойку. Если есть остаток, запишем в младший разряд единицу, а если нет – нуль и снова разделим результат от первого деления. Повторим процедуру так до тех пор, пока окончательный результат не обнулиться. 

        Пример 4.3  Перевод десятичного числа в двоичное методом деления 

    2              
    148 74 2            
          1 74 37 2          
      0 36 18 2        
        1 18 9 2      
          0 8 4 2    
            1 4 2 2  
              0 2 1 2
                0 0 0
                  1 ¬ старший разряд
    (10010101)2=(149)10 ¬ ответ  
 

      4.2.2 Метод умножения 

      И, наконец, метод умножения. Метод  применяется для преобразования десятичных дробей (чисел меньших единицы).

      Число умножается на 2, если результат ³ 1, то в старший разряд записывается единица, если нет, то нуль. Умножаем на 2 дробную часть результата и повторяем процедуру. И так далее до получения нужной степени точности или до обнуления результата. 

        Перевод десятичного числа  в двоичное методом умножения

           
 
 
 
 
 
 
 
 

     5.Постановка задачи.

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

      6.Внешнее проектирование программы.

      Для наглядности программу перевода лучше изобразить в виде ориентированного графа.  Но если перевод осуществлять по этой схеме, то

      

код программы  будет громоздким. Так как будет  множество алгоритмов перевода.

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

  
 
 
 
 
 
 
 

     7.Математическая модель.

     Для перевода из 2, 8, 10, 16 систем счисления  в десятичную систему использую формулу:

     n

AiMi,

i=0

где Ai – значение разрядного коэффициента i-го разряда, а М это основание системы счисления.

      Пример:

Число 326 в десятичной системе можно  записать так 3*102+2*101+6*100=326

Число 100110 в двоичной системе можно записать так 1*25+0*24+0*23+1*22+1*21+0*20=38. 

     Для перевода из десятичной системы счисления  в 2, 8, 10, 16 используем алгоритм:

     repeat

     c := a mod e;

     if (e = 16) and (c>9) then l:= l + chr(c+55) else l:= l + chr(c+48);

     if a <> 0 then b := a div e;

     if b<e then if (e = 16) and (b>9) then l:= l + chr(b+55) else l:= l + chr(b+48);

     a := b;

     until (b<e) or (a = 0).

     В результате разработки программы я  столкнулся с проблемой возведения целого числа в степень. Для этого  мне пришлось разработать алгоритм возведения целого числа в степень.

var

     i,y: integer;

begin

y:=1;

        for i:= 1 to n do{Цикл задает число умножений}

        y := y*x;{умножает число которое требуется возвести в цикл на Y и присваивает значение Y}

        step := y;

end; 
 
 
 
 
 
 
 

8.Кодирование и отладка программы.

          Для кодирования программы используем среду программирования Borland Delphi 7 Enterprise edition. Для начала я сделал форму, в которой имеется строка для ввода информации две группы радио кнопок и кнопка «перевести».

     

          Для работы выбраны библиотеки(uses)

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, ExtCtrls, ComCtrls;

Типы данных: 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    RadioGroup1: TRadioGroup;

    Label1: TLabel;

    Button1: TButton;

    RadioGroup2: TRadioGroup;

    Label2: TLabel;

    Label3: TLabel;

    StatusBar1: TStatusBar;

    procedure Edit1Change(Sender: TObject);

    procedure RadioGroup1Click(Sender: TObject);

     procedure Button1Click(Sender: TObject);

   procedure RadioGroup2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

В разделе  описания идентификаторов внесены  следующие пункты:

  Form1: TForm1; {форма окна}

  vv1 : string; {переменная типа (целое число)string для ввода информации в строку «переводимое число»}

   m,m1,ch1, i : integer;{переменные строкового типа(string) m, m1 используется для радиогрупп «Исходная система» и «Конечная система», ch1 вспомогательная переменная для перевода чисел, I переменная для циклов,}

   implementation 

{$R *.DFM} 

В программе  использованы следующие функции  и процедуры. 

     1)Функция переводит данные из типа char в тип integer. Входные данные это переменная «a» типа char, выходные данные типа integer. Принцип работы программы заключается в том, что переменная «а» переводиться в ASCII код, и отнимается определённое число(55,48,87), вследствие чего получается число в десятичном виде. 55 - отнимается если символ «а» в диапазоне [‘A’..‘F’], 87 – если диапазон [‘a’..‘f’] и 48 – если диапазон [‘0’..‘9’].

function perevod0(a:char):integer;

var

c: integer;

begin

case a of

     'A'..'F': c := ord(a) - 55;

     'a'..'f': c := ord(a) - 87;

     '0'..'9': c := ord(a) - 48;

end;

perevod0 := c;

end; 

     2) Функция переводит из десятичной системы в систему Е. «A» - переменная типа integer, служит для ввода десятичного числа. Переменная «е» типа integer служит для ввода системы счисления в которую нужно перевести число в моей программе e := m1(т.е. то что выбирается в радиогруппе «Конечная система »)

function perevod1(a:integer;e: integer): string;

var

l,j : string;

z,c,b,d: integer;

begin

repeat{Начало цикла}

c := a mod e;{с это остаток от деления десятичного числа на систему счисления }

if (e = 16) and (c>9) then l:= l + chr(c+55) else l:= l + chr(c+48);{Если система  счисления шестнадцатеричная и остаток от деления больше 9, то число становиться от A до F, иначе число записывается от 0 до 9}

if a <> 0 then b := a div e;{Если а неравно нулю то b присваивается целочисленное деление  а на е}

if b<e then if (e = 16) and (b>9) then l:= l + chr(b+55) else l:= l + chr(b+48);

{Если B  меньше системы счисления, то если система  счисления шестнадцатеричная и остаток от деления больше 9, то число становиться от A до F, иначе число записывается от 0 до 9}

a := b; {a присваивается b }

until (b<e) or (a = 0);{Цикл выполняется пока b меньше системы счисления (е) или десятичное число «а» станет равно 0}

for i:= length(l) downto 1 do{Цикл который идет назад т.е 3,2,1}

if (l[i]='0') and (z = 0) then else begin j:=j+ l[i]; z:=1 end;{Условный оператор переворачивает строку задом наперед}

perevod1 := j;

end; 

     3) Функция проверяет, введены ли  числа в диапазоне [‘0’..‘9’, ‘A’..‘F’, ‘a’..‘f’], и включены ли радиогруппы. Vv1 – строка ввода типа string.

Вывод типа integer если ошибка равно 1 иначе 0.

function error1(vv1:string):integer;

begin

for i := 1 to length(vv1) do {цикл от одного до конца строки ввода вспомогательная переменная i}

if vv1 = '' then error1 :=1{Если строка ввода пустая то error1 присваивается 1}

else{иначе, если vv1[i]='0'..'9','a'..'f','A'..'F' не какого действия не происходит, иначе error1 присваивается 1}

Информация о работе Системы счисления