Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 180
1

Фибоначчиев поиск в массиве случайных чисел

08.11.2017, 22:06. Просмотров 3775. Ответов 3
Метки нет (Все метки)

Добрый вечер! Столкнулся с заданием по поиску ключей в массиве, и там был указан фибоначчиев поиск. Много читал, пытался понять и в итоге нашел код на Паскале, но разобраться в нём не смог.Подскажите, как переписать с Паскаля на C++, что и как заменить? Я хотел его сделать шаблоном к следующему коду:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
 
template <typename R>
void Sort (R *x, int t) {
R tmp;
for(int k = t - 1; k>0; k--) {
for(int i = 0; i<k; i++) {
if(x[i] > x[i+1]) {
tmp = x[i];
x[i] = x[i+1];
x[i+1] = tmp;
}
}
}
}
 
int main() {
int I, n, key;
cout << “Vvedite razmer massiva N:\n”;
cin >> n;
int *MyArr = new int [n];
srand(time(NULL));
for (i = 0; i < n; i++) {
MyArr[i] = rand() % 201;
}
Sort<int>( MyArr, n);
cout << “Kakoj element massiva nuzhno najti?\n”;
cin >> key;
delete []MyArr;
_getch();
return 0;
}
Написать программу, которая:
1) Запрашивает у пользователя размер одномерного массива и ключ для поиска;
2) Формирует массив случайных чисел заданного размера;
3) Осуществляет сортировку обменом получившегося массива;
4) Осуществляет фибоначчиев поиск в отсортированном массиве;
5) Возвращает количество найденных в массиве совпадений с ключом и их порядковые номера.

Решение на языке Pascal:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
j=1;
while (fib[j] < n + 1 )
207
 
j = j + 1;
 
mid=n-fib(j-2)+ 1;
 
f1=fib(j – 2);
 
f2=fib(j – 3);
 
finish=FALSE;
 
while (key != k(mid)) and (finish = FALSE)
 
