Автор: Пользователь скрыл имя, 18 Ноября 2010 в 22:44, курсовая работа
В вычислительной технике на ряду с десятичной системой исчисления используется восьмеричная и шестнадцатеричная. Ручной перевод хотя и достаточно прост но требует много времени. Для решения данного задания необходимо составить программу, которая переводит числа из разных систем счисления в другие системы счисления.
1. Введение 4
2. Постановка задачи 4
3. Правила перевода для разных систем счисления 4
3.1. Правило перевода из шестнадцатеричной в восьмеричную систему счисления 4
3.2. Правило перевода из восьмеричной в шестнадцатеричную систему счисления 5
4. Укрупненная блок-схема 6
4. Подробная блок-схема программы 7
5. Текст программы 16
6. Ручной просчет контрольного примера 21
7. Машинный просчет контрольного примера 21
8. Заключение 22
10. Используемая литература 23
until a<16;
dt16[d]:=a;
end;
{Процедура для перевода из 16-тиричную в 8-миричную}
Procedure p16v8(var dt16,dt8:t1;var c:integer);
var
b:t1;
i,k,d:longint;
a:real;
begin
for k:=1 to c do
begin
b[k]:=round(exp((k-1)*ln(16)))
end;
a:=0;
for k:=1 to c do
begin
a:=a+b[k];
end;
d:=1;
repeat
dt8[d]:=round((a-8*int(a/8)));
a:=int(a/8);d:=d+1;
until a<8;
dt8[d]:=a;
end;
{Процедура для записи 16-тиричной(числовой) в 16-тиричную(буквенную)}
Procedure p16v16n(var dt16:t1;var dt16n:t2;var c:integer);
var
i:integer;
begin
for i:=1 to c do
begin
if dt16[i]=0 then dt16n[i]:='0';
if dt16[i]=1 then dt16n[i]:='1';
if dt16[i]=2 then dt16n[i]:='2';
if dt16[i]=3 then dt16n[i]:='3';
if dt16[i]=4 then dt16n[i]:='4';
if dt16[i]=5 then dt16n[i]:='5';
if dt16[i]=6 then dt16n[i]:='6';
if dt16[i]=7 then dt16n[i]:='7';
if dt16[i]=8 then dt16n[i]:='8';
if dt16[i]=9 then dt16n[i]:='9';
if dt16[i]=10 then dt16n[i]:='A';
if dt16[i]=11 then dt16n[i]:='B';
if dt16[i]=12 then dt16n[i]:='C';
if dt16[i]=13 then dt16n[i]:='D';
if dt16[i]=14 then dt16n[i]:='E';
if dt16[i]=15 then dt16n[i]:='F';
end;
end;
{Процедура сумирования в 16-
Procedure psum(var dt16ch1,dt16ch2,sum:t1;var dlina:integer);
var
i:integer;
begin
for i:=1 to dlina do
begin
sum[i]:=dt16ch1[i]+dt16ch2[i];
end;
for i:=1 to dlina do
begin
if (sum[i]>15.1) then
begin
sum[i+1]:=sum[i+1]+1;
sum[i]:=sum[i]-16;
end;
end;
end;
{Процедура вычитания в 16-
Procedure praz(var dt16ch1,dt16ch2,raz:t1;var c:integer);
var
i,p:integer;
begin
p:=0;
for i:=1 to c do
begin
if (dt16ch1[i]-dt16ch2[i]-p)<0 then
begin
raz[i]:=dt16ch1[i]-dt16ch2[i]+
p:=1;
end;
if (dt16ch1[i]-dt16ch2[i]-p)>=0 then
begin
raz[i]:=dt16ch1[i]-dt16ch2[i]-
p:=0;
end;
end;
end;
{------------------------
var
toch2,dlina2,toch1,dlina1,dr1,
i:longint;
dt8ch1,dt8ch2,dt16ch1,
dt16nch1,dt16nch2,sumn,razn, n1:t2;
isx1,isx2:string;
f,g:text;
vb: integer;
{Начало
программы}
begin
TextColor(Yellow);
TextBackGround(Blue);
clrscr;
assign (f,'c:\data.txt');
reset(f);
readln(f,isx1);
readln(f,isx2);
WriteLn('First number = ', isx1);
WriteLn('Second number = ', isx2);
p8(dt8ch1,toch1,dlina1,isx1);
p8(dt8ch2,toch2,dlina2,isx2);
obch1:=dlina1-toch1;
obch2:=dlina2-toch2;
if obch1>=obch2 then obch:=obch1 else obch:=obch2;
if dlina1>dlina2 then dlina:=dlina1 else dlina:=dlina2;
p8v16(dt8ch1,dt16ch1,dlina1,
p8v16(dt8ch2,dt16ch2,dlina2,
psum(dt16ch1,dt16ch2,sum,
p16v16n(sum,sumn,dlina);
praz(dt16ch1,dt16ch2,raz,
p16v16n(raz,razn,dlina);
p16v8(dt16ch1,dt8ch1,dlina1);
p16v16n(dt16ch1,dt16nch1,
p16v8(dt16ch2,dt8ch2,dlina2);
p16v16n(dt16ch2,dt16nch2,
writeln;
p16v8(raz,raz8,dlina);
assign (g,'c:\results.txt');
rewrite(g);
write('PA3HOCTb = ');
for i:=dlina downto obch+1 do write(raz8[i]:0:0);
write('.');
for i:=obch downto 1 do write(raz8[i]:0:0);
write(g,'PA3HOCTb =');
for i:=dlina downto obch+1 do write(g,raz8[i]:0:0);
write(g,'.');
for i:=obch downto 1 do write(g,raz8[i]:0:0);
writeln(g);
WriteLn;
write('Cymma = ');
p16v8(sum,sum8,dlina);
for i:=dlina+1 downto obch+1 do write(sum8[i]:0:0);
write('.');
for i:=obch downto 1 do write(sum8[i]:0:0);
write(g,'Cymma =');
p16v8(sum,sum8,dlina);
for i:=dlina+1 downto obch+1 do write(g,sum8[i]:0:0);
write(g,'.');
for i:=obch downto 1 do write(g,sum8[i]:0:0);
close(f);
Close(g);
ReadKey;
end.
{Конец
программы}
6.
Ручной просчет
контрольного примера.
Пусть имеется два восьмеричных числа:
1-ое:
2-ое:
Переведем их в шестнадцатеричную
систему счисления:
=100001,111101=
=11100,100010=
Сложим
и вычтем эти числа:
Переведем
числа в восьмеричную систему счисления
:
=111101,1011111=
=101,11011=
7.
Машинный просчет контрольного
примера.
Файл
c:\data.txt содержит следующее:
41.75
34.42
После
выполнения программы файл c:\results.txt содержит
следующее:
Сумма = 076.37
Разность
= 05.33
8.
Заключение.
Курсовая работа по теме « системы счисления » помогает освоить и отработать методы перевода чисел из разных систем счисления, дает понятие о всевозможных системах счисления, правила выполнения арифметических действий в этих системах.
Курсовая работа выполнена на языке высокого уровня – Turbo Pascal, что способствует лучшему освоению данного языка программирования, изучению многих тонкостей языка, связанных с решением задачи, поставленной в данной курсовой работе.
Результатом
выполнения данной курсовой работы будет
являться программа, выполняющая перевод
вещественных чисел из восьмеричной системы
счисления в шестнадцатеричную и обратно
в восьмеричную систему счисления. В шестнадцатеричной
системе счисления выполняются арифметические
действия действия. Результат работы программы
записывается в файл.
10.
Используемая литература.
1) И. А. Цветков «Представление и обработка информации в ЭВМ», уч.-изд. РГРТА 2003 год.