lab for programing
Overview:
This hands-on lab allows you to follow and experiment with the critical steps of developing a program including the program description, Analysis, Design(program design, pseudocode), Test Plan, and implementation with C code. The example provided uses sequential, repetition, selection statements, functions, strings, and arrays.
Program Description:
This program will input and store meteorological data into an array. The program will prompt the user to enter the average monthly rainfall for a specific region and then use a loop to cycle through the array and print out each value. The program should store up 5 years of meteorological data.
Analysis:
I will use sequential, selection, and repetition programming statements and an array to store data.
I will define a 2-D array of Float number: Raindata[][] to store the Float values input by the user. To store up to 5 years of monthly data, the array size should be at least 5*12 = 60 elements.
A float number (rain) will also be needed to input the individual rain data.
An integer variable (Count) is needed to keep count of how many rain data elements were entered. This will keep track to make sure we don’t go over 60 and we print only valid rain elements. In a 2D array this will be RainData[5][12]. We can use #defines to set the number of years and months to eliminate hard coding values.
A float number (rain) will also be needed to input the individual rain data. A nested for loop can be used to iterate through the array to enter Raindata, where the outer loop will be years and the inner loop will be months. A similar nested for loop can also be used to print the data in the array, where the outer loop will be years and the inner loop will be months. An array of strings can be used to store year and month names. This will allow a tabular display with labels for the printout.
Functions will be used to separate functionality into smaller work units. Functions for displaying the data and inputting the data will be used.
A selection statement will be used to determine if data should be entered.
Program Design: Main
// This program will prompt the user to input and store meteorological data into an array for each month for five years. It will then display the collected data.
// Declare variables
// Initialize variables
//Prompt user if he wants to input participation data
// IF yes
// Call function to Input Data
// Call function to Print Data
// Else
// Endif
( 4 )
End //End of Main
Function InputData
// Loop for number of years
//Loop for number of months
//Prompt user for rain amount
//Get user response
//Assign data to array
//End loop - months
//End loop – years
End Function Function PrintData
// Loop for number of years
//Loop for number of months
//Print out all data form arrays
//End loop - months
//End loop – years
End Function Test Plan:
To verify this program is working properly the input values could be used for testing:
|
Test Case |
Input |
Expected Output |
|
1 |
Enter data? = y 1.2 2.2 3.3 2.2 10.2 12.2 2.3 0.4 0.2 1.1 2.1 0.4 1.1 2.2 3.3 2.2 10.2 12.2 2.3 0.4 0.2 1.1 |
year month rain 2011 Jan 1.20 2011 Feb 2.20 2011 Mar 3.30 2011 Apr 2.20 2011 May 10.20 2011 Jun 12.20 2011 Jul 2.30 2011 Aug 0.40 2011 Sep 0.20 2011 Oct 1.10 2011 Nov 2.10 2011 Dec 0.40 2012 Jan 1.10 2012 Feb 2.20 2012 Mar 3.30 2012 Apr 2.20 2012 May 10.20 2012 Jun 12.20 2012 Jul 2.30 2012 Aug 0.40 2012 Sep 0.20 2012 Oct 1.10 2012 Nov 2.10 2012 Dec 0.40 2013 Jan 1.10 2013 Feb 2.20 |
|
|
2.1 0.4 1.1 2.2 3.3 2.2 10.2 12.2 2.3 0.4 0.2 1.1 2.1 0.4 1.1 2.2 3.3 2.2 10.2 12.2 2.3 0.4 0.2 1.1 2.1 0.4 1.1 2.2 3.3 2.2 10.2 12.2 2.3 0.4 0.2 1.1 2.1 0.4 |
2013 Mar 3.30 2013 Apr 2.20 2013 May 10.20 2013 Jun 12.20 2013 Jul 2.30 2013 Aug 0.40 2013 Sep 0.20 2013 Oct 1.10 2013 Nov 2.10 2013 Dec 0.40 2014 Jan 1.10 2014 Feb 2.20 2014 Mar 3.30 2014 Apr 2.20 2014 May 10.20 2014 Jun 12.20 2014 Jul 2.30 2014 Aug 0.40 2014 Sep 0.20 2014 Oct 1.10 2014 Nov 2.10 2014 Dec 0.40 2015 Jan 1.10 2015 Feb 2.20 2015 Mar 3.30 2015 Apr 2.20 2015 May 10.20 2015 Jun 12.20 2015 Jul 2.30 2015 Aug 0.40 2015 Sep 0.20 2015 Oct 1.10 2015 Nov 2.10 2015 Dec 0.40
Please try the Precipitation program again. |
|
2 |
Enter data? = n |
No data was input at this time. Please try the Precipitation program again. |
Pseudocode:
//Declare Globals
Declare NumYears AS Constant 5 Declare NumMonths AS Constant 12
Declare Raindata[NumYears, NumMonths] as Float Declare years[NumYears] AS String
Declare months[NumMonths] AS String
Main
// This program will prompt the user to input and store meteorological data into an array.
// Declare variables
Declare Count, i as Integer Declare response AS Char
//Initialize
Set years = {"2011","2012","2013","2014","2015"};
Set months ={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
//Prompt to enter data
Print ("Do you want to input Precipatation data? (y for yes)\n"); Input response
If (response == 'y') {
// Call Function to Input data Input_Data( )
// Call Function to display data Print_Data();
Else
Print ( " No data was input at this time <NL>) " EndIf
Print("Please try the Precipitation program again. <NL>");
End //End of Main Function Input_Data ( )
// Input: Globals NumYears, NumMonths -- number of years, months
// Output: Global array RainData – array of rain data
// Declare variables
Declare iyear,imonth AS Integer
//Loop for number of years
For (iyear=0; iyear < NumYears; iyear++)
//Loop for number of months
For (imonth=0; imonth < NumMonths; imonth++)
//Prompt user for rain amount Print ( "Enter amount of rain) "
//Assign data to array
Input RainData[iyear, imonth] EndFor //End loop – months
EndFor //End loop – years
End Function
Function Print_Data ( )
// Input: Globals NumYears, NumMonths -- number of years, months
// Input: Global array RainData – array of rain data
// Output: none
// Declare variables
Declare iyear,imonth AS Integer
//Loop for number of years
For (iyear=0; iyear < NumYears; iyear++)
//Loop for number of months
For (imonth=0; imonth < NumMonths; imonth++)
//Prompt user for rain amount
Print ( years[iyear], months[imonth], Raindata[iyear][imonth] );
//Assign data to array
Input RainData[iyear, imonth] EndFor //End loop – months
EndFor //End loop – years
End Function
C Code
The following is the C Code that will compile in execute in the online compilers.
// C code
// This program will input and store meteorological data into an array.
// Developer: Faculty CMIS102
// Date: Jan 31, XXXX
#define NUMMONTHS 12 // Global constants
#define NUMYEARS 5
#include <stdio.h>
// function prototypes void inputdata();
void printdata();
// Global variables
// These are available to all functions
float Raindata[NUMYEARS][NUMMONTHS];
char years[NUMYEARS][5] = {"2011","2012","2013","2014","2015"};
char months[NUMMONTHS][4]
={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
int main ()
{
char enterData = 'y';
printf("Do you want to input Precipatation data? (y for yes)\n"); scanf("%c",&enterData);
if (enterData == 'y') {
// Call Function to Input data inputdata();
// Call Function to display data printdata();
}
else {
printf("No data was input at this time\n");
}
printf("Thank you. Please try the Precipitation program again. \n"); return 0;
} // end main
//-------------------------------------------------------
// function to inputdata -------------------------------- void inputdata() {
// This function will collect at the input rain data
// Input: Globals NUMYEARS, NUMMONTHS - number of years and months
// Output: Global array Raindata -- collection of rain data
// variable definition: float Rain=1.0;
// Loop and collect Input Data
for (int year=0;year < NUMYEARS; year++) {
for (int month=0; month< NUMMONTHS; month++) { printf("Enter rain for %d, %d:\n", year+1, month+1); scanf("%f",&Rain);
Raindata[year][month]=Rain;
}
}
}
// Function to printdata ----------------------- void printdata(){
// This function will display all the collected rain data
// Input: Globals NUMYEARS, NUMMONTHS - number of years and months
// Input: Global array Raindata -- collection of rain data
// Output: none
// Display column headers printf ("year\t month\t rain\n");
// Loop and display the collected rain data for (int year=0;year < NUMYEARS; year++) {
for (int month=0; month< NUMMONTHS; month++) {
printf("%s\t %s\t %5.2f\n", years[year],months[month], Raindata[year][month]);
}
}
}
Setting up the code and the input parameters in ideone.com:
You can change these values to any valid integer values to match your test cases.
Results from running the programming at ideone.com:
Learning Exercises for you to try:
1. Modify the program to sum the rainfall for each year.
(Hint: this is NOT part of the input. You have all the data collected, you need to sum for each year from the data you collected during the input.) You can do this using a looping structure during the output function printdata.) Support your experimentation with screen captures of executing the new code
2. Enhance the program to allow the user to enter another meteorological element such as windspeed (e.g. 2.4 mph). (Hint: you will need another array). Note, the user should be able to enter both rainfall and windspeed in your new implementation. – You will need to update the inputdata and printdata functions. Support your experimentation with screen captures of executing the new code. Submit your code as a separate .txt (or .c ) file.
3. Prepare a new test table with at least 2 distinct test cases listing input and expected output for the code you created after step 2
4. What happens if you change the NUMMONTHS and NUMYEARS de finitions to other values? Be sure to use both lower and higher values. Describe what happens if you use larger numbers to Declare the arrays. Describe what happens if you use lower numbers to Declare the arrays.
Support your experimentation with screen captures of executing the new code.
( 10 )