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 }
В разделе описания идентификаторов внесены следующие пункты:
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;
c: integer;
case a of
'A'..'F': c := ord(a) - 55;
'a'..'f': c := ord(a) - 87;
'0'..'9': c := ord(a) - 48;
perevod0 := c;
2) Функция переводит из десятичной системы в систему Е. «A» - переменная типа integer, служит для ввода десятичного числа. Переменная «е» типа integer служит для ввода системы счисления в которую нужно перевести число в моей программе e := m1(т.е. то что выбирается в радиогруппе «Конечная система »)
function perevod1(a:integer;e: integer): string;
l,j : string;
z,c,b,d: integer;
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 присваивается целочисленное деление а на е}
{Если 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;
3) Функция проверяет, введены ли числа в диапазоне [‘0’..‘9’, ‘A’..‘F’, ‘a’..‘f’], и включены ли радиогруппы. Vv1 – строка ввода типа string.
Вывод типа integer если ошибка равно 1 иначе 0.
function error1(vv1:string):integer;
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}
case vv1[i] of
'0'..'9','a'..'f','A'..'F':;
else error1 :=1;
4) Функция возводит целое число в степень. x – это число в которое требуется возвести в степень, N – степень в которую надо возвести число вывод информации в типе integer.
function step(n:integer; x : integer): integer;
y: integer;
5) Присваивает переменной vv1 входные данные.
procedure TForm1.Edit1Change(Sender: TObject);
vv1:= edit1.text;
6)Функция присваивает радиогруппе «Исходная система» значение.
procedure TForm1.RadioGroup1Click(Sender: TObject);
case radiogroup1.ItemIndex of { Определяет ItemIndex и присваивает m данные типа integer согласно условию}
0: m:=2;
1: m:=8;
2: m:=10;
3: m:=16;
7)Функция срабатывает на нажатие кнопки «Перевести». Переводит из 2,8,10,16-ой системы счисления в десятичную систему передаёт данные b выполняет функцию perevod0.Так же выводит полученный результат на экран.
procedure TForm1.Button1Click(Sender: TObject);
n : integer;
if error1(vv1) <> 1 then {Если error1 не равно 1 то }
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;
label1.Caption := perevod1(ch1,m1);{На экран выводиться переведённое число}
end
else label1.Caption := 'ОШИБКА ВВОДА!!!'; {иначе на экран выводиться 'ОШИБКА ВВОДА!!!'; }
8) Функция присваивает радио группе Исходная система значение. procedure TForm1.RadioGroup2Click(Sender: TObject);
case radiogroup2.ItemIndex of{ Определяет ItemIndex и присваивает m данные типа integer согласно условию}
0: m1:=2;
1: m1:=8;
2: m1:=10;
3: m1:=16;
end.
9.Таблица тестов.
№
Входные данные
Полученное число
Примечание
Переводимое число
Исходная система
Конечная система
1
1011
2
Тесты предложенные на проверку правильности перевода
8
13
3
10
11
4
16
B
5
17
1111
6
20
7
15
F
9
254
11111110
376
12
FE
adf34
10101101111100100000
14
2557464
712500
ADF34
212
530
18
ропл
ОШИБКА ВВОДА!!!
Тесты на ошибку ввода
19
adf323g
пустая строка
10.Список литературы.
1. Кодирование информации (Двоичные коды). Березнюк Н. Т. Андрущенко А. Г. И др. Харьковю 1978.
2. Выгодский М.Я. Справочник по элементарной математике, М.: Государственное издательство технико-теоретической литературы, 1956.
3. Каган Б.М. Электронные вычислительные машины и системы, М.: Энергоатомиздат, 1985.
4. Майоров С.А., Кириллов В.В., Приблуда А.А., Введение в микроЭВМ, Л.: Машиностроение, 1988.
5. Фомин С.В. Системы счисления, М.: Наука, 1987.
6. Ролич Ч. Н. – От 2 до 16, Минск, «Высшая школа», 1981г.
7. Математическая энциклопедия. М: “Советская энциклопедия” 1985г.
8. Шауман А. М. Основы машинной арифметики. Ленинград, Издательство Ленинградского университета. 1979г.
9. Калабеков Б. А. Цифровые устройства и микропроцессорные системы. М: “Горячая линия - Телеком” 2000г.
10. Ворощук А. Н. Основы ЦВМ и программирования. М:”Наука” 1978г.
11. Алексенко А. Г. Микросхемотехника. М: ”Радио и связь” 1990г.
Страницы: 1, 2, 3, 4, 5