Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208

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

08.11.2017, 22:06. Показов 8131. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2017, 22:06
Ответы с готовыми решениями:

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

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

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

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

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
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
11.11.2017, 07:19
Интересная задача для тренировки ума.
Но придумал её какой-то извращенец, потому что это - издевательство над мозгами.
С таким же успехом вместо "фибоначчиевого" поиска можно озадачить мозги каким-нибудь "простым" поиском, в котором ключами являются простые числа... 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
Я смотрю прошло очень много времени, а проблема у людей все осталась. Мне тоже надо сделать программу с поиском Фибоначчи и по бору да сравнить их. На Win Forms ,а не консоли да на С#... Если кто то да что то знает.. напишите пожалуйста. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2020, 16:41
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru