Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MaksimLev
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
1

Создание метода интерполяции по блоксхеме

14.03.2017, 23:32. Просмотров 229. Ответов 4
Метки нет (Все метки)

Здравствуйте. Помогите пожалуйста написать метод интерполяции по данной схеме, у меня чего то не получается, всё время пишет что не найдено. Что то цикл не выходит у меня. Фото блока ниже. Код, который я написал тоже ниже. Также в коде есть бинарный алгоритм и он работает, а интерполяция похожая блоксхема на бинарную, но почему то не работает у меня она.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <cstdlib>
#define N 100
 
using namespace std;
 
void mas_vvod (int n, int mas[])
{int i;  
    for(i=0; i<n; i++){mas[i]=i+1;} 
}
    
 
 
void mas_vivod (int n, int mas[]){
    int i;
    cout<<"\nMasiv: ";
    for(i=0; i<n; i++){
        cout<<mas[i]<<" ";
    }
}
 
//Бинарный алгоритм.
void binarnij (int n, int mas[])
{ int i, x, L, R;
cout<<"\nCto isem x= "; 
cin>>x;
L=0;
R=N-1;
 
while(1) //бесконечный цикл и выход на break
{
if(L <= R)
{
    i = (L+R)/2;
    if(mas[i] == x)
    {    
        cout << "Naideno";
    break;
    }
    else
    {
    if(mas[i]!=x && mas[i] < x)           
          L = i+1;
        else
          R = i-1;  
    }   
}
else
{
    cout << "Nenaideno";
    break;
}   
}
}
 
//Что тут не так?
void interpolacija (int n, int mas[])
{ int i, x, L, R;
cout<<"\nko meklet x= "; 
cin>>x;
L=0;
R=N-1;
 
while(1) //бесконечный цикл и выход на break
{
if(L <= R)
{
    i = L+(R-L)*(x-mas[L])/(mas[R]-mas[L]);
    if(mas[i] < x && mas[i] > x)
    {    
        cout<<"Naideno";
        break;
    }
    else
    {
    if(mas[i] < x && mas[i] < x)           
             L=i+1;   
        else
             R=i-1;        
    }   
}
else
{
    cout<<"Nenaideno";
    break;
}   
}
}
 
 
    
int main()
{   int mas[N];
    int i,n;
    cout<<"masiva razmer n= ";
    cin>>n;   
    mas_vvod(n,mas);
    mas_vivod(n,mas);
    binarnij(n,mas);
    interpolacija(n,mas);
system("Pause>>nul");
return 0;
}
0
Миниатюры
Создание метода интерполяции по блоксхеме  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2017, 23:32
Ответы с готовыми решениями:

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

return в блоксхеме
в каком блоке его изображать? вроде и процедурный подошел бы, и для...

Нужно по блоксхеме написать программный код на с++

Создание метода в классе
Добрый день. Написал алгоритм чтения файла, в котором создаётся вектор...

Создание объекта с помощью метода getInstance()
Помогите написать тестовую программу: Создайте класс, из которого можно...

4
MaksimLev
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
15.03.2017, 00:14  [ТС] 2
DemolitionMan, вы случайно не знаете в чём проблема у меня?
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
15.03.2017, 17:11 3
Какая проблема?

Добавлено через 7 минут
А, понял, щас посмотрю.

Добавлено через 2 минуты
Цитата Сообщение от MaksimLev Посмотреть сообщение
if(L <= R)
- в алгоритме просто меньше.

Добавлено через 1 минуту
Цитата Сообщение от MaksimLev Посмотреть сообщение
cout<<"\nko meklet x= ";
- а это что еще значит?

Добавлено через 1 минуту
Цитата Сообщение от MaksimLev Посмотреть сообщение
if(mas[i] < x && mas[i] > x)
- у Вас этот цикл никогда не выполнится. Тоже самое и 76 строке. Почему Вы неточно реализовали алгоритм? Надо было точно реализовывать алгоритм.

Добавлено через 6 минут
Цикл в интерполяции должен выглядеть так:
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
while(1) //бесконечный цикл, выход по break
{
if(L < R)
{
    i = L+(R-L)*(x-mas[L])/(mas[R]-mas[L]);
 
 
    if(mas[i] > x)
    {
        R = i - 1;
        continue;
    }
    else
    {
        if(mas[i] < x)
        {
            L=i+1;
            continue;
        }
        else
        {
            cout<<"Naideno.";
            break;
        }
    }
}
else
{
    cout<<"Nenaideno.";
    break;
}   
}
1
MaksimLev
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
15.03.2017, 20:53  [ТС] 4
DemolitionMan, Спасибо. Всё работает, но чего то местами коряво. Например: n=10; числа от 1-10, то если написать x=10 (ищем число 10), то в бинарном почему то последнее число не находит, хоть n=20 или n=30 не находит последнее число и ещё почему то не находит 8 и 9 в бинарном если n=10, если n=20 то находит 8 и 9. В интерполяции же не находит 5 и 10, а когда ищет 7 вообще закрытие программы идёт. Хотя я не много понял почему, если я так правильно думаю. У меня стоит #define N 100 , а если поставить 200, то уже программы другие цифры то находят, то не находят.
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
16.03.2017, 04:44 5
Цитата Сообщение от MaksimLev Посмотреть сообщение
system("Pause>>nul");
- я же говорил в прошлой теме, что нужно просто system("pause"); писать.

Добавлено через 17 минут
Я не знаю что там происходит в алгоритмах. Так вроде проверил - нормально должно быть. Пройдитесь отладчиком, чтобы посмотреть все ли там в порядке с числами, так вроде программа соответствует алгоритму. Если что - все вопросы автору алгоритма, а не мне.
0
16.03.2017, 04:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2017, 04:44

Создание метода без класса и аргументов разве нельзя ?
Всем доброго времени суток. А разве нельзя создать обычный метод под main без...

Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода
Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода....

Создание перегрузки метода "operator =" для типа, расположенного в ином namespace
Здравствуйте. Столкнулся со следующей проблемой которая упрощено выглядит...


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

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

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