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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Милашечка
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 112
#1

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++

04.04.2013, 21:34. Просмотров 754. Ответов 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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
float f1(float x)/*vira*enie 1*/
 {return (x*cos(x))/(1+ pow(x,2));}
 
float f2 (float x) /*vira*enie 2*/
{return(exp(x)/x);}
 
float f3 (float x)/*vira*enie 3*/
{return (1/(3+2*cos(x)));}
 
float proizv1(float *f(float),float x)
/* pervaja proizvodnaja iz klassi4eskogo opredelenija eto f'(x)=(f(x0)-f(x))/(x-x0) */
/* opredelim proizvodnyjy s tochnost'jy h=x-x0=0.001 */
/* znachit x0=x-h */
/*polychaem znachenie dlja proizvodnoj (f(x-h)-f(x)/h */
{ float h;
h=0.001;
return((f(x-h)-f(x))/h);      
}
 
 
float proizv2(float *proizv1(float),float x)
/*vtoraja proizvodnaja iz klassi4eskogo opredelenija*/
/* f''(x)=(f'(x))' proizvodnaja ot proizvodnoj*/
{ float h;
h=0.001;
return((proizv1(x-h)-proizv1(x))/h);      
}
 
void tochki(float *proizv2(float),float xn,float xk,float dx)
{float x1,y; int i;
 printf("____________________________\n");
 printf("|___i____|___x____|____y____|\n");
 i=0;
  for (x1=xn;x1<=xk;x1+=dx)
   {proizv2(x1);
    i++;
    printf("|___%d____|_%.1f_|_%.5f_|\n",i,x1,proizv2(x1));
   }
    for (x1=xn;x1<=xk;x1+=dx)
     {proizv2(x1);
      if (proizv2(x1)==0) printf("tochka peregiba=%.1f\n",x1);
      /*yslovie syshestvovanija tochki peregiba*/
      else printf("net tochek peregiba");
     }
} 
void vibor(float *tochki(float))
{int n;
printf("Kakoj fynkciej bydem rabotat'?\n");
printf("1.  x*cos(x))/(1+ pow(x,2)\n");
printf("2. exp(x)/x\n");
printf("3. 1/(3+2*cos(x))\n");
printf("0. Vihod\n"); 
  scanf("%d",n);
   switch(n)
            {case 1: tochki(f1,-4,4,0.5); break;
             case 2: tochki(f2,-6,1,0.5); break;
             case 3: tochki(f3,0,4,0.5); break;
             case 0: break;    
             default:printf("Nevernij re*im");  
             }
  void main()
  { vibor(float *tochki(float);
   system("pause");
   return 0;
   }
програмка ищет точки перегиба в выбранной функции на нужном интервале. выбивает только одну ошибку. в void vibor(float *tochki(float))

ругается на case cannot convert `float (*)(float)' to `float' in argument passing
я неправильно передаю функцию???
как исправить подскажите пожалуйста??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 21:34     опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing
Посмотрите здесь:
C++ Ошибка cannot convert 'float' to 'float*'
cannot convert `float' to `float*. Почему так происходит? C++
C++ Чем отличаются float преобразования (float)var от float(var)
неверное приведение void* к *float а далее к float C++
invalid types `float[float]' for array subscript C++
C++ Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float"
C++ Error C2664: 'sprintf' : cannot convert parameter 2 from 'float' to 'const char *'
C++ Ошибка: redeclaration of `const float PI'
C++ Ошибка. Невозможно преобразовать CString в float
C++ При компилировании выдается ошибка 'float fraction::numerator' is private
C++ Ошибка с циклом While. По разному работает с double и float, хотя должен бы одинаково
Хочу написать функцию pow(), ошибка: (5,27):Too few parameters in call to 'step(float,int)' C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
04.04.2013, 21:49     опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing #2
1) float*f(float) - это (float*)f(float), а не float(*f)(float).
2) 50-я строка - неправильный тип параметра.
3) main должен возвращать int.
4) Не хватает закрывающей фигурной скобки в vibor.
5) 66-я строка - это что?
6) В scanf надо передавать адрес n, а не саму её.
Милашечка
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 112
14.04.2013, 23:01  [ТС]     опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing #3
У меня в самой функции vibor неразбериха. Функция tochki возвращает результат через имя, а у меня самостоятельный оператор..Нужно передавать функцию присваиванием новому оператору-аргументу или как??

Запуталась в том как правильно функцию tochki передать в switch case.Очень сильно запуталасьКак правльно передавать?
И как функцию vibor правильно вызвать в основной функции программы,немного путаюсь уже.Если я понимаю правильно основная функция у меня - похожа больше на описание а не на вызов, но возможный как по моему вызов я написала,хотя при нем много новых ошибок возникает.
Объясните мои ошибки и помогите хоть немножечко с тем что не получается,пожалуйста
По исправляла ошибки,которые вы описали.
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<stdio.h>
#include<stdlib.h>
#include<math.h>
 
float f1(float x)/*vira*enie 1*/
 {return (x*cos(x))/(1+ pow(x,2));}
 
float f2 (float x) /*vira*enie 2*/
{return(exp(x)/x);}
 
float f3 (float x)/*vira*enie 3*/
{return (1/(3+2*cos(x)));}
 
float proizv1(float *f(float),float x)
/* pervaja proizvodnaja iz klassi4eskogo opredelenija eto f'(x)=(f(x0)-f(x))/(x-x0) */
/* opredelim proizvodnyjy s tochnost'jy h=x-x0=0.001 */
/* znachit x0=x-h */
/*polychaem znachenie dlja proizvodnoj (f(x-h)-f(x)/h */
{ float h;
h=0.001;
return((f(x-h)-f(x))/h);      
}
 
 
float proizv2(float *proizv1(float),float x)
/*vtoraja proizvodnaja iz klassi4eskogo opredelenija*/
/* f''(x)=(f'(x))' proizvodnaja ot proizvodnoj*/
{ float h;
h=0.001;
return((proizv1(x-h)-proizv1(x))/h);      
}
 
float tochki(float *proizv2(float),float xn,float xk,float dx)
{float x1,y; int i;
 printf("____________________________\n");
 printf("|___i____|___x___|_____y___|\n");
 i=0;
  for (x1=xn;x1<=xk;x1+=dx)
   {proizv2(x1);
    i++;
    printf("|___%d____|_%.1f_|_%.5f_|\n",i,x1,proizv2(x1));
   }
    for (x1=xn;x1<=xk;x1+=dx)
     {proizv2(x1);
      if (proizv2(x1)==0) printf("tochka peregiba=%.1f\n",x1);
      /*yslovie syshestvovanija tochki peregiba*/
      else printf("net tochek peregiba");
     }
} 
 
float vibor( float(*tochki)(float),float xn,float xk,float dx )
{int n;
printf("S kakoj fynkciej bydem rabotat'?\n");
printf("1.  x*cos(x))/(1+ pow(x,2)\n");
printf("2. exp(x)/x\n");
printf("3. 1/(3+2*cos(x))\n");
printf("0. Vihod\n"); 
  scanf("%d",&n);
   switch(n)
            {case 1: tochki(f1,-4,4,0.5); break;//dlja pervoj fynkcii na intervale -4 4
             case 2: tochki(f2,-6,1,0.5); break;//dlja vtoroj fynkcii na intervale -6 1
             case 3: tochki(f3,0,4,0.5); break;//dlja tret'ej fynkcii na intervale 0 4
             case 0: break;    
             default:printf("Nevernij re*im");  
             }
}          
 int main()
  { vibor( float(*tochki)(float),float xn,float xk,float dx);  //bydet li pravil'nim takoj vizov???pri nem pojavljajytsa novie oshibki//
   system("pause");
   return 0;
   }
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru