Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: KernelPanic   (27.05.2012 в 16:06)
Так и не понял классов
фигня какая-то получается :(
#include <iostream>
#include <math.h>
 
 using namespace std;
 
 class vec1
 {
 public:

 double dlina(double a, double b){
        return a=sqrt(pow(b,2)+pow(a,2));//вычисление длинны вектора
        }
 double print(double a, double b){
        cout<<"coordinata 1="<<a<<endl;
        cout<<"coordinata 2="<<b<<endl;

        }
 };
 
 class vec2:public vec1
 {
       double cx, cy;
       public:
            double dlina(double a, double b){
        return a=sqrt(pow(b,2)+pow(a,2));//вычисление длинны вектора
        }
        double chislo(double a, double b, double ca)
        {
cx=ca*a;
cy=ca*b;
cout<<"Proizvedenie A na chislo="<<endl;
cout<<cx<<endl;
cout<<cy<<endl;
               }
              double scal(double a,double b,double e,double f)
{
       double ab;
       ab=a*e+b*f;
       return ab;
}
               

       };
 
 main()
 {
       
cout<<"Vvedite chislo vibrannogo puncta, najmite enter"<<endl;
cout<<"1. dlinna vectora"<<endl<<"2. Umnojenie na chislo"<<endl<<"3. scalar proizved vectorov"<<endl<<"4. slojenie vectorov"<<endl<<"5. exit"<<endl;

          int sw;
          cin>>sw;
          
          switch(sw)
{
               case 1: //Длинна вектора A
               {
               double a,b,d;
      cout<<"Vector A="<<endl;
      cin>>a;
      cin>>b;
            
vec1 m;

d=m.dlina(a,b);//вызывается первый метод
cout<<"Dlina A="<<d<<endl;

m.print(a,b);

 return 0;
}
case 2://умножение вектора на число
{
     double a,b,ca;
     cout<<"Vector A="<<endl;
     cin>>a;
     cin>>b;
     cout<<"Chislo="<<endl;
     cin>>ca;

     vec2 n;
     n.chislo(a,b,ca);
return 0;
 }
  case 3:// Скалярное произведение векторов
      {
           double a,b;
      cout<<"Vector A="<<endl;
      cin>>a;
      cin>>b;
      
      cout<<"vector B="<<endl;
      double e, f;
      cin>>e;
      cin>>f;
      vec2 n;
      double ab;
      ab=n.scal(a,b,e,f);

      cout<<"proizvedenie="<<ab<<endl;
            return 0;
      }
      
      case 4://сложение векторов
      {
      cout<<"Vector A="<<endl;
      double a,b;
      cin>>a;
      cin>>b;
      
      cout<<"vector B="<<endl;
      double e, f;
      cin>>e;
      cin>>f;
            
      if(a==e||b==f)
      {
      double ab;
      vec2 n;
      ab=n.scal(a,b,e,f);
      double d,t;
      d=n.dlina(a,b);//Длина вектора A
      t=n.dlina(e,f);//Длина вектора B
      double alpha;
      alpha=(ab/d*t);//cos alpha м.у векторами
      cout<<"cos a="<<alpha<<endl;
      double summ;
      d=fabs(d);
      t=fabs(t);
      summ=pow(d,2)+pow(t,2)+2*d*t*alpha;
      summ=sqrt(summ);
      cout<<summ<<endl;
      }
      if(a==f||b==e)
      {
                    double ab;
                    vec2 n;
      ab=n.scal(a,b,e,f);
      double d,t;
      d=n.dlina(a,b);//Длина вектора A
      t=n.dlina(e,f);//Длина вектора B
      double alpha;
      alpha=(ab/d*t);//cos alpha м.у векторами
      double summ;
      d=fabs(d);
      t=fabs(t);
      summ=sqrt(pow(d,2)+pow(t,2)-2*d*t*alpha);      
      cout<<summ<<endl;
                    }
      else
      {
          cout<<"pri zadannih coordinatah slojenie nevozmojno"<<endl;
            
            }
            return 0;
      }
      case 5:
      {
            
            return 0;
      }  


}
}

Почему то здесь код оставил без изменений - а по второй ветке if переходит... Чудеса да и олько.
Как сделать, чтобы второй раз нахождение длинны не писать в vec2 а обращаться к vec1 - можно ведь как-то без написания функции повторно ссылку какую-то?


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: