Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25

Найти полную квартплату с учетом возможного наличия излишков жилплощади

14.09.2014, 23:26. Показов 5258. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Величина квартплаты определяется количеством квадратных метров площади, умноженную на цену 1 кв. м. Кроме того, если в квартире имеется излишек площади относительно санитарной нормы он оплачивается в двойном размере. Считайте что сан. норма = 18 на 1 чел. Стоимость 1 кв.м. произвольная.
Некоторым категориям жильцов положено льготы при оплате. Инвалиды платят на 25% а участники ВОВ на 50% меньше. Льготы только на одного человека.
Для жильцов 1 этажа плата снижается на 20% а жильцам 2 этажа на 10% из-за отсутствия лифта.

1. Найти полную кварплату. Учтите возможное наличие излишков жил. площ. НО если проживает 1 чел. то за излишек он не платит.
2. Кварплату с учетом всех льгот. Так же фактическую плату это льготы +этажность.
3. Количество льготников и суммарную факт. плату инвалидов и ВОВ.
4. Квартиру с MAX фактической платой.

Ввод данных я понял как сделать

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale>
#include "struct.h"
 
#define S 80// площадь квартиры
#define stoimost 30// стоимость 1 кв.м. жилья
#define norma 18// саниматрная норма
void main(void)
{int i, n, j, a;
float sum;
kvartira b;
setlocale (LC_ALL, "Russian");
FILE *file;
file= fopen ("text.txt", "w+");
printf("Введите количество этажей\n");
scanf("%d", &n);
a=n*2;
for(j=0;j<a;j++)
{b.nomer_kv[j]=j+1;
printf("Введите колличество жильцов\n");
scanf("%d ", &b.koll[j]);
for(i=0;i<b.koll[j];i++)
{
fprintf(file,"%d ", b.nomer_kv[j]);
fprintf(file,"%d ", b.koll[j]);
imput_fio(file, b, i);
imput_lgoti(file, b, i);
}
getch();
}
struct.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale>
 
typedef struct
{
int nomer_kv[99];
int koll[999];
char famiya[99][99];
char name[99][99];
char otchestvo[99][99];
int wow[99];
int invalid[99];
int bezlgot[99];
float izlishek[99];
}kvartira;
 
 void imput_fio(FILE *file, kvartira &A, int i)
 {  printf("Введите фамилию имя и отчество\n");
    fflush(stdin);
    gets(A.famiya[i]);
    fflush(stdin);
    gets(A.name[i]);
    fflush(stdin);
    gets(A.otchestvo[i]);
    fprintf(file, "%s %s %s ", A.famiya[i], A.name[i], A.otchestvo[i]);
    fflush(file);
 }
 void imput_lgoti(FILE *file, kvartira &A, int i)
 {  fscanf (file,"%s %s %s ",&A.famiya[i],  &A.name[i], &A.otchestvo[i]);
    printf("Является ли %s %s %s участиником ВОВ 1- да, 0-нет\n", A.famiya[i], A.name[i], A.otchestvo[i]);
    fflush(stdin);
    scanf("%d", &A.wow[i]);
     if (A.wow[i]==1)
     {
        A.invalid[i]=1;
        A.bezlgot[i]=0;
     }
     else
    {  
        printf("Является ли %s %s %s инвалидом 1- да, 0-нет\n", A.famiya[i], A.name[i], A.otchestvo[i]);
        fflush(stdin);
        scanf("%d", &A.invalid[i]);
        if (A.invalid[i]==1)
        { 
        A.wow[i]=0;
        A.bezlgot[i]=0;
        }
        else
        { A.wow[i]=0;
        A.bezlgot[i]=1;
        A.invalid[i]=0;
    }
 
 }   
     fprintf(file,"%d %d %d\n", A.wow[i], A.invalid[i], A.bezlgot[i]);
     fflush(file);
}
А как рассчитывать я не понимаю( Может кто подсказать, дальше может сам разберусь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2014, 23:26
Ответы с готовыми решениями:

Вычисление скалярного произведения двух векторов-списков (с учетом возможного несовпадения размерностей)
Программу реализовать двумя способами: с использованием стандартных процедур обработки списков и без использования. (StrawberryProlog1_51) ...

Изменить текст с учетом наличия знака '+'
Дан текст. Если в тексте нет знака +, то оставить текст без изменений, иначе каждую из цифр, что предшествует первому вхождению знака +,...

Настройка маршрутизатора с учетом наличия в сети контроллера домена
Добрый день! У меня появился вопрос касательно установки роутера с DHCP, с учетом наличия в сети DC. Имеется сервер-контроллер домена,...

42
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.09.2014, 09:41
Студворк — интернет-сервис помощи студентам
В общем, вот, потихоньку вырисовывается картина (но пока что до конца сделать не успел).
Версия 2.1:

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/// apartment(residential_taxes)_ver_2_1
//  main.cpp
/*
Соглашения, терминология, условия:
01. Величина квартирного налога определяется количеством кв. метров площади,
    умноженную на тариф за 1 кв. метр.
02. Если в квартире имеется излишек площади относительно санитарной нормы он
    оплачивается по двойному тарифу.
03. Считайте что санитарная норма = 18 кв.метра на 1 человека.
04. Стоимость 1 кв.м. произвольная.
05. Если в квартире проживает 1 человек, то за площадь сверх санитарной нормы
    (если таковая имеется) он не платит.
06. Некоторым категориям жильцов положено льготы при оплате.
    Инвалиды имеют льготу в 25%, а ветераны ВОВ - 50%. Льготы считаются только
    на одного человека и не суммируются. То есть если жилец одновременно и
    инвалид и ветеран, при подсчётах принимается во внимание только большая
    льгота (за ветеранство, в нашем случае).
07. Для жильцов первых двух этажей имеется дополнительная скидка за
    то, что они не пользуются лифтом - для них квартирный налог снижен:
    для жителей 1 этажа на 20%, а для жителей 2 этажа на 10%.
08. Обратите внимание: дополнительная скидка (скидка за этажность) суммируется
    с основными льготами (льготы для инвалидов и ветеранов).
09. Не забудьте учесть возможное наличие излишков жилплощади.
10. Сумма квартирного налога с учётом всех льгот, скидок и вычетов
    называется фактическим тарифом.
11. Сумма квартирного налога без учёта  льгот, скидок, но с учётом вычетов
    называется общим тарифом.
12. Общей суммой квартирного налога называется сумма налога для всех жильцов
    дома.
 
Задача:
1. Найдите общую сумму квартирного налога по общему тарифу.
2. Найдите общую сумму квартирного налога по фактическому тарифу.
3. Найдите общую сумму всех льгот и скидок.
4. Найдите общее количество льготников.
5. Найдите сумму квартирного налога по общему тарифу всех инвалидов
   и ветеранов дома.
6. Найдите сумму квартирного налога по фактическому тарифу всех
   инвалидов и ветеранов дома.
7. Найдите квартиру с максимальной суммой квартирного налога по
   фактическому тарифу.
*/
 
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include "MY_CONST.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Apt house[APT_QTY];  // создаём массив дом (массив объектов типа "квартира")
 
//==============================================================================
    ///// Чтение данных из файла и запись их в массив (вектор) /////
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    for (char ch; ch != '\n') fin.get(ch); // освобождаемся от мусора в потоке
 
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
 
        // используем созданный нами объект fin по аналогии с объектом cin
        for (int i=0; i<APT_QTY; ++i)
        {
            fin >> house[i].aptNum_  ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
            fin >> house[i].numPers_ ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
            fin >> house[i].aptArea_ ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
            fin >> house[i].stage_   ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
            fin >> house[i].isVet_   ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
            fin >> house[i].isInv_   ;
            for (char ch; ch != ' ' || '\n') fin.get(ch);
        }
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
        
 
//=========================================================================
 
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:"
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
 
    return 0;
}


Apt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// apartment(residential_taxes)_ver_2_1
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
    private:
        int aptNum_  ;   // номер квартиры
        int numPers_ ;   // количество проживающих в квартире людей
        int aptArea_ ;   // количество квадратных метров в квартире
        int stage_   ;   // этаж
        bool isVet_  ;   // является ли жилец ветераном
        bool isInv_  ;   // является ли жилец инвалидом
 
    public:
        int stage_rebate(int stage);                 // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);  // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);         // обычный тариф
        int res_tax(int stageRebate, int normTax, int overnormTax); // квартирный налог
};
 
#endif // APT_H


Apt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/// apartment(residential_taxes)_ver_2_1
//  Apt.cpp
#include "Apt.h"
#include "MY_CONST.h"
// Реализация методов класса Apt
 
//==============================================================================
// Конструктор:
Apt::Apt(int aptNum, int numPers, int aptArea, int stage, bool isVet, bool isInv)
{
    int aptNum_  = aptNum;  // номер квартиры
    int numPers_ = numPers; // количество проживающих в квартире людей
    int aptArea_ = aptArea; // количество квадратных метров в квартире
    int stage_   = stage;   // этаж
    bool isVet_  = isVet;   // является ли жилец ветераном
    bool isInv_  = isInv;   // является ли жилец инвалидом
}
 
//==============================================================================
// Деструктор:
Apt::~Apt()
{
    //dtor
}
 
 
//==============================================================================
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живёт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живёт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живёт выше
                return 0; // нет скидки за этажность
}
 
 
//==============================================================================
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
//==============================================================================
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
//==============================================================================
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax)
{
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}


MY_CONST.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// apartment(residential_taxes)_ver_2_1
//  MY_CONST.h
#ifndef MY_CONST_H_INCLUDED
#define MY_CONST_H_INCLUDED
 
const int APT_QTY    = 40;   // количество квартир
const int SQ_M_TAX   = 100;  // налог за кв. метр
const int NORM_AREA  = 18;   // количество кв. метров положенных на человека
const int INV_REBATE = 4;    // льгота инвалидам
const int VET_REBATE = 2;    // льгота ветеранам
const int ST1_REBATE = 5;    // льгота живущим на первом этаже
const int ST2_REBATE = 10;   // льгота живущим на втором этаже
const int NO_REBATE  = 1;    // если не ветераны и не инвалиды (без льгот)
 
#endif // MY_CONST_H_INCLUDED


house.txt
Кликните здесь для просмотра всего текста

1
1
22
1
1
1

2
1
42
1
0
0

3
2
42
1
1
0

4
1
22
1
0
1

5
2
22
2
1
0

6
3
42
2
0
0

7
2
42
2
0
1

8
1
22
2
0
0

9
1
22
3
0
0

10
3
42
3
0
1

11
2
42
3
1
1

12
1
22
3
1
0
Вложения
Тип файла: txt house.txt (253 байт, 6 просмотров)
Тип файла: zip aptartment(residential_taxes).zip (5.7 Кб, 3 просмотров)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.09.2014, 09:46
P.S. Пишу на работе, в свободное время. Периодически тут начальник приходит, так что получается медленно.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.09.2014, 21:52
Лучший ответ Сообщение было отмечено Михаил74 как решение

Решение

Версия 2.2
Вложения
Тип файла: zip apartment(residential_taxes)_ver_2_2.zip (300.2 Кб, 6 просмотров)
1
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
17.09.2014, 11:52  [ТС]
Благодарю)

Добавлено через 12 минут
А можно сюда добавить как нибудь еще решение следующего задания. Пусть имеется m домов и пусть имеется n этажей. А в каждой квартире могу проживать от 1 до 4 чел.
1. Определить номер дома в котором живет наибольшее количество жильцов
2. Вывести список льготников проживающих в каждом доме. и отсортировать список в порядке возрастания квартплаты.
3. Определить общие количество квартир в котором живет по 1, 2, 3, 4 человека.
4. Посчитать средний размер фактической квартплаты вносимой жильцами каждого дома.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.09.2014, 13:27
Цитата Сообщение от Михаил74 Посмотреть сообщение
Благодарю)
Да рано пока благодарить. Не работает же ещё ничего.

Цитата Сообщение от Михаил74 Посмотреть сообщение
А можно сюда добавить как нибудь еще
Можно, но позже. Сперва с каркасом надо определиться. Чтобы класс заработал как положено. А данными потом как угодно жонглировать можно будет.

Добавлено через 4 минуты
Цитата Сообщение от Михаил74 Посмотреть сообщение
m домов и пусть имеется n этажей
Вектор векторов (двумерный массив) потом зафигачим, всего делов.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.09.2014, 13:36

Не по теме:

gru74ik, а вы упорный однако, у кого-то будет отличная курсовая))


По классу: надо бы запрятать все переменный в приват, а для ввода-вывода перегрузить операторы >> и <<
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.09.2014, 14:03
Версия 2.3. Пока всё ещё не окончательный вариант, к сожалению.
Не могу заставить метод Apt::read() принимать в качестве аргумента экземпляр класса, сложенный в массив Apt apartment[]. Не пойму, чего ему не нравится.:

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/// apartment(residential_taxes)_ver_2_2
//  main.cpp
/*
Соглашения, терминология, условия:
01. Величина квартирного налога определяется количеством кв. метров площади,
    умноженную на тариф за 1 кв. метр.
02. Если в квартире имеется излишек площади относительно санитарной нормы он
    оплачивается по двойному тарифу.
03. Считайте что санитарная норма = 18 кв.метра на 1 человека.
04. Стоимость 1 кв.м. произвольная.
05. Если в квартире проживает 1 человек, то за площадь сверх санитарной нормы
    (если таковая имеется) он не платит.
06. Некоторым категориям жильцов положено льготы при оплате.
    Инвалиды имеют льготу в 25%, а ветераны ВОВ - 50%. Льготы считаются только
    на одного человека и не суммируются. То есть если жилец одновременно и
    инвалид и ветеран, при подсчётах принимается во внимание только большая
    льгота (за ветеранство, в нашем случае).
07. Для жильцов первых двух этажей имеется дополнительная скидка за
    то, что они не пользуются лифтом - для них квартирный налог снижен:
    для жителей 1 этажа на 20%, а для жителей 2 этажа на 10%.
08. Обратите внимание: дополнительная скидка (скидка за этажность) суммируется
    с основными льготами (льготы для инвалидов и ветеранов).
09. Не забудьте учесть возможное наличие излишков жилплощади.
10. Сумма квартирного налога с учётом всех льгот, скидок и вычетов
    называется фактическим тарифом.
11. Сумма квартирного налога без учёта  льгот, скидок, но с учётом вычетов
    называется общим тарифом.
12. Общей суммой квартирного налога называется сумма налога для всех жильцов
    дома.
 
Задача:
1. Найдите общую сумму квартирного налога по общему тарифу.
2. Найдите общую сумму квартирного налога по фактическому тарифу.
3. Найдите общую сумму всех льгот и скидок.
4. Найдите общее количество льготников.
5. Найдите сумму квартирного налога по общему тарифу всех инвалидов
   и ветеранов дома.
6. Найдите сумму квартирного налога по фактическому тарифу всех
   инвалидов и ветеранов дома.
7. Найдите квартиру с максимальной суммой квартирного налога по
   фактическому тарифу.
*/
 
#include <iostream>
#include <string>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <windows.h>
#include "Apt.h"
#include "MY_CONST.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    using std::ifstream;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Apt apartment[APT_QTY];  // создаём массив квартир (это у нас будет один дом)
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
 
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
        if (!fin.is_open())
            exit(EXIT_FAILURE);
 
        // используем созданный нами объект fin по аналогии с объектом cin
        for (int i=0; i<APT_QTY; ++i)
            Apt::read(fin, apartment[i]);
 
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
 
 
    for (int i=0; i<APT_QTY; ++i)
        Apt::print(cout, apartment[i]);
 
    /*
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:";
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
    */
    return 0;
}


Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// apartment(residential_taxes)_ver_2_3
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
private:
        int aptNum_ ;   // номер квартиры
        int numPers_;   // количество проживающих в квартире людей
        int aptArea_;   // количество квадратных метров в квартире
        int stage_  ;   // этаж
        bool isVet_ ;   // является ли жилец ветераном
        bool isInv_ ;   // является ли жилец инвалидом
 
    public:
        std::istream &read(std::istream &is, Apt &item);
        std::ostream &print(std::ostream &os, const Apt &item);
        int stage_rebate(int stage);                   // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);    // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);           // обычный тариф
        int res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv); // квартирный налог
};
 
#endif // APT_H


Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/// apartment(residential_taxes)_ver_2_3
//  Apt.cpp
#include <fstream>      // дл¤ чтени¤ из файла
#include <ostream>      // дл¤ вывода в файл
#include "Apt.h"
#include "MY_CONST.h"
 
std::istream& Apt::read(std::istream &is, Apt &item)
{
    is >> house[i].aptNum_  ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> house[i].numPers_ ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> house[i].aptArea_ ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> house[i].stage_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> house[i].isVet_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> house[i].isInv_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
}
 
std::ostream& Apt::print(std::ostream &os, const Apt &item)
{
    os << house[i].aptNum_  << '\n';
    os << house[i].numPers_ << '\n';
    os << house[i].aptArea_ << '\n';
    os << house[i].stage_   << '\n';
    os << house[i].isVet_   << '\n';
    os << house[i].isInv_   << '\n';
}
 
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живЄт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живЄт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живЄт выше
                return 0; // нет скидки за этажность
}
 
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv)
{
    int normTax;
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}


Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// apartment(residential_taxes)_ver_2_3
//  MY_CONST.h
#ifndef MYCONST_H_INCLUDED
#define MYCONST_H_INCLUDED
 
const int APT_QTY    = 12  ;   // количество квартир
const int SQ_M_TAX   = 100 ;   // налог за кв. метр
const int NORM_AREA  = 18  ;   // количество кв. метров положенных на человека
const int INV_REBATE = 4   ;   // льгота инвалидам
const int VET_REBATE = 2   ;   // льгота ветеранам
const int ST1_REBATE = 5   ;   // льгота живущим на первом этаже
const int ST2_REBATE = 10  ;   // льгота живущим на втором этаже
const int NO_REBATE  = 1   ;   // если не ветераны и не инвалиды (без льгот)
 
#endif // MYCONST_H_INCLUDED


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

Компилятор вот чего говорит:
Миниатюры
Найти полную квартплату с учетом возможного наличия излишков жилплощади  
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.09.2014, 15:01
Цитата Сообщение от КОП Посмотреть сообщение
gru74ik, а вы упорный однако, у кого-то будет отличная курсовая))
Мне самому просто интересно очень

Добавлено через 51 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
Не могу заставить метод Apt::read() принимать в качестве аргумента экземпляр класса, сложенный в массив Apt apartment[]. Не пойму, чего ему не нравится
Уже понял. В прототипе метода второй аргумент - объект класса Apt, а в main'e я ему пытаюсь указатель скормить.

Добавлено через 5 минут
Цитата Сообщение от КОП Посмотреть сообщение
надо бы запрятать все переменные в приват
Уже

Цитата Сообщение от КОП Посмотреть сообщение
для ввода-вывода перегрузить операторы >> и <<
Благодарю!

КОП, а вот константы все в одном заголовочнике - это нормально соответствует духу дзен?
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.09.2014, 15:11
Цитата Сообщение от gru74ik Посмотреть сообщение
КОП, а вот константы все в одном заголовочнике - это нормально соответствует духу дзен?
в таких вопросах я пока не очень шарю, однако могу сказать, что все константы кроме кол-ва квартир используются только в классе, значит логичнее их туда и запихнуть, а количество квартир вообще убрать и использовать вектор.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.09.2014, 07:39
Версия 2.4

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/// apartment(residential_taxes)_ver_2_4
//  main.cpp
/*
Соглашения, терминология, условия:
01. Величина квартирного налога определяется количеством кв. метров площади,
    умноженную на тариф за 1 кв. метр.
02. Если в квартире имеется излишек площади относительно санитарной нормы он
    оплачивается по двойному тарифу.
03. Считайте что санитарная норма = 18 кв.метра на 1 человека.
04. Стоимость 1 кв.м. произвольная.
05. Если в квартире проживает 1 человек, то за площадь сверх санитарной нормы
    (если таковая имеется) он не платит.
06. Некоторым категориям жильцов положено льготы при оплате.
    Инвалиды имеют льготу в 25%, а ветераны ВОВ - 50%. Льготы считаются только
    на одного человека и не суммируются. То есть если жилец одновременно и
    инвалид и ветеран, при подсчётах принимается во внимание только большая
    льгота (за ветеранство, в нашем случае).
07. Для жильцов первых двух этажей имеется дополнительная скидка за
    то, что они не пользуются лифтом - для них квартирный налог снижен:
    для жителей 1 этажа на 20%, а для жителей 2 этажа на 10%.
08. Обратите внимание: дополнительная скидка (скидка за этажность) суммируется
    с основными льготами (льготы для инвалидов и ветеранов).
09. Не забудьте учесть возможное наличие излишков жилплощади.
10. Сумма квартирного налога с учётом всех льгот, скидок и вычетов
    называется фактическим тарифом.
11. Сумма квартирного налога без учёта  льгот, скидок, но с учётом вычетов
    называется общим тарифом.
12. Общей суммой квартирного налога называется сумма налога для всех жильцов
    дома.
 
Задача:
1. Найдите общую сумму квартирного налога по общему тарифу.
2. Найдите общую сумму квартирного налога по фактическому тарифу.
3. Найдите общую сумму всех льгот и скидок.
4. Найдите общее количество льготников.
5. Найдите сумму квартирного налога по общему тарифу всех инвалидов
   и ветеранов дома.
6. Найдите сумму квартирного налога по фактическому тарифу всех
   инвалидов и ветеранов дома.
7. Найдите квартиру с максимальной суммой квартирного налога по
   фактическому тарифу.
*/
 
#include <iostream>
#include <string>
#include <vector>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <windows.h>
#include "Apt.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    using std::vector;
    using std::ifstream;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vector <Apt> apartment;  // создаём массив квартир (это у нас будет один дом)
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
    Apt temp;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
        if (!fin.is_open())
            exit(EXIT_FAILURE);
 
        // используем созданный нами объект fin по аналогии с объектом cin
 
        for (char ch=0; ch = fin.get () != EOF; )
        {
            fin >> temp;
            apartment.push_back(temp);
        }
 
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
 
 
    for (size_t i=0; i < apartment.size(); ++i)
    {
        temp = apartment[i];
        cout << temp;
    }
 
 
    /*
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:";
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
    */
    return 0;
}


Apt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/// apartment(residential_taxes)_ver_2_4
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
    friend std::istream &  read(std::istream & is, Apt & item);
    friend std::ostream & print(std::ostream & os, const Apt & item);
 
    friend std::istream & operator>>(std::istream & is, Apt & item);
    friend std::ostream & operator<<(std::istream & os, Apt & item);
 
    private:
        const int SQ_M_TAX   = 100 ;   // налог за кв. метр
        const int NORM_AREA  = 18  ;   // количество кв. метров положенных на человека
        const int INV_REBATE = 4   ;   // льгота инвалидам
        const int VET_REBATE = 2   ;   // льгота ветеранам
        const int ST1_REBATE = 5   ;   // льгота живущим на первом этаже
        const int ST2_REBATE = 10  ;   // льгота живущим на втором этаже
        const int NO_REBATE  = 1   ;   // если не ветераны и не инвалиды (без льгот)
 
        int aptNum_ ;   // номер квартиры
        int numPers_;   // количество проживающих в квартире людей
        int aptArea_;   // количество квадратных метров в квартире
        int stage_  ;   // этаж
        bool isVet_ ;   // является ли жилец ветераном
        bool isInv_ ;   // является ли жилец инвалидом
 
    public:
        Apt & operator=(const Apt & item);
        int stage_rebate(int stage);                   // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);    // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);           // обычный тариф
        int res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv); // квартирный налог
};
 
#endif // APT_H


Apt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/// apartment(residential_taxes)_ver_2_4
//  Apt.cpp
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include "Apt.h"
 
std::istream & read(std::istream & is, Apt & item)
{
    is >> item.aptNum_  ;
    is >> item.numPers_ ;
    is >> item.aptArea_ ;
    is >> item.stage_   ;
    is >> item.isVet_   ;
    is >> item.isInv_   ;
 
    return is;
}
 
std::ostream & print(std::ostream & os, const Apt & item)
{
    os << item.aptNum_  << '\n';
    os << item.numPers_ << '\n';
    os << item.aptArea_ << '\n';
    os << item.stage_   << '\n';
    os << item.isVet_   << '\n';
    os << item.isInv_   << '\n';
 
    return os;
}
 
std::istream & operator>>(std::istream & is, Apt & item);
{
    is >> item.aptNum_  ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> item.numPers_ ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> item.aptArea_ ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> item.stage_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> item.isVet_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
    is >> item.isInv_   ;
    for (char ch; ch == ' ' || '\n'; ) is.get(ch);
 
    return is;
}
 
std::ostream & operator<<(std::istream & os, Apt & item);
{
    os << item.aptNum_  << '\n';
    os << item.numPers_ << '\n';
    os << item.aptArea_ << '\n';
    os << item.stage_   << '\n';
    os << item.isVet_   << '\n';
    os << item.isInv_   << '\n';
 
    return os;
}
 
Apt & Apt::operator=(const Apt & item)
{
    aptNum_  = item.aptNum_  ;
    numPers_ = item.numPers_ ;
    aptArea_ = item.aptArea_ ;
    stage_   = item.stage_   ;
    isVet_   = item.isVet_   ;
    isInv_   = item.isInv_   ;
 
    return *this;
}
 
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живёт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живёт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живёт выше
                return 0; // нет скидки за этажность
}
 
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv)
{
    int normTax;
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}


Добавлено через 1 час 30 минут
Не понимаю, почему не работает.
Выдаёт ошибку:
D:\0_0\CPP\cbProjects\task_\apartment(re sidential_taxes)_ver_2_2\main.cpp|104|er ror: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Apt')|

То есть в 104 строчке говорит temp не подходит в качестве аргумента для перегруженной функции operator=()

Бесячка. Чё теперь-то не так?

Добавлено через 12 часов 2 минуты
Всё ещё актуально. Решение пока не найдено. Помощь форумчан всё ещё была бы очень кстати.
0
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
18.09.2014, 07:50
При чем здесь равно.
В сообщении говорится, что нет перегрузки для оператора вывода (operator<<)
переменной типа Apt, т.е. надо написать метод
C++
1
friend std::ostream& operator<<(std::ostream&, const Apt&);
А у Вас есть
C++
1
friend std::ostream & operator<<(std::istream & os, Apt & item);
istream поменяйте на ostream!
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.09.2014, 10:11
Цитата Сообщение от zss Посмотреть сообщение
нет перегрузки для оператора вывода (operator<<)
Про равно это я опечатался. Имел ввиду конечно operator<<

Цитата Сообщение от zss Посмотреть сообщение
istream поменяйте на ostream!
Исправил, но не помогло. Ту же ошибку выдаёт:
D:\0_0\CPP\cbProjects\task_\apartment(re sidential_taxes)_ver_2_2\main.cpp|104|er ror: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Apt')|
Вот теперь в таком варианте (но всё равно, увы, не работает):

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/// apartment(residential_taxes)_ver_2_4
//  main.cpp
/*
Соглашения, терминология, условия:
01. Величина квартирного налога определяется количеством кв. метров площади,
    умноженную на тариф за 1 кв. метр.
02. Если в квартире имеется излишек площади относительно санитарной нормы он
    оплачивается по двойному тарифу.
03. Считайте что санитарная норма = 18 кв.метра на 1 человека.
04. Стоимость 1 кв.м. произвольная.
05. Если в квартире проживает 1 человек, то за площадь сверх санитарной нормы
    (если таковая имеется) он не платит.
06. Некоторым категориям жильцов положено льготы при оплате.
    Инвалиды имеют льготу в 25%, а ветераны ВОВ - 50%. Льготы считаются только
    на одного человека и не суммируются. То есть если жилец одновременно и
    инвалид и ветеран, при подсчётах принимается во внимание только большая
    льгота (за ветеранство, в нашем случае).
07. Для жильцов первых двух этажей имеется дополнительная скидка за
    то, что они не пользуются лифтом - для них квартирный налог снижен:
    для жителей 1 этажа на 20%, а для жителей 2 этажа на 10%.
08. Обратите внимание: дополнительная скидка (скидка за этажность) суммируется
    с основными льготами (льготы для инвалидов и ветеранов).
09. Не забудьте учесть возможное наличие излишков жилплощади.
10. Сумма квартирного налога с учётом всех льгот, скидок и вычетов
    называется фактическим тарифом.
11. Сумма квартирного налога без учёта  льгот, скидок, но с учётом вычетов
    называется общим тарифом.
12. Общей суммой квартирного налога называется сумма налога для всех жильцов
    дома.
 
Задача:
1. Найдите общую сумму квартирного налога по общему тарифу.
2. Найдите общую сумму квартирного налога по фактическому тарифу.
3. Найдите общую сумму всех льгот и скидок.
4. Найдите общее количество льготников.
5. Найдите сумму квартирного налога по общему тарифу всех инвалидов
   и ветеранов дома.
6. Найдите сумму квартирного налога по фактическому тарифу всех
   инвалидов и ветеранов дома.
7. Найдите квартиру с максимальной суммой квартирного налога по
   фактическому тарифу.
*/
 
#include <iostream>
#include <string>
#include <vector>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <windows.h>
#include "Apt.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    using std::vector;
    using std::ifstream;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vector <Apt> apartment;  // создаём массив квартир (это у нас будет один дом)
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
    Apt temp;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
        if (!fin.is_open())
            exit(EXIT_FAILURE);
 
        // используем созданный нами объект fin по аналогии с объектом cin
 
        for (char ch=0; ch = fin.get () != EOF; )
        {
            fin >> temp;
            apartment.push_back(temp);
        }
 
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
 
 
    for (size_t i=0; i < apartment.size(); ++i)
    {
        temp = apartment[i];
        cout << temp;
    }
 
 
    /*
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:";
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
    */
    return 0;
}


Apt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/// apartment(residential_taxes)_ver_2_4
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
    friend std::istream &  read(std::istream & is, Apt & item);
    friend std::ostream & print(std::ostream & os, const Apt & item);
 
    friend std::istream & operator>>(std::istream & is, Apt & item);
    friend std::ostream & operator<<(std::istream & os, Apt & item);
 
    private:
        const int SQ_M_TAX   = 100 ;   // налог за кв. метр
        const int NORM_AREA  = 18  ;   // количество кв. метров положенных на человека
        const int INV_REBATE = 4   ;   // льгота инвалидам
        const int VET_REBATE = 2   ;   // льгота ветеранам
        const int ST1_REBATE = 5   ;   // льгота живущим на первом этаже
        const int ST2_REBATE = 10  ;   // льгота живущим на втором этаже
        const int NO_REBATE  = 1   ;   // если не ветераны и не инвалиды (без льгот)
 
        int aptNum_ ;   // номер квартиры
        int numPers_;   // количество проживающих в квартире людей
        int aptArea_;   // количество квадратных метров в квартире
        int stage_  ;   // этаж
        bool isVet_ ;   // является ли жилец ветераном
        bool isInv_ ;   // является ли жилец инвалидом
 
    public:
        Apt & operator=(const Apt & item);
        int stage_rebate(int stage);                   // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);    // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);           // обычный тариф
        int res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv); // квартирный налог
};
 
#endif // APT_H


Apt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/// apartment(residential_taxes)_ver_2_4
//  Apt.cpp
#include <iostream>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include "Apt.h"
 
std::istream & read(std::istream &, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
    //for (char ch; ch == ' ' || '\n'; ) is.get(ch);
 
    return is;
}
 
std::ostream & print(std::ostream &, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
std::istream & operator>>(std::istream &, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
    //for (char ch; ch == ' ' || '\n'; ) is.get(ch);
 
    return is;
}
 
std::ostream & operator<<(std::ostream &, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
Apt & Apt::operator=(const Apt & item)
{
    aptNum_  = item.aptNum_  ;
    numPers_ = item.numPers_ ;
    aptArea_ = item.aptArea_ ;
    stage_   = item.stage_   ;
    isVet_   = item.isVet_   ;
    isInv_   = item.isInv_   ;
 
    return *this;
}
 
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живёт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живёт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живёт выше
                return 0; // нет скидки за этажность
}
 
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv)
{
    int normTax;
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}
0
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
18.09.2014, 10:28
А здесь почему не поменяли:
C++
1
2
3
4
class Apt
{
   ......
    friend std::ostream & operator<<(std::istream & os, Apt & item);
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.09.2014, 13:48
Итак, благодаря советам и внимательности уважаемого zss, готова версия 2.5. Пока всё ещё кривоватая, неоконченная, но уже работающая:

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/// apartment(residential_taxes)_ver_2_5
//  main.cpp
 
#include <iostream>
#include <string>
#include <vector>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <windows.h>
#include "Apt.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    using std::vector;
    using std::ifstream;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vector <Apt> apartment;  // создаём массив квартир (это у нас будет один дом)
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
    Apt temp;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
        if (!fin.is_open())
            exit(EXIT_FAILURE);
 
        // используем созданный нами объект fin по аналогии с объектом cin
 
        for (char ch=0; ch = fin.get () != EOF; )
        {
            fin >> temp;
            apartment.push_back(temp);
        }
 
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
 
 
    for (size_t i=0; i < apartment.size(); ++i)
    {
        temp = apartment[i];
        cout << temp;
        cout << endl;
    }
 
 
    /*
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:";
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
    */
    return 0;
}


Apt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/// apartment(residential_taxes)_ver_2_5
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
    friend std::istream &  read(std::istream & is, Apt & item);
    friend std::ostream & print(std::ostream & os, const Apt & item);
 
    friend std::istream & operator>>(std::istream & is, Apt & item);
    friend std::ostream & operator<<(std::ostream & os, const Apt & item);
 
    private:
        const int SQ_M_TAX   = 100 ;   // налог за кв. метр
        const int NORM_AREA  = 18  ;   // количество кв. метров положенных на человека
        const int INV_REBATE = 4   ;   // льгота инвалидам
        const int VET_REBATE = 2   ;   // льгота ветеранам
        const int ST1_REBATE = 5   ;   // льгота живущим на первом этаже
        const int ST2_REBATE = 10  ;   // льгота живущим на втором этаже
        const int NO_REBATE  = 1   ;   // если не ветераны и не инвалиды (без льгот)
 
        int aptNum_ ;   // номер квартиры
        int numPers_;   // количество проживающих в квартире людей
        int aptArea_;   // количество квадратных метров в квартире
        int stage_  ;   // этаж
        bool isVet_ ;   // является ли жилец ветераном
        bool isInv_ ;   // является ли жилец инвалидом
 
    public:
        Apt();      // конструктор по умолчанию
        ~Apt();     // деструктор
        Apt(int aptNum, int numPers, int aptArea, int stage, bool isVet, bool isInv); // конструктор
        Apt & operator=(const Apt & item);             // перегрузка оператора присваивания
        int stage_rebate(int stage);                   // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);    // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);           // обычный тариф
        int res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv); // квартирный налог
};
 
#endif // APT_H


Apt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/// apartment(residential_taxes)_ver_2_5
//  Apt.cpp
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include "Apt.h"
 
// Конструктор по умолчанию:
Apt::Apt()
{
        int aptNum_  = 0;     // номер квартиры
        int numPers_ = 0;     // количество проживающих в квартире людей
        int aptArea_ = 0;     // количество квадратных метров в квартире
        int stage_   = 0;     // этаж
        bool isVet_  = 0;     // является ли жилец ветераном
        bool isInv_  = 0;     // является ли жилец инвалидом
}
 
// Конструктор:
Apt::Apt(int aptNum, int numPers, int aptArea, int stage, bool isVet, bool isInv)
{
        int aptNum_  = aptNum;    // номер квартиры
        int numPers_ = numPers;   // количество проживающих в квартире людей
        int aptArea_ = aptArea;   // количество квадратных метров в квартире
        int stage_   = stage;     // этаж
        bool isVet_  = isVet;     // является ли жилец ветераном
        bool isInv_  = isInv;     // является ли жилец инвалидом
}
 
// Деструктор:
Apt::~Apt()
{
}
 
// Чтение из потока (для объектов навроде cin, fin и т.п.):
std::istream & read(std::istream & is, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
 
    return is;
}
 
// Запись в поток (для объектов навроде cout, fout и т.п.):
std::ostream & print(std::ostream & os, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
// Перегрузка оператора >>
std::istream & operator>>(std::istream & is, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
 
    return is;
}
 
// Перегрузка оператора <<
std::ostream & operator<<(std::ostream & os, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
// Перегрузка оператора =
Apt & Apt::operator=(const Apt & item)
{
    aptNum_  = item.aptNum_  ;
    numPers_ = item.numPers_ ;
    aptArea_ = item.aptArea_ ;
    stage_   = item.stage_   ;
    isVet_   = item.isVet_   ;
    isInv_   = item.isInv_   ;
 
    return *this;
}
 
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живёт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живёт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живёт выше
                return 0; // нет скидки за этажность
}
 
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv)
{
    int normTax;
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.09.2014, 13:48
Теперь другая проблема - выводятся данные не всего массива объектов, а только первого объекта.
0
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
18.09.2014, 14:14
Цитата Сообщение от gru74ik Посмотреть сообщение
Теперь другая проблема
Так ВЫ будете морочить людям голову очень долго.
Как по Вашему, для чего к компилятору прилагается отладчик?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.09.2014, 15:45
Цитата Сообщение от zss Посмотреть сообщение
Так ВЫ будете морочить людям голову очень долго.
Я никому не морочу голову. Никого ни к чему не принуждаю, ничего не требую. Кто имеет возможность/время/желание, тот помогает. Вам я крайне признателен за участие.

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

Цитата Сообщение от zss Посмотреть сообщение
для чего к компилятору прилагается отладчик?
Если честно, я ещё ни разу им не пользовался.
0
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
18.09.2014, 17:17
Отладчик надо знать как свои пять пальцев.
Это очень поможет сократить Вам время на создание приложения.
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.09.2014, 09:57
Цитата Сообщение от zss Посмотреть сообщение
Отладчик надо знать как свои пять пальцев.
Это очень поможет сократить Вам время на создание приложения.
Поищу как это делается. Благодарю за Ваши советы.

Добавлено через 15 часов 2 минуты
Итак, версия 2.6, работающая корректно. Пришлось убрать из текстового файла пустые строчки, чтоб не мешались под ногами.

main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/// apartment(residential_taxes)_ver_2_6
//  main.cpp
 
#include <iostream>
#include <string>
#include <vector>
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <windows.h>
#include "Apt.h"
 
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    using std::vector;
    using std::ifstream;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vector <Apt> apartment;  // создаём массив квартир (это у нас будет один дом)
 
    cout << "Желаете считать данные из текстового файла в массив? (да/нет): ";
    char userAnswer;
    cin >> userAnswer;   // записываем ответ пользователя
    while (cin.get() != '\n'); // освобождаемся от мусора в потоке
    Apt temp;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "Введите имя файла: ";
        string filename;        // house.txt
        getline(cin, filename);
        ifstream fin;           // создание объекта fin типа ifstream
 
        fin.open(filename);     // ассоциирование создание объекта fin
                                // c файлом filename
        if (!fin.is_open())
            exit(EXIT_FAILURE);
 
        // используем созданный нами объект fin по аналогии с объектом cin
 
        for (; ;)
        {
            fin >> temp;
            apartment.push_back(temp);
            if (fin.get() != EOF)
                continue;
            else
                break;
        }
 
        fin.close ();   // закрытие соединения ввода с файлом
    }
    else
    {
        cout << "Ваш ответ принят. Программа будет завершена.";
        return 0;
    }
 
 
    for (size_t i=0; i < apartment.size(); ++i)
    {
        temp = apartment[i];
        cout << temp;
        cout << endl;
    }
 
 
    /*
    cout << "Для обработки информации в массиве и вывода результатов\n"
            "на экран выберите один из пунктов меню:";
    // тут будет меню с оператором switch и возможность выбора пунктов меню
    // после выбора пользователем одного из вариантов, будет применён
    // соответствующий метод класса для подсчёта нужного значения и вывода
    // результата на экран монитора
    */
    return 0;
}


Apt.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/// apartment(residential_taxes)_ver_2_6
//  Apt.h
#ifndef APT_H
#define APT_H
 
class Apt
{
    friend std::istream &  read(std::istream & is, Apt & item);
    friend std::ostream & print(std::ostream & os, const Apt & item);
 
    friend std::istream & operator>>(std::istream & is, Apt & item);
    friend std::ostream & operator<<(std::ostream & os, const Apt & item);
 
    private:
        const int SQ_M_TAX   = 100 ;   // налог за кв. метр
        const int NORM_AREA  = 18  ;   // количество кв. метров положенных на человека
        const int INV_REBATE = 4   ;   // льгота инвалидам
        const int VET_REBATE = 2   ;   // льгота ветеранам
        const int ST1_REBATE = 5   ;   // льгота живущим на первом этаже
        const int ST2_REBATE = 10  ;   // льгота живущим на втором этаже
        const int NO_REBATE  = 1   ;   // если не ветераны и не инвалиды (без льгот)
 
        int aptNum_ ;   // номер квартиры
        int numPers_;   // количество проживающих в квартире людей
        int aptArea_;   // количество квадратных метров в квартире
        int stage_  ;   // этаж
        bool isVet_ ;   // является ли жилец ветераном
        bool isInv_ ;   // является ли жилец инвалидом
 
    public:
        Apt();      // конструктор по умолчанию
        ~Apt();     // деструктор
        Apt(int aptNum, int numPers, int aptArea, int stage, bool isVet, bool isInv); // конструктор
        Apt & operator=(const Apt & item);             // перегрузка оператора присваивания
        int stage_rebate(int stage);                   // скидка за этажность
        int overnorm_tax(int numPers, int aptArea);    // двойной тариф за лишние метры
        int norm_tax(const int SOME_REBATE);           // обычный тариф
        int res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv); // квартирный налог
};
 
#endif // APT_H


Apt.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/// apartment(residential_taxes)_ver_2_6
//  Apt.cpp
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include "Apt.h"
 
// Конструктор по умолчанию:
Apt::Apt()
{
        int aptNum_  = 0;     // номер квартиры
        int numPers_ = 0;     // количество проживающих в квартире людей
        int aptArea_ = 0;     // количество квадратных метров в квартире
        int stage_   = 0;     // этаж
        bool isVet_  = 0;     // является ли жилец ветераном
        bool isInv_  = 0;     // является ли жилец инвалидом
}
 
// Конструктор:
Apt::Apt(int aptNum, int numPers, int aptArea, int stage, bool isVet, bool isInv)
{
        int aptNum_  = aptNum;    // номер квартиры
        int numPers_ = numPers;   // количество проживающих в квартире людей
        int aptArea_ = aptArea;   // количество квадратных метров в квартире
        int stage_   = stage;     // этаж
        bool isVet_  = isVet;     // является ли жилец ветераном
        bool isInv_  = isInv;     // является ли жилец инвалидом
}
 
// Деструктор:
Apt::~Apt()
{
}
 
// Чтение из потока (для объектов навроде cin, fin и т.п.):
std::istream & read(std::istream & is, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
 
    return is;
}
 
// Запись в поток (для объектов навроде cout, fout и т.п.):
std::ostream & print(std::ostream & os, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
// Перегрузка оператора >>
std::istream & operator>>(std::istream & is, Apt & item)
{
    is >> item.aptNum_
       >> item.numPers_
       >> item.aptArea_
       >> item.stage_
       >> item.isVet_
       >> item.isInv_;
 
    return is;
}
 
// Перегрузка оператора <<
std::ostream & operator<<(std::ostream & os, const Apt & item)
{
    os << item.aptNum_  << '\n'
       << item.numPers_ << '\n'
       << item.aptArea_ << '\n'
       << item.stage_   << '\n'
       << item.isVet_   << '\n'
       << item.isInv_   << '\n';
 
    return os;
}
 
// Перегрузка оператора =
Apt & Apt::operator=(const Apt & item)
{
    aptNum_  = item.aptNum_  ;
    numPers_ = item.numPers_ ;
    aptArea_ = item.aptArea_ ;
    stage_   = item.stage_   ;
    isVet_   = item.isVet_   ;
    isInv_   = item.isInv_   ;
 
    return *this;
}
 
// Считаем дополнительную скидку за этажность:
int Apt::stage_rebate(int stage)
{
            if (stage == 1) // жилец живёт на 1 этаже
                return (NORM_AREA * SQ_M_TAX)/ST1_REBATE; // 20% скидка
            else if (stage == 2) // и живёт на 2 этаже
                return (NORM_AREA * SQ_M_TAX)/ST2_REBATE; // 10% скидка
            else // если живёт выше
                return 0; // нет скидки за этажность
}
 
// Считаем вычеты за площадь сверх санитарной нормы:
int Apt::overnorm_tax(int numPers, int aptArea)
{   // если жилец в квартире один
    if (numPers == 1)
        return 0; // не нужно платить за лишние кв. метры
 
    // если жильцов в квартире больше одного
    else // площадь сверх санитарной нормы умножаем на удвоенный тариф
        return (aptArea - (NORM_AREA * numPers)) * (SQ_M_TAX * 2);
}
 
// Считаем тариф за 1 кв. метр за вычетом льгот ветеранов и инвалидов:
int Apt::norm_tax(const int SOME_REBATE)
{
    return (NORM_AREA * SQ_M_TAX)/SOME_REBATE;
}
 
// Считаем итоговый квартирный налог:
int Apt::res_tax(int stageRebate, int overnormTax, bool isVet, bool isInv)
{
    int normTax;
    if (isVet == true) // если жилец ветеран (или и ветеран и инвалид одновременно)
        normTax = norm_tax(VET_REBATE);
 
    else if (isInv == true) // если не ветеран, но инвалид
        normTax = norm_tax(INV_REBATE);
 
    else // если не ветеран и не инвалид
        normTax = norm_tax(NO_REBATE);
 
    return normTax - stageRebate + overnormTax;
}


Теперь, когда всё заработало, займусь разработкой меню и методов, выполняющих подсчёты, согласно условиям ТЗ.

Добавлено через 6 минут
...
Вложения
Тип файла: txt house.txt (229 байт, 4 просмотров)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.09.2014, 10:02
На всякий пожарный прикреплю весь проект.
Вложения
Тип файла: zip aptartment(residential_taxes).zip (337.8 Кб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2014, 10:02

Как в теге <i> сделать надпись с учетом наличия иконки?
Добрый день , вот панель из ссылок, как вставить под каждым надпись? &lt;div class=&quot;col-md-12 col-sm-12&quot;...

Найти возможного халявщика
Здравствуйте! У меня есть интернет и для удобства (у меня несколько машинок) раздаю его по Wi-Fi через роутер D-Link DIR-320. И у меня...

В массиве А(35) найти минимум, определить его местоположение ( с учётом возможного повторения)
В массиве А(35) найти минимум, определить его местоположение ( с учётом возможного повторения). С++ Помогите пожалуйста!

Известны вероятность р1 возможного значения х1, математическое ожидание M[x]=13,6 и дисперсия D[x]=42,68. Найти закон распределения случайной величины
Задача: Дискретная случайная величина Х может принимать только два значения х1 и х2, причем х1&lt;x2. Известны вероятность р1...

Access запросы: подсчет жилплощади
Приветствую, я перерыл весь интернет никак не могу найти как сделать запрос который будет считать - Цена за единицу площади*площадь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru