Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2011, 21:17   #1
dENISVOL94
Новичок
Джуниор
 
Регистрация: 25.09.2011
Сообщений: 1
По умолчанию Поиск делением пополам

Составьте функцию search, выполняющую поиск методом деления пополам заданного числа в массиве целых чисел, отсортированном по возрастанию (см. здесь). Функция search должна быть объявлена как

Код:
int search(int *a, int nel, int k) 
{ 
        ... 
}
В качестве параметров функция search принимает указатель на начало массива a, количество элементов массива nel и искомое число k. Функция должна возвращать индекс найденного элемента или -1, если такого элемента не существует.
Тело функции search не должно содержать циклов и goto, то есть она должна быть реализована через рекурсию.
Итоговую программу, содержащую как функцию search, так и функцию main, демонстрирующую работоспособность функции search, нужно назвать bsearch.c. Количество элементов массива и значения элементов должны вводиться в программу из стандартного потока ввода с помощью функции scanf.


Компилирую codeblocks, си.
Объясните пожалуйста где у меня ошибка:
Код:
#include <stdio.h>
#include <stdlib.h>

int l,r,c;

int search(int *a, int nel, int k)
{
    c=nel/2;
    if (k==a[c]) {
    return c;
    }
    else if(k>a[c])
    {
        l=a[c];
        search(a,nel,k);
    }else if (k<a[c])
    {
        r=a[c];
        search(a,nel,k);
    }else
    {
        return -1;
    }
}

int main()
{
    int a[1000],nel,k,i,num;
    scanf("%d",nel);
    for (i=1; i<=nel; i++)
    {
        scanf("%d",a[i]);
    }
    scanf("%d",k);
    num=search(a,nel,k);
    printf("%d",num);
    return 0;
}

Последний раз редактировалось Stilet; 25.09.2011 в 21:23.
dENISVOL94 вне форума Ответить с цитированием
Старый 25.09.2011, 22:06   #2
Stasiksis
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 19
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
int search(int *a, int nel, int k)
{
 int i,j=0;
    if ( *(a+2*nel-(2*nel)%4) == k )
        {
        j=nel/2;
    return j;
        }
    else
        if (*(a+2*nel-(2*nel)%4) > k)
            {
                return search( a, (nel/2), k);
            }
        else
            if ( *(a+2*nel-(2*nel)%4) < k)
                {
                    return nel/2+search( (a+2*nel-(2*nel)%4), (nel/2)+1, k);
                }
            else
                return -1;
}

int main(int argc, char **argv)
{
 int i=0, s=0,q=0, m=8, nell , n=0;
 int a = (int)malloc(100*sizeof(int));
    a=0;
 int *b;
    b = &a;
    printf("kol-vo elem=");
    scanf("%d\n", &nell );
    for ( i=0; i<nell; i++ )
        {
            scanf("%d", &a+4*i );
                if (i==0 || *(&a+4*i)<= *(&a+4*(i-1)) )
                    {
                        s++;
                    }
                if ( *(&a+4*i) == m )
                    {
                        n++;
                    }
        }
    if ( s!=1 || n!=1)
        {
            printf("%d\n",-1);
            goto metka;
        }
    printf("index=%d", search( b, nell, m ) );
    metka:
    free(a);
    return 0;
}
Денис, если найдешь где ошибка, скинь мне
Stasiksis вне форума Ответить с цитированием
Старый 26.09.2011, 20:39   #3
mikebrownen
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 21
По умолчанию

беспалевно так))))
mikebrownen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод деления пополам Си++ nikozavr Общие вопросы C/C++ 10 12.02.2011 11:36
многострочный хинт с делением по словам uraura Общие вопросы Delphi 8 10.09.2010 05:46
Деление байта пополам necroant Общие вопросы C/C++ 19 18.06.2010 04:17
поиск корня методом деления пополам jewels Общие вопросы C/C++ 2 16.11.2009 01:09
Проблема с делением 1 на 2 Bravo Общие вопросы C/C++ 4 20.10.2008 23:20