Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.07.2019, 11:42   #1
Андрей8Андрей
 
Регистрация: 11.12.2016
Сообщений: 6
Репутация: 10
По умолчанию В чем проблема в программе

Код:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

bool binSearch(const double *a, int n, double x, int *idx);

void swap(double *p, double *q);
int compareDouble(const void* k, const void* l);

int main() {
    int n, idx, i;
    double *a = NULL, x;
    while (true) {
        printf ("n:\n");
        if (scanf ("%d", &n) <1 || n<=0)
            break;
        
        delete[] a;
        a=new double [n];
        
        for (i=0; i<n; ++i) {
            a[i]=(double)(rand () %100);
        }
        qsort (a, n, sizeof(double), &compareDouble);
        
        for (i=0; i<n; ++i){
            printf ("%6.1lf", a[i]);
            if ((i+1)%10==0)
                printf ("\n");
        }
        while (true) {
            printf ("x:\n");
            if (scanf ("%lf", &x) < 1 || x<= (-100.))
                break;
            
            bool found = binSearch(a, n,x, &idx);
            
            if (found) {
                printf("Found.  ");
            } else {
            printf("Not Found.  ");
            }
            printf("IDX=%d\n", idx);
        }
    }
    delete[] a;
    return 0;
}

bool binSearch(const double *a, int n, double x, int *idx) {
    if (n==0 || x<=a[0]) {
        *idx = 0;
        return (x>=a[0]);         // x==a[0]
        } else if (x>a[n-1]) {
        *idx = n;
            return false;
        } else {
            assert (n>0&& a[0] < x && x<=a[n-1]);
            int beg = 0; int end = n-1;
            while (end-beg>1) {
                assert (a[beg]<x && x<=a[end]);
                int c=(beg<c && c<end);
                if (a[c]<x) {
                    beg=c;
                } else if (a[c]>x) {
                    end=c;
                } else {
                    //assert(x==a[c]);
                    *idx = c;
                    return true;
                 }
            }
            assert (end-beg==1 && a[beg]<x && x<=a[end]);
            *idx = end;
            return (x >= a[end]);            // x==a[end]
        }
    }
    void swap (double *p, double *q) {
    double tmp = *p;
    *p=*q; *q=tmp;
    }
    int comandDouble (const void* k, const void *l) {
     double r=*((double*) k);
        double s=*((double*) l);
        if (r>s)
            return 1;
        else if (r<s)
            return (-1);
        else
            return 0;
    }
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Serge_Bliznykov; 12.07.2019 в 11:47.
Андрей8Андрей вне форума   Ответить с цитированием
Старый 12.07.2019, 11:48   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,670
Репутация: 5617
По умолчанию

что делает программа и в чём именно проблема предлагается угадать самостоятельно?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 12.07.2019, 12:23   #3
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,646
Репутация: 2631
По умолчанию

Код:
 qsort (a, n, sizeof(double), &compareDouble);
Зачем?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 12.07.2019, 12:27   #4
Андрей8Андрей
 
Регистрация: 11.12.2016
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что делает программа и в чём именно проблема предлагается угадать самостоятельно?
Программа поиска. Проблема в этом D:\Desktop\C++ project\1\main.cpp|24|undefined reference to `compareDouble(void const*, void const*)'|
||error: ld returned 1 exit status|
Андрей8Андрей вне форума   Ответить с цитированием
Старый 12.07.2019, 12:29   #5
Андрей8Андрей
 
Регистрация: 11.12.2016
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
 qsort (a, n, sizeof(double), &compareDouble);
Зачем?
Так должно быть, по моему.
Андрей8Андрей вне форума   Ответить с цитированием
Старый 12.07.2019, 12:29   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,646
Репутация: 2631
По умолчанию

Ну так вы вынесите swap и comandDouble из binSearch. Ну или скобки посчитайте правильно.

Цитата:
Сообщение от Андрей8Андрей Посмотреть сообщение
Так должно быть, по моему.
Ну раз по вашему так, то ладно.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 12.07.2019, 12:31   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,670
Репутация: 5617
По умолчанию

Цитата:
Сообщение от Андрей8Андрей Посмотреть сообщение
Программа поиска. Проблема в этом D:\Desktop\C++ project\1\main.cpp|24|undefined reference to `compareDouble(void const*, void const*)'|
и где Вы описали функцию compareDouble ?
Компилятор не может найти такую в вашем коде.
у Вас она ошибочно в коде называется comandDouble
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 12.07.2019, 12:33   #8
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,646
Репутация: 2631
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и где Вы описали функцию compareDouble ?
Это comandDouble. Она просто маскируется.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 12.07.2019, 12:36   #9
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,670
Репутация: 5617
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это comandDouble. Она просто маскируется.
точно! Спасибо.
я уже догадался
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 12.07.2019, 12:37   #10
Андрей8Андрей
 
Регистрация: 11.12.2016
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и где Вы описали функцию compareDouble ?
Компилятор не может найти такую в вашем коде.
у Вас она ошибочно в коде называется comandDouble
Спасибо)))
Андрей8Андрей вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема в программе ВЕчная ПОмощь Общие вопросы Delphi 0 14.05.2013 20:33
проблема в программе ВЕчная ПОмощь Общие вопросы Delphi 2 13.05.2013 19:44
Проблема в программе. Си Chelovekpredel Помощь студентам 1 09.06.2012 12:32
проблема в программе AterAvi Общие вопросы C/C++ 0 08.04.2012 13:53
Проблема в программе. anr Общие вопросы Delphi 1 05.02.2010 01:27


15:27.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru