Задача: составить программу для расчета стоимости электроэнергии по показаниям двухтарифного электросчетчика. Имеется двухтарифный электросчетчик. Показания снимаются в конце месяца. Данные для расчета – разница между показаниями за предыдущий месяц и за текущий (дневного и ночного тарифа.) Исходные данные:
- Дневной тариф (с 7-00 утра до 23-00);
- Ночной тариф (с 23-00 до 7-00 утра );
- Первая тарифная зона – до 100 кВт*час: 0.456 грн
- Вторая тарифная зона – от 100 до 600 кВт*час: 0.789 грн
- Третья тарифная зона – свыше 600 кВт*час: 1.479 грн
- Ночной тариф – 50% от стоимости каждой дневной тарифной зоны
Решение:
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); cout << "Расчет стоимости электроэнергии двухтарифного электросчетчика" << endl; cout << "\t\t\t1.09.2015 " << endl; cout << "_____________________________________________________________" << endl; cout << " Ночной тариф 50% от стоимости каждой дневной тарифной зоны" << endl; cout << "\t________Стоимость по тарифным зонам_______ " << endl; cout << "" << endl; cout << "\t\tДо 100 кВт*час - 0.456 грн " << endl; cout << "" << endl; cout << "" << endl; cout << "\t\tОт 100-600 кВт*час - 0.789 грн " << endl; cout << "" << endl; cout << "" << endl; cout << "\t\tCвыше 600 кВт*час - 1.479 грн " << endl; cout << "____________________________________________________________ " << endl; char l; // переменная для продолжения или прекращения расчета int td1; // предыдущие показания День int td2; // настоящие показания День int qd; // разница показаний электросчетчика День int tn1; // предыдущие показания Ночь int tn2; // настоящие показания Ночь int qn; // разница показаний электросчетчика Ночь float q; // Суммарные показания День + Ночь float sd1; // Сумма до 100 кв День float sn1; // Сумма до 100 кв Ночь float sdn1; // Сумма до 100 кв День + Ночь float sd2; // Сумма от 100 до 600 кв День float sn2; // Сумма от 100 до 600 кв Ночь float sdn2; // Сумма от 100 до 600 кв День + Ночь float sd3; // Сумма более 600 кв День float sn3; // Сумма более 600 кв Ночь float sdn3; // Сумма более 600 кв День + Ночь float so; // сумма по всем тарифам float d = 0.456; // тариф до 100 кв float f = 0.789; // тариф от 100 до 600 кв float h = 1.479; // тариф от 600 кв do { cout << "Введите (День) предыдущие показания электросчетчика: "; cin >> td1; cout << "Введите (День) настоящие показания электросчетчика: "; cin >> td2; cout << "__________________________________________ " << endl; if (td2 == 0 || td2 <= td1) // Условие на проверку правильности ввода снятых показаний День { cout << "Проверьте показания электросчетчика !!!!" << endl; cout << "__________________________________________ " << endl; return 0; } cout << "__________________________________________ " << endl; cout << "Введите (Ночь) предыдущие показания электросчетчика: "; cin >> tn1; cout << "Введите (Ночь) настоящие показания электросчетчика: "; cin >> tn2; cout << "__________________________________________ " << endl; if (tn2 == 0 || tn2 <= tn1) // Условие на проверку правильности ввода снятых показаний Ночь { cout << "Проверьте показания электросчетчика !!!! " << endl; cout << "__________________________________________ " << endl; return 0; } qd = td2 - td1;// разница показаний электросчетчика День cout << "Всего День кВт*час : " << qd << endl; qn = tn2 - tn1;// разница показаний электросчетчика Ночь cout << "Всего Ночь кВт*час : " << qn << endl; q = qd + qn; cout << "Суммарные показания (День + Ночь ) кВт*час: " << q << endl; cout << "__________________________________________ " << endl; if (q > 600 && q != 600) // Тариф 3 { sd3 = (qd / q) * (q - 600) * h; // Сумма до 100 Кв День sn3 = (qn / q) * (q - 600) * (h / 2); // Сумма до 100 Кв Ночь sdn3 = sd3 + sn3; // Сумма до 100 кв День + Ночь cout << "Всего к оплате День + Ночь свыше 600 кВт*час (грн) : " << sdn3 << endl; cout << " " << endl; sd2 = (qd / q) * 500 * f; sn2 = (qn / q) * 500 * (f / 2); sdn2 = sd2 + sn2; cout << "Всего к оплате День + Ночь от 100 до 600 кВт*час (грн) : " << sdn2 << endl; cout << " " << endl; sd1 = (qd / q) * 100 * d; sn1 = (qn / q) * 100 * (d / 2); sdn1 = sd1 + sn1; cout << "Всего к оплате День + Ночь до 100 кВт*час (грн) : " << sdn1 << endl; cout << " " << endl; so = sdn3 + sdn2 + sdn1; cout << "__________________________________________ " << endl; cout << "Всего к оплате по всем тарифам !!! (грн) : " << so << endl; } if (q>100 && q <= 600) // Тариф 2 { sd2 = (qd / q) * (q - 100)*f; sn2 = (qn / q) * (q - 100)*(f / 2); sdn2 = sd2 + sn2; cout << "Всего к оплате День + Ночь от 100 до 600 кВт*час (грн) : " << sdn2 << endl; sd1 = (qd / q) * 100 * d; sn1 = (qn / q) * 100 * (d / 2); sdn1 = sd1 + sn1; cout << "Всего к оплате День + Ночь до 100 кВт*час (грн) : " << sdn1 << endl; so = sdn2 + sdn1; cout << "__________________________________________ " << endl; cout << "Всего к оплате по всем тарифам !!! (грн) : " << so << endl; } if (q <= 100 && q != 0) // Тариф 1 { sd1 = qd*d; sn1 = (qn*(d / 2)); sdn1 = sd1 + sn1; cout << "Всего к оплате День + Ночь до 100 кВт*час (грн.) : " << sdn1 << endl; so = sdn1; cout << "__________________________________________ " << endl; cout << "Всего к оплате по всем тарифам !!! (грн) : " << so << endl; } cout << "__________________________________________" << endl; cout << "Продолжить расчет дальше (y/n)? "; cin >> l; } while (l == 'y'); } |
Работа программы:
5.0
10
Ну да, комментарии не для кода, а “образец” сверху эталон на который должны равняться все …
Угу, куча переменных нафиг не нужных. В условии задачи не было отдельного вывода по тарифам. Если нужно было сделать квитанцию – это одно, а получить итоговую сумму это совсем другое.
Но это все не важно.
Вы, извините, код проверяете, перед тем как залить ? Итоговые цифры на скриншоте – явный бред. Проверяется элементарно калькулятором.
До 100
День 45,6 + ночь 11,4 = 57
После 100
День 39,45
Итого 96,45.
Согласен. Уже на 94 строке кода появляется какое-то сомнение в использовании формулы, что это…
#include
const double ZONEONE = 0.456; // 600 kWt
const int MINKWT = 100;
const int MAXKWT = 600;
struct ClientValue
{
int oldDate = 0;
int newDate = 0;
int resultDate = 0;
double totalPrice = 0;
};
struct DayOrNight
{
ClientValue day;
ClientValue night;
};
void kWtPerMounth(const int& newDate, const int& oldDate, int& result);
void CinOldValue(int& oldValue);
void CinNewValue(int& newValue, const int& oldValue);
void CalculateDay(const int& resultPerMounth, double& totalPrice);
void CalculateNight(const int& resultPerMounth, double& totalPrice);
void Show(const DayOrNight& clientDate);
int main()
{
std::cout << "Enter value of multi-tariff (multi-zone) means of accounting.\n" << "Please enter a old day value: \n";
DayOrNight clientDate;
CinOldValue(clientDate.day.oldDate);
std::cout << "Please enter a new day value: \n";
CinNewValue(clientDate.day.newDate, clientDate.day.oldDate);
std::cout << "Please enter a old night value: \n";
CinOldValue(clientDate.night.oldDate);
std::cout <> oldValue;
while (oldValue <= 0)
{
std::cout << "Value < 0.\n" <> oldValue;
}
}
void CinNewValue(int& newValue, const int& oldValue)
{
std::cin >> newValue;
while (newValue <= oldValue)
{
std::cout << "New value cant be > newValue;
}
}
void CalculateDay(const int& resultPerMounth, double& totalPrice)
{
if (resultPerMounth MINKWT && resultPerMounth < MAXKWT)
totalPrice = resultPerMounth * ZONETWO;
else
totalPrice = resultPerMounth * ZONETHREE;
}
void CalculateNight(const int& resultPerMounth, double& totalPrice)
{
if (resultPerMounth MINKWT && resultPerMounth < MAXKWT)
totalPrice = resultPerMounth * ZONETWO / 2;
else
totalPrice = resultPerMounth * ZONETHREE / 2;
}
void Show(const DayOrNight& clientDate)
{
std::cout << "Your old date for day is: " << clientDate.day.oldDate << " kWt/month.\n";
std::cout << "Your new date for day is: " << clientDate.day.newDate << " kWt/month.\n";
std::cout << "Your old date for nigth is: " << clientDate.night.oldDate << " kWt/month.\n";
std::cout << "Your new date for nigth is: " << clientDate.night.newDate << " kWt/month.\n";
std::cout << "Your month result for day is: " << clientDate.day.resultDate << " kWt/month.\n";
std::cout << "Your month result for nigth is: " << clientDate.night.resultDate << " kWt/month.\n";
std::cout << "Your may pay for day is: " << clientDate.day.totalPrice << " UAH.\n";
std::cout << "Your may pay for nigth is: " << clientDate.night.totalPrice << " UAH.\n";
}
Я посмотрел решение после того как написал свой код и ужаснулся. Автор сам то разберется в логике своей программы через год? Зачем столько условий и переменных?
Вот мой код(извините что без поясняющих комментариев)
#include
using namespace std;
double tarzone1(int wattday, int wattnight)
{
double night = (0.456 / 2)* wattnight;
double day = wattday * 0.456;
double summ = night + day;
return summ;
}
double tarzone2(int wattday, int wattnight)
{
double night = (0.789 / 2) * wattnight;
double day = wattday * 0.789;
double summ = night + day;
return summ;
}
double tarzone3(int wattday, int wattnight)
{
double night = (1.479 / 2) * wattnight;
double day = wattday * 1.479;
double summ = night + day;
return summ;
}
int main()
{
setlocale(LC_ALL, “RU”);
int wattday;
int wattnight;
cout <> wattday;
cout <> wattnight;
double summ;
if ((wattday + wattnight) < 100)
{
summ = tarzone1(wattday, wattnight);
}
if ((wattday + wattnight) || (wattday + wattnight) 600)
summ = tarzone3(wattday, wattnight);
cout << "К оплате " << summ << endl;
cout << "До свидания" << endl;
return 0;
}
#include
using namespace std;
void logic(int chose, int chose2, int chose3, float t1, float t2, float t3) {
if (chose == 1) {
if (chose2 == 1)
cout << chose3*t1 << endl;
if (chose2 == 2)
cout << chose3*t2 << endl;
if (chose2 == 3)
cout << chose3*t3 << endl;
if (chose2 != 1 || chose3 != 2 || chose3 != 3)
cout << "Не верная тарифная зона, попробуйте ещё раз" << endl;
}
if (chose == 2) {
if (chose2 == 1)
cout << chose3*(t1/2) << endl;
if (chose2 == 2)
cout << chose3*(t2/2) << endl;
if (chose2 == 3)
cout << chose3*(t3/2) << endl;
if (chose2 != 1 || chose3 != 2 || chose3 != 3)
cout << "Не верная тарифная зона, попробуйте ещё раз" << endl;
}
}
void main() {
int chose, chose2, chose3;
float t1 = 0.456, t2 = 0.789, t3 = 1.479;
do {
do {
cout << "тариф дневной или ночной? 1 – дневной 2 – ночной" <> chose;
if (chose != 1 || chose != 2) {
cout << "ошибка, выберите только 1 или 2" << endl;
}
}while(chose != 1 || chose !=2);
cout << "Какая тарифная зона? выберите от 1-3" << endl << endl;
cout << "1. Первая тарифная зона до 100 кВт*ч = 0.456 грн" << endl;
cout << "2. Вторая тарифная зона от 100 до 600 кВт*ч = 0.789 грн" << endl;
cout << "3. Третья тарифная зона от 600 кВт*ч = 1.479 грн" <> chose2;
cout << "На сколько киловат эннергии вы хотите рассчитать?" <> chose3;
logic(chose, chose2, chose3, t1, t2, t3);
}while(chose != 3);
}
Вот переделал на нормальный, но всё равно код так себе, недоделка, делал быстро. Например нету выхода из программы.
#include
using namespace std;
void logic(int chose, int chose2, int chose3, float t1, float t2, float t3) {
if (chose == 1) {
if (chose2 == 1 || chose2 == 2 || chose2 == 3)
if (chose2 == 1)
cout << chose3*t1 << endl;
if (chose2 == 2)
cout << chose3*t2 << endl;
if (chose2 == 3)
cout << chose3*t3 << endl;
}
if (chose == 2) {
if (chose2 == 1 || chose2 == 2 || chose2 == 3)
if (chose2 == 1)
cout << chose3*(t1/2) << endl;
if (chose2 == 2)
cout << chose3*(t2/2) << endl;
if (chose2 == 3)
cout << chose3*(t3/2) << endl;
}
}
int main() {
int chose, chose2, chose3;
float t1 = 0.456, t2 = 0.789, t3 = 1.479;
do {
do {
cout << "тариф дневной или ночной? 1 – дневной 2 – ночной" <> chose;
if (chose 2) {
cout << "ошибка, выберите только 1 или 2" << endl;
}
}while(chose 2);
do {
cout << "Какая тарифная зона? выберите от 1-3" << endl << endl;
cout << "1. Первая тарифная зона до 100 кВт*ч = 0.456 грн" << endl;
cout << "2. Вторая тарифная зона от 100 до 600 кВт*ч = 0.789 грн" << endl;
cout << "3. Третья тарифная зона от 600 кВт*ч = 1.479 грн" <> chose2;
}while(chose2 3);
cout << "На сколько киловат эннергии вы хотите рассчитать?" <> chose3;
if (chose3 chose3)
return 0;
else
logic(chose, chose2, chose3, t1, t2, t3);
cout << endl;
}while(chose != 3);
return 0;
}
Все написано как можно проще для самого начинающего!
#include
float Part(float& pd, float& pn, float& d, float& n)
{
float result = 0;
if ((d – pd) >= (n – pn))
{
result = (n – pn) / ((n – pn) + (d – pd));
}
else if ((d – pd) < (n – pn))
{
result = (d – pd) / ((n – pn) + (d – pd));
}
std::cout << result << " = result part " <= (Night – PNight))
{
day = Kw – (Kw * part);
night = Kw – day;
}
else if ((Day – PDay) <= (Night – PNight))
{
night = Kw – (Kw * part);
day = Kw – night;
}
return (day * Price) + (night * (Price / 2));
}
int main()
{
float f = 0.456, s = 0.789, t = 1.479;
float PastDay(0), PastNight(0);
std::cout <> PastDay >> PastNight;
float Day(0), Night(0);
std::cout << std::endl <> Day >> Night;
std::cout < 0)
{
float result (0);
float under_600 (0);
float under_100 (0);
float under_0 (0);
if (Kwt > 600)
{
result = Kwt – 600;
under_600 = Calculate_Parts(part, t, result, PastDay, PastNight, Day, Night);
std::cout << under_600 < 600″ < 100 && Kwt <= 600)
{
result = Kwt – 100;
under_100 = Calculate_Parts(part, s, result, PastDay, PastNight, Day, Night);
std::cout << under_100 < 100 до 600″ << std::endl;
Kwt = 100;
}
if (Kwt <= 100)
{
under_0 = Calculate_Parts(part, f, Kwt, PastDay, PastNight, Day, Night);
std::cout << under_0 < 0″ << std::endl;
}
std::cout << "Total = " << under_0 + under_100 + under_600 << std::endl;
}
else std::cout << "0 kwt = 0! ";
return 0;
}