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

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

Войти
Регистрация
Восстановить пароль
 
Homamilae
1 / 1 / 0
Регистрация: 14.11.2010
Сообщений: 48
#1

Функции - C++

16.01.2011, 14:32. Просмотров 266. Ответов 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//--------------- BEGINNING ----------------------------------------------------
 
double LinInter(double *xt,double *yt,const int n,double x)
{
 for (int i=1;i<n;i++)
   if((x>=xt[i-1])&&(x<=xt[i]))
   return yt[i-1]+(yt[i]-yt[i-1])*(x-xt[i-1])/(xt[i]-xt[i-1]);
}
//------------------------------------------------------------------------------
 
double Diff(double *x,double *y,const int n)
{
 for (int i=1;i<=n;i++)   
   return (y[i]-y[i-1])/(x[i]-x[i-1]);
}
//------------------------------------------------------------------------------
 
double Thrust(double V,double h,double n)
{
if(V<22.29||V>57.83||h<0||h>3000||n<2000||n>7000)return 100; //proverka !!!
int nn=11;
double VtH0[]={23.81,27.22,30.62,34.01,37.42,40.83,44.23,47.63,51.03,54.43,57.83};
double VtH1[]={23.55,26.91,30.28,33.64,37.00,40.37,43.73,47.10,50.46,53.83,57.19};
double VtH2[]={23.28,26.60,29.93,33.25,36.58,39.90,43.23,46.55,49.88,53.20,56.53};
double VtH3[]={22.99,26.28,29.56,32.85,36.14,39.42,42.71,45.99,49.28,52.56,55.84};
 
double Pp2,Pp3,Pp4,Pp5,Pp6,Pp7;
double P, dP,Vt;
//--------tiaga Pp2 pri 2000 oborot--------------------------------------------
 {
   double PtH0[]={-10.03,-14.14,-17.34,-19.89,-21.98,-23.73,-25.20,-26.47,-27.56,-28.52,-29.36};
   double PtH1[]={-8.11,-11.08,-13.68,-15.75,-17.45,-18.86,-20.06,-21.09,-21.97,-22.75,-23.44};
   double PtH2[]={-5.74,-8.34,-10.36,-11.98,-13.31,-14.41,-15.34,-16.14,-16.84,-17.45,-17.98};
   double PtH3[]={-4.05,-5.99,-7.50,-8.71,-9.70,-10.52,-11.22,-11.82,-12.34,-12.79,-13.19};
   if(h>=0&&h<1000)
   Pp2= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp2= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp2= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp2=0;
  }
//--------tiaga Pp3 pri 3000 oborot--------------------------------------------
  {
   double PtH0[]={8.60,0.47,-9.21,-16.95,-23.28,-28.56,-33.03,-36.86,-40.17,-43.08,-45.64};
   double PtH1[]={7.49,1.25,-7.12,-13.81,-19.29,-23.86,-27.72,-31.03,-33.90,-36.41,-38.62};
   double PtH2[]={6.44,1.80,-5.34,-11.06,-15.74,-19.64,-22.94,-25.77,-28.22,-30.37,-32.26};
   double PtH3[]={5.49,2.16,-3.90,-8.76,-12.72,-16.03,-18.83,-21.23,-23.31,-25.13,-26.73};
   if(h>=0&&h<1000)
   Pp3= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp3= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp3= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp3=0;
  }
//--------tiaga Pp4 pri 4000 oborot--------------------------------------------
  {
   double PtH0[]={13.43,12.21,10.59,7.30,-2.54,-10.73,-17.66,-23.61,-28.76,-33.26,-37.24};
   double PtH1[]={11.71,10.67,9.33,6.74,-1.22,-8.40,-14.47,-19.67,-24.19,-28.13,-31.62};
   double PtH2[]={10.10,9.21,8.12,6.10,-0.18,-6.39,-11.65,-16.16,-20.06,-23.48,-26.49};
   double PtH3[]={8.69,7.93,7.05,5.49,0.61,-4.76,-9.30,-13.19,-16.56,-19.52,-22.12};
   if(h>=0&&h<1000)
   Pp4= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp4= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp4= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp4=0;
  }
//--------tiaga Pp5 pri 5000 oborot--------------------------------------------
  {
   double PtH0[]={15.51,14.48,13.49,12.49,11.20,9.11,3.22,-4.38,-10.96,-16.73,-21.81};
   double PtH1[]={13.56,12.67,11.81,10.96,9.90,8.32,3.86,-2.82,-8.61,-13.68,-18.15};
   double PtH2[]={11.76,10.99,10.26,9.53,8.66,7.52,4.27,-1.55,-6.60,-11.02,-14.92};
   double PtH3[]={10.14,9.48,8.86,8.24,7.52,6.66,4.50,-0.55,-4.93,-8.77,-12.15};
   if(h>=0&&h<1000)
   Pp5= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp5= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp5= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp5=0;
  }
//--------tiaga Pp6 pri 6000 oborot--------------------------------------------
 {
   double PtH0[]={16.10,15.38,14.52,13.73,12.91,12.10,11.09,9.91,7.23,0.54,-5.37};
   double PtH1[]={14.07,13.46,12.72,12.03,11.33,10.63,9.79,8.80,6.72,1.47,-3.73};
   double PtH2[]={12.20,11.67,11.05,10.46,9.86,9.26,8.56,7.74,6.13,2.17,-2.38};
   double PtH3[]={10.53,10.08,9.56,9.05,8.55,8.04,7.46,6.78,5.57,2.66,-1.30};
   if(h>=0&&h<1000)
   Pp6= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp6= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp6= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp6=0;
  }
//--------tiaga Pp7 pri 7000 oborot--------------------------------------------
 {
   double PtH0[]={15.75,15.11,14.52,13.86,13.21,12.57,11.92,11.28,10.47,9.56,7.81};
   double PtH1[]={13.78,13.23,12.72,12.16,11.59,11.05,10.49,9.93,9.25,8.48,7.16};
   double PtH2[]={11.94,11.47,11.04,10.58,10.08,9.62,9.14,8.66,8.10,7.46,6.51};
   double PtH3[]={10.32,9.92,9.55,9.17,8.75,8.35,7.94,7.53,7.07,6.54,5.89};
   if(h>=0&&h<1000)
   Pp7= LinInter(VtH0,PtH0,nn,V)+(LinInter(VtH1,PtH1,nn,V)-LinInter(VtH0,PtH0,nn,V))*h/1000;
   else
   if(h>=1000&&h<2000)
   Pp7= LinInter(VtH1,PtH1,nn,V)+(LinInter(VtH2,PtH2,nn,V)-LinInter(VtH1,PtH1,nn,V))*(h-1000)/1000;
   else
   if(h>=2000&&h<=3000)
   Pp7= LinInter(VtH2,PtH2,nn,V)+(LinInter(VtH3,PtH3,nn,V)-LinInter(VtH2,PtH2,nn,V))*(h-2000)/1000;
   else Pp7=0;
  }
//------------------------------------------------------------------------------
 
if (n>=2000&&n<3000)
P=Pp2+(Pp3-Pp2)*(n-2000)/1000;
    if(h>=0&&h<1000);
    dP=Diff(P, dP,nn);
    else dP=0;
else
if (n>=3000&&n<4000)
return P=Pp3+(Pp4-Pp3)*(n-3000)/1000;
else
if (n>=4000&&n<5000)
return P=Pp4+(Pp5-Pp4)*(n-4000)/1000;   
else
if (n>=5000&&n<6000)
return P=Pp5+(Pp6-Pp5)*(n-5000)/1000;   
else
return P=Pp6+(Pp7-Pp6)*(n-6000)/1000;
    
}
//-------------------- END -----------------------------------------------------
Возникает ошибка error C2664: 'Diff' : cannot convert parameter 1 from 'double' to 'double *'
Не могу разобраться почему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2011, 14:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции (C++):

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...

