5. Висновки

 

В процесі налагодження програм та в деяких інших ситуаціях у програмуванні актуальною є проблема переведення чисел з однієї позиційної системи числення в іншу. Якщо основа нової системи числення дорівнює деякому степеню старої системи числення, то алгоритм переводу дуже простий: потрібно згрупувати справа наліво розряди в кількості, що дорівнює показнику степеня і замінити цю групу розрядів відповідним символом нової системи числення. Цим алгоритмом зручно користуватися коли потрібно перевести число з двійкової системи числення у вісімкову або шістнадцяткову. Наприклад, 101102=10 110=268, 10111002=101 1100=5C8

У двійковому відбувається за зворотнім правилом: один символ старої системи числення заміняється групою розрядів нової системи числення, в кількості рівній показнику степеня нової системи числення. Наприклад, 4728=100 111 010=1001110102, B516=1011 0101=101101012

Як бачимо, якщо основа однієї системи числення дорівнює деякому степеню іншої, то перевід тривіальний. У протилежному випадкові користуються правилами переведення числа з однієї позиційної системи числення в іншу (найчастіше для переведення із двійкової, вісімкової та шістнадцяткової систем числення у десяткову, і навпаки).


6. Програмна реалізація

Програма розроблена для перетворення чисел з однієї системи числення в іншу.Реалізована в середовищі програмування Borland C++Builder.

Лістінг програми:

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include <math.h>

#include <conio.h>

#include <iostream.h>

#include <string.h>

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//зчитуваня початкового числа

sprintf(s,"%s",Edit1->Text.c_str()); // копіюємо текст в рядок S

sscanf(s,"%s",&szInitialNumber);  // зчитуємо значення із рядка S

l=strlen(s);

// зчитування початкової системи числення

sprintf(s,"%s",Edit2->Text.c_str());

sscanf(s,"%i",&InitialSystem);

//зчитування потрібної системи числення

sprintf(s,"%s",Edit3->Text.c_str());

sscanf(s,"%i",&NecessarySystem);

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

for(i=0; i<l; i++)

if( szInitialNumber[i]=='.')

SplitPoint=i;

for(i=0; i<SplitPoint; i++)

szIntegralPart[i]=szInitialNumber[i];

for(i=SplitPoint+1; i<l; i++)

szFractionalPart[i]=szInitialNumber[i];

l2=l-SplitPoint-1;

l1=l-l2-1;

// перетворення цілої частини

for(i=0; i<l1; i++)

for(j=0;j<=100;j++)

if(szIntegralPart[i]==( j >= 10 ? 'A' + j - 10 : '0' + j ))

u[i]=j;

e=0;

for(i=0; i<l1-1; i++)

e=(u[i]+e)*InitialSystem;

n=e+u[l1-1];

m=0;

for(i=0; n>=m; i++)

{

m=pow(NecessarySystem, i);

ll=i-1;

}

for(k=ll; k>=0; k--)

{

t=pow(NecessarySystem, k);

x=n/t;

o[k]=x;

for(j=0; j<100; j++)

 if(o[k]==j)

 w[k]=( j >= 10 ? 'A' + j - 10 : '0' + j ) ;

n=n%t;

}

lll=strlen(w);

for(i=0; i<=ll; i++)

szGetIntegralPart[i]=w[ll-i];

// перетворення дробової частини

for(i=SplitPoint+1; i<l; i++)

for(j=0; j<=100; j++)

if(szFractionalPart[i]==( j >= 10 ? 'A' + j - 10 : '0' + j ))

u1[i]=j;

e1=0;

pp=InitialSystem;

r=1/pp;

for(i=l-1;i>SplitPoint;i--)

e1=(u1[i]+e1)*r;

n1=e1;

nn[0]=n1;

for(i=0; i<20; i++)

{

nn[i+1]=nn[i]*NecessarySystem;

if(nn[i+1]>=1)

{

 nnn[i+1]=nn[i+1];

 nn[i+1]=nn[i+1]-nnn[i+1];

}

else

{

 nn[i+1]=nn[i+1];

 nnn[i+1]=nn[i+1];

}

}

