Week 7 Class activities

advertisement
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 24 matrix with a 43 matrix
gives a 23 matrix.
mn
matrix

np
matrix
=
mp
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
Download