Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

pdm_06

.pdf
Скачиваний:
11
Добавлен:
14.04.2015
Размер:
1.46 Mб
Скачать

Система счисления Фибоначчи

//класс реализации взаимных преобразований систем счисления

//десятичная <=> Фибоначчи ( 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]