Computing an electricity bill involves calculating the number of units consumed and allocating them to a variety of tariffs.
Tariffs are based on two components - a standing charge and a price per unit. There may be more than one price range - perhaps the first 50 units are charged at a higher rate than subsequent units.
Given that the initial tariffs offered are:
| Tariff | Costs | Price |
|---|---|---|
| A | Standing charge | 10.00 |
| First 80 units | .105 | |
| Subsequent units | .03 | |
| B | Standing charge | 3.00 |
| First 250 units | 0.10 | |
| Subsequent units | .075 | |
| C | Standing charge | NIL |
| All units | 0.125 |
Customers must choose the tariff they wish to be charged under. Design a program that accepts the number of units consumed and reports the most economic tariff.
C++.
#include <stdio.h>#include <stdlib.h> using namespace std; // iUnits = The total amount of units consumed// fStart = The standing charge// fSwitch = The amount that electricity switches to lower rate// fStandardRate = The high rate that applies to the first units// fLowRate = The low rate that applies to subsequent unitsfloat ic_CalculateCost(int iUnits, float fStart, float fSwitch, float fStandardRate, float fLowRate=0){ // stores the total float fCost = fStart; // work out the price for this tariff // see if they used enough units to use both brackets if (fSwitch && iUnits > fSwitch) { // the first few units are at standard rate fCost += fSwitch * fStandardRate; // remaining units at low rate fCost += (iUnits - fSwitch) * fLowRate; } else // all units at standard rate fCost += iUnits * fStandardRate; // return the total price return fCost; } int main(int argc, char *argv[]){ // convert the units to a number and store int iUnits = atoi(argv[1]); // this stores the prices for each company float fPrices[2]; // work out the price for tariff a fPrices[0] = ic_CalculateCost(iUnits, 10, 80, 0.105, 0.03); // work out the price for tariff b fPrices[1] = ic_CalculateCost(iUnits, 3, 250, 0.1, 0.075); // work out the price for tariff c fPrices[2] = ic_CalculateCost(iUnits, 0, 0, 0.125); // show all the total prices printf("Tariff A: %c%.2f\nTariff B: %c%.2f\nTariff C: %c%.2f", 156, fPrices[0], 156, fPrices[1], 156, fPrices[2]); } Excel formulas.
Tariff A:
=IF(A1 > 80, 10 + (80 * 0.105) + ((A1 - 80) * 0.03), 10 + (A1 * 0.105))
Tariff B:
=IF(A1 > 250, 3 + (250 * 0.1) + ((A1 - 250) * 0.075), 3 + (A1 * 0.1))
Tariff C:
=A1*0.125
The formulas above were then used to construct the following chart:

Tariff C is the best choice for less than 120 units. Tariff B is the best choice for 120 to 190 units. Tariff A is the best choice for more than 190 units.