{
 
if (mid <= 0) || (key > k(mid))
 
{
 
if (f1 == 1)
 
finish=TRUE;
 
else
 
{
 
mid=mid + f2;
 
f1 = f1 –f2;
 
f2 = f2 – f1;
 
}
 
}
 
else
 
{
I
if (f2 == 0)
 
finish=TRUE;
 
else
 
{
 
mid = mid – f2;
 
t = f1 – f2;
 
f1 = f2;
 
f2 = t;
 
}
 
}
`}
if (finish) search = 0;
else
search=mid;
}
Что это за функция fib?
0
Миниатюры
Фибоначчиев поиск в массиве случайных чисел   Фибоначчиев поиск в массиве случайных чисел  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2017, 22:06
Ответы с готовыми решениями:

Фибоначчиев поиск
Объясните, пожалуйста, алгоритм поиска в массиве методом Фибоначчи.

Фибоначчиев поиск
Помогите пожалуйста реализовать, смог сделать только генератор фибоначчиевых чисел

Фибоначчиев поиск
Если кто-нибудь знает алгоритм фибоначчиева поиска на с++, ну или на другом языке, очень прошу...

Фибоначчиев поиск наименьшего индекса заданного элемента (Pascal -> C++)
При выполнении лаб. работы возникли сложности, решила поискать в интернете пример кода, нашла...

3
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 180
11.11.2017, 06:42  [ТС] 2
Я пытался что-нибудь сделать, но получил не то, что нужно. Алгоритм должен "пройтись" по элементам, СТОЯЩИМ В ПОЗИЦИЯХ, равных числам Фибоначчи, потом сократить диапазон и сделать то же самое на новом диапазоне, пока не найдёт ключ, введённый пользователем с клавиатуры. Но мой алгоритм выводит на экран элементы массива, равные числам Фибоначчи. Сможете в комментариях к этому коду указать, что нужно сделать на самом деле?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include<ctime>
using namespace std;
int inputofMatrix(int T[], int &n);
void outputOfMatrix(int T[],int &n);
int searchFibonacySeries(int T[], int &mmax);
int main()
{
  int n;
  cout<<"How many elements "<<endl;
  cin>>n;
  int *T=new int [n];
  searchFibonacySeries(T,n);
  outputOfMatrix(T,n);
  delete [] T;
    return 0;
}
int searchFibonacySeries(int T[], int &mmax)
{
    int n;
    int a,b(1),c(0);
    n=inputofMatrix(T,mmax);
    if(n<2) cout<<a<<" "<<b<<endl;
    else {
        for(int i=0;i<n;i++){
            a = b + c;
            c = b;
            b = a;
            for(int p=0;p<n;p++){
                if(T[p]==c) cout<<c<<" ";
            }
        }
    }
    return 0;
}
int inputofMatrix(int T[], int &n)
{
     srand(time(NULL));
    for(int i=0;i<n;i++){
        T[i]=rand()%n;
    }
    int mmax=T[0];
    for(int i=0;i<n;i++){
        if(mmax<T[i]) mmax=T[i];
    }
    return mmax;
}
void outputOfMatrix(int T[], int &n){
    cout<<"Print of matrix "<<endl;
    for(int i=0;i<n;i++) cout<<T[i]<<" ";
}
Написать программу, которая:
 Запрашивает у пользователя размер одномерного массива и ключ для поиска;
 Формирует массив случайных чисел заданного размера;
 Осуществляет сортировку обменом получившегося массива;
 Осуществляет фибоначчиев поиск в отсортированном массиве;
Возвращает количество найденных в массиве совпадений с ключом и их порядковые номера.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
 
template <typename R>
void Sort (R *x, int t) {
R tmp;
for(int k = t - 1; k>0; k--) {
for(int i = 0; i<k; i++) {
if(x[i] > x[i+1]) {
tmp = x[i];
x[i] = x[i+1];
x[i+1] = tmp;
}
}
}
}
 
int main() {
int I, n, key;
cout << “Vvedite razmer massiva N:\n”;
cin >> n;
int *MyArr = new int [n];
srand(time(NULL));
for (i = 0; i < n; i++) {
MyArr[i] = rand() % 201;
}
Sort<int>( MyArr, n);
cout << “Kakoj element massiva nuzhno najti?\n”;
cin >> key;
delete []MyArr;
_getch();
return 0;
}
К этому коду нужно сделать шаблон поиска. Вы моя последняя надежда. Помочь не смогли ни однокурсники, ни другие форумы.
0
Миниатюры
Фибоначчиев поиск в массиве случайных чисел   Фибоначчиев поиск в массиве случайных чисел   Фибоначчиев поиск в массиве случайных чисел  

136 / 122 / 42
Регистрация: 15.02.2010
Сообщений: 681
11.11.2017, 07:19 3
Интересная задача для тренировки ума.
Но придумал её какой-то извращенец, потому что это - издевательство над мозгами.
С таким же успехом вместо "фибоначчиевого" поиска можно озадачить мозги каким-нибудь "простым" поиском, в котором ключами являются простые числа... 1,2,3,5,7,11,13... (вместо Фибоначчиевых: 1,1,2,3,5,8,13,21...)
Да и еще немало числовых рядов существуют, которые можно сделать "ключами"... в так называемых поисках.
0
0 / 0 / 0
Регистрация: 16.04.2020
Сообщений: 6
21.04.2020, 16:41 4
Я смотрю прошло очень много времени, а проблема у людей все осталась. Мне тоже надо сделать программу с поиском Фибоначчи и по бору да сравнить их. На Win Forms ,а не консоли да на С#... Если кто то да что то знает.. напишите пожалуйста. Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2020, 16:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В массиве из 15 двухзначных случайных чисел найти среднее арифметическое чисел, кратных 3
4)В массиве из 15 двухзначных случайных чисел найти среднее арифметическое чисел, кратных 3

Найти сумму всех отрицательных чисел в массиве случайных чисел
Помогите с кодом Найти сумму всех отрицательных чисел в массиве случайных чисел.

Подсчитать количество четных чисел в массиве из 20 случайных чисел
12. Подсчитать количество четных чисел в массиве из 20 случайных чисел

В массиве случайных чисел m*m. Заменить
В массиве случайных чисел m*m. Заменить элементы первых n строк на 1, элементы 2-х следующих строк...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.