for(k=1; k<20; k++)

for(j=0; j<100; j++)

 if(nnn[k]==j)

 szGetFractionalPart[k]=( j >= 10 ? 'A' + j - 10 : '0' + j );

for(k=0; k<20; k++)

szGetFractionalPart[k]=szGetFractionalPart[k+1];

Edit4->Text=PP;

if(u[0]==0)

szGetIntegralPart[0]='0';

sprintf(s,"%s.%s", szGetIntegralPart, szGetFractionalPart);

Edit4->Text=s;

for(i=0;i<=ll;i++)

szGetIntegralPart[i]=PP[i];

for(i=0;i<=40;i++)

szGetFractionalPart[i]=PP[i];

}

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

void __fastcall TForm1::N1Click(TObject *Sender)

{

Close();

}


 

Контрольні приклади:

 

Приклад 1.

Перетворити число 109 з десяткової системи числення в двійкову.

 

Приклад 2.

Перетворити число 1011100000001111 з двійкової системи числення в шістнадцяткову систему числення.


 

Список використаної літератури

 

1.         Григоренко Я.М., Панкратова Н. Д. “Обчислювальні методи в задачах прикладної математики”. Навч.посібник.-К.:Либідь,1995.-280с.

2.         “Численные методы в инженерных исследованиях” / В. Е. Краскевич, К. Х. Зеленский, В. И. Гречко.-К.: Вища шк. Головное изд-во,1986.-263 с.

3.         Фейсон Т. « Объектно-ориентированное программирование на Borland C++ 4.5». Киев, «Диалектика»,1996.

4.         Каган Б.М. Электронные вычислительные машины и системы, М.: Энергоатомиздат, 1985.

5.         Фомин С.В. Системы счисления, М.: Наука, 1987.

6.         Выгодский М.Я. Справочник по элементарной математике, М.: Государственное издательство технико-теоретической литературы, 1956.


Информация о работе «Перетворення чисел з однієї системи числення в іншу»
Раздел: Информатика, программирование
Количество знаков с пробелами: 24373
Количество таблиц: 2
Количество изображений: 3

Похожие работы

Скачать
50010
6
0

... в одному розряді перетворюється в 1, а в другому розряді 1 в 0). 2.4 Управляючий автомат(Каган стр.241 - 243) Будь-який цифровий пристрій складається з двох частин – операційного та управляючого блоків. Операційний блок характеризується сукупністю визначених в ньому мікрооперацій, кожна з яких являє собою деякий виконуваний в даному операційному блоці елементарний акт передачі або перетворення і ...

Скачать
35750
0
3

... за допомогою центральних різниць. Якщо область має форму кола, зручно користуватись полярними координатами Наведемо деякі загальні зауваження. При чисельному розв’язанні крайових задач для диференціальних рівнянь в частинних похідних методом сіток можуть бути використані тільки різницеві схеми, які збігаються, оскільки в цьому разі можна розраховувати на отримання наближеного розв’язку задачі, ...

Скачать
33126
2
4

... процедур, придатних в даних обставинах, а також в умовах повної специфікації припущень, прийнятих при зборі і обробці даних. Рис.4 Етапи статистичного висновку в географії 4.  КАРТОГРАФІЯ ЯК МОВА ГЕОГРАФІЧНОЇ НАУКИ Карта є з одного боку моделлю об'єктивно існуючої реальності, а з іншого боку – однією з мов науки. Карта складається із сукупності ...

Скачать
54827
13
12

... пам'ті комп'ютера та представлення в ній даних. Також піднімаються питання практичного усвідомлення процесів кодування, декодування та виправлення помилок у кодах даних. 1 ТЕОРЕТИЧНА ЧАСТИНА 1.1 Динамічна пам’ять, принципи її організації і роботи Однією з головних задач субмікронної технології ВІС є формування структур швидкодіючих запам’ятовуючих пристроїв (ЗП) з інформаційною ємністю бі ...

0 комментариев


Наверх