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


Автор: Langaru 27.11.2009, 13:22
Наткнулся еще на 1 ошибку - invalid operands of types `int' and `double ()(double, double)' to binary `operator/' 
                                               - invalid operands of types `double' and `double ()(double, double)' to binary `operator/' 
Код следующий:
Код

double DinVyaz (double P, double T){
       int N=5;int K=4;
       double b[5][4];
             
b[0][0]= 0.501938;  b[0][1]= 0.235622;  b[0][2]= -0.274637; b[0][3]= 0.145831; b[0][4]= -0.0270448;
b[1][0]= 0.162888;  b[1][1]= 0.789393;  b[1][2]= -0.743539; b[1][3]= 0.263129; b[1][4]= -0.0253093;
b[2][0]= -0.130356; b[2][1]= 0.673665;  b[2][2]= -0.959456; b[2][3]= 0.347247; b[2][4]= -0.0267758;
b[3][0]= 0.907919;  b[3][1]= 1.207552;  b[3][2]= -0.687343; b[3][3]= 0.213486; b[3][4]= -0.0822904;
b[4][0]= -0.551119; b[4][1]= 0.0670665; b[4][2]= -0.497089; b[4][3]= 0.100754; b[4][4]= 0.0602253;
b[5][0]= 0.146543;  b[5][1]= -0.0843370;b[5][2]= 0.195286;  b[5][3]= -0.032932;b[5][4]= -0.0202595;

double ro1=317.763; 
double T1=647.27; 
double a0=0.0181583; 
double a1=0.0177624;
double a2=0.0105287;
double a3=-0.0036744;

  double myu0= pow(T/T1,0.5)*1/(a0+a1*T1/T+a2*T1*T1/T/T+a3*pow(T1/T,3));

double s1=0;
double s2=0;

          for (int i=0;N;i++){
              s1+= s2;
              
                   for (int j=0;K;j++){
                       s2 += pow(T1/T-1,i)*pow(1/V1PT/ro1-1,j)*b[i][j];
                                               }
                      
                                      }
   double Myu= myu0*pow(2.718, s1/V1PT/ro1);

return Myu;}

Не пойму толком что ему не нравится. Толи он не хочет переменные с разными типами перемножать (int*double), толи... на этом сломалась голова... smile 

Автор: azesmcar 27.11.2009, 13:27
Цитата(Langaru @  27.11.2009,  13:22 Найти цитируемый пост)
на этом сломалась голова

В таком коде сам черт ногу сломит, неудивительно что голова сломалась smile 


Цитата(Langaru @  27.11.2009,  13:22 Найти цитируемый пост)
Наткнулся еще на 1 ошибку - invalid operands of types `int' and `double ()(double, double)' to binary `operator/' 
                                               - invalid operands of types `double' and `double ()(double, double)' to binary `operator/' 

Какой компилятор, на какой строке ошибка? Кто такой V1PT?

Автор: Langaru 27.11.2009, 13:38
Цитата

В таком коде сам черт ногу сломит, неудивительно что голова сломалась 

Ну уж извините, пока только учусь smile 
Цитата

Какой компилятор, на какой строке ошибка? Кто такой V1PT?

Dev-C++ 4.9.9.2. Ошибки на строках:
Код

s2 += pow(T1/T-1,i)*pow(1/V1PT/ro1-1,j)*b[i][j];

и
Код

double Myu= myu0*pow(2.718, s1/V1PT/ro1);

V1PT - функция из этой же программы, не привожу ее, т.к. работает корректно и большая по объему.

Автор: bsa 27.11.2009, 13:42
Langaru, почитай http://forum.vingrad.ru/forum/topic-269794/kw-faq-c++.html. И начни с "Оформление кода".

Автор: azesmcar 27.11.2009, 13:46
Цитата(Langaru @  27.11.2009,  13:38 Найти цитируемый пост)
Dev-C++ 4.9.9.2. Ошибки на строках:

Это не компилятор, это среда разработки, но компилятор скорее всего gcc.

Цитата(Langaru @  27.11.2009,  13:38 Найти цитируемый пост)
V1PT - функция из этой же программы, не привожу ее, т.к. работает корректно и большая по объему. 

