
pdm_06
.pdfСистема счисления Фибоначчи
//класс реализации взаимных преобразований систем счисления
//десятичная <=> Фибоначчи ( C++ ) файл: mi_fib.h
#include <string>
// определение типа uint
typedef unsigned __int32 uint; // беззнаковый целый
// пространство имѐн using namespace std; class mi_fib { public:
//конструктор mi_fib() {} ;
//деструктор
~mi_fib() {} ;
//----------------------------------------------------------------
//возвращает код числа в системе исчисления Фибоначчи:
// n : 0 1 2 3 |
4 5 |
6 ... |
||
// Fibonacci : |
1 2 |
3 5 |
8 |
13 21 ... |
uint IntToFib(uint |
vf) |
{ |
|
//переменная результата uint res = 0;
//если ноль сразу возвращаем результат if (vf == 0)
return (res);
//если больше максимально допустимого
//генерируем исключительную ситуацию if (vf > 5702886)
throw;
//массив чисел фибоначчи
uint fib[] = {
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578} ;
//формируем число в системе исчисления Фибоначчи for (int i = 31; i >= 0; i--) {
if (vf == fib[i]) { res |= (0x01 << i); break;
}
if (vf > fib[i]) { vf -= fib[i];
res |= (0x01 << i);
}
}
//выходим
return (res);
}
// ----------------------------------------------------------------
// ----------------------------------------------------------------
// преобразование из сист. счисления Фибоначчи в десятичную uint FibToInt(uint vi) {
//переменная результата uint res = 0;
//массив чисел Фибоначчи uint fib[] = {
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269,
2178309, 3524578} ; for (int i = 0; i <= 31; i++) { res += fib[i] * (0x01 & (vi >> i));
}
return (res);
}
// ----------------------------------------------------------------
// функция преобразования числа в строку (двоичный формат) string IntToStrBin(unsigned int a) {
string bstr = ""; do {
(a % 2) ? bstr.insert(0, "1") : bstr.insert(0, "0"); a /= 2;
} while (a > 0); return bstr;
}
};
31

Пример эксплуатации класса mi_fib |
||
#include "mi_fib.h" |
Пример. Вывод программы Фибоначчи |
|
#include <string> |
Введите число ограничивающее вывод таблицы |
|
|
||
#include <iostream> |
соответствия: |
|
|
||
#include <stdlib.h> |
>25 |
|
|
|
|
// --------------------------------------------------------- |
Dec |
Fib |
|
||
// пространство имѐн |
0 |
0 |
|
||
using namespace std; |
1 |
1 |
|
||
int main() { |
2 |
10 |
|
||
uint numb; |
3 |
100 |
|
||
mi_fib fibconv; |
4 |
101 |
|
||
cout<< |
5 |
1000 |
|
||
"Введите число ограничивающее вывод таблицы соответствия:" |
6 |
1001 |
|
||
<<endl; |
7 |
1010 |
|
||
cin>>numb; |
8 |
10000 |
|
||
cout<<"Dec\tFib"<<endl; |
9 |
10001 |
|
||
for (uint i = 0; i <= numb; i++) |
10 |
10010 |
|
||
cout<<i<<"\t" |
11 |
10100 |
|
||
<<fibconv.IntToStrBin(fibconv.IntToFib(i))<<endl; |
12 |
10101 |
|
||
system("pause"); // пауза (ОС Windows <stdlib.h>) |
13 |
100000 |
|
||
return 0; |
14 |
100001 |
|
||
} |
15 |
100010 |
|
||
// --------------------------------------------------------- |
16 |
100100 |
|
||
|
17 |
100101 |
|
18 |
101000 |
|
19 |
101001 |
|
20 |
101010 |
|
21 |
1000000 |
|
22 |
1000001 |
|
23 |
1000010 |
|
24 |
1000100 |
|
25 |
1000101 |
Для получения навыков программирования и понимания принципов тех или иных алгоритмов желательно осуществлять самостоятельную
проверку программ. |
32 |
|

Список литературы
1.Набенин А. А. Дискретная математика. – М.: Научный мир, 2010. 512 с.: ил.
2.Демидович Б. П., Марон И. А. Основы вычислительной математики. – М.: «Наука»,
1970. – 664 с. ил.
3.Андерсон Дж. А. Дискретная математика и комбинаторика. : Пер с англ. – М. Издательский дом «Вильямс», 2004. – 960 с.: ил. – Паралл. тит. англ.
4.Седжевик Р. Алгоритмы на C++.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2011. – 1056с.: ил. – Парал. тит. англ.
5.Пирогов В. Ю. Ассемблер для Windows. Изд. 4-е перераб. и доп. – СПб.: БХВ-Петербург, 2007. – 896 с.: ил. + CD-ROM.
6.Юров В. И. Assembler. Учебник для вузов. 2- е изд. – СПб.: Питер, 2011. – 637 с.: ил.
7.Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд.: Пер. с англ.
– М.: ООО «И.Д. Вильямс», 2013. – 1248 с.:
ил. – Парал. тит. англ.
Иван Иванович Шишкин (1832-1898) — русский художник-пейзажист, живописец, рисовальщик и гравѐраквафортист. Представитель Дюссельдорфской художественной школы.
Шишкин И.И. за работой над картиной «Мордвиновские дубы». 1891. Фото
33