Задача: скласти програму для розрахунку вартості електроенергії за показаннями двотарифного електролічильника. Є двохтарифний електролічильник. Показання знімаються в кінці місяця. Дані для розрахунку – різниця між показаннями за попередній місяць і за поточний (денного і нічного тарифу.) Початкові дані:
- денний тариф (з 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 кВт
const int MINKWT = 100;
const int MAXKWT = 600;
struct ClientValue
{
int oldDate = 0;
int newDate = 0;
int resultDate = 0;
подвійна загальна ціна = 0;
};
struct DayOrNight
{
День ClientValue;
ClientValue ніч;
};
void kWtPerMounth(const int& newDate, const int& oldDate, int& result);
void CinOldValue(int& oldValue);
void CinNewValue(int& нове значення, const int& oldValue);
недійсний CalculateDay(const int& результат за місяць, double& Загальна сума);
void CalculateNight(const int& результат за місяць, double& Загальна сума);
void Show(const DayOrNight& clientDate);
int main()
{
std::cout << "Enter value of multi-tariff (багатозонний) засоби обліку.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& нове значення, const int& oldValue)
{
std::cin >> нове значення;
while (нове значення <= старе значення)
{
std::cout << "New value cant be > нове значення;
}
}
недійсний CalculateDay(const int& результат за місяць, double& Загальна сума)
{
if (результат за місяць MINKWT && результат за місяць < MAXKWHT)
totalPrice = resultPerMounth * ZONETWO;
else
totalPrice = resultPerMounth * ЗОНА ТРЕТЯ;
}
void CalculateNight(const int& результат за місяць, double& Загальна сума)
{
if (результат за місяць MINKWT && результат за місяць < MAXKWHT)
totalPrice = resultPerMounth * ZONETWO / 2;
else
totalPrice = resultPerMounth * ЗОНА ТРЕТЯ / 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;
подвійний тарзон1(int wattday, int wattnight)
{
подвійна ніч = (0.456 / 2)* wattnight;
подвійний день = ватдень * 0.456;
подвійна сума = ніч + день;
сума повернення;
}
подвійний тарзон2(int wattday, int wattnight)
{
подвійна ніч = (0.789 / 2) * wattnight;
подвійний день = ватдень * 0.789;
подвійна сума = ніч + день;
сума повернення;
}
подвійний тарзон3(int wattday, int wattnight)
{
подвійна ніч = (1.479 / 2) * wattnight;
подвійний день = ватдень * 1.479;
подвійна сума = ніч + день;
сума повернення;
}
int main()
{
setlocale(LC_ALL, “RU”);
int wattday;
int wattnight;
cout <> ватний день;
cout <> wattnight;
double summ;
if ((ватний день + wattnight) < 100)
{
summ = tarzone1(ватний день, wattnight);
}
if ((ватний день + wattnight) || (ватний день + wattnight) 600)
summ = tarzone3(ватний день, 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& пн, float& d, float& n)
{
результат з плаваючою точкою = 0;
if ((d – pd) >= (n – пн))
{
результат = (n – пн) / ((n – пн) + (d – pd));
}
else if ((d – pd) < (n – пн))
{
результат = (d – pd) / ((n – пн) + (d – pd));
}
std::cout << result << " = result part " <= (Night – PNight))
{
day = Kw – (Kw * part);
night = Kw – день;
}
else if ((Day – PDay) <= (Night – PNight))
{
night = Kw – (Kw * part);
day = Kw – night;
}
return (день * 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)
{
результат з плаваючою точкою (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;
}