Задача: скласти програму для розрахунку вартості електроенергії за показаннями двотарифного електролічильника. Є двохтарифний електролічильник. Показання знімаються в кінці місяця. Дані для розрахунку – різниця між показаннями за попередній місяць і за поточний (денного і нічного тарифу.) Початкові дані:
- денний тариф (з 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;
порожня логіка(внутр. вибрав, int chose2, int chose3, float t1, float t2, float t3) {
if (вибрав == 1) {
if (вибрав2 == 1)
cout << вибрав3*t1 << endl;
if (вибрав2 == 2)
cout << вибрав3*t2 << endl;
if (вибрав2 == 3)
cout << вибрав3*t3 << endl;
if (вибрав2 != 1 || вибрав3 != 2 || вибрав3 != 3)
cout << "Не верная тарифная зона, спробуйте ще раз" << endl;
}
if (вибрав == 2) {
if (вибрав2 == 1)
cout << вибрав3*(t1/2) << endl;
if (вибрав2 == 2)
cout << вибрав3*(t2/2) << endl;
if (вибрав2 == 3)
cout << вибрав3*(t3/2) << endl;
if (вибрав2 != 1 || вибрав3 != 2 || вибрав3 != 3)
cout << "Не верная тарифная зона, спробуйте ще раз" << endl;
}
}
void main() {
внутр. вибрав, вибрав2, вибрав3;
float t1 = 0.456, t2 = 0.789, t3 = 1.479;
do {
do {
cout << "тариф дневной или ночной? 1 – денний 2 – нічний" <> вибрав;
if (вибрав != 1 || вибрав != 2) {
cout << "ошибка, виберіть тільки 1 або 2" << endl;
}
}while(вибрав != 1 || вибрав != 2);
cout << "Какая тарифная зона? виберіть від 1-3" << endl << endl;
cout << "1. Перша тарифна зона до 100 кВт*год = 0.456 грн" << endl;
cout << "2. Друга тарифна зона від 100 до 600 кВт*год = 0.789 грн" << endl;
cout << "3. Третя тарифна зона від 600 кВт*год = 1.479 грн" <> вибрав2;
cout << "На сколько киловат эннергии вы хотите рассчитать?" <> вибрав3;
логіка(вибрав, вибрав2, вибрав3, t1, t2, t3);
}while(вибрав != 3);
}
Ось переробив на нормальний, але все одно код так собі, недоробка, робив швидко. Наприклад, немає виходу з програми.
#include
using namespace std;
порожня логіка(внутр. вибрав, int chose2, int chose3, float t1, float t2, float t3) {
if (вибрав == 1) {
if (вибрав2 == 1 || вибрав2 == 2 || вибрав2 == 3)
if (вибрав2 == 1)
cout << вибрав3*t1 << endl;
if (вибрав2 == 2)
cout << вибрав3*t2 << endl;
if (вибрав2 == 3)
cout << вибрав3*t3 << endl;
}
if (вибрав == 2) {
if (вибрав2 == 1 || вибрав2 == 2 || вибрав2 == 3)
if (вибрав2 == 1)
cout << вибрав3*(t1/2) << endl;
if (вибрав2 == 2)
cout << вибрав3*(t2/2) << endl;
if (вибрав2 == 3)
cout << вибрав3*(t3/2) << endl;
}
}
int main() {
внутр. вибрав, вибрав2, вибрав3;
float t1 = 0.456, t2 = 0.789, t3 = 1.479;
do {
do {
cout << "тариф дневной или ночной? 1 – денний 2 – нічний" <> вибрав;
if (вибрав 2) {
cout << "ошибка, виберіть тільки 1 або 2" << endl;
}
}while(вибрав 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 грн" <> вибрав2;
}while(вибрав2 3);
cout << "На сколько киловат эннергии вы хотите рассчитать?" <> вибрав3;
if (вибрав3 вибрав3)
return 0;
else
логіка(вибрав, вибрав2, вибрав3, t1, t2, t3);
cout << endl;
}while(вибрав != 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 << " = частина результату " <= (ніч – Ніч))
{
день = кВт – (кВт * частина);
ніч = кВт – день;
}
else if ((День – PDay) <= (ніч – Ніч))
{
ніч = кВт – (кВт * частина);
день = кВт – ніч;
}
return (день * Ціна) + (ніч * (Ціна / 2));
}
int main()
{
float f = 0.456, s = 0.789, t = 1.479;
float PastDay(0), Минула ніч(0);
std::cout <> Минулий день >> Минула ніч;
день поплавця(0), ніч(0);
std::cout << std::endl <> День >> ніч;
std::cout < 0)
{
результат з плаваючою точкою (0);
float under_600 (0);
float under_100 (0);
float under_0 (0);
if (розд > 600)
{
результат = кВт – 600;
under_600 = Обчислити_частини(частина, T, result, Минулий день, Минула ніч, День, ніч);
std::cout << під_600 < 600″ < 100 && розд <= 600)
{
результат = кВт – 100;
under_100 = Обчислити_частини(частина, s, result, Минулий день, Минула ніч, День, ніч);
std::cout << під_100 < 100 до 600″ << std::endl;
Розділ = 100;
}
if (розд <= 100)
{
under_0 = Обчислити_частини(частина, f, розд, Минулий день, Минула ніч, День, ніч);
std::cout << під_0 < 0″ << std::endl;
}
std::cout << "Total = " << під_0 + під_100 + під_600 << std::endl;
}
інакше станд::cout << "0 розділ = 0! ";
return 0;
}