Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2010, 21:44   #1
yuriyua
 
Регистрация: 10.09.2009
Сообщений: 8
По умолчанию Системы числения

Разработать программу для преобразования чисел с фиксированной запятой с начальной системы счисления в конечную.
yuriyua вне форума Ответить с цитированием
Старый 15.03.2010, 21:46   #2
yuriyua
 
Регистрация: 10.09.2009
Сообщений: 8
По умолчанию

переделал програму на 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::Button2Click(TObject *Sender)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
sprintf(s,"%s",Edit1->Text.c_str());
sscanf(s,"%s",&szInitialNumber);
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);


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];
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
yuriyua вне форума Ответить с цитированием
Старый 15.03.2010, 21:47   #3
Coel
Заблокирован
 
Регистрация: 22.06.2009
Сообщений: 78
По умолчанию

извини я неумею пока создавать такие програмы ничем помоч немогу
Coel вне форума Ответить с цитированием
Старый 15.03.2010, 22:10   #4
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

Цитата:
Сообщение от Coel Посмотреть сообщение
извини я неумею пока создавать такие програмы ничем помоч немогу
тогда молчи и не пиши бесполезных постов =/
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 15.03.2010, 22:11   #5
yuriyua
 
Регистрация: 10.09.2009
Сообщений: 8
По умолчанию

можеш помочь??
yuriyua вне форума Ответить с цитированием
Старый 15.03.2010, 22:12   #6
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

сорри, в с++ не шарю
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 15.03.2010, 22:15   #7
yuriyua
 
Регистрация: 10.09.2009
Сообщений: 8
По умолчанию

может стыкался с такой проблемой?? мне нет разницы на чем...
yuriyua вне форума Ответить с цитированием
Старый 16.03.2010, 14:04   #8
yuriyua
 
Регистрация: 10.09.2009
Сообщений: 8
По умолчанию задача решина!!!

вот рабочий код:
Цитата:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sprintf(s,"%s",Edit1->Text.c_str());
sscanf(s,"%s",&szInitialNumber);
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);


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;
l1=l-l2;

//ціла частина

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<l2; 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<l2; k++)
for(j=0; j<100; j++)
if(nnn[k]==j)
szGetFractionalPart[k]=( j >= 10 ? 'A' + j - 10 : '0' + j ) ;
for(k=0; k<l2; 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];

}
Цитата:
public: // User declarations
char s[128], szInitialNumber[50],//исходное число
szIntegralPart[128], //целая часть
szFractionalPart[128], //дробная часть
mm[128], w[128], szGetIntegralPart[128],//
szGetFractionalPart[128], PP[128];
int InitialSystem, NecessarySystem, SplitPoint, //точка разделения
i, l,// длинна числа
l1,// длинна целой части
l2,//длинна дробной части
e, ee, n, j, ll, lll, m, x, t, o[128], k ,u[128], u1[128], nnn[128];
float e1,n1,r,pp,nn[128];
__fastcall TForm1(TComponent* Owner);
yuriyua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальные системы. jojahti Софт 12 27.01.2010 14:54
Системы Artem_sky Операционные системы общие вопросы 1 12.11.2009 19:17
Системы исчисления С++ lamak Помощь студентам 0 09.11.2009 12:02
Системы счисления. glupayastudentka Помощь студентам 1 23.06.2009 22:00
Системы счисления vdv08 Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2008 17:32