Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > error C2660


Автор: Unlock 1.11.2004, 18:58
Вот проблема

Код
double iterpol(float tv, double interpol[14])
{    
  static float temp[14]={-140,-120,-100,-80,-60,-40,-20,-10,0,10,20,30,40,50};
  int i=0;
  static double k=0;
  static double inter;
  static int stop=0;
  do
  {
     if(tv>=temp[i])
     {
        k=(tv-temp[i])/(temp[i+1]-temp[i]);
        inter=(interpol[i]-interpol[i+1])*k+interpol[i];
     stop=1;
     i++;
     }
     else
     {
     //вписать сообщение об ошибке, если не соответсвует температура диапазону температур.
     };
  }
  while(stop=1);
return inter;
}

int _tmain(int argc, _TCHAR* argv[])
{   float tv=10;
  double pr,vl,pl,te,tp,kv,kdif;
  double interpol[14];
   
  //Ввод табличных данных.
  double pran[14]={0.78,0.763,0.759,0.749,0.74,0.73,0.721,0.717,0.713,0.706,0.705,0.705,0.706,0.728};
     
  //Запуск функции iterpol для интерполяционного расчета данных.
  interpol[14]=pran[14];
  pr=iterpol();


Выдает ошибку...
error C2660: 'iterpol' : function does not take 0 arguments
как вылечить

Автор: Step 1.11.2004, 19:10
передать ей параметры..., причем два параметра
Добавлено @ 19:11
она должна получить два парметра для своей работы

Автор: Unlock 1.11.2004, 19:20
Step очень нужно... посмотри код... где что не так?
Укажи ошибку... программа- крайний срок завтра...
Help me///

Автор: Step 1.11.2004, 19:23
Цитата(Unlock @ 1.11.2004, 18:58)

pr=iterpol();

вот тут,

pr=iterpol(); надо передать два параметра, первый флоат(как я понимаю граничное значение), а второй на сколько я понял сам масив



ты вообще задачу опиши


и в коде есть логические ошибки цикл может не закончиться

Автор: Unlock 1.11.2004, 19:30
Есть однострочный массив(температура), есть другой массив(Коэфициент), зависящий от темературы...
Проблема: Значение температуры попадает между данными значениями в массиве, приложение должно выбрать коэфициент, в соответствии с этим положением темературы.
Т.е. интерполяция... А в чем цикл не закончен?

Тут кстати ошибка i++; я перенес в конец do{}

Автор: Step 1.11.2004, 19:33
поставь

((stop==1)| (і==14)

Автор: Unlock 1.11.2004, 19:41
Код
#include "stdafx.h"
#include <iostream>
using namespace std;

double iterpol(float tv, double interpol[14])
{  
static float temp[14]={-140,-120,-100,-80,-60,-40,-20,-10,0,10,20,30,40,50};
int i=0;
static double k=1;
static double inter;
static int stop=0;
do
{
 if(tv>=temp[i])
 {
 
  k=(tv-temp[i])/(temp[i+1]-temp[i]);
  inter=(interpol[i]-interpol[i+1])*k+interpol[i];
 stop=1;
 }
 else
 {
 //вписать сообщение об ошибке, если не соответсвует температура диапазону температур.
 };
 i++;
}
while((stop==1)||(i==13));
return inter;
}

int _tmain(int argc, _TCHAR* argv[])
{ float tv=10;
double pr,vl,pl,te,tp,kv,kdif;
double interpol[14];

//Ввод табличных данных.
double pran[14]={0.78,0.763,0.759,0.749,0.74,0.73,0.721,0.717,0.713,0.706,0.705,0.705,0.706,0.728};
double vlagosod[14]={1.9E-13,8E-11,8E-9,2.5E-7,5.4E-6,8E-5,8E-4,1.63E-3,3.85E-3,7.4E-3,15E-3,27.8E-3,50E-3,88.4E-3};
double plotnost[14]={2.52,2.18,1.94,1.73,1.58,1.44,1.33,1.27,1.22,1.18,1.13,1.08,1.04,0.998};
double teploemkost[14]={1.01E+3,1.01E+3,1.01E+3,1.01E+3,1.005E+3,1.005E+3,1.005E+3,1.005E+3,1.005E+3,0.01E+3,1.013E+3,1.04E+3,1.06E+3,1.1E+3};
double teploprovodnost[14]={0.0114,0.0132,0.0149,0.0166,0.0186,0.0209,0.0228,0.0236,0.0244,0.0251,0.0257,0.0265,0.0270,0.0272};
double kinvyazkost[14]={3.5E-6,4.54E-6,5.8E-6,7.05E-6,8.7E-6,10.6E-6,12.5E-6,13.2E-6,14.2E-6,14.9E-6,15.9E-6,16.6E-6,17.2E-6,18E-6};
double ktdifuzii[14]={6E-6,7.8E-6,9.8E-6,12E-6,14E-6,16.5E-6,19.3E-6,20.8E-6,22.1E-6,23.8E-6,25.4E-6,27E-6,28.6E-6,30.2E-6};

//Запуск функции iterpol для интерполяционного расчета данных.
interpol[14]=pran[14];
pr=iterpol();                          //Ошибка

interpol[14]=vlagosod[14];
vl=iterpol();                           //Ошибка

interpol[14]=plotnost[14];
pl=iterpol();                              //Ошибка

interpol[14]=teploemkost[14];
te=iterpol();                          //Ошибка

interpol[14]=teploprovodnost[14];
tp=iterpol();                            //Ошибка

interpol[14]=kinvyazkost[14];
kv=iterpol();                            //Ошибка

interpol[14]=ktdifuzii[14];
kdif=iterpol();                          //Ошибка


return 0;
}


не понимаю... чего ей надо...

Автор: Step 1.11.2004, 19:47
должно быть вот так например
te=iterpol(5.23,іterpol) как так, но в скобках должны быть параметры
Добавлено @ 19:47
и равно не 13 а 14 у тебя 14 элементов

Автор: Unlock 1.11.2004, 20:02
Уф, спасибо... помогло
А элеметов у меня и так 14, в массивах С++ есть ещё такой элемент нулевой.
Вот и получилось 0,1,2,3...14...
Спасибо ещё раз теперь со своими косяками разбираться буду....

Автор: Step 2.11.2004, 11:38
Unlock, у вас в массиве нету 14 элемента у вас есть от 0 до 13 поэтому условия выхода должны быть когда и равно 14 или больше 13....

то что у вас не было с эти проблем это вам повезло... очень рекомендую с этим разобраться на этом этапе... если вы поставите сравнения с 13, то последний элемент никогда не обработаеться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)