Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 06:12, курсовая работа
На первых порах расширение запаса чисел происходило медленно. Сначала люди овладели счетом в пределах нескольких десятков и лишь позднее дошли до сотни. У многих народов число 40 долгое время было пределом счета и названием неопределенно большого количества. В русском языке слово «сороконожка» имеет смысл «многоножка»; выражение «сорок сороков» означало в старину число, превосходящее всякое воображение. На следующей ступени счет достигает нового предела: десяти десятков, и создается название для числа 100. Вместе с тем слово «сто» приобретает смысл неопределенно большого числа. Такой же смысл приобретают потом последовательно числа тысяча, десять тысяч (в старину это число называлось «тьма»), миллион.
Глава 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
Еще одним достоинством дополнительного кода является то, что нуль, в отличие от пpямого и обpатного кодов, пpедставляется одним кодом. Наличие 0 в знаковом бите пpи пpедставлении нуля опpеделяет его как величину положительную, что согласуется с математической теоpией чисел и соглашениями, пpинятыми во всех языках пpогpаммиpования.
Из приведенных примеров следует, что положительные числа в прямом, обратном и дополнительном кодах совпадают. В прямом и обратном коде нуль имеет два представления – «положительный» и «отрицательный» нуль.
Отметим, что при представлении с плавающей запятой отдельно кодируется мантисса и порядок числа. При этом возможно представление мантисс и порядков чисел в одном и том же или разных кодах. Например, порядок числа может быть представлен в прямом, а мантисса – в дополнительном кодах и т. п.
Таким образом, используя обратный и дополнительный коды, операцию алгебраического сложения можно свести к арифметическому сложению кодов чисел, которое распространяется и на разряды знаков, которые рассматриваются как разряды целой части числа.
При сложении чисел, меньших единицы, в машине быть получены числа, по абсолютной величине большие единицы. Для обнаружения переполнения разрядной сетки в ЭВМ применяются модифицированные прямой, обратный и дополнительный коды. В этих кодах знак кодируется двумя разрядами, причем знаку "плюс" соответствует комбинация 00, а знаку "минус" - комбинация 11.
Правила сложения для модифицированных кодов те же, что и для обычных. Единица переноса из старшего знакового разряда в модифицированном дополнительном коде отбрасывается, а в модифицированном обратном коде передается в младший цифровой разряд.
Признаком переполнения служит появление в знаковом разряде суммы комбинации 01 при сложении положительных чисел (положительное переполнение) или 10 при сложении отрицательных чисел (отрицательное переполнение). Старший знаковый разряд в этих случаях содержит истинное значение знака суммы, а младший является старшей значащей цифрой числа. Для коррекции переполнения число нужно сдвинуть в разрядной сетке на один разряд вправо, а в освободившийся старший знаковый разряд поместить цифру, равную новому значению младшего знакового разряда. После корректировки переполнения мантиссы результата необходимо увеличить на единицу порядок результата.
Глава 4. Перевод чисел.
4.1 Представление двоичных чисел и перевод их в десятичные.
Совершенно очевидно, что двоичное число представляется последовательностью нулей и единиц – разрядов. Как и в любой позиционной системе, каждому разряду присвоен определенный вес – показатель степени основания системы. Веса первых 10 позиций представлены в таблице.
Веса первых десяти позиций двоичной системы счисления
Позиция |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Вес |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Образование |
В двоичной системе счисления даже сравнительно небольшие числа занимают много позиций.
Как и в десятичной системе, в двоичной системе счисления для отделения дробной части используется точка (двоичная точка). Каждая позиция слева от этой точки также имеет свой вес – вес разряда дробной части числа. Значение веса в этом случае равно основанию системы счисления (т.е. двойке), возведенному в отрицательную степень.
Получить десятичное число из двоичного чрезвычайно просто. Согласно формуле
для двоичной системы счисления получаем:
Пример иллюстрирует процесс получения десятичного числа из двоичного.
Перевод двоичного числа в десятичное
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=
Для перевода из десятичной системы счисления в 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) Функция проверяет,
введены ли числа в диапазоне [
Вывод типа integer если ошибка равно 1 иначе 0.