функция? smile 
а где ВЫЗОВ функции? smile

Цитата(Langaru @  27.11.2009,  13:38 Найти цитируемый пост)
Ну уж извините, пока только учусь smile 

не имеет значения, красиво оформлять код надо всегда, а то потом в привычку войдет. Строго следи за чистотой и аккуратностью кода ВСЕГДА.

Автор: Langaru 27.11.2009, 13:51
Цитата

функция?  
а где ВЫЗОВ функции?  

Спасибо! Именно вызова и не было, видимо это и не нравилось компилятору - теперь все работает smile 

Автор: Albor 27.11.2009, 13:53
В инициализации массива ошибка: индексы выходят за пределы. И что такое V1PT, в функции объявления не нашёл. Математические формулы можно было бы и упростить, если есть a*1/b, то не проще ли записать a/b

Автор: Langaru 27.11.2009, 14:00
Цитата

В инициализации массива ошибка: индексы выходят за пределы.

Что именно не правильно и как должно быть?
Рано обрадовался - теперь при выполнении вылезает ошибка: память не может быть "read".

Автор: Albor 27.11.2009, 14:02
массив объявлен 5х4, то есть 20 элементов, а инициализируется 30 элемента

Автор: bsa 27.11.2009, 14:03
Код
          for (int i=0;N;i++){
              s1+= s2;
              
                   for (int j=0;K;j++){
                       s2 += pow(T1/T-1,i)*pow(1/V1PT/ro1-1,j)*b[i][j];
                                               }
                      
                                      }
Это бесконечный цикл... Почему? Почитай описание оператора for().

Автор: Albor 27.11.2009, 14:09
Цитата(Langaru @  27.11.2009,  14:00 Найти цитируемый пост)
Что именно не правильно и как должно быть?
Рано обрадовался - теперь при выполнении вылезает ошибка: память не может быть "read".

Из-за этого и вылезает ошибка. Объявляй массив 6х5 и не забывай, что 0 в индексе тоже считается.

Автор: Langaru 27.11.2009, 14:18
Цитата

Из-за этого и вылезает ошибка. Объявляй массив 6х5 и не забывай, что 0 в индексе тоже считается

Изменил на double b[6][5].
Цитата

Это бесконечный цикл... Почему? Почитай описание оператора for(). 

Прочитал, исправил на while
Код

double s1=0;
int i=0;
double s2=0;
int j=0;

          while (i<N){
              s1+= s2;
              
                   while (j<K){
                       s2 += pow(T1/T-1,i)*pow(1/V1PT(P,T)/ro1-1,j)*b[i][j];
                       j++;
                                      }
              i++;
                      
                              }
   double Myu= myu0*pow(2.718, s1/V1PT(P,T)/ro1);

ошибка изменилась- теперь: память не может быть"write" - чего он записать не могет?

Автор: Albor 27.11.2009, 14:25
Цитата(Langaru @  27.11.2009,  14:18 Найти цитируемый пост)
Изменил на double b[6][5].

N и K тоже поменял?
Вообще то, лучше было сделать так:
Код

const int N(6);
const int K(5);
b[N][K];

Автор: bsa 27.11.2009, 14:29
Цитата(Albor @  27.11.2009,  14:25 Найти цитируемый пост)
Вообще то, лучше было сделать так
Не лучше, так как не очень очевидно и в си работать, думаю, не будет. Лучше так:
Код
const int N = 6;
const int K = 5;


Автор: Langaru 27.11.2009, 14:29
Цитата

Вообще то, лучше было сделать так:

Согласен, только:
Код

const int N(6);
const int K(5);
double b[N][K];

Автор: Albor 27.11.2009, 14:40
Цитата(bsa @  27.11.2009,  14:29 Найти цитируемый пост)
так как не очень очевидно 

Ну, это кому как smile
Цитата(bsa @  27.11.2009,  14:29 Найти цитируемый пост)
в си работать, думаю, не будет

Здесь спорить не буду.

Автор: Langaru 27.11.2009, 14:43
Теперь вроде, все работает и ошибку не выдает. Спасибо откликнувшимся smile 

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