+ All Categories
Home > Documents > Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by...

Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by...

Date post: 15-Sep-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
58
Transcript
Page 1: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading
Page 2: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Lecture 7

Admin MattersUnit 17: Call by Reference

Unit 18: HeapUnit 19: nD-Array

9 October 2018

Page 3: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

MidtermPE 1

(grading on-going)

Page 4: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

PE1 stats

based on sample inputs/outputs

Page 5: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

square

Page 6: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

square

22 passes

!

Page 7: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

digits

Page 8: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

digits

100 passes

!

Page 9: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

goldbach

Page 10: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

goldbach

172 passes

!

Page 11: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

newton

Page 12: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

newton

145 passes

!

Page 13: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

vote

Page 14: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

vote

225 passes

!

Page 15: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Tutorial 7

Problem Sets from Units Today

Page 16: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Assignment 4

Released last Friday(to be graded on

correctness, style, documentation)

Page 17: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

So Far

Problem Solving C language / syntax

Behavioural / Mental model Tools / Good Practice

decompositionrecursionflowchart

conditionalsassertion

types in Cfunctions in C

+ - * / %if else&& || !

machine codedata in memory

typescall stack

memory addr

clangvim

bashstyle

loopsarray/list

for/whiledo-while

arrays& *

Page 18: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Today

Problem Solving C language / syntax

Behavioural / Mental model Tools / Good Practice

decompositionrecursionflowchart

conditionalsassertion

types in Cfunctions in C

+ - * / %if else&& || !

machine codedata in memory

typescall stack

memory addrcall by value/reference

heap

clangvim

bashstyle

documentation

loopsarray/list

for/whiledo-while

arrays& *

malloc/free

Page 19: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Documentation

Page 20: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

bool is_weekday(long day);

what is day?what does it do?

Page 21: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

/*** Check if a given day is a weekday.** @param[in] day The day of the week * (1 for Monday, 7 for Sunday).** @return true if the day is a weekday, false * otherwise. */

Page 22: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

@param[in]@param[out]

@param[in,out]@return

Page 23: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

@pre@post

Page 24: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

/*** Check if a given day is a weekday.** @param[in] day The day of the week * (1 for Monday, 7 for Sunday).* @pre day >= 1 && day <= 7 * @return true if the day is a weekday, false * otherwise. */

Page 25: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Previously, in CS1010..

Page 26: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

& address of a variable

if x is a variable, then &x gives us the address of x.(where does x live?)

Page 27: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

* variable at an address

if x is an address, then *x is the variable stored in thataddress.(who lives in x?)

Page 28: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

int main() { long x;long *ptr;ptr = &x;*ptr = 1;

}

Page 29: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Arrays

Page 30: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

array decay

Page 31: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

long a[10];

ais equivalent to

&a[0]

Page 32: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

long size = cs1010_read_long();:

long a[size];

variable-size array

Page 33: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

long size = cs1010_read_long();:

long *a = cs1010_read_long_array(size);

variable-size array

Page 34: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Strings

Page 35: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

A string is justan array of char

terminated by ‘\0’

Page 36: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

char str[7] = “hello!”;

char str[7] = { ‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘!’, ’\0’}

Page 37: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Rule: You MUST only read

and write into memory allocated for you.

Page 38: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

AY18/19 Sem 1

Sometimes you write into memory you do not own, and your

code runs. It does not mean it is ok.

Page 39: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long array[4];

array[4] = 10;

Page 40: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long array[4];

:// { i >= 0 && i < 4 }array[i] = 0;

:

Page 41: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long array[10000];

My program crashed. So I make my array bigenough. It does not crash any more. Yay!

Page 42: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long array[10000];

If you code is buggy, there will still be aninput that is big enough that will crash your

code. Your code is still wrong.

Page 43: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

char *str = “hello!”;str[5] = ‘.’;

Page 44: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long add(long a, long b) { long sum; sum = a + b; return sum;

}

int main() { long x = 1; long y; y = add(x, 10);

}

Page 45: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

A function is a black box. Whatever happens in the function stays in the function.

Page 46: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long x = 1; foo(x); // { x == 1 }

Page 47: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Effect-free programming

Pure functions

Page 48: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

void set_to_0s(long len, long a[len]) {for (long i = 0; i < len; i += 1) {

a[i] = 0; }

}

Page 49: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long a[10]; a[0] = 1; foo(a); // { a[0] == ?? }

Page 50: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long a[10]; a[0] = 1; foo(a); // { a[0] == ?? }

Page 51: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Call by reference

Page 52: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Function with side effects is no longer a black box.

Page 53: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

@param[in]@param[out]

@param[in,out]

Page 54: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Heap

Page 55: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

Global Variables

Page 56: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long x;

int main() {x = 1; foo(); // { x == 1 ?? }

}

Page 57: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long (*matrix_row)[20];

Page 58: Lecture 7 - NUS Computing - Home · 2018. 10. 12. · Lecture 7 Admin Matters Unit 17:Call by Reference Unit 18:Heap Unit 19:nD-Array 9October2018. AY18/19 Sem 1 Midterm PE 1 (grading

long *(matrix_row[20]);


Recommended