LINUX.ORG.RU

Dev C++. Помогите пожалуйста чайнику! Надо добавить указатели, чтобы компилятор не выдавал ошибку.

 , ,


0

2

Как и куда их добавить? Как разместить их в каждом классе, если это возможно? Привожу текст программы:

#include <iostream>
using namespace std;
float X[10]={200, 500, 500, 300, 150, 0, 0, 0, 0, 0};
float Q[10];
float H[10];
float Hr[5][10];
const int dt=1;
int I;
int t;
class Vodosbor
{
public:
       Vodosbor (){tau=2; Kst=0.16;};
       ~Vodosbor() {};
       void Rez_vod ();
private:
        int tau;
        float Kst;
};
class Vodoem
{
public:
       Vodoem (){Km=0.46; F=19.2; Q1=19; Q2=21;};
       ~Vodoem() {};
       void Rez_vodoem ();
private:
        float Km;
        float F;
        int Q1;
        int Q2;
};
class Ruslo
{
public:
       Ruslo (){a=1760; dx=5000; dL=20000; Kf=0.1; Hg=1.0; Hx=0; NaUr=1;};
       ~Ruslo(){};
       void Rez_Ruslo ();
private:
        float NaUr;
        float a;
        int dx;
        int dL;
        float Kf;
        float Hg;
        float Hx;
};
int main()
{
    enum Avaria {MinH=1, SrH, MaxH};
    cout<<"Vodosbor \n";
    Vodosbor Vodosbor_kr;
    Vodosbor_kr.Rez_vod();
    cout<<"\nVodoem \n";
    Vodoem Vodoem_kr;
    Vodoem_kr.Rez_vodoem();
    cout<<"\nRuslovoi stok \n";
    Ruslo Ruslo_kr;
    Ruslo_kr.Rez_Ruslo();
for (t=1; t<10; t++)
{
    if (Hr[4][t]>MaxH)
    cout << t<< ": Failure!!!\n";
}
system ("pause");
return 0;
}
void Vodosbor :: Rez_vod () 
{
     cout << "Initial charge: ";
     cin >> Q[0];
     for (t=1; t<10; t++)
     {
     Q[t]=Q[t-1]+dt*(Kst*X[t-1]-Q[t-1])/tau;
     cout << t<< ": " << Q[t] <<"\n";
     }
}
void Vodoem :: Rez_vodoem ()
{
     cout << "Initial level: ";
     cin >> H[0];
     for (t=1; t<10; t++)
     {
     H[t]=H[t-1]+dt*((Q[t-1]+Q1-Q2)/F-Km*H[t-1]);
     cout << t<< ": " << H[t]<< " \n";
     }
}
void Ruslo :: Rez_Ruslo()
{
if (a*dt/dx<1)
{
     cout << "Initial level: ";
     cin >> NaUr;
     for (I=0; I<5; I++)
     Hr[I][0]=NaUr;
     for (t=0; t<10; t++)
     Hr[0][t]=H[t];
     for (t=1; t<10; t++)
     {
         cout << t<<": ";
         for (I=1; I<5; I++)
         {
             if (I==2)
             Hx=0.5;
             if (I==3)
             Hx=-Kf*(Hr[3][t-I]-Hg);
             if (I==4)
             Hx=0;
             Hr[I][t]= Hr[I][t-1]+dt*(Hx-a*(Hr[I][t-1]-Hr[I-1][t-1])/dx);
             cout << Hr[I][t]<<"\t";
         }
         cout <<"\n";
     }
}
else
cout << "The condition of stability is not carried out!\n";
}



Последнее исправление: webeer (всего исправлений: 2)

А какую ошибку выдает компилятор?

yoghurt ★★★★★
()
Ответ на: комментарий от DELIRIUM

Выдает, что нельзя размещать указатели в разделе private. В принципе, от меня требуют только то, чтобы в этой программе были указатели, а куда их добавить, не имеет значения

webeer
() автор топика
Ответ на: комментарий от webeer

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

Пожалуй, я в этом не участвую. Пока.

DELIRIUM ☆☆☆☆☆
()

Единственная ошибка найденная тут компилятором это использование функции system без подключения соответствующего заголовка.

KblCb ★★★★★
()

Нужно больше золотауказателей!

Stil ★★★★★
()
Ответ на: комментарий от webeer

ввы понимаете для чего необходимы указатели?

int13h ★★★★★
()

И dev c++ выброси, нечего некромантией заниматься. Оно и когда померло было глюковой и корявой штукой (2005 год вроде), и лучше уж не станет.

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 1)

Вот это портяночка ...

