Системы счисления, переводы чисел

Автор работы: Пользователь скрыл имя, 24 Февраля 2011 в 15:52, курсовая работа

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

На ранних ступенях развития общества люди почти не умели считать. Они отличали друг от друга совокупности двух и трех предметов; всякая совокупность, содержавшая большее число предметов, объединялась в понятии «много». Это был еще не счет, а лишь его зародыш.

Содержание работы

Глава 1.История развития систем счисления……..………………………..2
Зарождение систем счисления………………………………………………2
Образование десятичной системы счисления……………………………....4
Глава 2. Системы счисления…………….…………………………………..5
2.1 Позиционные и непозиционные системы счисления………………………5
2.2 Двоичная(бинарная) система счисления…………………………………….6
2.3. Восьмеричная система счисления…………………………………………..6
2.4. Десятеричная система счисления…………………………………………...6
2.5. Шестнадцатеричная система счисления……………………………………7
Глава 3. Представление чисел в ЭВМ…………………………………..8
Представление чисел с фиксированной и плавающей запятой.………...…8
3.2 Числа с фиксированной запятой…………………………………………….8
3.3 Числа с плавающей запятой…………………………………………………9
3.3 Прямой, обратный и дополнительный коды. Модифицированный код…10
Глава 4. Перевод чисел…………………………………………………...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
10.Список литературы………………………………………..…………..24

Файлы: 1 файл

kursovik.doc

— 478.50 Кб (Скачать файл)
 

      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}

begin

case vv1[i] of

     '0'..'9','a'..'f','A'..'F':;

else error1 :=1;

end;

end;

end; 

     4) Функция возводит целое число  в степень. x – это число в которое требуется возвести в степень, N – степень в которую надо возвести число вывод информации в типе integer.

function step(n:integer; x : integer): integer;

var

        y: integer;

begin

y:=1;

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

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

        step := y;

end; 

     5) Присваивает переменной vv1 входные данные.

procedure TForm1.Edit1Change(Sender: TObject);

begin

vv1:= edit1.text;

end; 

      6)Функция  присваивает радиогруппе «Исходная система» значение.

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

case radiogroup1.ItemIndex of { Определяет ItemIndex и присваивает m данные типа integer согласно условию}

        0: m:=2;

        1: m:=8;

        2: m:=10;

        3: m:=16;

end;

end; 

     7)Функция срабатывает на нажатие кнопки «Перевести». Переводит из 2,8,10,16-ой системы счисления в десятичную систему передаёт данные b выполняет функцию perevod0.Так же выводит полученный результат на экран.  

procedure TForm1.Button1Click(Sender: TObject);

var

n : integer;

begin

if error1(vv1) <> 1 then {Если error1 не равно 1 то }

begin

ch1 :=0;       

for i := 0 to length(vv1)-1 do {Начало цикла FOR}

begin                 n

n:=perevod0(vv1[length(vv1)-i])*step(i,m);{выполняется формула     AiMi}

ch1 := ch1+n;

end; 

 label1.Caption := perevod1(ch1,m1);{На экран выводиться переведённое число}

end

else label1.Caption := 'ОШИБКА ВВОДА!!!'; {иначе на экран выводиться 'ОШИБКА ВВОДА!!!'; } 
 

end; 

     8) Функция присваивает радио группе Исходная система значение. procedure TForm1.RadioGroup2Click(Sender: TObject);

begin

case radiogroup2.ItemIndex of{ Определяет ItemIndex и присваивает m данные типа integer согласно условию}

        0: m1:=2;

        1: m1:=8;

        2: m1:=10;

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