Member 12983916 Ответов: 1

Интерполяционный поиск не работает на определенном ряду из 10 чисел


#include<stdio.h>
#include<stdlib.h>
int main()
{
        int lo,key,m,i,hi;
        int arr[10];
        printf("enter the elements of array\n");

        for(i=0; i<10; i++)
        {
                scanf("%d",&arr[i]);
        }
        printf("enter the key\n");
        scanf("%d",&key);
        lo = 0;
        hi = 9;
        while(hi >=lo)
        {
   
                m = lo+((hi-lo)/(arr[hi]-arr[lo]))*(key-arr[lo]);
                if(key == arr[m])
                {
                        printf("key found at location : %d",m);
                        return 0;
                }
                else if(key < arr[m])
                        hi = m-1;
                else
                        lo = m+1;

        }
                printf("key not found\n");
        return 0;
}


Что я уже пробовал:

он нормально работает для других серий, но когда я запускаю программу и ставлю эту серию, то возникает какая-то проблема.
вход : 1,3,5,7,9,11,15,16,17,18
ключевое значение : 12
желаемый o / p = ключ не найден
фактическая о/п = сегментации не

1 Ответов

Рейтинг:
1

Patrice T

Проблема в том, что в какой-то момент, m выйти из диапазона 0-9.
Вам нужно просмотреть свою формулу на бумаге и попробовать ее с 5, 12, 17...

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.