View
219
Download
0
Category
Preview:
Citation preview
Arrays
ELEC 206
Computer Applications for Electrical Engineers
Dr. Ron Hayne
206_C6 2
Outline
Arrays Statistical Measurements Functions Revisited
206_C6 3
Arrays
One-dimensional array List of values Arranged in either a row or a column
Offsets (Subscripts) distinguish between elements in the array Identifier holds address of first element Offsets always start at 0
206_C6 4
Definition and Initialization
Declaration double x[4];
Initialization double x[4] = {1.2, -2.4, 0.8, 6.1}; int t[100] = {0}; char v[] = {'a', 'e', 'i', 'o', 'u'};
Loops double g[21];
for (int k=0; k<=20; k++)
{
g[k] = k*0.5;
}
206_C6 5
Data Files
double time[10], motion[10];
ifstream sensor3("sensor3.dat");
...
if(!sensor3.fail())
{
for (int k=0; k<=9; k++)
{
sensor3 >> time[k] >> motion[k];
}
}
206_C6 6
Function Arguments
Passing array information to a function Two parameters usually used
Specific arrayNumber of elements in the array
Always call by referenceAddress of the array
/* This program reads values from a data file and *//* calls a function to determine the maximum value *//* with a function. */
#include <iostream>#include <fstream>#include <string>using namespace std;
// Define constants and declare function prototypes.const int N=100;double maxval(double x[], int n);
int main(){ // Declare objects. int npts=0; double y[N]; string filename; ifstream lab;
...
// Read a data value from the file. while (npts <= (N-1) && lab >> y[npts] ) { npts++; // Increment npts. }
// Find and print the maximum value. cout << "Maximum value: " << maxval(y,npts) << endl;
// Close file and exit program. lab.close();
}return 0;}
/* This function returns the maximum *//* value in the array x with n elements. */
double maxval(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;}
206_C6 10
Statistical Measurements
Maximum Minimum Mean (average) Median (middle) Variance
Average squared deviation from the mean
Standard Deviation Square root of the variance
206_C6 11
Mean
double mean(double x[], int n)
{
double sum(0);
for (int k=0; k<=n-1; k++)
{
sum += x[k];
}
return sum/n;
}
206_C6 12
Variance
double variance(double x[], int n)
{
double sum(0), mu;
mu = mean(x,n);
for (int k=0; k<=n-1; k++)
{
sum += (x[k] - mu)*(x[k] - mu);
}
return sum/(n-1);
}
206_C6 13
Function Overloading
Function name can have more than one definition Each function definition has a unique function signature Each function call looks for a function prototype with a
matching function signature
double maxval(double x[], int n); int maxval(int x[], int n); char maxval(char x[], int n);
206_C6 14
Function Templates
Generic algorithm for a function that is not tied to a specific data type
template <class Data_type>
Data_type minval(Data_type x[], int n)
{
Data_type minx;
...
206_C6 15
Summary
Arrays Statistical Measurements Functions Revisited
206_C6 16
Problem Solving Applied
Speech Signal Analysis Problem Statement
Compute the following stastical measurements for a speech utterance: average power, average magnitude, and number of zero crossings.
Input/Output Description
Zero.dat
Average power
Average magnitude
Zero crossings
206_C6 17
Problem Solving Applied
Hand Exampletest.dat
2.5 8.2 -1.1 -0.2 1.5Average power = 15.398Average magnitude = 2.7Number of zero crossings = 2
206_C6 18
Problem Solving Applied
Algorithm Developmentmain
read speech signal from data file and determine number of points, n
compute statistical measurements using functions
ave_power(x, n) set sum to zero for k: add x[k]2 to sum return sum/n
206_C6 19
Problem Solving Applied
Algorithm Developmentave_mag(x, n)
set sum to zero for k: add |x[k]| to sum return sum/n
crossings(x, n) set count to zero for k: if x[k] * x[k+1] < 0, increment count return count
/*---------------------------------------------------*//* This program computes a set of statistical */ /* measurements from a speech signal. */
#include <cstdlib>#include <iostream>#include <fstream>#include <string> #include <cmath> using namespace std;
// Declare function prototypes and define constants.double ave_power(double x[], int n);double ave_magn(double x[], int n);int crossings(double x[], int n);
const int MAXIMUM = 2500;
int main(){ // Declare objects. int npts=0; double speech[MAXIMUM]; string filename; ifstream file_1;
// Prompt user for file name and open file. cout << "Enter filename "; cin >> filename; file_1.open(filename.c_str()); if( file_1.fail() ) { cout << "error opening file " << filename << endl; return 1; }
// Read information from a data file. while (npts <= MAXIMUM-1 && file_1 >> speech[npts]) { npts++; }
// Compute and print statistics. cout << "Statistics \n"; cout << "\taverage power: " << ave_power(speech,npts) << endl; cout << "\taverage magnitude: " << ave_magn(speech,npts) << endl; cout << "\tzero crossings: " << crossings(speech,npts) << endl; // Close file and exit program. file_1.close(); system("PAUSE"); return 0;}
/*---------------------------------------------------*//* This function returns the average power *//* of an array x with n elements. */
double ave_power(double x[], int n){ // Declare and initialize objects. double sum=0;
// Determine average power. for (int k=0; k<=n-1; k++) { sum += x[k]*x[k]; }
// Return average power. return sum/n;}
/*---------------------------------------------------*//* This function returns the average magnitude *//* of an array x with n values. */
double ave_magn(double x[], int n){ // Declare and initialize objects. double sum=0;
// Determine average magnitude. for (int k=0; k<=n-1; k++) { sum += abs(x[k]); }
// Return average magnitude. return sum/n;}
/*---------------------------------------------------*//* This function returns a count of the number *//* of zero crossings in an array x with n values. */
int crossings(double x[], int n){ // Declare and initialize objects. int count=0;
// Determine number of zero crossings. for (int k=0; k<=n-2; k++) { if (x[k]*x[k+1] < 0) count++; }
// Return number of zero crossings. return count;}/*---------------------------------------------------*/
206_C6 26
Testing
206_C6 27
Testing
206_C6 28
Sorting Algorithms
Sorting Arranging in ascending (descending) order Not one "best" algorithm
Depends on characteristics of data Selection Sort
Find smallest value from current position to endSwap smallest with current positionMove to next position
#include <iostream>#include <cstdlib>using namespace std;
void sort(double x[], int n);void display(double x[], int n);const int N = 6;
int main(){ double data[N] = {5.0, 3.0, 12.0, 8.0, 1.0, 9.0}; cout << "Initial data" << endl; display(data, N); sort(data, N); cout << "Sorted data" << endl; display(data, N); ...
void sort(double x[], int n) // Selection sort{ int m; // marker double hold; for (int k=0; k<=n-2; k++) { m = k; // Find smallest value for (int j=k+1; j<=n-1; j++) { if (x[j] < x[m]) m = j; } hold = x[m]; // Swap smallest with current x[m] = x[k]; x[k] = hold; cout << "After k=" << k << endl; display(x, n); }}
206_C6 31
Testing
206_C6 32
Summary
Arrays Statistical Measurements Functions Revisited Problem Solving Applied Selection Sort End of Chapter Summary
C++ Statements Style Notes Debugging Notes
Recommended