Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зайцев М. Г. / Отчет по РГЗ Зайцев 2 семестр.doc
Скачиваний:
15
Добавлен:
02.01.2020
Размер:
303.62 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Информатика и программирование

Расчётно-графическое задание

Отчет

Выполнила:

Группа: ФБИ-22

Преподаватель:Зайцев М.Г

Схема иерархии логических модулей

Перевод чисел из десятичной системы счисления в шестеричную систему

Число – 206.116

Перевод дробного числа из десятичной системы счисления в шестеричную осуществляется по следующему алгоритму:

 Вначале переводится целая часть десятичной дроби в шестеричную систему счисления;

 Затем дробная часть десятичной дроби умножается на основание шестеричной системы счисления;

 В полученном произведении выделяется целая часть, которая принимается в качестве значения первого после запятой разряда числа в шестеричной системе счисления;

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

206 Делим на 6. Процесс завершается, когда частное меньше основания 6.

Затем переводим дробную часть.

0,116

*

6

=

0,696

0,696

*

6

=

4,176

0,176

*

6

=

1,056

0,056

*

6

=

0,336

0,336

*

6

=

2,016

0,016

*

6

=

0,096

0,096

*

6

=

0,576

0,576

*

6

=

3,456

0,456

*

6

=

2,736

0,736

*

6

=

4,416

Составляем число – 206.11610 = 542.04102003246

Программа перевода вещественного десятичного числа а 6-ичное представление

program PCon10ToPFun;

//Перевод десятичного числа в 6-ичное представление

{$APPTYPE CONSOLE}

uses

SysUtils;

const

precision = 10; {точность (кол-во знаков)}

type

Massiv = array[1..precision] of integer;

Osnov = 2..9;

var

n,num: double; {число в десятичной системе}

p: Osnov; {основание}

Re: Boolean;

NP: string;

TruncMas,

FracMas: Massiv; {массивы для целой и дробной частей}

count: integer; {кол-во цифр в целой части}

i,c: integer;

mistake: integer; //позиция ошибки во введённом 10-ичном числе

//---------------------------------------------------------------------------

function Check_number(Npp: string; n: Integer):Boolean;

// Контроль ввода

Var

t: integer;

Begin

n:= 0; // Позиция ошибочно введенного символа

t:= 0;

Result:=TRUE;

If Length(Npp)=0 Then Result:=FALSE;

For n:=1 To Length(Npp) Do begin

if Npp[n] = '.' Then Inc(t);

If Not (Npp[n] In ['0'..'9']) and (Npp[n] <> '.') and (Npp[n] <> '-') or (Npp[n] = ',') Then

begin

Result:=FALSE;

Write('Ошибка ввода, позиция ', n:3,' '); ReadLn;

Break;

end;

end;

if t > 1 then begin Result:=FALSE;

Write('Ошибка ввода, две точки ', Npp,' '); ReadLn;

end;

end;

//---------------------------------------------------------------------------

{переводит целую часть и возвращает ответ в виде массива}

procedure Int10ToP (n10:longint; osn: Osnov;

var TruncMas: Massiv; var count: integer);

begin

count:= 0;

repeat

Inc(count); //счетчик

TruncMas[count]:= n10 mod osn; // остаток от деления

n10:= n10 div osn;

until n10 = 0;

end;

//---------------------------------------------------------------------------

{переводит дробную часть}

procedure Frac10ToP(n10: double; osn: Osnov;

var FracMas: Massiv);

var

i: integer;

begin

for i:= 1 to precision do

begin

FracMas[i]:= Trunc(n10*osn); // выделяет целую часть

n10:= Frac(n10*osn) // выделяет дробную часть

end;

end;

//---------------------------------------------------------------------------

function Check_p(osn: integer):boolean;

//Контроль ввода

begin

Result:=TRUE;

if (osn<2) or (osn>9) then begin

Result:=FALSE;

Write('Ошибка ввода основания системы счисления: ', osn,' '); ReadLn;

end;

end;

//------------------------------------------------------------------------------

begin

mistake:= 0;// позиция ошибочно введенного символа

WriteLn('Введите 10-тичное число и основание системы счисления ; ');

ReadLn(Np);

ReadLn(p);

//проверка введенного числа

Re:= Check_number(Np, mistake);

if Re=FALSE then Exit;

Re:= Check_p(p);

if Re=FALSE then Exit;

Val(Np,n,c);

num:= n;

if num<0 then num:= num*(-1);

Int10ToP(Trunc(num), p, TruncMas, count); // переводит целую часть

Frac10ToP(Frac(num), p, FracMas); // переводит дробную часть

Write('Число в системе с основанием ', p, ':');

if n<0 then Write('-');

for i:= count downto 1 do //запись в обратном порядке

Write(TruncMas[i]);

Write ('.');

for i:= 1 to precision do // дробная часть с точностью 10

Write(FracMas[i]);

ReadLn;

end.