cs31 discussion 1e
play

CS31 Discussion 1E Spring 17: week 08 TA: Bo-Jhang Ho - PowerPoint PPT Presentation

CS31 Discussion 1E Spring 17: week 08 TA: Bo-Jhang Ho bojhang@cs.ucla.edu Credit to former TA Chelsea Ju Project 5 - Map cipher to crib } Approach 1: For each pair of positions, check two letters in cipher and crib are both identical or


  1. CS31 Discussion 1E Spring 17’: week 08 TA: Bo-Jhang Ho bojhang@cs.ucla.edu Credit to former TA Chelsea Ju

  2. Project 5 - Map cipher to crib } Approach 1: For each pair of positions, check two letters in cipher and crib are both identical or different } For each pair of positions pos1 and pos2, cipher[pos1] == cipher[pos2] should equal to crib[pos1] == crib[pos2] } Approach 2: Get the positions of the letter and compare } For each position pos, indexes1 = getAllPositions(cipher, pos, cipher[pos]) indexes2 = getAllPositions(crib, pos, crib[pos]) indexes1 should equal to indexes2

  3. Project 5 - Map cipher to crib } Approach 3: Generate the mapping } We first have a mapping array char cipher2crib[128] = {‘\0’}; } Then whenever we attempt to map letterA in cipher to letterB in crib, we first check whether it violates the previous setup: } Is cipher2crib[letterA] != ‘\0’? // implies letterA has been used } Then cipher2crib[letterA] should equal to letterB } If no violation happens, } cipher2crib[letterA] = letterB;

  4. Road map of CS31 String Array Function Class Variable If / else Loops Pointer!!

  5. Cheat sheet Data type } int *a; } a is a variable, whose data type is int * } a stores an address of some integer “Use as verbs” } & - address-of operator } &b means I want to get the memory address of variable b } * - dereference operator } *c means I want to retrieve the value in address c

  6. Memory model Address Memory Contents 1 byte 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  7. Memory model Address Memory Contents 1 byte = 8 bits 1000 1001 1002 off on 1003 1004 1005 1006 1007 1008 A bit has 2 states 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  8. Memory model Address Memory Contents 1 byte = 8 bits 1000 1001 1002 off on 1003 1004 1005 1006 1007 1008 A bit has 2 states 1009 1010 A byte has 256 (=2 8 ) states 1011 1012 1013 1014 1015 1016 1017 1018 1019

  9. Memory model Address Memory Contents 1 byte = 8 bits 1000 1001 1002 off on 1003 1004 1005 1006 1007 1008 A bit has 2 states 1009 1010 A byte has 256 (=2 8 ) states 1011 1012 1013 A char takes 1 byte 1014 1015 An int takes 4 bytes 1016 A double takes 8 bytes 1017 1018 1019

  10. Data type review } Basic data types Type Bytes Bits Value range char 1 8 -128 to 127 short 2 16 -32,768 to 32,767 int 4 32 -2,147,483,648 to 2,147,483,647 long long 8 64 -9 * 10^18 to 9 * 10^18 float 4 32 -3.4 * 10^38 to 3.4 * 10^38 double 8 64 -1.7 * 10^308 to 1.7 * 10^308

  11. Memory model Address Memory Contents 1 byte = 8 bits 1000 1001 1002 off on 1003 1004 1005 1006 1007 1008 A bit has 2 states 1009 1010 A byte has 256 (=2 8 ) states 1011 1012 1013 1014 My has 16GB ram 1015 1016 1017 1018 1019

  12. Memory model Address Memory Contents 1 byte = 8 bits 1000 1001 1002 off on 1003 1004 1005 1006 1007 1008 A bit has 2 states 1009 1010 A byte has 256 (=2 8 ) states 1011 1012 1013 1014 My has 16GB ram 1015 1016 1017 = 16,000,000,000 bytes! 1018 1019

  13. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 1001 int b = 3; 1002 double c = 3.5; 1003 int d = b - a; 1004 1005 return 0; 1006 } 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  14. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int b = 3; double c = 3.5; int d = b - a; 1004 1005 return 0; 1006 } 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  15. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int b = 3; double c = 3.5; int d = b - a; 1004 3 b return 0; } 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  16. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int b = 3; double c = 3.5; int d = b - a; 1004 3 b return 0; } 1008 c 3.5 1016 1017 1018 1019

  17. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int b = 3; double c = 3.5; int d = b - a; 1004 3 b return 0; } 1008 c 3.5 1016 d 2

  18. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 1001 int *b = &a; 1002 1003 a++; 1004 *b += 2; 1005 1006 cout << a << endl; 1007 cout << *b << endl; 1008 return 0; 1009 } 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  19. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int *b = &a; a++; 1004 *b += 2; 1005 1006 cout << a << endl; 1007 cout << *b << endl; 1008 return 0; 1009 } 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  20. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int *b = &a; a++; 1004 *b += 2; 1005 1006 cout << a << endl; 1007 cout << *b << endl; 1008 return 0; 1009 } 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  21. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int *b; // declare a pointer var b = &a; // set address 1004 a++; 1005 *b += 2; 1006 1007 cout << a << endl; 1008 cout << *b << endl; 1009 return 0; 1010 } 1011 1012 1013 1014 1015 1016 1017 1018 1019

  22. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; ?? cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 1013 1014 1015 1016 1017 1018 1019

  23. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 5 a int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; 1000 cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 1013 1014 1015 1016 1017 1018 1019

  24. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 6 a 5 à int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; 1000 cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 1013 1014 1015 1016 1017 1018 1019

  25. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 8 a 6 à int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; 1000 cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 1013 1014 1015 1016 1017 1018 1019

  26. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 8 a int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; 1000 cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 } Output 1013 1014 } 8 1015 1016 1017 1018 1019

  27. What’s going on in the memory Address Memory Contents 1000 int main() { int a = 5; 8 a int *b; // declare a pointer var b = &a; // set address 1004 a++; *b += 2; 1000 cout << a << endl; b cout << *b << endl; (address) return 0; } 1012 } Output 1013 1014 } 8 1015 8 1016 1017 1018 1019

  28. Using uninitialized variables is always dangerous Address Memory Contents 1000 int main() { int a; 1001 int b = a + 3; 1002 int *c; 1003 1004 *c = 27; 1005 1006 return 0; 1007 } 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  29. Using uninitialized variables is always dangerous Address Memory Contents 1000 int main() { int a; ?? a int b = a + 3; int *c; 1004 *c = 27; 1005 1006 return 0; 1007 } 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  30. Using uninitialized variables is always dangerous Address Memory Contents 1000 int main() { int a; ?? a int b = a + 3; int *c; 1004 *c = 27; ?? b return 0; } 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019

  31. Using uninitialized variables is always dangerous Address Memory Contents 1000 int main() { int a; ?? a int b = a + 3; int *c; 1004 *c = 27; ?? b return 0; } 1008 ?? c (address) 1016 1017 1018 1019

  32. Using uninitialized variables is always dangerous Address Memory Contents 1000 int main() { int a; ?? a int b = a + 3; int *c; 1004 *c = 27; ?? b return 0; } 1008 } May manipulate a piece of ?? c memory not belonging to (address) this program!! 1016 1017 1018 1019

  33. Array v.s. Pointer Array is a special case of pointer Pointer can be treated as an array

  34. Array in memory Address Memory Contents 1000 int main() { int a = 3; 1002 int b[5] = {10, 20, 30, 40, 50}; 1004 int *c = &b[1]; 1006 1008 *c = 100; 1010 1012 return 0; 1014 } 1016 1018 1020 1022 1024 1026 1028 1030 1032 1034 1036 1038

Recommend


More recommend