8.12. PROGRAM 1: Calculating Coefficient Of Lift For this PROGRAM you will calcu
ID: 3815157 • Letter: 8
Question
8.12. PROGRAM 1: Calculating Coefficient Of Lift
For this PROGRAM you will calculate the coefficient of lift for a given flight-path angle based on wind tunnel data stored in a file.
PROGRAM Steps
Ask the user for the name of file that contains the wind tunnel data.
Read wind-tunnel data into two parallel vectors, one vector stores the flight-path angle and the other stores the corresponding coefficient of lift for that angle. Both vectors should store doubles.
Ask the user for a flight-path angle. If the angle is within the bounds of the data set, the program should then use linear interpolation (see explanation of linear interpolation below) to compute the corresponding coefficient of lift and output it.
Finally, ask the user if they want to enter another flight-path angle. Repeat steps 3 and 4 if they answer yes, otherwise end the program if they answer no.
For linear interpolation to work, the flight-path angles in the data file must be in ascending order. If the flight-path angles are not in ascending order, your program will need to sort them before implementing Step 3.
Linear Interpolation
The wind-tunnel test data consists of some number of tested flight-path angles and their corresponding coefficient of lift. Using this data, we can estimate, using linear interpolation, the coefficient of lift for a flight-path angle within the bounds of the data set, even if that particular flight-path angle was not tested. If we want to find the coefficient of lift for flight-path angle b, we find flight-path angles a and c such that
a < b < c
Obviously, if flight-path b already exists in the given data set, then you do not need to use linear interpolation. However, if it doesn't exist, then linear interpolation assumes a straight line exists between f(a) and f(c). (In this case, f(a) is the coefficient of lift for flight-path angle a and f(c) is the coefficient of lift for flight-path angle c.) To find f(b), use the formula:
Modular Programming
You must implement and use at least the following functions:
readData: passes in the name of a file and two vectors (double) and stores in the first vector the flight-path angles (first column) and in the second vector the corresponding coefficients of lift (2nd column). If the file does not open properly, this function should output an error message and then call the exit function passing it an exit value of 1.
interpolation: passes in the requested flight-path angle along with the 2 vectors of data (flight-path angles and corresponding coefficients of lift) and returns the corresponding coefficient of lift.
isOrdered: passes in the vector of flight-path angles and returns true if it stores the angles are in ascending order, otherwise returns false.
reorder: passes in both vectors of data and then reorders the data so that the flight-path angles are in ascending order while maintaining the correspondence between the flight-path angles and their corresponding coefficients of lift.
Here are the prototypes you must use for these functions:
Data File Format
The data file will have on each line, one flight-path angle (in degrees), a space, and then the corresponding coefficient of lift. See the following file examples, tunnel1.dat and tunnel2.dat. You must create these 2 files for testing your program on your own, however, you will only submit your main.cpp file. Use these files to help you test your program, but do not assume these will be the only files we will test your program with. In other words, when testing your program you should also make up your own data files. You should try to come up with data files that will break your program if it doesn't follow all of the given specifications. That's what we will be doing when grading it.
tunnel1.dat
tunnel2.dat
Explanation / Answer
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//Define constants and declare function prototypes
const int T=100;
double maxval(const double x[], int n);
double minval(const double x[], int n);
int main()
{
// Declare objects
int tpts(0);
double y[T], flight_range, coef_lift;
string filename;
ifstream tunnel;
// Prompt user for file name and open date file.
cout << "Enter the name of the data file";
cin >> filename;
tunnel.open(filename.c_str());
if (tunnel.fail())
{
cout << "Error opeing input file ";
}
else
{
// Read a data value from the file
tunnel >> flight_range >> coef_lift;
// While there is room in the array and
// end of file was not encountered,
// assign the value to the array and
// input the next value.
while (tpts <= T-1 && !tunnel.eof())
{
y[tpts] = flight_range;
tpts++;
tunnel >> flight_range;
}
// Find and print the maximum value
cout << "Range of flight-path angles: " << minval(y,tpts) << " to " << maxval(y,tpts) << " degrees"<< endl;
// Close file and exit program
tunnel.close();
}
return 0;
}
/* ------------------------------------------------------*/
/* This function returns the maximum */
/* value in the array x with n elements */
double maxval(const double x[], int n)
{
// Declare local objects
double max_x;
// Determine maximum value in the array
max_x = x[0];
for (int k=1; k<=n-1; k++)
{
if (x[k] > max_x)
max_x = x[k];
}
// Return maximum value
return max_x;
}
/* ------------------------------------------------------*/
/* This function returns the minimum */
/* value in an array x with n elements */
double minval(const double x[], int n)
{
// Declare objects
double min_x;
// Determine minimum value in the array
min_x = x[0];
for (int k=1; k<=n-1; k++)
{
if (x[k] < min_x)
min_x = x[k];
}
// Return minimum value
return min_x;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.