Laila20 Ответов: 3

Мне нужна помощь с проблемой C++


это проблема Ма:

Определите класс под названием “Дом”, который представляет информацию о доме. А дом есть
определяется с помощью следующих атрибутов: возраст (int), тип (строка) (отдельно стоящий, полу‐прикрепленный, прикрепленный), комнаты (int)
и стоимость (двойная). Функции класса House должны выполнять следующие операции:
 Верните возраст дома
 Измените возраст дома
 Верните тип дома
 Верните количество комнат
 Функция estimatePrice (), которая возвращает стоимость дома в зависимости от типа и возраста. Один
пристроенный дом, стоит 100 000 долларов, дорожает на 1% каждый год в первые пять лет и на 2% каждый год.
год спустя. Двухквартирный дом, стоящий 150 000 долларов, ценится на 2% каждый год в первом квартале
пять лет и 3% каждый год после этого. Отдельно стоящий дом, стоит 200 000 долларов, ценит 2%
каждый год в первые пять лет и 2% каждый год после этого.
Проверьте свой класс, предложив пользователю ввести информацию о двух разных домах. Создать два
объекты класса House с информацией, введенной пользователем, и, наконец, тестируемый член
функции класса. Также рассчитайте расчетную цену домов данного типа и возраста (включая 1
прилагается и 1 отсоединяется)
Результаты:
 Файл под названием Дом.h, который содержит спецификацию класса.
 Файл под названием house.cpp это содержит реализацию функций-членов класса.
 Файл под названием testhouse.cpp в этом и заключается основная функция.

Что я уже пробовал:

#ifndef HOUSE_H
#define HOUSE_H

class House
{
public:
    House(int age,string type,int rooms);
    void setAge(int age);
    int getAge();
    string getType();
    int getNumOfRooms();
    double estimatedPrice();

private:
    // Declaring variables
    int age;
    string type;
    int rooms;
    double cost;
};
#endif

________

// House.cpp

#include <iostream>
using namespace std;
#include "House.h"

House::House(int age,string type,int rooms)
{
    this->age=age;
    this->type=type;
    this->rooms=rooms;
}

void House::setAge(int age)
{
    this->age=age;
}

int House::getAge()
{
    return age;
}

string House::getType()
{
    return type;
}

int House::getNumOfRooms()
{
    return rooms;
}

double House::estimatedPrice()
{
    if(type.compare("Attached")==0)
    {
        cost=100000;
        if(age<=5)
        {
            for(int i=1;i<=age;i++)
            {
                cost=cost+cost*0.01;
            }
        }
        else
        {
            for(int i=1;i<=5;i++)
            {
                cost=cost+cost*0.01;
            }
            for(int i=1;i<=age-5;i++)
            {
                cost=cost+cost*0.02;
            }
        }
    }
    else if(type.compare("Semi-detached")==0)
    {
        cost=150000;
        if(age<=5)
        {
            for(int i=1;i<=age;i++)
            {
                cost=cost+cost*0.02;
            }
        }
        else
        {
            for(int i=1;i<=5;i++)
            {
                cost=cost+cost*0.02;
            }
            for(int i=1;i<=age-5;i++)
            {
                cost=cost+cost*0.03;
            }
        }
    }
    else if(type.compare("Detached")==0)
    {
        cost=150000;
        for(int i=1;i<=age;i++)
        {
            cost=cost+cost*0.02;
        }
    }
    return cost;
}

__________

// main.cpp

#include <iostream>
using namespace std;

#include "House.h"

int main()
{
    int age;
    string type;
    int rooms;
  
    cout<<":: House#1 ::"<<endl;
    cout<<"enter house="" age="" :";
    cin>>age;
    cout<<"Enter House Type :";
    cin>>type;
    cout<<"Enter No of Rooms :";
    cin>>rooms;

    House house1(age,type,rooms);

    cout<<":: House#2 ::"<<endl;
    cout<<"enter house="" age="" :";
    cin>>age;
    cout<<"Enter House Type :";
    cin>>type;
    cout<<"Enter No of Rooms :";
    cin>>rooms;

    House house2(age,type,rooms);

    cout<<"\nHouse Estimated Cost :$"< 

Rick York

Похоже, ваш код был обрезан. Я добавил предварительные теги и отступы в четыре пробела на уровень табуляции.

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

Я рекомендую вам немного изменить класс дома. Добавьте пустой конструктор по умолчанию, который принимает нулевые Аргументы, и добавьте метод Prompt, который запрашивает у пользователя данные. Вы повторили этот раздел кода дважды, так что это хороший кандидат для метода или функции.

Кроме того, std::string имеет оператор==, так что вы можете напрямую сравнить равенство с ним.

Возможно, вам захочется сделать член типа house перечислением, а не строкой, и принять ввод без учета регистра.

Если ваша программа работает неправильно, это будет хорошей возможностью научиться использовать отладчик. Они являются важным инструментом для эффективного программирования.

CPallini

Ваш код почти завершен. В чем же тогда проблема?

3 Ответов

Рейтинг:
1

KarstenK

Вы находитесь на правильном пути для хорошего решения, но, похоже, вам не хватает некоторых навыков отладки. Итак, прочтите начальные главы книги. Изучите учебник по C++ чтобы использовать Microsoft Visual Studio IDE с отладчиком и таким образом добавить недостающий код.

совет: ваша основная функция должна быть в testhouse.cpp-да. Создайте этот файл или переименуйте его main.cpp файл.


Рейтинг:
0

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас. И если вы не скажете нам, что не так с вашим кодом, мы не сможем помочь вам это исправить.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Но, скорее всего, он не делает того, что вы ожидали - но мы все равно не сможем помочь, если не узнаем, какую проблему вы заметили!
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

merano99

Некоторые предложения по улучшению вашего кода:

// header
enum HOUSETYPE { H_ATACHED, H_SEMIATACHED, H_DETACHED };

class House
{
public:
	House(int age, HOUSETYPE type, int rooms);
	void setAge(int age);
	int getAge();
	HOUSETYPE getType();
	int getNumOfRooms();
	double estimatedPrice();

private:
	// Declaring variables
	const HOUSETYPE m_type;
	const int m_rooms;
	double m_baseprize;
	int m_age;
};

// constructor
House::House(int age, HOUSETYPE type, int rooms) : m_age(age), m_type(type), m_rooms(rooms) 
{
switch (m_type) {
  case H_ATACHED: m_baseprize = 100000.0 ; break;
  case H_SEMIATACHED: m_baseprize = 150000.0;  break;
  case H_DETACHED: m_baseprize = 200000.0;  break;
  default: throw std::runtime_error("Undefined Type");
  }
}


double House::estimatedPrice()
{
  double cost = m_baseprize;

  switch (m_type) {

  case H_DETACHED: {
    for (int i = 1; i <= m_age; i++) { cost *= 1.02; }
  } break;

...
}



// main
int main()
{
  int rooms, age;
  HOUSETYPE type;
  vector<House> myhouse;

  for (int i = 0; i < 2; i++) {
    cout << ":: House#" << i << " ::" << endl;

    type = gethousetype();

    cout << "Enter No of Rooms :";
    cin >> rooms;

    cout << "enter age:";
    cin >> age;

    House house(age, type, rooms);
    myhouse.push_back(house);

    cout << "House#" << i << "Estimated Cost: $" << myhouse[i].estimatedPrice() << "\n";
  }

  return 0;
}

И, как уже подозревалось, в остальном тоже есть ошибка расчета.