Форум программистов, компьютерный форум CyberForum.ru

указатель на функцию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ol4ik
 Аватар для ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
09.05.2011, 23:05     указатель на функцию #1
Функция должна сортировать и по возрастанию,и по убыванию с помощью бинарных предикатов.И ещё отсортировать элементы массива по возрастанию их синуса.
Программа работает только в одном случае,а для синусов вообще не работает. Объясните,в чём моя ошибка,а точнее,как сделать,чтобы функция сортировала правильно для всех трёх случаев.
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
 
bool compare1(double a,double b)
{ return a<b;
}
 
bool compare2(double a,double b)
{ return a>b;
}
bool compareSin(double a,double b)
{return sin(a)<sin(b);}
 
double sort(double * inArr,int len,bool (*pfun)(double,double))
{ double swap;
   for (int i=0;i<len; i++)
    {for (int j=0; j<len-i; j++) 
        { if (pfun(inArr[j],inArr[j+1])==true) 
            {
               swap=inArr[j]; 
               inArr[j]=inArr[j+1];
               inArr[j+1]=swap;
            }
        }
}
   for(int i=0;i<len; i++)
   cout<<inArr[i];
   return 0;
}
 
 
int main()
{double *inArr=new double(10);
 int len;
 cout<<"enter LENGTH\n";
 cin>>len;
 cout<<"enter MASSIV\n";
 for(int i=0;i<len;i++)
 {  cout<<"inArr["<<i<<"]=";
    cin>>inArr[i];}
 sort(inArr,len,compare1);
 printf("\n");
 sort(inArr,len,compare2);
 printf("\n");
 sort(inArr,len,compareSin);
 getch();
 return 0;
}
Добавлено через 1 час 6 минут
оказалось,что swap-это стандартная функция
но всё равно ошибка не в этом
нужно уместить возможность сортировки по убыванию и возрастанию,и понять,что делать для сортировки по синусам

Добавлено через 39 минут
работает,если использовать сортировку
C++
1
2
3
4
5
6
7
while (len>0){
  len--;
int i=0;
while (i<len) {
  if ( pfun(inArr[i], inArr[i+1]) )
    swap (inArr[i],inArr[i+1]);
  i++; }  }
но желательнее,чтобы программа правильно работала с использованием метода пузырька(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 23:05     указатель на функцию
Посмотрите здесь:

Как передать параметр типа "указатель на указатель" в функцию? C++
Указатель на указатель на функцию C++
Как передать указатель на функцию в функцию C++
C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? C++
C++ Указатель на функцию
Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) C++
Передать в неуправляемую функцию указатель на указатель C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
09.05.2011, 23:40     указатель на функцию #2
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <cmath>
 
using namespace std;
 
bool compare1(double a, double b)
{
    return a < b;
}
 
bool compare2(double a, double b)
{
    return a > b;
}
 
bool compareSin(double a, double b)
{
    return sin(a) < sin(b);
}
 
void sort(double inArr[], int len, bool(*pfun)(double, double))
{
    double t;
    for(int i = 0; i < len; i++)
    {
        for(int j = 0; j < len-1; j++)
        {
            if(pfun(inArr[j + 1], inArr[j]) == true)
            {
                t = inArr[j];
                inArr[j] = inArr[j + 1];
                inArr[j + 1] = t;
            }
        }
    }
}
 
void writeLnArr(double a[], int len)
{
    for(int i = 0; i < len; i++)
        cout << a[i] << ' ';
    std::cout << '\n';
}
 
int main()
{
    int len;
    cout << "enter LENGTH\n";
    cin >> len;
    double *inArr = new double[len];
    cout << "enter MASSIV\n";
    for(int i = 0; i < len; i++)
    {
        cout << "inArr[" << i << "]=";
        cin >> inArr[i];
    }
    sort(inArr, len, compare1);
    writeLnArr(inArr, len);
 
    sort(inArr, len, compare2);
    writeLnArr(inArr, len);
 
    sort(inArr, len, compareSin);
    writeLnArr(inArr, len);
 
    getch();
 
    return 0;
}
Yandex
Объявления
09.05.2011, 23:40     указатель на функцию
Ответ Создать тему
Опции темы

Текущее время: 03:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru