Week 7 Class activities
Download
Report
Transcript Week 7 Class activities
http://www.comp.nus.edu.sg/~cs1010/
WEEK 7
Class Activities
© NUS
CS1010 (AY2015/6 Semester 2)
Week 7: Arrays
Preparation
Unit #11: Random Numbers
Unit #12: Using UNIX I/O Redirection
One-dimensional Arrays
Going through examples in Unit #10
Multi-dimensional Arrays
Exercise #1: Sum to Random Position
Exercise #2: Matrix Multiplication
Exercise #3: Valid Path
Week7 - 2
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 3
Random Numbers
We will go through Unit #11 Random Numbers.
© NUS
CS1010 (AY2015/6 Semester 2)
Using UNIX I/O Redirection
We will go through Unit #12 UNIX I/O
Redirection
Week7 - 4
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 5
One-dimensional Arrays
We will go through the examples in Unit #10.
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 6
Multi-dimensional Arrays
We will go through the examples in Unit #10.
Work out the following exercises.
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 7
Exercise #1: Sum to Random Position (1/4)
Write a program Week7_SumToRandomPos.c that
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 Week7_SumToRandomPos.c
is given. Study the function scanArray() closely.
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 8
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.3 12.4
7.5 8.6 -3.7 11.8
9.9 -20.0 17.1 10.2
Sum to position [1][2] = 27.80
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 9
Exercise #1: Sum to Random Position (3/4)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ROWS 5
#define MAX_COLS 5
Week7_SumToRandomPos.c
void scanArray(float [][MAX_COLS], int, int);
int main(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
return 0;
}
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 10
Exercise #1: Sum to Random Position (4/4)
Week7_SumToRandomPos.c
void scanArray(float arr[][MAX_COLS],
int rows, int cols) {
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.
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 11
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.
mn
matrix
np
matrix
=
mp
matrix
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 12
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:
1 2 0
1 0 0
0
1
1
2
1
0
1 0 1
0 2 1
3 2 0
2 3 1
1 2 1
3
2 1 3 2
2
1
3 0 2 1
2
15 17 11
13
13
6
2 1
2 3
3 0
1 3
Complete the prodMatrix() function in Unit10_MatrixOps.c
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 13
Exercise #2: Matrix Multiplication (3/3)
Multiplying a 2 4 matrix with a 4 3 matrix:
col 0col 1
row 0
2
1
3
2
row 1
3
0
2
1
3
2
1
2
2
3
1
3
0
2
1
3
6 + 2 + 3 + 4 = 15
4 + 2 + 9 + 2 = 17
9 + 0 + 2 + 2 = 13
row 0,row 0,
col 0 col 1
=
? 17
? 11
?
15
? 13
?
13
row 1,
col 0
?
6
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 14
Maze (1/2)
Let’s consider a maze that is represented by a twodimensional 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].
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 15
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
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 16
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.
0 1 2 3 4 5
Examples:
0
Valid path: ‘E’, ‘E’, ‘S’, ‘N’, ‘E’, ‘E’, ‘S’
Invalid path: ‘S’, ‘S’, ‘W’
Invalid path: ‘S’, ‘S’, ‘S’, ‘E’
1
2
3
4
Write a function
5
inisValid (int maze[][6], char path[])
that takes in a 6 6 maze and a path with at most 10
characters. It returns 1 if path is valid in maze, or returns
0 otherwise.
An incomplete program Week7_IsValid.c is given. It
handles string input which is not covered yet.
© NUS
CS1010 (AY2015/6 Semester 2)
Week7 - 17
Things-To-Do
Revise
Chapter 6: Numeric Arrays
Lab #3 Deadline: 4 Mar 2016, Friday, 10pm
Mid-Semester Test: 9 Mar 2016
Check CS1010 “Term Tests” web page
Continue to do practice exercises on
CodeCrunch
© NUS
CS1010 (AY2015/6 Semester 2)
End of File
Week7 - 18