Как будут инициализированы переменные в теле функции и вне тела функции? - C++
Здравствуйте. Подскажите, пожалуйста, как будут инициализированы переменные в теле функции и вне тела функции? Какими значениями? ...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int &amp;ref){...

Найти среднее арифметическое значений функции f(x) в точках a, b, (a+b)/2 используя обращение к функции - C++
А этой нету: 3.Найти среднее арифметическое значений функции f(x) в точках a, b, (a+b)/2 используя обращение к функции f=(x*sin⁡ π/4) /...

А почему ошибка, что функции print и read не определены в функции main()? - C++
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include &lt;iostream&gt; #include...

Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций - C++
Добрый день. Дана лабораторная работа, (см. ниже 2 скриншота) по заданию нужно вычислить функции с использованием их разложения в степенной...

2
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
16.01.2011, 15:09 #2
Homamilae, вы при вызове функции Diff передаете вместо массива переменную типа double
0
Homamilae
1 / 1 / 0
Регистрация: 14.11.2010
Сообщений: 48
16.01.2011, 15:21  [ТС] #3
Подскажите пожалуйста, как P преобразовать в массив?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2011, 15:21
Привет! Вот еще темы с ответами:

Вычислить где значение функции меняет знак(отделение корней функции) - C++
Имеется следующая функция f(x)=sqrt(4*x+7)-3*cos(x) Нужно написать программу, где будет выводится таблица, где будет видно при каком...

Табулирование заданной функции и определение максимального и минимального значения функции в таблице - C++
Разработать консольное приложение, производящее табулирование заданной функции и определение максимального и минимального значения функции...

Различные функции, для которых можно создать массив указателей на функции - C++
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции - C++
здраствуйте знатаки!! помогите пожалуйсто решить задачу.Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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