180 likes | 199 Views
This week's class activities in CS1010 cover arrays, random numbers, and UNIX I/O. Topics include one-dimensional and multi-dimensional arrays, matrix multiplication, and finding a valid path in a maze. Exercises include summing to a random position, matrix multiplication, and validating a path.
E N D
Lecturer’s slides http://www.comp.nus.edu.sg/~cs1010/ WEEK 6 Class Activities
CS1010 (AY2014/5 Semester 1) Week 6: Arrays Preparation • Going through examples in Unit #10 • Unit #11: Random Numbers • Unit #12: Using UNIX I/O Redirection One-dimensional Arrays Multi-dimensional Arrays • Exercise #1: Sum to Random Position • Exercise #2: Matrix Multiplication • Exercise #3: Valid Path
CS1010 (AY2014/5 Semester 1) Random Numbers • We will go through Unit #11 Random Numbers.
CS1010 (AY2014/5 Semester 1) Using UNIX I/O Redirection • We will go through Unit #12 UNIX I/O Redirection
CS1010 (AY2014/5 Semester 1) One-dimensional Arrays • We will go through the examples in Unit #10.
CS1010 (AY2014/5 Semester 1) Multi-dimensional Arrays • We will go through the examples in Unit #10. • Work out the following exercises.
CS1010 (AY2014/5 Semester 1) Exercise #1: Sum to Random Position (1/4) • Write a program Week6_SumToRandomPos.cthat reads in values (of type float) for a 2D array with at most 5 rows and 8 columns, generates a random position in the array and sums the elements from index [0][0] to that position, in row-major order. • Your program should contain the function sumPartial() to take in the array and a random position and return the sum of the elements up to that position. • What are the parameters of sumPartial()? • The incomplete program Week6_SumToRandomPos.cis given. Study the function scanArray() closely.
CS1010 (AY2014/5 Semester 1) Exercise #1: Sum to Random Position (2/4) • The sum is printed in 2 decimal places. • To ease data input, create a file to store the input data, and use UNIX input redirection to redirect input from this file when you execute the program. • Sample run: $ Enter rows and columns: 3 4 $ Enter 12 values: 5.1 4.2 -6.312.4 7.5 8.6-3.7 11.8 9.9 -20.0 17.1 10.2 Sum to position [1][2] = 27.80
CS1010 (AY2014/5 Semester 1) Exercise #1: Sum to Random Position (3/4) #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_ROWS5 #define MAX_COLS5 voidscanArray(float [][MAX_COLS], int, int); intmain(void) { float array[MAX_ROWS][MAX_COLS]; int rows, cols, upToRow, upToCol; printf("Enter rows and columns: "); scanf("%d %d", &rows, &cols); scanArray(array, rows, cols); srand(time(NULL)); upToRow = rand() % rows; upToCol = rand() & cols; // call sumPartial() function below printf("Sum to position [%d][%d] = %.2f\n"); // incomplete return0; } Week6_SumToRandomPos.c
CS1010 (AY2014/5 Semester 1) Exercise #1: Sum to Random Position (4/4) Week6_SumToRandomPos.c voidscanArray(floatarr[][MAX_COLS], int rows, intcols) { int r, c; printf("Enter %d values:\n", rows * cols); for (r=0; r < rows; r++) for (c=0; c < cols; c++) scanf("%f", &arr[r][c]); } // Sum elements from position [0][0] to a random // position [upToRow][upToCol]. // Fill in sumPartial() function below.
CS1010 (AY2014/5 Semester 1) Exercise #2: Matrix Multiplication (1/3) • To multiply two matrices A and B, the number of columns in A must be the same as the number of rows in B. • The resulting matrix has same number of rows as A and number of columns as B • For example, multiplying a 24 matrix with a 43 matrix gives a 23 matrix. m n matrix n p matrix = m p matrix
CS1010 (AY2014/5 Semester 1) Exercise #2: Matrix Multiplication (2/3) • To compute C = A B, where A, B, C are matrices ci,j = (ai,1 b1,j ) + (ai,2 b2,j ) + . . . + (ai,n bn,j) ci,j is sum of terms produced by multiplying the elements of A’s row i with B’s column j. • Examples: • Complete the prodMatrix() function in Unit10_MatrixOps.c
CS1010 (AY2014/5 Semester 1) Exercise #2: Matrix Multiplication (3/3) • Multiplying a 2 4 matrix with a 4 3 matrix: col 0 col 1 row 0, col 0 row 0, col 1 3 2 1 row 1 row 0 2 2 3 ? ? 17 ? 11 15 = 1 3 0 ? ? ? 13 13 6 2 1 3 row 1, col 0 2 1 3 2 6 + 2 + 3 + 4 = 15 3 0 2 1 4 + 2 + 2 + 9 = 17 9 + 0 + 2 + 2 = 13
CS1010 (AY2014/5 Semester 1) Maze (1/2) • Let’s consider a maze that is represented by a two-dimensional 6 6 integer array. • The value of each array element is either 0 (representing a wall) or 1 (representing a cell). • The starting and exit points in the maze are specified by the cells maze[0][0]and maze[5][5] respectively. • A path is represented by a single-dimensional character array with four possible element values representing the move directions: ‘N’ (for north), ‘S’ (for south), ‘E’ (for east), and ‘W’ (for west). Each path is defined with respect to the starting cell maze[0][0].
CS1010 (AY2014/5 Semester 1) Maze (2/2) • Example of a 6 6 maze Start 0 1 2 3 4 5 0 1 2 3 4 5 Exit Cell Wall
CS1010 (AY2014/5 Semester 1) Exercise #3: Valid Path • A path in a maze is defined to be valid if the path is within the maze and does not knock against any wall. • Examples: • Valid path: ‘E’, ‘E’, ‘S’, ‘N’, ‘E’, ‘E’, ‘S’ • Invalid path: ‘S’, ‘S’, ‘W’ • Invalid path: ‘S’, ‘S’, ‘S’, ‘E’ • Write a functioninisValid (int maze[][6], char path[])that takes in a 6 6 mazeand a pathwith at most 10 characters. It returns 1 if path is valid in maze, or returns 0 otherwise. • An incomplete program Week6_IsValid.cis given. It handles string input which is not covered yet. 0 1 2 3 4 5 0 1 2 3 4 5
CS1010 (AY2014/5 Semester 1) Things-To-Do • Revise • Chapter 6: Numeric Arrays • PE1 • This Saturday! • Refer to CS1010 website “PE” page for details • Continue to do practice exercises on CodeCrunch
CS1010 (AY2014/5 Semester 1) End of File