false ★★★★★
()

Читай «C++ Primer Plus, 6th Edition».

Solace ★★
()

увидел iostream @ дальше не читал

mos ★★☆☆☆
()
Ответ на: комментарий от theNamelessOne

Вот так:

#include <iostream>
#include <cstdlib>
using namespace std;
float X[10]={200, 500, 500, 300, 150, 0, 0, 0, 0, 0};
float Q[10];
float H[10];
float Hr[5][10];
const int dt=1;
int I;
int t;
class Vodosbor
{
public:
       Vodosbor (){this->tau=2; this->Kst=0.16;};
       ~Vodosbor() {};
       void Rez_vod ();
private:
        int tau;
        float Kst;
};
class Vodoem
{
public:
       Vodoem (){this->Km=0.46; this->F=19.2; this->Q1=19; this->Q2=21;};
       ~Vodoem() {};
       void Rez_vodoem ();
private:
        float Km;
        float F;
        int Q1;
        int Q2;
};
class Ruslo
{
public:
       Ruslo (){this->a=1760; this->dx=5000; this->dL=20000; this->Kf=0.1; this->Hg=1.0; this->Hx=0; this->NaUr=1;};
       ~Ruslo(){};
       void Rez_Ruslo ();
private:
        float NaUr;
        float a;
        int dx;
        int dL;
        float Kf;
        float Hg;
        float Hx;
};
int main()
{
    enum Avaria {MinH=1, SrH, MaxH};
    cout<<"Vodosbor \n";
    Vodosbor Vodosbor_kr;
    Vodosbor_kr.Rez_vod();
    cout<<"\nVodoem \n";
    Vodoem Vodoem_kr;
    Vodoem_kr.Rez_vodoem();
    cout<<"\nRuslovoi stok \n";
    Ruslo Ruslo_kr;
    Ruslo_kr.Rez_Ruslo();
for (t=1; t<10; t++)
{
    if (Hr[4][t]>MaxH)
    cout << t<< ": Failure!!!\n";
}
system ("pause");
return 0;
}
void Vodosbor :: Rez_vod ()
{
     cout << "Initial charge: ";
     cin >> Q[0];
     for (t=1; t<10; t++)
     {
     Q[t]=Q[t-1]+dt*(this->Kst*X[t-1]-Q[t-1])/this->tau;
     cout << t<< ": " << Q[t] <<"\n";
     }
}
void Vodoem :: Rez_vodoem ()
{
     cout << "Initial level: ";
     cin >> H[0];
     for (t=1; t<10; t++)
     {
     H[t]=H[t-1]+dt*((Q[t-1]+this->Q1-this->Q2)/this->F-this->Km*H[t-1]);
     cout << t<< ": " << H[t]<< " \n";
     }
}
void Ruslo :: Rez_Ruslo()
{
if (this->a*dt/this->dx<1)
{
     cout << "Initial level: ";
     cin >> this->NaUr;
     for (I=0; I<5; I++)
     Hr[I][0]=this->NaUr;
     for (t=0; t<10; t++)
     Hr[0][t]=H[t];
     for (t=1; t<10; t++)
     {
         cout << t<<": ";
         for (I=1; I<5; I++)
         {
             if (I==2)
             this->Hx=0.5;
             if (I==3)
             this->Hx=-this->Kf*(Hr[3][t-I]-this->Hg);
             if (I==4)
             this->Hx=0;
             Hr[I][t]= Hr[I][t-1]+dt*(this->Hx-a*(Hr[I][t-1]-Hr[I-1][t-1])/this->dx);
             cout << Hr[I][t]<<"\t";
         }
         cout <<"\n";
     }
}
else
cout << "The condition of stability is not carried out!\n";
}
theNamelessOne ★★★★★
()

Так у тебя в каждом методе неявно this передается. Чем не указатель? Для пущей важности можно обратиться из метода к другому члену этого же класса через this.

anonymous
()
Ответ на: комментарий от webeer

а куда их добавить, не имеет значения

Сочувствую. Трудно работать с идиотами.

Miguel ★★★★★
()
float X[10]={200, 500, 500, 300, 150, 0, 0, 0, 0, 0};
float Q[10];
float H[10];
float Hr[5][10];

я не знаю, что это такое, но это говно надо засунуть в класс.

например

class SpermoSbor
{
  float *X;
public:
  SpermoSbor()
  {
    X = new float[3];
    float *p = X;
    for(int j = 0; j < 3; j++)
      *p++ = j;
  }
  virtual ~SpermoSbor()
  {
    delete[] X;
  }
};
emulek
()
Ответ на: комментарий от webeer

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

