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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend