A task: write a program to calculate the cost of electricity on the testimony of two-tariff electricity meter. There is a two-tariff electricity meter. Readings are taken at the end of the month. Data for calculating – the difference between the readings of the previous month and the current (day and night tariff.) Initial data:
- daily rate (with 7-00 am to 23-00);
- night charge (with 23-00 to 7-00 morning );
- The first tariff zone – to 100 kWh time: 0.456 UAH
- The second tariff zone – from 100 to 600 kWh time: 0.789 UAH
- A third tariff zone – over 600 kWh time: 1.479 UAH
- night charge – 50% of the value of each daily tariff zone
Decision:
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'); } |
The work program:
5.0
10
well yes, comments not for code, and “sample” from above the standard to which all should be equal …
Uh-huh, a bunch of variables nafig unnecessary. There was no separate conclusion on tariffs in the problem statement. If you had to make a receipt – this one, but getting the total amount is completely different.
But it doesn't matter.
You, excuse me, code check, before pouring ? The final numbers in the screenshot – obvious delirium. Checked by an elementary calculator.
To 100
Day 45,6 + night 11,4 = 57
После 100
Day 39,45
Total 96,45.
I agree. Already on 94 line of code appears some doubt about using the formula, what is it…
#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 UAH" << endl;
cout << "2. Вторая тарифная зона от 100 to 600 кВт*ч = 0.789 UAH" << endl;
cout << "3. Третья тарифная зона от 600 кВт*ч = 1.479 UAH" <> 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 UAH" << endl;
cout << "2. Вторая тарифная зона от 100 to 600 кВт*ч = 0.789 UAH" << endl;
cout << "3. Третья тарифная зона от 600 кВт*ч = 1.479 UAH" <> 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;
}