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.
... в одному розряді перетворюється в 1, а в другому розряді 1 в 0). 2.4 Управляючий автомат(Каган стр.241 - 243) Будь-який цифровий пристрій складається з двох частин – операційного та управляючого блоків. Операційний блок характеризується сукупністю визначених в ньому мікрооперацій, кожна з яких являє собою деякий виконуваний в даному операційному блоці елементарний акт передачі або перетворення і ...
... за допомогою центральних різниць. Якщо область має форму кола, зручно користуватись полярними координатами Наведемо деякі загальні зауваження. При чисельному розв’язанні крайових задач для диференціальних рівнянь в частинних похідних методом сіток можуть бути використані тільки різницеві схеми, які збігаються, оскільки в цьому разі можна розраховувати на отримання наближеного розв’язку задачі, ...
... процедур, придатних в даних обставинах, а також в умовах повної специфікації припущень, прийнятих при зборі і обробці даних. Рис.4 Етапи статистичного висновку в географії 4. КАРТОГРАФІЯ ЯК МОВА ГЕОГРАФІЧНОЇ НАУКИ Карта є з одного боку моделлю об'єктивно існуючої реальності, а з іншого боку – однією з мов науки. Карта складається із сукупності ...
... пам'ті комп'ютера та представлення в ній даних. Також піднімаються питання практичного усвідомлення процесів кодування, декодування та виправлення помилок у кодах даних. 1 ТЕОРЕТИЧНА ЧАСТИНА 1.1 Динамічна пам’ять, принципи її організації і роботи Однією з головних задач субмікронної технології ВІС є формування структур швидкодіючих запам’ятовуючих пристроїв (ЗП) з інформаційною ємністю бі ...
0 комментариев