logging in or signing up Lecture 15 - Arrays and Pointers - 06 (1) aSGuest90798 Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINT lite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 9 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: March 21, 2011 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Arrays and Pointers: Lect 15 P. 1 Winter Quarter Arrays and Pointers Lecture 15Arrays and Pointers: Lect 15 P. 2 Winter Quarter Arrays and Pointers So far, we have looked at pointer variables which were declared with statements like: FILE *fptr ; int *aptr ; We have also used pointer constants when we sent the address of a variable to a function. We did this by placing an ampersand before the variable name. For instance, the address of variable a is &a , which is a pointer constant.Arrays and Pointers: Lect 15 P. 3 Winter Quarter Arrays and Pointers The name of an array without a subscript (index number) is also a pointer constant. When the name is used without the subscript it references the address of element 0 of the array. int myarray[10] ; /* Declare an array */ int *myptr ; /* Declare a pointer (not initialized)*/ printf ( “%d\n”, myarray ); /* print address of myarray[0] */ scanf ( “%d”, myarray ); /* get value from keyboard and store in myarray[0] */ scanf ( “%d”,&myarray[0] ); /* same thing as above */Arrays and Pointers: Lect 15 P. 4 Winter Quarter Arrays and Pointers myptr = &myarray[2] ; /* Assign the address of the third element of myarray to myptr */ printf( “%d”, *myptr) ; /* Print the value of what myptr is pointing to, i.e., the value of myarray[2] */ Note that the * in front of myptr de-references the pointer. That is, it says “use the value in the address that is pointed to.” The following shows a small program and its output. Arrays and Pointers: Lect 15 P. 5 Winter Quarter Arrays and Pointers /* Printing array values and addresses */ #include <stdio.h> int main ( ) { int k ; float a[4] = {1000, 2000, 3000, 4000} ; printf ( "k a &a[k] a[k]\n" ); for ( k=0 ; k<4 ; k++ ) printf ( "%d %ld %ld %f\n", k, a, &a[k], a[k] ); }Running the Program: Lect 15 P. 6 Winter Quarter Running the Program r1tel (~) millerm 52> a.out k a &a[k] a[k] 0 2147462916 2147462916 1000.000000 1 2147462916 2147462920 2000.000000 2 2147462916 2147462924 3000.000000 3 2147462916 2147462928 4000.000000 r1tel (~) millerm 53>Arrays and Pointers: Lect 15 P. 7 Winter Quarter Arrays and Pointers We have seen how to pass a pointer for a single valued variable to a function. Sometimes we want to pass an entire array to a function. The name of an array without a subscript is a pointer constant that contains the address of element [ 0 ] of the array. Therefore, if we pass the array name with no subscript to a function, we are passing a pointer to that array. The following program illustrates this.Arrays and Pointers : Lect 15 P. 8 Winter Quarter Arrays and Pointers /* Passing an array to a function */ #include <stdio.h> #include <string.h> void myfunct (int , char [ ] ); int main ( ) { char name[20] = "Michael J. Miller" ; myfunct ( 20, name ); }Arrays and Pointers: Lect 15 P. 9 Winter Quarter Arrays and Pointers void myfunct (int len , char text[ ] ) { int k ; printf ( "%d\n", strlen( text )) ; for ( k = 0 ; k < len ; k++ ) printf ( "%c", text[k] ) ; } /*Program Output */ 17 Michael J. MillerArrays and Pointers: Lect 15 P. 10 Winter Quarter Arrays and Pointers Given the declaration int a[3] = { 1, 2, 3 } ; a is a pointer to (the address of) a[0] &a[0] is a pointer to a[0] a[0] is the value 1 ( *a is also the value 1) &a[1] is a pointer to a[1] a[1] is the value 2 &a[2] is a pointer to a[2] a[2] is the value 3 &a[0]+1 is a pointer to a[1] &a[0]+2 is a pointer to a[2]Arrays and Pointers: Lect 15 P. 11 Winter Quarter Arrays and Pointers Given the declaration int b[3][3] = {{1,3,5}, {7,9,11}, {13,15,17}}; b is a pointer to b[0][0] b[0] is also a pointer to b[0][0] b[1] is a pointer to b[1][0] b[2] is a pointer to b[2][0] *b is a pointer to b[0] (special case) *b[1] is the value of b[1][0] (which is 7) *b[2] + 1 is the value of b[2][0] + 1 (which is 14)Slide 12: Lect 15 P. 12 Winter Quarter /* Double subscript arrays and user-written functions */ #include <stdio.h> void printarray (int [ ][7], int); int main( ) { int calendar[5][7]={{1,2,3,4,5,6,7}, {8, 9, 10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,32,33,34,35}} ; printarray (calendar , 5) ; }Slide 13: Lect 15 P. 13 Winter Quarter void printarray (int cal[][7], int j ) { int k, n ; for ( k = 0 ; k < j ; k++ ) { for ( n = 0 ; n < 7 ; n++ ) printf ( "%3d ", cal[k][n] ); printf ( "\n" ); } }Slide 14: Lect 15 P. 14 Winter Quarter /* Double subscript arrays, user-written functions and pointer arithmetic */ #include <stdio.h> void printarray (int * , int , int); int main ( ) { int calendar[5][7]= {{1,2,3,4,5,6,7}, {8, 9, 10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,32,33,34,35}} ; printarray (calendar[0] , 5 , 7) ; }Slide 15: Lect 15 P. 15 Winter Quarter void printarray (int *cal, int j, int m ) { for ( k = 0 ; k < j*m ; k += m ) { for ( n = 0 ; n < m ; n++ ) printf ( "%3d ", *(cal+k+n) ); printf ( "\n" ); } }Assignment G13: Lect 15 P. 16 Winter Quarter Assignment G13 A data file named g13.dat exists in the class "common area" on the UNIX system. The file contains actual data from one test of an instrumented bicycle from an engineering hands-on lab experiment. You should look at the file on the screen (with a "more" command), but DO NOT print it out, as it contains several thousand (but less than 12,000) lines of data.Assignment G13: Lect 15 P. 17 Winter Quarter Assignment G13 You will note that at the beginning of the file there are several lines of "header" information followed by many lines of data in four columns. Count by hand the number of lines from the beginning of the file until you get to a line that has the actual data in the four columns. (You will need this number in Step 2 later.) The fourth column is the raw data (voltage) values from the lab experiment.Steps for G13: Lect 15 P. 18 Winter Quarter Steps for G13 Write a complete C program, (say, g13.cpp), which does the following: Opens the data file for input. Input the correct number of header lines one by one, display each one on the screen and print each one to a result file (say, g13res.dat), and then discard the information.Steps for G13: Lect 15 P. 19 Winter Quarter Steps for G13 For opening the data file and the output file, just use the usual fopen routine. For reading the header lines, it might be rather convenient to read the complete line into a character array or string. How long should this string be? What routine might be used?Steps for G13: Lect 15 P. 20 Winter Quarter Steps for G13 Input each of the lines of data arranged in the four columns, discarding the data values from each of the first three columns and storing only the data from the fourth column in a one-dimensional array. For skipping over the columns with unwanted data, you will need to use the assignment suppression operator, * , in the scanf format. Your program will need to detect the end-of-file ( EOF ) to know when to stop inputting data. Close the input file when you reach the EOF .Data from g13.dat: Lect 15 P. 21 Winter Quarter Data from g13.dat " "Source File: C:\PROGRA~1\PSLOG\195RIDE.PL1 "ID: IE Group 4 Bike Stress friday XR440 12 bi "Ch1 lbl/scl: Start/Stop /A "Ch2 lbl/scl: input voltage signal /-5.000 05.000 "Ch3 lbl/scl: Off /C "Ch4 lbl/scl: Off /C "Rate (mins): 0.0000833333324 Bat: 8.8 "First: Fri 20-Nov-1998 10:38:47am "Last: Fri 20-Nov-1998 10:39:40am "Transferred: Fri 20-Nov-1998 10:42:37am "Eq. PC time: Fri 20-Nov-1998 10:42:38AMData from g13.dat: Lect 15 P. 22 Winter Quarter Data from g13.dat "Rate (mins): 0.0000833333324 Bat: 8.8 "First: Fri 20-Nov-1998 10:38:47am "Last: Fri 20-Nov-1998 10:39:40am "Transferred: Fri 20-Nov-1998 10:42:37am "Eq. PC time: Fri 20-Nov-1998 10:42:38AM " Date,Time,Ch1:Deg F,Ch2: 11/20/1998 10:38:47.000 -4.989 0.238 11/20/1998 10:38:47.005 -4.989 0.231 11/20/1998 10:38:47.010 -4.989 0.228 11/20/1998 10:38:47.015 -4.989 0.231 11/20/1998 10:38:47.020 -4.989 0.228Processing the G13 Data File: Lect 15 P. 23 Winter Quarter Processing the G13 Data File For skipping unwanted columns, we need to use the "assignment suppression operator" in the format specification: fscanf (infile, "%*s%*s%*s%f", &data_val[ i ] ) ; Remember, to check for EOF, you could use the feof function.Assignment G13: Lect 15 P. 24 Winter Quarter Assignment G13 Find the largest value in the array and the smallest value in the array. Display the results on the screen, and also write the results to the output file, g13result.dat . The results to be displayed and printed are: The total number of data points in the file The maximum voltage and time at which it occurred The minimum voltage and time at which it occurred The elapsed time between the maximum and minimum valuesAssignment G13: Lect 15 P. 25 Winter Quarter Assignment G13 The change in the output voltage is related to the strain of the strain gage by: where: Δ V out = V in * A * S g * ε V in = 5.0 Volts ε is the strain A = 500 (amplification) Δ V out is the change in voltage S g = 2.085 (gage factor) The equation can be solved to give the strain as a function of the output voltageAssignment 13: Lect 15 P. 26 Winter Quarter Assignment 13 Stress-Strain: Hooke’s Law The stress( σ ) in the bicycle fork can be calculated from the strain ( ε ), by using Hooke’s Law: σ = E * ε Where E is the Modulus of Elasticity For the bike fork material E = 29.0 x 10 6 psi The yield stress = 36,000 psi You do not have the permission to view this presentation. In order to view it, please contact the author of the presentation.
Lecture 15 - Arrays and Pointers - 06 (1) aSGuest90798 Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINT lite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 9 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: March 21, 2011 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Arrays and Pointers: Lect 15 P. 1 Winter Quarter Arrays and Pointers Lecture 15Arrays and Pointers: Lect 15 P. 2 Winter Quarter Arrays and Pointers So far, we have looked at pointer variables which were declared with statements like: FILE *fptr ; int *aptr ; We have also used pointer constants when we sent the address of a variable to a function. We did this by placing an ampersand before the variable name. For instance, the address of variable a is &a , which is a pointer constant.Arrays and Pointers: Lect 15 P. 3 Winter Quarter Arrays and Pointers The name of an array without a subscript (index number) is also a pointer constant. When the name is used without the subscript it references the address of element 0 of the array. int myarray[10] ; /* Declare an array */ int *myptr ; /* Declare a pointer (not initialized)*/ printf ( “%d\n”, myarray ); /* print address of myarray[0] */ scanf ( “%d”, myarray ); /* get value from keyboard and store in myarray[0] */ scanf ( “%d”,&myarray[0] ); /* same thing as above */Arrays and Pointers: Lect 15 P. 4 Winter Quarter Arrays and Pointers myptr = &myarray[2] ; /* Assign the address of the third element of myarray to myptr */ printf( “%d”, *myptr) ; /* Print the value of what myptr is pointing to, i.e., the value of myarray[2] */ Note that the * in front of myptr de-references the pointer. That is, it says “use the value in the address that is pointed to.” The following shows a small program and its output. Arrays and Pointers: Lect 15 P. 5 Winter Quarter Arrays and Pointers /* Printing array values and addresses */ #include <stdio.h> int main ( ) { int k ; float a[4] = {1000, 2000, 3000, 4000} ; printf ( "k a &a[k] a[k]\n" ); for ( k=0 ; k<4 ; k++ ) printf ( "%d %ld %ld %f\n", k, a, &a[k], a[k] ); }Running the Program: Lect 15 P. 6 Winter Quarter Running the Program r1tel (~) millerm 52> a.out k a &a[k] a[k] 0 2147462916 2147462916 1000.000000 1 2147462916 2147462920 2000.000000 2 2147462916 2147462924 3000.000000 3 2147462916 2147462928 4000.000000 r1tel (~) millerm 53>Arrays and Pointers: Lect 15 P. 7 Winter Quarter Arrays and Pointers We have seen how to pass a pointer for a single valued variable to a function. Sometimes we want to pass an entire array to a function. The name of an array without a subscript is a pointer constant that contains the address of element [ 0 ] of the array. Therefore, if we pass the array name with no subscript to a function, we are passing a pointer to that array. The following program illustrates this.Arrays and Pointers : Lect 15 P. 8 Winter Quarter Arrays and Pointers /* Passing an array to a function */ #include <stdio.h> #include <string.h> void myfunct (int , char [ ] ); int main ( ) { char name[20] = "Michael J. Miller" ; myfunct ( 20, name ); }Arrays and Pointers: Lect 15 P. 9 Winter Quarter Arrays and Pointers void myfunct (int len , char text[ ] ) { int k ; printf ( "%d\n", strlen( text )) ; for ( k = 0 ; k < len ; k++ ) printf ( "%c", text[k] ) ; } /*Program Output */ 17 Michael J. MillerArrays and Pointers: Lect 15 P. 10 Winter Quarter Arrays and Pointers Given the declaration int a[3] = { 1, 2, 3 } ; a is a pointer to (the address of) a[0] &a[0] is a pointer to a[0] a[0] is the value 1 ( *a is also the value 1) &a[1] is a pointer to a[1] a[1] is the value 2 &a[2] is a pointer to a[2] a[2] is the value 3 &a[0]+1 is a pointer to a[1] &a[0]+2 is a pointer to a[2]Arrays and Pointers: Lect 15 P. 11 Winter Quarter Arrays and Pointers Given the declaration int b[3][3] = {{1,3,5}, {7,9,11}, {13,15,17}}; b is a pointer to b[0][0] b[0] is also a pointer to b[0][0] b[1] is a pointer to b[1][0] b[2] is a pointer to b[2][0] *b is a pointer to b[0] (special case) *b[1] is the value of b[1][0] (which is 7) *b[2] + 1 is the value of b[2][0] + 1 (which is 14)Slide 12: Lect 15 P. 12 Winter Quarter /* Double subscript arrays and user-written functions */ #include <stdio.h> void printarray (int [ ][7], int); int main( ) { int calendar[5][7]={{1,2,3,4,5,6,7}, {8, 9, 10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,32,33,34,35}} ; printarray (calendar , 5) ; }Slide 13: Lect 15 P. 13 Winter Quarter void printarray (int cal[][7], int j ) { int k, n ; for ( k = 0 ; k < j ; k++ ) { for ( n = 0 ; n < 7 ; n++ ) printf ( "%3d ", cal[k][n] ); printf ( "\n" ); } }Slide 14: Lect 15 P. 14 Winter Quarter /* Double subscript arrays, user-written functions and pointer arithmetic */ #include <stdio.h> void printarray (int * , int , int); int main ( ) { int calendar[5][7]= {{1,2,3,4,5,6,7}, {8, 9, 10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,32,33,34,35}} ; printarray (calendar[0] , 5 , 7) ; }Slide 15: Lect 15 P. 15 Winter Quarter void printarray (int *cal, int j, int m ) { for ( k = 0 ; k < j*m ; k += m ) { for ( n = 0 ; n < m ; n++ ) printf ( "%3d ", *(cal+k+n) ); printf ( "\n" ); } }Assignment G13: Lect 15 P. 16 Winter Quarter Assignment G13 A data file named g13.dat exists in the class "common area" on the UNIX system. The file contains actual data from one test of an instrumented bicycle from an engineering hands-on lab experiment. You should look at the file on the screen (with a "more" command), but DO NOT print it out, as it contains several thousand (but less than 12,000) lines of data.Assignment G13: Lect 15 P. 17 Winter Quarter Assignment G13 You will note that at the beginning of the file there are several lines of "header" information followed by many lines of data in four columns. Count by hand the number of lines from the beginning of the file until you get to a line that has the actual data in the four columns. (You will need this number in Step 2 later.) The fourth column is the raw data (voltage) values from the lab experiment.Steps for G13: Lect 15 P. 18 Winter Quarter Steps for G13 Write a complete C program, (say, g13.cpp), which does the following: Opens the data file for input. Input the correct number of header lines one by one, display each one on the screen and print each one to a result file (say, g13res.dat), and then discard the information.Steps for G13: Lect 15 P. 19 Winter Quarter Steps for G13 For opening the data file and the output file, just use the usual fopen routine. For reading the header lines, it might be rather convenient to read the complete line into a character array or string. How long should this string be? What routine might be used?Steps for G13: Lect 15 P. 20 Winter Quarter Steps for G13 Input each of the lines of data arranged in the four columns, discarding the data values from each of the first three columns and storing only the data from the fourth column in a one-dimensional array. For skipping over the columns with unwanted data, you will need to use the assignment suppression operator, * , in the scanf format. Your program will need to detect the end-of-file ( EOF ) to know when to stop inputting data. Close the input file when you reach the EOF .Data from g13.dat: Lect 15 P. 21 Winter Quarter Data from g13.dat " "Source File: C:\PROGRA~1\PSLOG\195RIDE.PL1 "ID: IE Group 4 Bike Stress friday XR440 12 bi "Ch1 lbl/scl: Start/Stop /A "Ch2 lbl/scl: input voltage signal /-5.000 05.000 "Ch3 lbl/scl: Off /C "Ch4 lbl/scl: Off /C "Rate (mins): 0.0000833333324 Bat: 8.8 "First: Fri 20-Nov-1998 10:38:47am "Last: Fri 20-Nov-1998 10:39:40am "Transferred: Fri 20-Nov-1998 10:42:37am "Eq. PC time: Fri 20-Nov-1998 10:42:38AMData from g13.dat: Lect 15 P. 22 Winter Quarter Data from g13.dat "Rate (mins): 0.0000833333324 Bat: 8.8 "First: Fri 20-Nov-1998 10:38:47am "Last: Fri 20-Nov-1998 10:39:40am "Transferred: Fri 20-Nov-1998 10:42:37am "Eq. PC time: Fri 20-Nov-1998 10:42:38AM " Date,Time,Ch1:Deg F,Ch2: 11/20/1998 10:38:47.000 -4.989 0.238 11/20/1998 10:38:47.005 -4.989 0.231 11/20/1998 10:38:47.010 -4.989 0.228 11/20/1998 10:38:47.015 -4.989 0.231 11/20/1998 10:38:47.020 -4.989 0.228Processing the G13 Data File: Lect 15 P. 23 Winter Quarter Processing the G13 Data File For skipping unwanted columns, we need to use the "assignment suppression operator" in the format specification: fscanf (infile, "%*s%*s%*s%f", &data_val[ i ] ) ; Remember, to check for EOF, you could use the feof function.Assignment G13: Lect 15 P. 24 Winter Quarter Assignment G13 Find the largest value in the array and the smallest value in the array. Display the results on the screen, and also write the results to the output file, g13result.dat . The results to be displayed and printed are: The total number of data points in the file The maximum voltage and time at which it occurred The minimum voltage and time at which it occurred The elapsed time between the maximum and minimum valuesAssignment G13: Lect 15 P. 25 Winter Quarter Assignment G13 The change in the output voltage is related to the strain of the strain gage by: where: Δ V out = V in * A * S g * ε V in = 5.0 Volts ε is the strain A = 500 (amplification) Δ V out is the change in voltage S g = 2.085 (gage factor) The equation can be solved to give the strain as a function of the output voltageAssignment 13: Lect 15 P. 26 Winter Quarter Assignment 13 Stress-Strain: Hooke’s Law The stress( σ ) in the bicycle fork can be calculated from the strain ( ε ), by using Hooke’s Law: σ = E * ε Where E is the Modulus of Elasticity For the bike fork material E = 29.0 x 10 6 psi The yield stress = 36,000 psi