Qsort не работает в XCode

204
18 декабря 2017, 14:35

Столкнулся с проблемой при решении задачи на XCode.

При использовании qsort программа выдает ошибку:

No matching function for call to 'qsort'

P.S. накидал заголовочных файлов, но ни с чем не проходит.

Код:

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <climits>
#include <search.h>

using namespace std;
int cmp(int *a, const char *b)  {
return *(float*)a- *(float*)b;
}
int main(int argс ,  const char * argv[]) {
ifstream fin;
fin.open("books.dat");
if (!fin.is_open()) {
    cout << "Файл не может быть открыт!\n";
    system("pause");
}
else  {
    float L;
    int N , sum=0;
    int i,j;
    fin >> L;
    fin >> N;
    float* mass_books=new float [N];
    for (i=0;i<N;i++)
        fin>> mass_books[i];
    fin.close();
     qsort( mass_books, sizeof(float), N, cmp ) ;
    for (j = 0; j < N; j++)
        sum = sum + mass_books[j];
    for (i = N - 1; sum > L; i--)
        sum = sum - mass_books[i];
    cout << "Максимальное количество книг на полке: " <<i + 1 << endl;
    system("pause");
    }
    return 0;
    }
Answer 1

Написал вместо кьюсорта пузырьковую сортировку, но ответ на вопрос все равно интересно услышать .

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <climits>
#include <search.h>

using namespace std;
int cmp(int *a, const char *b)  {
return *(float*)a- *(float*)b;
}
int main(int argс ,  const char * argv[]) {
ifstream fin;
fin.open("books.dat");
if (!fin.is_open()) {
    cout << "Файл не может быть открыт!\n";
    system("pause");
}
else  {
    float L;
    int N , sum=0;
    int i,j;
    float prom;
    fin >> L;
    fin >> N;
    float* mass_books=new float [N];
    for (i=0;i<N;i++)
        fin>> mass_books[i];
    fin.close();
    //qsort( mass_books, sizeof(float), N, cmp ) ; у меня не проходит       эта функция
    //напишем пузырьковую сортировку 

    for(i=0;i<N;i++)
    {
        for(j=0;j<N-1;j++)
        {
            if (mass_books[j]>mass_books[j+1])
            {
                prom = mass_books[j+1];
                mass_books[j+1] = mass_books[j] ;
                mass_books[j] = prom;
             }
        }
    }
    for(i=0;i<N;i++)
        cout<<mass_books[i]<<endl;


    for (j = 0; j < N; j++)
        sum = sum + mass_books[j];
    for (i = N - 1; sum > L; i--)
        sum = sum - mass_books[i];
    cout << "Максимальное количество книг на полке: " <<i + 1 << endl;
    system("pause");
}
return 0;
}
Answer 2

P.S. накидал заголовочных файлов, но ни с чем не проходит.

Это называется "вуду-программирование". Основная идея в том чтобы случайным образом "накидывать" разные команды. Если уж вы решили его использовать, попробуйте и другие популярные приемы этой парадигмы:

  • Добавить 1
  • Вычесть 1
  • Закоментить некоторые строки
  • Заключить весь код в try catch блоки
  • Многое другое

P.S. Но я бы просто зашел на сайт типа cplusplus.com или cppreference.com, а то и просто в гугл и посмотрел в каких именно библиотеках находятся функции qsort и sort

P.P.S. cstdlib и algorithm соответственно

READ ALSO
Реализация алгоритма COS(дискретное логарифмирование) [требует правки]

Реализация алгоритма COS(дискретное логарифмирование) [требует правки]

Ребят, помогите, пожалуйста с реализацией алгоритма cosалгоритм cos Описанный там алгоритм, не могу понять, может сможете объяснить на понятном...

161
использовать функцию из библиотеки

использовать функцию из библиотеки

здравствуйте, есть примерно следующий код:

213
Arduino использовать методы одной библиотеки в другой

Arduino использовать методы одной библиотеки в другой

Прошу вас объяснить или же указать на источник где можно подробно прочитать способ использования одной библиотеки Arduino в другойВ частности,...

252