Arrays
ELEC 206
Computer Applications for
Electrical Engineers
Dr. Ron Hayne
Outline
Arrays
Statistical Measurements
Functions Revisited
206_C6
2
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
3
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
4
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
5
Function Arguments
Passing array information to a function
Two parameters usually used
Specific array
Number of elements in the array
Always call by reference
Address of the array
206_C6
6
/*
/*
/*
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;
}
*/
*/
Statistical Measurements
Maximum
Minimum
Mean (average)
Median (middle)
Variance
Average squared deviation from the mean
Standard Deviation
Square root of the variance
206_C6
10
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
11
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
12
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
13
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
14
Summary
Arrays
Statistical Measurements
Functions Revisited
206_C6
15
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
Average power
Average magnitude
Zero crossings
Zero.dat
206_C6
16
Problem Solving Applied
Hand Example
test.dat
2.5 8.2
-1.1
-0.2
1.5
Average power = 15.398
Average magnitude = 2.7
Number of zero crossings = 2
206_C6
17
Problem Solving Applied
Algorithm Development
main
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
18
Problem Solving Applied
Algorithm Development
ave_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
206_C6
19
/*---------------------------------------------------*/
/* 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;
}
/*---------------------------------------------------*/
Testing
206_C6
26
Testing
206_C6
27
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 end
Swap smallest with current position
Move to next position
206_C6
28
#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);
}
}
Testing
206_C6
31
Summary
Arrays
Statistical Measurements
Functions Revisited
Problem Solving Applied
Selection Sort
End of Chapter Summary
C++ Statements
Style Notes
Debugging Notes
206_C6
32
© Copyright 2025 Paperzz