Это просто пиздец какой-то

anonymous
()
Ответ на: комментарий от nanoolinux

Судя по твоиму СпермоСбору ты наверное клон ТС.

тебе не понять иронию. Это такой толстый стёб над именами класса ТСа, может он поймёт, как глупо выглядит со стороны его система наименований.

Ну я попытался...

emulek
()

если серьёзно, твой код == говно. Это даже не говнокод, а просто говно. Его место /dev/null.

Причины:

  • именование классов и имён. Так называют классы и переменные(X,Q,Р) только мудаки
  • глобальные переменные только засирают namespace. Ты вообще про инкапсуляцию слышал?
  • статическое выделение памяти. Наверное про это и говорил тот, кто требовал «добавить указатели». Так(как ты) выделяют память только мудаки.
  • зачем вообще классы, если в main чисто процедурный подход? Пиши на C, юзай POD.
  • сделай конструкторы конструкторами. Например код в Vodosbor::Rez_vod() является кодом из конструктором. Дополнительная фича — избавишься от необходимости придумывать одно говноимя.
  • есть ещё Over9000 мелочей, но это уже не важно.
emulek
()
Ответ на: комментарий от emulek

Как будто на паскале или на бейсике нельзя написать говно вместо кода. И как будто те же студенты этого не делают.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

Как будто на паскале или на бейсике нельзя написать говно вместо кода. И как будто те же студенты этого не делают.

ну можно, просто на паскале и на бэйсике нету ненужных сущностей. Например нет шаблонов. А вот код cout << "hello"; в принципе не понять без понимания сущности класс, шаблон, перезагрузка, и т.д.

Т.е. изучение C++ это как изучение высшей математики, предполагается, что таблицу умножения ученик твёрдо знает.

emulek
()
Ответ на: комментарий от emulek

сделай конструкторы конструкторами.

Определённые люди стараются избегать конструкторов-конструкторов в плюсах. Причина: конструктор — не совсем функция и не может вернуть значение. В том числе и ошибку. Значит, ошибки предполагается обрабатывать через исключения со всеми вытекающими (управление ресурсами, например, открытыми файлами можно делать только через смартпойнтеры, иначе — утечки). Всё это может усложнить код.

Впрочем, у топикстартера этой проблемы нет :)

x3al ★★★★★
()
Ответ на: комментарий от emulek

Кстати, да. Наблюдаю, как математикам на первом же семестре в нашем мухосранском ВУЗе дают плюсы как первый язык программирования. С VS, конечно. И из плюсов там один iostream, даже строки — char*. К экзамену после семестра они, кстати, не в курсе даже как объявлять свои функции, не считая main() (что они тогда учили — непонятно, как в C можно вообще кодить в лапша-стайле и при этом читать свой код).

Угадай, какое понимание темы у студентов.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Определённые люди стараются избегать конструкторов-конструкторов в плюсах. Причина: конструктор — не совсем функция и не может вернуть значение.

make-functions это хорошая и годная идея. Я всеми руками за.

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

не обязательно. Конструктор-конструктор может только начать конструировать объект, который продолжит конструировать make-функция. Ну и кроме того, ошибки вовсе не обязательно ловить именно исключениями. Если объект сконструировался с ошибкой, он может переходить в какое-то специальное состояние. Это состояние часто и так есть смысл сделать. Даже внутри стандартных чисел(IEEE754) имеется NaN. Обычно все операции над NaN дают NaN, и программист может в любой момент проверить наличие ошибки, причём без всяких исключений.

const Number &f()
{
 Number X = 123345;
 Number Y = "754";
 Number Z = "жопа";// невозможно сконструировать число "жопа"
 // сложные расчёты с X,Y,Z
 return result;// будет равно NaN, если где-то мы учитывали Z.
}

Впрочем, у топикстартера этой проблемы нет :)

угу.

emulek
()
Ответ на: комментарий от webeer

ЯЗАБАН

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

Шел бы ты на винфак со своим DevC++, WinAPI и быдлокодингом! Ты нам не нужен, уходи!

comp00 ★★★★
()
Ответ на: комментарий от x3al

Угадай, какое понимание темы у студентов.

отрицательное. Если за ноль принять скажем моего пятилетнего сынишку, который даже читать русский текст толком не умеет.

emulek
()
Ответ на: ЯЗАБАН от comp00

Шел бы ты на винфак со своим DevC++, WinAPI и быдлокодингом! Ты нам не нужен, уходи!

да где тебе Win-то примерещилась? Красноглазие убило мозг?

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.