Code:
#include <stdio.h>
#include<math.h>
#include<stdlib.h>
#define NROWS 12
#define NCOLS 24
#define INSTALLATION_COST 2000
/* Declare global variables */
float panelEfficiency = 0.18, inverterEfficiency = 0.90;
/* Function parameters */
void get_inputs(float *ptr_to_dailyEnergy, float *ptr_to_panelCost, float *ptr_to_batteryCost, float *ptr_to_inverterCost);
float fillInInsolation(float insolation_Matrix[NROWS][NCOLS], float *ptr_to_row);
float calculate_insolHourMax(float insolation_Matrix[NROWS][NCOLS], float insolHourMax);
void get_inputs(float *ptr_to_dailyEnergy, float *ptr_to_panelCost, float *ptr_to_batteryCost, float *ptr_to_inverterCost)
{
float dailyEnergy, panelCost, batteryCost, inverterCost;
while(dailyEnergy = 0 || panelCost >= 0 || batteryCost >= 0 || inverterCost >= 0)
{
printf("This program will calculate the total cost of your solar panel system.");
printf("Enter the daily required amount of energy for your house, in kWh : \n");
scanf("%f", dailyEnergy);
*ptr_to_dailyEnergy = dailyEnergy;
printf("Please enter the cost for solar panels, ($/m^2): \n");
scanf("%f", panelCost);
*ptr_to_panelCost = panelCost;
printf("Please enter the cost for one battery, ($): \n");
scanf("%f", batteryCost);
*ptr_to_batteryCost = batteryCost;
printf("Please enter the cost for one inverter, ($): \n");
scanf("%f", inverterCost);
*ptr_to_inverterCost = inverterCost;
if(dailyEnergy < 0 || panelCost < 0 || batteryCost < 0 || inverterCost < 0)
{
printf("Your numbers must all be positive\n");
}
}
return;
}
float fillInInsolation(float insolation_Matrix[NROWS][NCOLS], float *ptr_to_row)
{
float insolationConstant[NROWS] = {0.142, 0.207, 0.298, 0.389, 0.456, 0.483, 0.467, 0.410, 0.326, 0.234, 0.158, 0.124};
float insolDaySum = 0, insolDayMin = 100000000000000000000.0;
int i = *ptr_to_row, j;
for(j = 0; j < NCOLS; i++)
{
if((j > 6) && (j < 18))
{
*(ptr_to_row + j) = 2.0 * insolationConstant[i] * cos (0.2618 * (j - 12.0));
}
else
{
*(ptr_to_row + j) = 0;
}
insolDaySum += *(ptr_to_row + j);
}
if(insolDaySum < insolDayMin)
{
insolDayMin = insolDaySum;
}
return insolDayMin;
}
float calculate_insolHourMax(float insolation_Matrix[NROWS][NCOLS], float insolHourMax)
{
int i, j;
insolHourMax = 0;
for(i = 0; i < NROWS; i++)
{
for (j = 0; j < NCOLS; j ++)
{
if(insolation_Matrix[i][j] > insolHourMax)
{
insolHourMax = insolation_Matrix[i][j];
}
}
}
return insolHourMax;
}
int main()
{
int numBatteries, numInverters, quit = 0;
float ptr_to_dailyEnergy, ptr_to_panelCost, ptr_to_batteryCost, ptr_to_inverterCost,
ptr_to_row, panelArea, batteryRating = 4.8, inverterRating = 5.0,
insolDayMin, maxHourPanelOutput, insolHourMax, totalCost,
houseEnergyREQ, panelCost, batteryCost, inverterCost;
float insolation_Matrix[NROWS][NCOLS];
while(quit != 1)
{
get_inputs(&ptr_to_dailyEnergy, &ptr_to_panelCost, &ptr_to_batteryCost, &ptr_to_inverterCost);
/* Call upon function fillInInsolation */
fillInInsolation(insolation_Matrix, &ptr_to_row);
/* Call upon function calculate_insolHourMax */
calculate_insolHourMax(insolation_Matrix, insolHourMax);
/* Give meaningful names to pointer variables */
houseEnergyREQ = ptr_to_dailyEnergy;
panelCost = ptr_to_panelCost;
batteryCost = ptr_to_batteryCost;
inverterCost = ptr_to_inverterCost;
/* Equation to calculate panelArea */
panelArea = houseEnergyREQ/(insolDayMin*panelEfficiency*inverterEfficiency);
printf("panelArea = %f\n", panelArea);
/* Equation to calculate maxHourPanelOutput */
maxHourPanelOutput = insolHourMax*panelArea*panelEfficiency;
printf("maxHourPanelOutput = %f\n", maxHourPanelOutput);
/* Equation to calculate numbatteries */
numBatteries = ceil(houseEnergyREQ/(inverterEfficiency*batteryRating));
printf("numBatteries = %d\n", numBatteries);
/* Equation to calculate numInverters */
numInverters = ceil(maxHourPanelOutput/(inverterEfficiency*inverterRating));
printf("numInverters = %d\n", numInverters);
/* Equation to calculate total cost */
totalCost = panelArea*panelCost + numBatteries*batteryCost + numInverters*inverterCost
+ INSTALLATION_COST;
printf("The total cost of your Solar panel system is %.2f $. \n", totalCost);
/* Give user an option to quit program */
printf("Do you wish to continue? (hit 1 to quit) \n");
scanf("%d", &quit);
}
system("PAUSE");
}