Задача: составить программу для расчета стоимости электроэнергии по показаниям двухтарифного электросчетчика. Имеется двухтарифный электросчетчик. Показания снимаются в конце месяца. Данные для расчета – разница между показаниями за предыдущий месяц и за текущий (дневного и ночного тарифа.) Исходные данные:
- Дневной тариф (с 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
Добрый день. Хочу показать вам мой вариант решения. Мне кажется, он несколько попроще, предложенного выше.
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
int lastmonthday(0), lastmonthnight(0), monthday(0), monthnight(0), day(0), night(0);
double money(0);
do
{
cout < < lastmonthday; cout << monthday; cout << lastmonthnight; cout << monthnight; day = 0; night = 0; if (monthday > lastmonthday) day = monthday - lastmonthday;
else cout < < " Неверные дневные показания!!! Текущие меньше конечных!!!"; if (monthday < lastmonthnight) night = monthnight - lastmonthnight; else cout << " Неверные ночные показания!!! Текущие меньше конечных!!!" << endl; } while ((day == 0) || (night == 0)); cout << "______________________________________" << endl; cout << " Всего день кВт*ч = " << day << endl; cout << " Всего ночь кВт*ч = " << night << endl; cout << "______________________________________" << endl; cout << " дневной тариф до 100 кВт*ч 0.456 грн " <= 100) { money = 100 * 0.456; cout << " сумма за сто дневных кВт*ч = " << 100 * 0.456 << endl; } else { money = day*0.456; cout << " сумма за " << day << " дневных кВт*ч = " << day*0.456 <= 600) { cout << " дневной тариф от 100 до 600 кВт*ч 0.789 грн " << endl; money += ((500 * 0.789) + (day - 600)*1.479); cout << " сумма за 500 дневных кВт*ч = " << 500 * 0.789 <100)&(day<600)) { cout << " дневной тариф от 100 до 600 кВт*ч 0.789 грн " << endl; cout << " сумма за " << day - 100 << " дневных кВт*ч = " << (day - 100)*0.789 <600) { cout << " дневной тариф от 600 кВт*ч 1.479 грн " << endl; cout << " сумма за " << day - 600 << " кВт*ч превышения составила " << (day - 600)*1.479 << endl; } cout << "_____________________________________________" << endl; cout << " ночной тариф до 100 кВт*ч " << 0.456 / 2 << " грн " <= 100) { money += 100 * (0.456 / 2); cout << " сумма за сто ночных кВт*ч = " << 100 * (0.456 / 2) << endl; } else { money += night*0.456 / 2; cout << " сумма за " << night << " ночных кВт*ч = " << night*0.456 / 2 <= 600) { cout << " ночной тариф от 100 до 600 кВт*ч " << 0.789 / 2 << " грн " << endl; money += ((500 * 0.789 / 2) + (night - 600)*1.479 / 2); cout << " сумма за 500 ночных кВт*ч = " << 500 * 0.789 / 2 <100)&(night<600)) { cout << " ночной тариф от 100 до 600 кВт*ч 0.789 грн " << endl; cout << " сумма за " << night - 100 << " ночных кВт*ч = " << (night - 100)*0.789 / 2 <600) { cout << " ночной тариф от 600 кВт*ч 1.479 грн " << endl; cout << " сумма превышение за " << (night - 600) << " ночныхх кВт*ч = " << (night - 600)*1.479 / 2 << endl; } cout << "_________________________________________________" << endl; cout << "Общая сумма к выплате = " << money << " грн" << endl; return 0; }
И еще вопрос к создателю задачи: зачем в условии указано время когда считаются дневные, а когда ночные кВт*ч. Думала, куда это можно всунуть, в for что ли чтобы от начального значения до конечного считать сутки и делить показания на день и ночь. Но решила не мудрить. И в итоге в вашем решении не увидела применения этих данных. Так вот и вопрос – зачем? Наверное, чтобы порадовать мозг новой информацией и заставить немного задуматься о сути данных :)
Спасибо большое за задачу.
мне кажется что моя программа немного полегче, но вроде как считает также, если я не права, поправьте пожалуйста.
int main()
{
using namespace std;
float tec=0;
float pred =0;
float tecc=0;
float predd =0;
float pervaya = 0.456;
float vtoraya = 0.789;
float tretiya = 1.479;
float sum=0;
float summ=0;
float s=0;//cумма день
float h=0;//сумма ночь
cout<<tec;
cout<<pred;
sum=tec-pred;
cout<<"- - - - - - - - - - - - - - - - - -"<<endl;
cout<>tecc;
cout<>predd;
summ=tecc-predd;
cout<<endl;
cout<<"- - - - - - - - - - - - - - - - - - -"<<endl;
cout<<"Vashi pocazaniya den "<<sum<<endl;
cout<<"Vashi pocazaniya noh "<<summ<<endl;
if (sum<100)
{
s=sum*pervaya;
cout<<"pokazaniya den, tarif <100, k oplate ";
cout<
100||sum<600){
s=sum*vtoraya;
cout<<"pokazaniya den, tarif 100-600, k oplate ";
cout<
600){
s=sum*tretiya;
cout<600, k oplate ";
cout<<s;
}
cout<<endl;
if (summ<100)//считаю ночь
{
h=summ*(pervaya/2);
cout<<"pokazaniya noh, tarif <100, k oplate ";
cout<100||summ<600)
{
h=summ*(vtoraya/2);
cout<<"pokazaniya noh, tarif 100-600, k oplate ";
cout<600)
{
h=summ*(tretiya/2);
cout<600, k oplate ";
cout<<h;
}
cout<<endl;
cout<<s+h;
return 0;
}
Невнимательный, извиняюсь, то что выше можно удалить )
Плюшки вроде текста с информацией и цикл while для повтора, можно допилить самостоятельно, решение:
Эмм… чет как-то кривовато работает ваш тег предформатированного текста…
Режет половину текста… (
Если прокатит, то вот сама функция подсчета:
double summ(double value)
{
double result = 0;
double do100 = 0.456;
double do600 = 0.789;
double ot600 = 1.479;
if (value > 600)
{
result += ((value – 599) * ot600);
value = value – (value – 599);
}
if (value > 100)
{
result += ((value – 99) * do600);
value = value – (value – 99);
}
result += (value * do100);
return result;
}
ночной и дневной тариф считаются, одинаково, при выводе делим ночной на 2 и суммируем результаты…
Не пишите в комментарии свой код!
Он никому здесь не нужен, комментарии делались вовсе не для этого.
А зачем нужны комментарии? Разве не для того, чтобы делиться своими решениями?
И для тех, кто не заметил: неверно написано решение примера с точки зрения здоровой математики. Зачем суммировать дневной и ночной тарифы в кВт? Правильно посчитать кол-во дневных * на тариф этой зоны + кол-во ночных*на тариф соответствующей зоны.
В условии же сказано “Ночной тариф – 50% от стоимости КАЖДОЙ дневной тарифной зоны”.
Поля комментариев – для того, чтобы иметь возможность спросить что-то по тонким вопросам синтаксиса, по составу библиотек, использованию конструкций, плюсах и минусах тех или иных конструкций … и мн. мн. ещё о чём относительно языка C++.
Но, во-первых, движок сайта не позволяет нормально вписать сюда код (он его искажает!).
А во-вторых (и это главное!), кому интересны здесь пЫанЭрские изыски начинающих? И на что они рассчитывают? – что кто-то будет оценивать и давать рецензию этим попыткам?
Посмотрите, пожалуста, мой говнокод и скажите справился или нет с поставленой задачей огромное спосибо за ваше внимание
#include
#include
using namespace std;
int main() {
setlocale(LC_ALL,”rus”);
cout << "\t ***Калькулятор Електричиства***" << endl;
cout << "\t*********************************"<< endl;
cout << "_________________________________________"<< endl;
cout << "Введите количиство киловат в дневной час \n" ;
double KBt = 0;
double a = 0.456;//стоимость до 100 квт
double b = 0.789;//Вартысть вид 100 до 600 квт
double c = 1.479;//вартысть вища за 600
double z = 0;
char exsit = 'y';
double bulo = 0;
double stalo = 0;
double ruznica(0);
while(exsit == 'y'){
cout << "Введите прошлий показатель \n" <> bulo;
if(bulo <= 0){
cout <<" \t\tОшибка! Вы ввели штото не то \n" <> exsit;
}else
cout << "Введите сталое показание \n" <> stalo;
if(stalo <= 0){
cout <<" \t\tОшибка! Вы ввели штото не то \n" <> exsit;
}
else if(bulo < stalo){
ruznica = stalo – bulo;
}
else
ruznica = bulo -stalo;
if(ruznica 101 )&&(ruznica 601){
z = ruznica * c;
}
else
cout << "ERROR! ";
cout << "У вас " << ruznica << " KBt за днивное время" << endl;
cout << "*******************************************"<< endl;
cout << "_________________________________________"<< endl;
//double KBt1 = 0;
double a1 = a/2;//стоимость до 100 квт
double b1 = b/2;//Вартысть вид 100 до 600 квт
double c1 = c/2;//вартысть вища за 600
double z1 = 0;
//***___________****_________
double bulo1 = 0;
double stalo1 = 0;
double ruznica1(0);
cout << "Введите количиство киловат в ночной час \n" ;
cout << "Введите прошлий показатель \n" <> bulo1;
if(bulo1 <= 0){
cout <<" \t\tОшибка! Вы ввели штото не то \n" <> exsit;
}else
cout << "Введите сталое показание \n" <> stalo1;
if(stalo1 <= 0){
cout <<" \t\tОшибка! Вы ввели штото не то \n" <> exsit;
}
else if(bulo1 < stalo1){
ruznica1 = stalo1 – bulo1;
}
else
ruznica1 = bulo1 -stalo1;
if(ruznica1 101 )&&(ruznica1 601){
z = ruznica1 * c1;
}
else
cout << "ERROR! ";
cout << "У вас " << ruznica1 << " KBt за ночное время" << endl;
KBt = z + z1;
cout << "Вам нужно сплатить " << KBt << " грн." << endl;
cout <> exsit;
// _getch();
}
return 0;
}
Если чо я писал на тилифоне прогой
CppDroid – C / C ++ IDE для Android.