Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Переводы величин (алгебраические)

Поиск:
Число из системы с основанием М - в систему с основанием N

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Translating number from M-system to N-system
//  (c) Johna Smith, 1996
//
//  Method description:
//    1) translate number to decimal
//    2) translate from decimal using sequence of divisions by nbase
//       remainders will be digits of the number in the new system
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

enum digit {A=10,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z};

char mbase=16;    // from hex
char nbase=2;  // to binary

digit m[]={F,E,D,C,B,A};  // (FEDCBA)(16)
digit n[255];

void main(void)
{
  unsigned long int decimal=0,tmp=1;
  float tmpf;

  // printing given number
  for (int i=0;i<sizeof(m)/sizeof(digit);i++)
    if (m[i]<10)
       printf("%d",m[i]);
    else printf("%c",m[i]+55);
  
  // translate number to decimal
  for(i=sizeof(m)/sizeof(digit)-1;i>=0;i--)
  {
     decimal+=tmp*m[i];
     tmp*=mbase;
  }
  printf("(%d) = %ld(10) = ",mbase,decimal);
  
  // translating from decimal
  tmpf=(float)log(decimal/(nbase-1))/log(nbase);
  // rounding to nearest integer
  tmp=(int)tmpf;
  
  if (tmpf-tmp>0.5) tmp++;
  
  for (i=tmp;i>=0;i--)
  {
    n[i]=decimal%nbase;
    decimal/=nbase;
  }
  
  // printing converted number
  for (i=0;i<=tmp;i++)
    if (n[i]<10)
      printf("%d",n[i]);
    else printf("%c",n[i]+55);
  printf("(%d)n",nbase);
}



Приведение периодической дробной части к нормальному виду

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Transforming periodical decimal fraction to normal one.
//  (c) Johna Smith, 1996
//
//  Method description:
//    This method uses the fact that periodical fraction can be
//   calculated as a sum of infinite geometr. progression = 1/(1-q).
//    For example: 235.353535353...
//    The period is 35, the base (aperiodical part of the fraction) is 200,
//   number of digits in the period is 2. These parameters are required by
//   function Convert.
//    q=10^(-2)  x0=35   SUM=x0+q*x0+q^2*x0+q^3*x0+...
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

struct fraction
{
  long int a;
  long int b;
  long int c;
} f;    // f=a+b/c

fraction Convert(double base, double period, int digits)
{
  fraction f;
  double tmp;

  f.a=0;
  f.b=pow10(digits);
  f.c=f.b-1;

  // calculating 1/(1-q)
  tmp=(double)f.b*period;
  while (floor(tmp)!=tmp)
  {
     tmp*=10;
     f.b*=10;
     f.c*=10;
  }
  f.b*=period;

  // adding base to the fraction
  base*=f.c;
  while (floor(base)!=base)
  {
     base*=10;
     f.b*=10;
     f.c*=10;
  }

  f.b+=base;
  // if this fraction isn't right: b>c we should convert it
  // into the right fraction a+ b1/c, where b1<c1 & a*c+b1=b
  if (f.b/f.c>1)
  {
     f.a+=(int)(f.b/f.c);
     f.b-=((int)(f.b/f.c))*f.c;
  }

  return f;
}

void main(void)
{
  f=Convert(200,35,2);
  printf("235,(35) = %ld %ld/%ldn",f.a,f.b,f.c);
  f=Convert(0.0783,441e-7,3);
  printf("0.0783(441) = %ld %ld/%ld",f.a,f.b,f.c);
}

Сайт: forum.vingrad.ru






Просмотров: 2071

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную