# EECE.2160 ECE Application Programming - PowerPoint PPT Presentation  Download Presentation EECE.2160 ECE Application Programming

EECE.2160 ECE Application Programming
Download Presentation ## EECE.2160 ECE Application Programming

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
##### Presentation Transcript

1. EECE.2160ECE Application Programming Instructor: Dr. Michael Geiger Spring 2017 Lecture 21 2-D arrays; arrays and functions

2. Lecture outline • Announcements/reminders • Program 6 due 3/22 • Exam 2 in class 3/29 • Will be allowed one double-sided 8.5” x 11” note sheet • Review • One-dimensional arrays • Today’s lecture • Two-dimensional arrays • Arrays and functions ECE Application Programming: Lecture 21

3. Review: arrays • Arrays: groups of data with same type • int x has 10 elements, x through x • Can also define with initial values • e.g. double list[] = {1.2, 0.75, -3.233}; • Compiler will determine size of array from list • If initialization list has fewer values than size given, remaining values = 0 • i.e. int list = {1, 2, 3} same as int list = {1, 2, 3, 0, 0} • Must be sure to access inside bounds • You can access x or x[-1], for example • Will access whatever’s at those locations ECE Application Programming: Lecture 21

4. Two-dimensional arrays • Two-dimensional arrays: can be used to represent tabular data • Declaration: <type> <name>[<rows>][<cols>] • Example (see below): int x; • Index elements similarly to 1-D arrays ECE Application Programming: Lecture 20

5. Initializing 2D arrays • Can initialize similarly to 1D arrays, but must specify dimensions • Each row treated like a 1D array; rows separated by commas: • int y = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; ECE Application Programming: Lecture 20

6. 2D arrays and loops • Typically use nested loops to work with 2-D arrays • One loop inside another: for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { x[i][j] = y[i][j] * 2; } } • Be careful in loop body—switching your loop indices will cause trouble • Using x[j][i] would take you outside of the array! ECE Application Programming: Lecture 20

7. Example: Working with 2-D arrays Complete this program, which counts the # of negative values in each row of a 2-D array (assume the necessary #includes are done): #define NRows 3 // # of rows #define NCols 4 // # of columns int main() { double x[NRows][NCols] = // 2-D array { { 10, 2.5, 0, 1.5}, {-2.3, -1.1, -0.2, 0}, {10.5, -6.1, 23.4, -9.2} }; int negCnt[NRows] = {0}; // Initialize entire row count array to 0 int i, j; // Row and column indices /* INSERT CODE HERE--Visit every element in array x and count the number of negative values in each row */ // Now print the row counts for (i = 0; i < NRows; i++) printf(“Row %d has %d negative values.\n”, i, negCnt[i]); return 0; } ECE Application Programming: Lecture 21

8. Example solution /* Code to be added to visit every element in array x and count the number of negative values in each row */ for (i = 0; i < NRows; i++) for (j = 0; j < NCols; j++) if (x[i][j] < 0) negCnt[i]++; ECE Application Programming: Lecture 21

9. Passing arrays to functions • Do not need to specify array size (for reasons I’ll explain shortly) • Compiler will actually ignore 1-D array size, even if you put it in prototype • Therefore cannot check array size inside function • Prototype typically has array name and brackets to indicate you’re dealing with array • e.g. int findAvg(int arr[ ], int n); • n = # elements in array ECE Application Programming: Lecture 21

10. Example • Write a function for each of the following • findAvg(): Given an array of doubles (arr) and the # of elements in the array (n), find the average of all array elements • findMax(): Given an array of ints (arr) and the # of elements (n), find the largest (i.e., most positive) element in the array • sclAry(): Given an array of test scores (tests), the # of elements in the array (n), and an amount to scale those scores by (s), add s to every element in tests • Do not print scores in function; we’ll print in main program ECE Application Programming: Lecture 21

11. Passing Arrays to functions (findAvg) //*******************************************// function findAvg// On Entry:// arr[] - array with values to avg// n - number of values to avg// On Exit:// returns avg of first n elements of test[]double findAvg(double arr[], int n){ int i; double sum=0; double avg; for (i=0; i<n; i++) sum+=arr[i]; avg = sum / n; return avg;} ECE Application Programming: Lecture 21

12. Passing Arrays to functions (findBig) //*******************************************// function findMax// On Entry:// arr[] - array with values// n - number of elements to examine// On Exit:// returns biggest (most positive value in// the first n elements of test[]int findMax(int arr[], int n){ int i, big; big = arr; for (i=1; i<n; i++) if (arr[i]>big) big = arr[i]; return big;} ECE Application Programming: Lecture 21

13. Passing Arrays to functions (SclAry) //*******************************************// function SclAry// On Entry:// tests[] - array with values to scale// n - number of values to scale// s - number of points to scale// On Exit:// The first n values of tests[] are// scaled by s pointsvoid SclAry(int test[], int n, int s){ int i; for (i=0; i<n; i++) test[i]=test[i]+s; // or use test[i]+=s; } ECE Application Programming: Lecture 21

14. Passing Arrays to functions (SclAry) #include <stdio.h>void SclAry(int tests[], int n, int s);void main(void){ int i; int x[]={ 51,62,73,84,95,100,66,57,48,79 }; int N=sizeof(x)/sizeof(int); SclAry(x,N,10); for (i=0; i<N; i++) printf("%4d",x[i]); printf("\n");} void SclAry(int test[], int n, int s) { int i; for (i=0; i<n; i++) test[i]=test[i]+s; // or use test[i]+=s; } ECE Application Programming: Lecture 21

15. Passing Arrays to functions (SclAry) Output of program: 61 72 83 94 105 110 76 67 58 89 For reference: int x[]={ 51,62,73,84,95,100,66,57,48,79 }; ??? What's wrong with this picture ??? ECE Application Programming: Lecture 21

16. Passing Arrays to functions Before call to SclAry After call to SclAry test 51 3044 test 61 3044 test 62 3048 test 72 3048 test 73 304C test 83 304C test 84 3050 test 94 3050 test 95 3054 test 105 3054 test 100 3058 test 110 3058 test 66 305C test 76 305C test 57 3060 test 67 3060 test 48 3064 test 58 3064 test 79 3068 test 89 3068 Passing the name only (i.e. test vs. test) passes the ADDRESS of element zero of the array. Put another way: myfunc(ary) same as myfunc (&ary) ECE Application Programming: Lecture 21

17. Arrays and pointers • Array name is a pointer to first array element • Can use pointers and arrays interchangeably • You can use [] to “index” a pointer • Example: int myArr[] = {1, 3, 5, 7, 9}; int *aPtr; aPtr = myArr; for(int i =0; i < 5; i++) printf(“%d”, aPtr[i]); • What does this print? • 1 3 5 7 9  contents of array! • Array arguments to functions are always passed by address ECE Application Programming: Lecture 21

18. Final notes • Next time • Spring Break! • Monday, 3/20: Character arrays and strings • Reminders: • Program 6 due 3/22 • Exam 2 in class 3/29 • Will be allowed one double-sided 8.5” x 11” note sheet ECE Application Programming: Lecture 21