Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 16:05   #1
Sarmat
Новичок
Джуниор
 
Регистрация: 20.09.2008
Сообщений: 1
По умолчанию C++ Простейшая проверка физических размерностей величин

Всем доброго времени суток! Задача состоит в следующем : реализовать класс, содержащий размерность физической величины и ее численное значение; для 2х величин определить операции сложения, вычитания, умножения и деления. В случае неверной размерности ( т.е. если, к примеру, метры складываются с килограммами) ошибка должна выводиться на этапе компиляции. Вот собственно мой вариант, а вопрос в том , какие существуют операции между двумя строками, приводящие к ошибке, если строки не равны? ну или может быть можно как-нибудь по-другому реализовать ошибку на этапе компиляции?
Код:
#include <iostream>
#include <string>

using namespace std;

class SI
{
      public:
             SI(string str, float x){ itsValue = x; itsDimension = str; }
             
             float GetValue() const { return itsValue; }
             string GetDimension() const { return itsDimension; }
             
             string Addition(string Dim1, string Dim2);
             string Deduction(string Dim1, string Dim2);
             string Multiplication(string Dim1, string Dim2);
             string Division(string Dim1, string Dim2);
             
      private:
             float itsValue;
             string itsDimension;
};

string SI :: Addition(string Dim1, string Dim2)
{      
       int temp = 0;
       if (Dim1 == Dim2) return Dim1; 
       else temp = 1/temp;
}

string SI :: Deduction(string Dim1, string Dim2)
{ 
       if (Dim1 == Dim2) return Dim1; 
       //else
}

string SI :: Multiplication(string Dim1, string Dim2)
{ 
       Dim1.append("*"); 
       Dim1.append(Dim2); 
       return Dim1; 
}

string SI :: Division(string Dim1, string Dim2)
{ 
       if (Dim1 == Dim2) return "";
       else 
       {
            Dim1.append("/"); 
            Dim1.append(Dim2);
            return Dim1;
       }
}

int DoMenu()
{
    int choice;
    
    cout << "(1) Addiction \n";
    cout << "(2) Deduction \n";
    cout << "(3) Multiplication \n";
    cout << "(4) Division \n";
    cout << "(5) Quit \n";
    
    cin >> choice;
    cout << endl;
    return choice;
}

int main()
{
    int choice = 1;
    bool fQuit = false;
    SI My1("m",7), My2("kg",5);
    
    while (!fQuit)
    {
          choice = DoMenu();
          if (choice < 1 || choice > 5)
          {
                  cout << "\nInvalid choice, please try again\n\n";
                  continue;
          }
          switch (choice)
          {
          case 1: cout << My1.GetValue() << My1.GetDimension() << "+" << My2.GetValue() << My2.GetDimension() << "=" 
                  << My1.GetValue()+My2.GetValue() << My1.Addition(My1.GetDimension(),My2.GetDimension()) << "\n\n";
                  break;
          case 2: cout << My1.GetValue() << My1.GetDimension() << "-" << My2.GetValue() << My2.GetDimension() << "=" 
                  << My1.GetValue()-My2.GetValue() << My1.Deduction(My1.GetDimension(),My2.GetDimension()) << "\n\n";
                  break;
          case 3: cout << My1.GetValue() << My1.GetDimension() << "*" << My2.GetValue() << My2.GetDimension() << "=" 
                  << My1.GetValue()*My2.GetValue() << My1.Multiplication(My1.GetDimension(),My2.GetDimension()) << "\n\n";
                  break;
          case 4: cout << My1.GetValue() << My1.GetDimension() << "/" << My2.GetValue() << My2.GetDimension() << "=" 
                  << My1.GetValue()/My2.GetValue() << My1.Division(My1.GetDimension(),My2.GetDimension()) << "\n\n";
                  break;
          case 5: fQuit = true;
                  break;
          }
    }
    
    cin.get();
    return 0;
}
Sarmat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение серийных номеров физических устройств Raikhman Win Api 11 01.11.2011 16:42
Задача по компьютерному моделированию (описание физических процессав), но ворос не в физике... Chudo4258 Помощь студентам 2 14.03.2009 07:05
Простейшая работа с чужим приложением... ActiveX Помощь студентам 1 31.01.2008 08:17
перевод величин Vasya Свободное общение 13 18.11.2007 00:08