From 926f709811f738d5e648c244d397b04d98e9706c Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Mon, 7 Oct 2024 07:42:56 -0600 Subject: [PATCH] Daily notes and flashcard changes. --- .../plugins/obsidian-to-anki-plugin/data.json | 47 +- notes/_journal/{ => 2024-09}/2024-09-29.md | 0 notes/_journal/2024-09/2024-09-30.md | 9 + notes/_journal/2024-10-07.md | 9 + notes/_journal/2024-10/2024-10-01.md | 9 + notes/_journal/2024-10/2024-10-02.md | 11 + notes/_journal/2024-10/2024-10-03.md | 11 + notes/_journal/2024-10/2024-10-04.md | 11 + notes/_journal/2024-10/2024-10-05.md | 9 + notes/_journal/2024-10/2024-10-06.md | 11 + notes/algorithms/order-growth.md | 2 +- notes/c17/strings.md | 29 + notes/c17/types/derived.md | 540 +++++++++++++++++- notes/c17/types/simple.md | 2 +- notes/data-structures/b-tree.md | 8 - .../formal-system/proof-system/equiv-trans.md | 2 +- notes/formal-system/proof-system/index.md | 2 +- notes/set/index.md | 6 +- notes/set/natural-numbers.md | 20 +- notes/set/order.md | 10 +- notes/x86-64/instructions/arithmetic.md | 2 +- notes/x86-64/instructions/conditions.md | 62 ++ 22 files changed, 765 insertions(+), 47 deletions(-) rename notes/_journal/{ => 2024-09}/2024-09-29.md (100%) create mode 100644 notes/_journal/2024-09/2024-09-30.md create mode 100644 notes/_journal/2024-10-07.md create mode 100644 notes/_journal/2024-10/2024-10-01.md create mode 100644 notes/_journal/2024-10/2024-10-02.md create mode 100644 notes/_journal/2024-10/2024-10-03.md create mode 100644 notes/_journal/2024-10/2024-10-04.md create mode 100644 notes/_journal/2024-10/2024-10-05.md create mode 100644 notes/_journal/2024-10/2024-10-06.md diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index 6eeadac..d62403e 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -206,7 +206,15 @@ "graph-non-subgraph.png", "bfs.gif", "closed-addressing.png", - "open-addressing.png" + "open-addressing.png", + "theta-notation.png", + "big-o-notation.png", + "big-omega-notation.png", + "b-tree-full-node.png", + "b-tree-split-node.png", + "b-tree-initial.png", + "b-tree-inserted-b.png", + "b-tree-inserted-q.png" ], "File Hashes": { "algorithms/index.md": "3ac071354e55242919cc574eb43de6f8", @@ -250,7 +258,7 @@ "algorithms/loop-invariants.md": "cbefc346842c21a6cce5c5edce451eb2", "algorithms/loop-invariant.md": "3b390e720f3b2a98e611b49a0bb1f5a9", "algorithms/running-time.md": "5efc0791097d2c996f931c9046c95f65", - "algorithms/order-growth.md": "764610efa15de0be6d4092127b61440c", + "algorithms/order-growth.md": "b2868f2523bb85f9e9c3fbfeb3753f0c", "_journal/2024-02-08.md": "19092bdfe378f31e2774f20d6afbfbac", "algorithms/sorting/selection-sort.md": "73415c44d6f4429f43c366078fd4bf98", "algorithms/index 1.md": "6fada1f3d5d3af64687719eb465a5b97", @@ -318,7 +326,7 @@ "_journal/2024-02/2024-02-21.md": "f423137ae550eb958378750d1f5e98c7", "_journal/2024-02-23.md": "219ce9ad15a8733edd476c97628b71fd", "_journal/2024-02/2024-02-22.md": "312e55d57868026f6e80f7989a889c2b", - "c17/strings.md": "2da50edd26eae35c81f70e65bbd12d49", + "c17/strings.md": "84c9b2b98d58bad9f057596a78901b13", "c17/index.md": "02722edf46dd45f732996eaa1980944f", "c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500", "c17/declarations.md": "2d7877915bf8a2772d1e4de636ba52a5", @@ -386,7 +394,7 @@ "_journal/2024-03-18.md": "8479f07f63136a4e16c9cd07dbf2f27f", "_journal/2024-03/2024-03-17.md": "23f9672f5c93a6de52099b1b86834e8b", "set/directed-graph.md": "b4b8ad1be634a0a808af125fe8577a53", - "set/index.md": "9ac07f7fc1fadf1b42278df90b464adb", + "set/index.md": "05a73d62902e3eecec7ce7b902027590", "set/graphs.md": "a56f867f51e69cb7438bbdf6215fca36", "_journal/2024-03-19.md": "a0807691819725bf44c0262405e97cbb", "_journal/2024-03/2024-03-18.md": "2c711c50247a9880f7ed0d33b16e1101", @@ -581,7 +589,7 @@ "lambda-calculus/index.md": "aab579d6826d40d2984e5289c3f547e5", "x86-64/instructions/condition-codes.md": "9c05ed99f5c96162e25f0ec4db55c656", "x86-64/instructions/logical.md": "49d40018f1fcb4ed1595d9175bbaab57", - "x86-64/instructions/arithmetic.md": "a6e6ef93b7c37b058cffc6dff5786ab7", + "x86-64/instructions/arithmetic.md": "df57fdc8d260d0812464b08565ef4c51", "x86-64/instructions/access.md": "3efe399b89b947ab280dc1e045675390", "x86-64/instructions/index.md": "72c19067e938ab39ea51d25d6ac2bad9", "_journal/2024-06-09.md": "935b3ddf65c51e680ac5c000c7e380af", @@ -686,8 +694,8 @@ "_journal/2024-07/2024-07-20.md": "d8685729effc374e4ece1e618c2fdad3", "logic/classical/index.md": "ee0a4b2bfcfa2cab0880db449cb62df1", "logic/classical/truth-tables.md": "b739e2824a4a5c26ac446e7c15ce02aa", - "formal-system/proof-system/index.md": "800e93b72a9852ea4823ab0a40854bba", - "formal-system/proof-system/equiv-trans.md": "fd837abff3eaac4f4c949a1bb69127c5", + "formal-system/proof-system/index.md": "c0358072f83d73989f4a7e98dbc0dc32", + "formal-system/proof-system/equiv-trans.md": "72d96306d5bc818e67b5a6aa777b7036", "formal-system/logical-system/index.md": "708bb1547e7343c236068c18da3f5dc0", "formal-system/logical-system/pred-logic.md": "4559020fde708b9d0184d9fd56559c98", "formal-system/logical-system/prop-logic.md": "b61ce051795d5a951c763b928ec5cea8", @@ -740,7 +748,7 @@ "_journal/2024-08/2024-08-07.md": "119c052f4109a3e098d825b771af89de", "_journal/2024-08-09.md": "2ce3e0c468f51750d8ad86a19bcc3264", "_journal/2024-08/2024-08-08.md": "b8211a4c576ff594217e2e9cae9396c0", - "data-structures/b-tree.md": "32673aceb58a3605e0386f490a7aaefc", + "data-structures/b-tree.md": "011f11424c9892219dcaa66de72f3f18", "data-structures/binary-tree.md": "67b0b5b9688faa205983993fe507079a", "_journal/2024-08-10.md": "08e7ea4a78c46645b93ec51e2372d04f", "_journal/2024-08/2024-08-09.md": "2ce3e0c468f51750d8ad86a19bcc3264", @@ -758,7 +766,7 @@ "_journal/2024-08/2024-08-15.md": "7c3a96a25643b62b0064bf32cb17d92f", "_journal/2024-08-17.md": "b06a551560c377f61a1b39286cd43cee", "_journal/2024-08/2024-08-16.md": "da1127a1985074a3930b4c3512344025", - "set/order.md": "6c0e404f6d228919b2a7d741476ebeca", + "set/order.md": "0bfff1dbd51bc49a9c1df5766ff01044", "_journal/2024-08-18.md": "6f8aec69e00401b611db2a377a3aace5", "ontology/philosophy/properties.md": "41b32249d3e4c23d73ddb3a417d65a4c", "_journal/2024-08-19.md": "94836e52ec04a72d3e1dbf3854208f65", @@ -766,7 +774,7 @@ "_journal/2024-08/2024-08-17.md": "b06a551560c377f61a1b39286cd43cee", "calculus/bounds.md": "cbae7421eaa096cd17a2f9de079f593d", "calculus/index.md": "5ee4d950533ae330ca5ef9e113fe87f3", - "x86-64/instructions/conditions.md": "60f1b9a7779bf4e5a817699b60e727eb", + "x86-64/instructions/conditions.md": "093cf907ccbb665961134624d19e31d3", "_journal/2024-08-20.md": "e8bec308d1b29e411c6799ace7ef6571", "algebra/arch-prop.md": "bca3724ef5aae3f7f20907108087af47", "_journal/2024-08/2024-08-19.md": "94836e52ec04a72d3e1dbf3854208f65", @@ -775,7 +783,7 @@ "_journal/2024-08/2024-08-21.md": "1637b8ec8475cf3eb4f41d1d86cbf5df", "_journal/2024-08/2024-08-20.md": "e8bec308d1b29e411c6799ace7ef6571", "_journal/2024-08-23.md": "3b2feab2cc927e267263cb1e9c173d50", - "set/natural-numbers.md": "52f33a992318b164829eaeab07f1c58c", + "set/natural-numbers.md": "72b6ffb986e47609bf8c41d6711d4372", "_journal/2024-08-24.md": "563fad24740e44734a87d7c3ec46cec4", "_journal/2024-08/2024-08-23.md": "7b5a40e83d8f07ff54cd9708017d029c", "_journal/2024-08/2024-08-22.md": "050235d5dc772b542773743b57ce3afe", @@ -783,9 +791,9 @@ "c17/enums.md": "9414fb67aa256a0a11b7240534c67bf6", "c17/derived-types.md": "6fb8f23a2423f05d5bdccb6672a32e38", "c17/basic-types.md": "7c6653bf6dc24c2f2aa72fc95c4f7875", - "c17/types/simple.md": "78ad78da8382f8af6418b519409b927d", + "c17/types/simple.md": "502c7a742e8516057f820c75cc7a096e", "c17/types/enumerated.md": "e1f70a30677c776b7b44ac3e0ff4e76d", - "c17/types/derived.md": "aff0d2b6d218fb67af3cc92ead924de3", + "c17/types/derived.md": "4bc5b8d8a8d24a9048f2a0e1c96af8ab", "c17/types/basic.md": "5064e21e683c0218890058882e06b6f3", "c17/types/index.md": "14b651bcfc8b2d62ffd200a74a9a2a6b", "_journal/2024-08-25.md": "e73a8edbd027d0f1a39289540eb512f2", @@ -849,7 +857,18 @@ "_journal/2024-09/2024-09-27.md": "d788fa04c029009f42387317c549d93e", "encoding/binary.md": "0b9beb6913906aa2523d8ab193c67f67", "_journal/2024-09-29.md": "232733c9ad7ebd89e8834cd61e1536d7", - "_journal/2024-09/2024-09-28.md": "1b47792313acf09b1ae768d5918df703" + "_journal/2024-09/2024-09-28.md": "1b47792313acf09b1ae768d5918df703", + "_journal/2024-10-01.md": "2547ea281e11e2bc728d2b21787f1270", + "_journal/2024-09/2024-09-30.md": "8a423586bb9f6174dff50b075d64f4e2", + "_journal/2024-09/2024-09-29.md": "95b8f280df50dc190f60a3cd8001fb8c", + "_journal/2024-10-02.md": "cee43224994fadd51be2156f4b93f2f0", + "_journal/2024-10/2024-10-01.md": "fe3c4efd15f2dbb58bf43182d230b385", + "_journal/2024-10-03.md": "08817e93e9fea465d74c385721ee7706", + "_journal/2024-10/2024-10-02.md": "cee43224994fadd51be2156f4b93f2f0", + "_journal/2024-10-06.md": "851efa5156caadd79c898538a153c0dd", + "_journal/2024-10/2024-10-05.md": "88b4c0155583394ece5f16c01e051019", + "_journal/2024-10/2024-10-04.md": "6836a9c6eff8b5723ef474f4f4c298ed", + "_journal/2024-10/2024-10-03.md": "3f8c9a05e129ac698bad77873f114fe0" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-09-29.md b/notes/_journal/2024-09/2024-09-29.md similarity index 100% rename from notes/_journal/2024-09-29.md rename to notes/_journal/2024-09/2024-09-29.md diff --git a/notes/_journal/2024-09/2024-09-30.md b/notes/_journal/2024-09/2024-09-30.md new file mode 100644 index 0000000..31a3f5c --- /dev/null +++ b/notes/_journal/2024-09/2024-09-30.md @@ -0,0 +1,9 @@ +--- +title: "2024-09-30" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/_journal/2024-10-07.md b/notes/_journal/2024-10-07.md new file mode 100644 index 0000000..6f3aad2 --- /dev/null +++ b/notes/_journal/2024-10-07.md @@ -0,0 +1,9 @@ +--- +title: "2024-10-07" +--- + +- [ ] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-01.md b/notes/_journal/2024-10/2024-10-01.md new file mode 100644 index 0000000..aa8bcda --- /dev/null +++ b/notes/_journal/2024-10/2024-10-01.md @@ -0,0 +1,9 @@ +--- +title: "2024-10-01" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-02.md b/notes/_journal/2024-10/2024-10-02.md new file mode 100644 index 0000000..976ef89 --- /dev/null +++ b/notes/_journal/2024-10/2024-10-02.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-02" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Notes on jump tables. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-03.md b/notes/_journal/2024-10/2024-10-03.md new file mode 100644 index 0000000..18aa0fe --- /dev/null +++ b/notes/_journal/2024-10/2024-10-03.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-03" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Begin adding notes on C [[derived|derived types]]. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-04.md b/notes/_journal/2024-10/2024-10-04.md new file mode 100644 index 0000000..932ab3d --- /dev/null +++ b/notes/_journal/2024-10/2024-10-04.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-04" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Finished [Query Execution](https://15445.courses.cs.cmu.edu/fall2022/files/hw3-clean.pdf) database homework. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-05.md b/notes/_journal/2024-10/2024-10-05.md new file mode 100644 index 0000000..9260424 --- /dev/null +++ b/notes/_journal/2024-10/2024-10-05.md @@ -0,0 +1,9 @@ +--- +title: "2024-10-05" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-06.md b/notes/_journal/2024-10/2024-10-06.md new file mode 100644 index 0000000..aeecc67 --- /dev/null +++ b/notes/_journal/2024-10/2024-10-06.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-06" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Added notes on array parameter declarations. \ No newline at end of file diff --git a/notes/algorithms/order-growth.md b/notes/algorithms/order-growth.md index c90da6d..47010d1 100644 --- a/notes/algorithms/order-growth.md +++ b/notes/algorithms/order-growth.md @@ -792,7 +792,7 @@ END%% %%ANKI Basic What is the reflexive property of $o$-notation? -Back: N/A +Back: N/A. Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). END%% diff --git a/notes/c17/strings.md b/notes/c17/strings.md index 95d6dc1..fe2c707 100644 --- a/notes/c17/strings.md +++ b/notes/c17/strings.md @@ -42,6 +42,35 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +%%ANKI +Basic +What kind of array has literals? +Back: Strings. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +A {string} is a {`NUL`}-terminated array of {`char`}. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +`` uses prefix {`mem`} to refer to {array} arguments. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +`` uses prefix {`str`} to refer to {string} arguments. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + ## `printf` The syntax for the format placeholder is `%[flags][width][.precision][length]specifier`. diff --git a/notes/c17/types/derived.md b/notes/c17/types/derived.md index 76c0093..8c75f44 100644 --- a/notes/c17/types/derived.md +++ b/notes/c17/types/derived.md @@ -8,21 +8,521 @@ tags: ## Overview -TODO - -## Pointers - -Pointers have the same size as the machine's word size since it should be able to refer to any virtual address. +A type is said to be **derived** if they are defined relative to other types. %%ANKI Basic -*Why* does a pointer's size match the machine's word size? -Back: Because it should be able to refer to any virtual address. -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - +What is a derived type? +Back: A type defined relative to other types. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + END%% -## Structures +## Aggregate Data Types + +The **aggregate data types** are so called because they combine multiple instances of one or several other data types. + +%%ANKI +Basic +What are the two aggregate data types? +Back: Arrays and structures. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Why are the aggregate data types named the way they are? +Back: They combine multiple instances of one or several other data types. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +### Arrays + +An array is a contiguous sequence of objects. An array is either a **fixed-length array** (FLA) or a **variable-length array** (VLA). + +%%ANKI +Cloze +{Arrays} combine items that all have the same {base type}. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What is the base type of the following array? +```c +double a[4]; +``` +Back: `double` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What is the base type of the following array? +```c +double a[4][4]; +``` +Back: `double[4]` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +How are parentheses introduced to the following declaration without affecting meaning? +```c +double a[4][4]; +``` +Back: +```c +double (a[4])[4]; +``` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Consider the following. How many objects make up `a[0]`? +```c +double a[M][N]; +``` +Back: `N` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Consider the following. How many objects make up `a[M - 1]`? +```c +double a[M][N]; +``` +Back: `N` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Consider the following. How many objects make up `a[N - 1]`? +```c +double a[M][N]; +``` +Back: Indeterminate. This may not be a valid array access. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Consider the following where `N < M`. How many objects make up `a[N - 1]`? +```c +double a[M][N]; +``` +Back: `N` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Consider the following where `M < N`. How many objects make up `a[N - 1]`? +```c +double a[M][N]; +``` +Back: N/A. Invalid array access. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Cloze +Array `a[M][N]` is a sequence of {1:`M`} objects each containing {1:`N`} objects. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Arrays fall under what two categories? +Back: Fixed-length and variable-length. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Where *must* a VLA be declared? +Back: Within a function. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What two ways can the length of an FLA be specified? +Back: By an ICE or an initializer. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +double a[4]; +``` +Back: FLA. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +double a[]; +``` +Back: N/A. This is invalid syntax. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +double a[] = { 0 }; +``` +Back: FLA. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +int n = 2; +double a[n]; +``` +Back: VLA. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +#define n 2 +double a[n]; +``` +Back: FLA. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +enum { n = 2 }; +double a[n]; +``` +Back: FLA. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Is the following an FLA or VLA? +```c +int n = 2; +double a[n] = {0}; +``` +Back: N/A. This is an invalid assignment. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +For the following to be an FLA, what must `N` be? +```c +double a[N]; +``` +Back: An ICE. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Replace `EXPR` in the following with an expression to compute the length of `A`. +```c +int A[N]; +size_t len = EXPR; +``` +Back: `(sizeof A) / (sizeof A[0])` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What two syntactic forms does the `sizeof` operator come in? +Back: With and without parentheses. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +When can the `sizeof` operator elide parentheses? +Back: When operating on an object. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +When does the `sizeof` operator *require* parentheses? +Back: When operating on a type. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Apply the possible syntactic forms of the `sizeof` operator to object `a`. +Back: +```c +sizeof a +sizeof(a) +``` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Apply the possible syntactic forms of the `sizeof` operator to type `int`. +Back: +```c +sizeof(int) +``` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Suppose I pass the following array to a function. Which dimension is lost? +```c +double a[M][N][P]; +``` +Back: `M` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Suppose I pass the following array to a function. What does the parameter look like? +```c +double a[M][N][P]; +``` +Back: +```c +double a[][N][P]; +``` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Why shouldn't you use the `sizeof` operator on array parameters to functions? +Back: The innermost dimension of an array parameter to a function is lost. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +How is the following array parameter rewritten using pointer syntax? +```c +void foo(int a[const]) {} +``` +Back: +```c +void foo(int *const a) {} +``` +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +How is the following array parameter rewritten using pointer syntax? +```c +void foo(const int a[]) {} +``` +Back: +```c +void foo(const int *a) {} +``` +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +How is the following pointer parameter rewritten using array syntax? +```c +void foo(int *restrict a) {} +``` +Back: +```c +void foo(int a[restrict]) {} +``` +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +How is the following pointer parameter rewritten using array syntax? +```c +void foo(volatile int *a) {} +``` +Back: +```c +void foo(volatile int a[]) {} +``` +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +What does the `3` keyword guarantee to the compiler? +```c +void bar(int a[3]); +``` +Back: N/A. It is ignored. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* might you see e.g. `3` like in the following prototype? +```c +void bar(int a[3]); +``` +Back: It serves as documentation. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +In the following, what does the `static` keyword guarantee to the compiler? +```c +void bar(int a[static 3]); +``` +Back: The minimum number of elements for the compiler to assume `a` contains. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* does the following produce a compilation error? +```c +void foo(int a[3]); + +int main() { + int a[] = { 1, 2 }; + foo(a); +} +``` +Back: N/A. It doesn't. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* does the following produce a compilation error? +```c +void foo(int a[static 3]); + +int main() { + int a[] = { 1, 2 }; + foo(a); +} +``` +Back: Because the argument to `foo` does not have at least `3` elements. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* does the following produce a compilation error? +```c +void foo(int a[static 3]); + +int main() { + int a[] = { 1, 2, 3, 4 }; + foo(a); +} +``` +Back: N/A. It doesn't. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* does the following produce a compilation error? +```c +void foo(int a[3]); + +int main() { + foo(0); +} +``` +Back: N/A. It doesn't. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +%%ANKI +Basic +*Why* does the following produce a compilation error? +```c +void foo(int a[static 1]); + +int main() { + foo(0); +} +``` +Back: Because `static` indicates a valid pointer must be passed to `foo`. +Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). + +END%% + +### Structures A `struct` is a grouping of data together. It has the following general form: @@ -34,6 +534,13 @@ struct optional_tag { } optional_var1 ... optional_varM; ``` +%%ANKI +Cloze +{Structures} combine items that may have different {base types}. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + %%ANKI Basic What is the underlined portion of the following declaration called? @@ -112,8 +619,21 @@ Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Progra END%% +## Pointers + +Pointers have the same size as the machine's word size since it should be able to refer to any virtual address. + +%%ANKI +Basic +*Why* does a pointer's size match the machine's word size? +Back: Because it should be able to refer to any virtual address. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + ## Bibliography * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. * “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf). +* Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). * Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. \ No newline at end of file diff --git a/notes/c17/types/simple.md b/notes/c17/types/simple.md index 9a430e8..dca5223 100644 --- a/notes/c17/types/simple.md +++ b/notes/c17/types/simple.md @@ -461,7 +461,7 @@ END%% %%ANKI Basic What is the minimum width of an `unsigned long long`? -Back: $64$ +Back: $64$ bits. Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). END%% diff --git a/notes/data-structures/b-tree.md b/notes/data-structures/b-tree.md index 6f7c431..34fac17 100644 --- a/notes/data-structures/b-tree.md +++ b/notes/data-structures/b-tree.md @@ -98,14 +98,6 @@ Reference: Donald Ervin Knuth, _Art of Computer Programming, 3: Sorting and Sear END%% -%%ANKI -Basic -What is the minimum number of keys a non-root node in a B-tree can have? -Back: N/A. It depends on the tree's order. -Reference: Donald Ervin Knuth, _Art of Computer Programming, 3: Sorting and Searching_, 2. ed., 34. (Reading, Mass: Addison-Wesley, 1995). - -END%% - %%ANKI Basic What is the minimum number of keys a non-root node in a B-tree of order $m$ can have? diff --git a/notes/formal-system/proof-system/equiv-trans.md b/notes/formal-system/proof-system/equiv-trans.md index d5ec9b6..dc65d7e 100644 --- a/notes/formal-system/proof-system/equiv-trans.md +++ b/notes/formal-system/proof-system/equiv-trans.md @@ -1168,7 +1168,7 @@ END%% %%ANKI Basic Suppose $x \neq y$. *Why* isn't the following a tautology? $$\large{E_{e_1, e_2, e_3, e_4}^{x[1], x[2], y, x[3]}} = E_{(x; \,[1]{:}e_1; \,[2]{:}e_2), e_3, e_4}^{x, y, x[3]}$$ -Back: Because not every $x$ was made adjacent before grouping. +Back: N/A. It is. Reference: Gries, David. *The Science of Programming*. Texts and Monographs in Computer Science. New York: Springer-Verlag, 1981. END%% diff --git a/notes/formal-system/proof-system/index.md b/notes/formal-system/proof-system/index.md index e7cf1ad..d795c02 100644 --- a/notes/formal-system/proof-system/index.md +++ b/notes/formal-system/proof-system/index.md @@ -21,7 +21,7 @@ END%% %%ANKI Cloze -Proof systems are {syntactic}, not {semantic}. +Proof systems are {syntactic} not {semantic}. Reference: “Formal System,” in _Wikipedia_, May 10, 2024, [https://en.wikipedia.org/w/index.php?title=Formal_system](https://en.wikipedia.org/w/index.php?title=Formal_system&oldid=1223254138). END%% diff --git a/notes/set/index.md b/notes/set/index.md index 7d99ce4..7074d42 100644 --- a/notes/set/index.md +++ b/notes/set/index.md @@ -36,7 +36,7 @@ END%% %%ANKI Basic -How does Knuth define a *dynamic* set? +How does Cormen et al. define a *dynamic* set? Back: As a set that can change over time. Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). Tags: adt::dynamic_set @@ -45,7 +45,7 @@ END%% %%ANKI Basic -How does Knuth distinguish mathematical sets from dynamic sets? +How does Cormen et al. distinguish mathematical sets from dynamic sets? Back: The former is assumed to be unchanging. Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). Tags: adt::dynamic_set @@ -54,7 +54,7 @@ END%% %%ANKI Basic -How does Knuth define a dictionary? +How does Cormen et al. define a dictionary? Back: As a dynamic set that allows insertions, deletions, and membership tests. Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). Tags: adt::dynamic_set diff --git a/notes/set/natural-numbers.md b/notes/set/natural-numbers.md index 4890d72..cd53e86 100644 --- a/notes/set/natural-numbers.md +++ b/notes/set/natural-numbers.md @@ -469,11 +469,19 @@ END%% %%ANKI Basic What condition of Peano system $\langle N, S, e \rangle$ generalizes the induction principle of $\omega$? -Back: Any set $A \subseteq N$ containing $e$ and closed under $S$ coincides with $N$. +Back: The Peano induction postulate. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% +%%ANKI +Basic +Given Peano system $\langle N, S, e \rangle$, what does the Peano induction postulate state? +Back: Any set $A \subseteq N$ containing $e$ and closed under $S$ coincides with $N$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + %%ANKI Basic What name is given to the condition of Peano systems involving closures? @@ -852,7 +860,7 @@ END%% %%ANKI Basic -The recursion theorem assumes existence of what Peano system? +The recursion theorem on $\omega$ assumes existence of what Peano system? Back: $\langle \omega, \sigma, 0 \rangle$ where $\sigma$ is the successor operation restricted to the natural numbers. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). @@ -965,7 +973,7 @@ END%% %%ANKI Basic In Enderton's recursion theorem proof, function $h \colon \omega \rightarrow A$ is defined as the union of what? -Back: All "acceptable" functions. +Back: The set of "acceptable" functions. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% @@ -1004,7 +1012,7 @@ END%% \ %%ANKI Basic -In Enderton's recursion theorem proof, what term refers to the "approximating" functions? +In Enderton's recursion theorem proof, what term is used to refer to the "approximating" functions? Back: They are called "acceptable". Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). @@ -1019,7 +1027,7 @@ END%% %%ANKI Cloze -In Enderton's recursion theorem proof, desired $h \colon \omega \rightarrow A$ is {a function} because {$\{ n \in \omega \mid \text{ at most one } y \text{ such that } \langle n, y \rangle \in h \}$} is {an inductive set}. +In Enderton's recursion theorem proof, desired $h \colon \omega \rightarrow A$ is {a function} because {$\{ n \in \omega \mid \text{at most one } y \text{ such that } \langle n, y \rangle \in h \}$} is {an inductive set}. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% @@ -1049,7 +1057,7 @@ END%% %%ANKI Basic -*Why* is there no function $h \colon \mathbb{N} \rightarrow \mathbb{N}$ such that for all $n \in \mathbb{N}$$, $$\begin{align*} h(0) & = 0 \\ h(n + 1) & = h(n) + 1 \end{align*}$$ +*Why* is there no function $h \colon \mathbb{N} \rightarrow \mathbb{N}$ such that for all $n \in \mathbb{N}$, $$\begin{align*} h(0) & = 0 \\ h(n + 1) & = h(n) + 1 \end{align*}$$ Back: N/A. The resursive theorem of $\omega$ states such an $h$ exists. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). diff --git a/notes/set/order.md b/notes/set/order.md index b748dd6..aca6aaf 100644 --- a/notes/set/order.md +++ b/notes/set/order.md @@ -603,11 +603,19 @@ END%% %%ANKI Basic Is $\{A\}$ a partition of set $A$? -Back: Yes. +Back: Not necessarily. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% +%%ANKI +Basic +When is $\{A\}$ a partition of set $A$? +Back: When $A \neq \varnothing$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + %%ANKI Basic Let $A = \{1, 2, 3, 4\}$. Why isn't $\{\{1, 2\}, \{2, 3, 4\}\}$ a partition of $A$? diff --git a/notes/x86-64/instructions/arithmetic.md b/notes/x86-64/instructions/arithmetic.md index a19fb63..a3298ae 100644 --- a/notes/x86-64/instructions/arithmetic.md +++ b/notes/x86-64/instructions/arithmetic.md @@ -87,7 +87,7 @@ Assume `%rbx` holds $p$ and `%rdx` holds $q$. What is the value of `%rax` in the ```asm leaq (%rdx, %rbx),%rax ``` -Back: $q + q$ +Back: $q + p$ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%% diff --git a/notes/x86-64/instructions/conditions.md b/notes/x86-64/instructions/conditions.md index f935359..ce6f41f 100644 --- a/notes/x86-64/instructions/conditions.md +++ b/notes/x86-64/instructions/conditions.md @@ -929,6 +929,68 @@ Tags: c17 END%% +%%ANKI +Basic +What efficient data structure do `switch` statements compile down into? +Back: Jump tables. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +What two conditions must be satisfied before a `switch` statement employs a jump table? +Back: A sufficient number of `case` statements that span a small range of values. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +*Why* might a `switch` statements be faster than an equivalent `if`/`else` chain? +Back: A `switch` statement can compile down into a jump table. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +What is a jump table? +Back: An array of (code) memory locations to potentially jump to. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Suppose a `switch` compiles into a jump table. What *is* a missing case? +Back: An offset in the jump table corresponding to an unspecified `case` statement. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +Suppose a `switch` compiles into a jump table. How are missing cases handled? +Back: By using the label (memory location) for the default case. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + +%%ANKI +Basic +Suppose a `switch` compiles into a jump table. How are duplicate cases handled? +Back: By using the same label (memory location) for all duplicate cases. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +Tags: c17 + +END%% + ### CMOV Like [[access#MOV|MOV]] instructions, but with the data transfer only happening if the move condition is satisfied.