From 65cd49bf20e9ea3825eefbb90f4678625acd8882 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Fri, 6 Dec 2024 14:25:50 -0700 Subject: [PATCH] Declarators and integrals. --- .../plugins/obsidian-to-anki-plugin/data.json | 37 +- notes/_journal/2024-12-06.md | 12 + notes/_journal/{ => 2024-12}/2024-12-04.md | 0 notes/_journal/2024-12/2024-12-05.md | 12 + notes/c17/alignment.md | 30 +- notes/c17/declarations.md | 471 +++++++++++------- notes/c17/functions.md | 21 +- notes/c17/linkage.md | 8 - notes/c17/types/derived.md | 2 +- notes/c17/types/simple.md | 38 +- notes/calculus/integrals.md | 137 +++++ notes/calculus/intervals.md | 32 ++ notes/geometry/cartesian.md | 145 ++++++ notes/geometry/images/abs-down.png | Bin 0 -> 12594 bytes notes/geometry/images/abs-left-down.png | Bin 0 -> 12068 bytes notes/geometry/images/abs-left.png | Bin 0 -> 12695 bytes notes/geometry/images/abs-right-down.png | Bin 0 -> 13399 bytes notes/geometry/images/abs-right.png | Bin 0 -> 12847 bytes notes/geometry/images/abs-up.png | Bin 0 -> 12674 bytes notes/hashing/addressing.md | 2 +- notes/set/cardinality.md | 106 +++- notes/x86-64/instructions/procedures.md | 2 +- 22 files changed, 824 insertions(+), 231 deletions(-) create mode 100644 notes/_journal/2024-12-06.md rename notes/_journal/{ => 2024-12}/2024-12-04.md (100%) create mode 100644 notes/_journal/2024-12/2024-12-05.md create mode 100644 notes/calculus/integrals.md create mode 100644 notes/geometry/images/abs-down.png create mode 100644 notes/geometry/images/abs-left-down.png create mode 100644 notes/geometry/images/abs-left.png create mode 100644 notes/geometry/images/abs-right-down.png create mode 100644 notes/geometry/images/abs-right.png create mode 100644 notes/geometry/images/abs-up.png diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index c74dcb9..8f35c65 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -230,7 +230,13 @@ "ordered-rooted-tree-cmp.png", "ordered-binary-tree-cmp.png", "lcrs-nodes.png", - "binary-tree-nodes.png" + "binary-tree-nodes.png", + "abs-right.png", + "abs-left.png", + "abs-up.png", + "abs-down.png", + "abs-right-down.png", + "abs-left-down.png" ], "File Hashes": { "algorithms/index.md": "3ac071354e55242919cc574eb43de6f8", @@ -345,7 +351,7 @@ "c17/strings.md": "b021b6f18f865aa89b3088907cdaae94", "c17/index.md": "856fa90e945e84cf6b651fed44df4cad", "c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500", - "c17/declarations.md": "87f1339be820217aec4d92cc41448805", + "c17/declarations.md": "d66c1fb83f3bddaec61f3b9644f9fd6d", "algorithms/sorting/merge-sort.md": "6506483f7df6507cee0407bd205dbedd", "_journal/2024-02-24.md": "9bb319d5014caf962a9ce3141076cff4", "_journal/2024-02/2024-02-23.md": "0aad297148e8cc4058b48b7e45787ca7", @@ -684,7 +690,7 @@ "_journal/2024-07-13.md": "13b5101306b5542b8a1381a6477378ca", "_journal/2024-07/2024-07-12.md": "8073584fae2fe7bffcd4b69a7cd29058", "hashing/static.md": "3ec6eaee73fb9b599700f5a56b300b83", - "hashing/addressing.md": "d00477899acfdb87c7f5d4e6493faa58", + "hashing/addressing.md": "d7d508ac10a66a6ca7b372eb6b76040d", "ontology/index.md": "0994403dcd84415f1459752129b55f65", "ontology/permissivism.md": "643e815a79bc5c050cde9f996aa44ef5", "ontology/properties.md": "91ece501551c444afcd119d7197958ef", @@ -807,9 +813,9 @@ "c17/enums.md": "9414fb67aa256a0a11b7240534c67bf6", "c17/derived-types.md": "6fb8f23a2423f05d5bdccb6672a32e38", "c17/basic-types.md": "7c6653bf6dc24c2f2aa72fc95c4f7875", - "c17/types/simple.md": "6355a7dbe53ddc4e77085bece76f3c29", + "c17/types/simple.md": "d54f9f20c2f74c9e7278cb6f06201df7", "c17/types/enumerated.md": "e1f70a30677c776b7b44ac3e0ff4e76d", - "c17/types/derived.md": "73d2d84eefc83585afbecce54890b3d1", + "c17/types/derived.md": "fd1ecb61bed82fb6e44c170b023e5eeb", "c17/types/basic.md": "5064e21e683c0218890058882e06b6f3", "c17/types/index.md": "df9b52726a27ae97864aecf42609e9e2", "_journal/2024-08-25.md": "e73a8edbd027d0f1a39289540eb512f2", @@ -928,7 +934,7 @@ "_journal/2024-10/2024-10-31.md": "8c5e70f566953974f252da9472e527f0", "_journal/2024-10/2024-10-30.md": "054bdbf52843fa2445f6b9f91d5ca46e", "_journal/2024-10/2024-10-29.md": "432b3b073dafd54421ff6f7182ab9a58", - "c17/alignment.md": "8d52fdf4834e9f13da3be0719da45b9a", + "c17/alignment.md": "94c20731411dc244c13bc00bbf924589", "_journal/2024-11-05.md": "6a599e6bc9dcd12a0940956285ae4d00", "_journal/2024-11-06.md": "c91de8a099cfee2514e1054400996e76", "_journal/2024-11/2024-11-05.md": "79a1304037e18fefa135d576db040784", @@ -939,7 +945,7 @@ "_journal/2024-11/2024-11-08.md": "806bbade5f8339579287687f9433334e", "_journal/2024-11/2024-11-07.md": "434ec3f15d7065ea740127aa8477dd17", "x86-64/directives.md": "019c1c1d04efb26c3e8758aac4543cc7", - "geometry/cartesian.md": "52eed93bf2d456ffab76e73d1031187c", + "geometry/cartesian.md": "662f241b94c78dfb8ac1e7fd0c1120e8", "geometry/index.md": "cac68c1b624dbb0552e56cce47bcc21d", "_journal/2024-11-10.md": "5478337fd2017b99d0b359713a511e66", "_journal/2024-11/2024-11-09.md": "46f3a640223ef533f4523837b67b57c3", @@ -952,14 +958,14 @@ "_journal/2024-11/2024-11-12.md": "24c858a93c0a5063820bd96207e6f8ab", "_journal/2024-11/2024-11-11.md": "d3ad8ddc5ecdb2cc08773fdef2ce6869", "_journal/2024-11/2024-11-10.md": "38ce405754e3823c8239df44546f3b35", - "x86-64/instructions/procedures.md": "f4e17501f64007883cd656c9a834d926", + "x86-64/instructions/procedures.md": "14d81b7adb4325f3f01da6a1673b0ad6", "_journal/2024-11-19.md": "1b74d7911d7ba01b5c3adffaa8c2a0ba", "_journal/2024-11/2024-11-18.md": "db0e4cdaa7361294c7e8a1f36897e6a6", "_journal/2024-11-22.md": "51117030e2364dbce3a8d507dead86ae", "_journal/2024-11/2024-11-21.md": "951b6034d60a40dbd8201c50abf0dbb9", "_journal/2024-11/2024-11-20.md": "951b6034d60a40dbd8201c50abf0dbb9", "_journal/2024-11/2024-11-19.md": "d879f57154cb27cb168eb1f1f430e312", - "set/cardinality.md": "ee5c8a4c6db54a18710609f312e582f2", + "set/cardinality.md": "dd5a057609b6e5dcc030c97a700abe58", "geometry/area.md": "dc362cb5be314b2b9e4ecc53f2289af0", "_journal/2024-11-23.md": "911f82ab8aede5ecdb96493aef64b0b9", "_journal/2024-11/2024-11-22.md": "51117030e2364dbce3a8d507dead86ae", @@ -969,13 +975,13 @@ "_journal/2024-11/2024-11-24.md": "894b021e6335d4e6947448c8d362c083", "_journal/2024-11-26.md": "29bc0b54d23034b9108e567a1d5fa8ac", "_journal/2024-11/2024-11-25.md": "1ec17a8473fa9c4779090ecbd22d70ef", - "calculus/intervals.md": "664b82400ab58313c099f6f9589c2327", + "calculus/intervals.md": "6a317fb5053b172611e9e7ae6f66f609", "c17/storage.md": "271d9579dc753ecff11b5c227e029d94", - "c17/functions.md": "6b940a69fd680f8a67684192b59460ce", + "c17/functions.md": "283167c88e447fa4dd6284b8ea1ce93e", "_journal/2024-11-27.md": "5a58e3a0bd08c689d30600021937495d", "_journal/2024-11/2024-11-26.md": "af7573eb695b61106e04c9f1aee51cc3", "_journal/2024-11-28.md": "4321856aec890b179f1b569b908bba60", - "c17/linkage.md": "d155d78a605b32ed591f7a2fd61ab74b", + "c17/linkage.md": "1e4f60f07619b9cbf2f71f11aae9e5f4", "_journal/2024-11-30.md": "c6040ba2caf1c9ff55faed25d7879e9a", "_journal/2024-11/2024-11-29.md": "4896d849b6345010669047323521e21a", "_journal/2024-11/2024-11-28.md": "e9d252bc4bc3d6f70db56c36e1090e86", @@ -987,7 +993,12 @@ "_journal/2024-12-03.md": "54480a38f1e16e48529cbb99c5349c74", "_journal/2024-12/2024-12-02.md": "beb50f6f3656470f2cb28b759b652994", "_journal/2024-12-04.md": "66488ad5a0934e6b7666e79723e936e1", - "_journal/2024-12/2024-12-03.md": "54480a38f1e16e48529cbb99c5349c74" + "_journal/2024-12/2024-12-03.md": "54480a38f1e16e48529cbb99c5349c74", + "_journal/2024-12-05.md": "efc79d779a0b0354fc0e8658b074a693", + "_journal/2024-12/2024-12-04.md": "965f6619edf1002d960203e3e12a413b", + "_journal/2024-12-06.md": "8ab4dc393cc7d68012b47e28029fd16d", + "_journal/2024-12/2024-12-05.md": "4f3b1e7a43e01cc97b0eed6fbc6c1f96", + "calculus/integrals.md": "a7ef5031ca474cd9d37c1aea85e96237" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-12-06.md b/notes/_journal/2024-12-06.md new file mode 100644 index 0000000..d49beaf --- /dev/null +++ b/notes/_journal/2024-12-06.md @@ -0,0 +1,12 @@ +--- +title: "2024-12-06" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Begin notes on [[integrals]], starting with those of step functions. +* Notes on [[cartesian#Shifting|shifting]] graphs. \ No newline at end of file diff --git a/notes/_journal/2024-12-04.md b/notes/_journal/2024-12/2024-12-04.md similarity index 100% rename from notes/_journal/2024-12-04.md rename to notes/_journal/2024-12/2024-12-04.md diff --git a/notes/_journal/2024-12/2024-12-05.md b/notes/_journal/2024-12/2024-12-05.md new file mode 100644 index 0000000..1b16ff2 --- /dev/null +++ b/notes/_journal/2024-12/2024-12-05.md @@ -0,0 +1,12 @@ +--- +title: "2024-12-05" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Clarification on C `enum`s and declarators. +* Add notes on [[cardinality#Cardinal Numbers|cardinal numbers]]. \ No newline at end of file diff --git a/notes/c17/alignment.md b/notes/c17/alignment.md index 835478a..f3006ce 100644 --- a/notes/c17/alignment.md +++ b/notes/c17/alignment.md @@ -11,8 +11,23 @@ tags: For a large class of modern ISAs, storage for basic C datatypes respect **self-alignment**. This means `char`s can start on any byte address, `short`s on any even address, 4-byte `int`s and `float`s must start on an address divisible by 4, and `double`s must start on an address divisible by 8. Likewise pointers are also self-aligned. +%%ANKI +Basic +What does self-alignment refer to? +Back: The placement of C datatypes on an address divisible by the size of the datatype. +Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). + +END%% + Wasted space introduced solely for alignment purposes is referred to as **slop**. +%%ANKI +Cloze +With respect to memory alignment, {slop} is {waste space for padding datatypes to their alignment}. +Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). + +END%% + ## Structures A `struct`'s **stride address** refers to the first address following the `struct` data that has the same alignment as the `struct`. In general the compiler adds various constraints to how a `struct` is layed out: @@ -24,14 +39,6 @@ A `struct`'s **stride address** refers to the first address following the `struc The `sizeof` operator on a `struct` returns the total space used between its leading address and its stride address. -%%ANKI -Basic -What does self-alignment refer to? -Back: The placement of C datatypes on an address divisible by the size of the datatype. -Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). - -END%% - %%ANKI Basic What addresses can a `char` be stored at? @@ -88,13 +95,6 @@ Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed Nove END%% -%%ANKI -Cloze -With respect to memory alignment, {slop} is {waste space for padding datatypes to their alignment}. -Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). - -END%% - %%ANKI Basic What value is slop initialized to? diff --git a/notes/c17/declarations.md b/notes/c17/declarations.md index fb4e366..a13db58 100644 --- a/notes/c17/declarations.md +++ b/notes/c17/declarations.md @@ -8,106 +8,56 @@ tags: ## Overview -C declarations were designed so that the **declaration** of an object looks like the use of the object. This isn't quite true - keywords like `volatile` and `const` only exist in declarations - but for the most part, this philosophy can be leveraged to read C declarations. +A **declaration** specifies the interpretation and attributes of a set of identifiers. It indicates [[linkage]], [[storage|storage duration]], and part of the type of the entities that the **declarators** denote. For example, the following declaration has two declarators `x` and `y`, both of type `const int`, declared in file scope with static storage duration. -## Declarators - -A **declarator** in C is roughly an identifier along with pointers, function brackets, or array indications. Pointers will look like one of: - -* `*` -* `* const` -* `* volatile` -* `* const volatile` -* `* volatile const` - -whereas **direct declarators** will look like one of: - -* `identifier` -* `identifier[size]` -* `identifier(args)` -* `(declarator)` - -%%ANKI -Basic -What two qualifiers can be used in a pointer declaration? -Back: `const` and `volatile`. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - -END%% - -## Declarations - -A **declaration** consists of at least one type-specifier (e.g. `signed short`), storage class (e.g. `static`), and/or type qualifier (e.g. `const`) as well as one or more declarators. - -%%ANKI -Basic -How many declarators does a declaration have? -Back: At least one. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - -END%% - -%%ANKI -Basic -How many declarations does a declarator have? -Back: N/A. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - -END%% - -%%ANKI -Basic -Which part of the following are declarators? ```c -int* a, b; +extern const int x, y; ``` -Back: `* a` and `b`. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - + +C declarations were designed so that the declaration of an object looks like the use of the object. This isn't always true, but for the most part this philosophy can be leveraged to read them. + +%%ANKI +Basic +Consider the following translation unit. What does the declaration refer to? +```c +extern const int x, y; +``` +Back: The entire line. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + END%% %%ANKI Basic -Which part of the following are declarations? +What is the type of `y` in the following? +```c +extern const int x, y; +``` +Back: `const int` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Consider the following translation unit. What does the declaration refer to? ```c int* a, b; ``` Back: The entire line is a single declaration. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% %%ANKI Basic -Which part of the following declaration is the declarator? +What is the type of `b` in the following? ```c -const int *const x; -``` -Back: `*const x` -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - -END%% - -%%ANKI -Basic -Which part of the following declaration is the type specifier? -```c -const int *const x; +int* a, b; ``` Back: `int` -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - -END%% - -%%ANKI -Basic -Which part of the following declaration is the type qualifier? -```c -const int *const x; -``` -Back: The first `const`. -Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. - +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + END%% %%ANKI @@ -132,6 +82,275 @@ Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Progra END%% +%%ANKI +Basic +A declaration contains how many declarators? +Back: One or more. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +A declarator contains how many declarations? +Back: N/A. Declarations contain declarators. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +## Declarators + +A **declarator** in C is roughly an identifier along with pointers, function brackets, or array indications. + +A declarator is said to be **full** if is not part of another declarator. If any part of a full declarator specifies a variable length array type, the declarator is said to be **variably modified**. Types containing variably modified declarators are likewise called **variably modified types** (VMTs). + +%%ANKI +Basic +Consider the following declaration. What are its declarators? +```c +int* a, b; +``` +Back: `* a` and `b`. +Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. + +END%% + +%%ANKI +Basic +Consider the following declaration. What are its declarators? +```c +const int *const x; +``` +Back: `*const x` +Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. + +END%% + +%%ANKI +Basic +Consider the following declaration. What is its type specifier? +```c +const int *const x; +``` +Back: `int` +Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. + +END%% + +%%ANKI +Basic +Consider the following declaration. What is its type qualifier? +```c +const int *const x; +``` +Back: The first `const`. +Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Programming Languages / C. Mountain View, Cal.: SunSoft Pr, 1994. + +END%% + +%%ANKI +Basic +What does it mean for a declarator to be full? +Back: It isn't part of another declarator. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What does it mean for a declarator to be variably modified? +Back: It contains a variable length array type. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Cloze +A {full} declarator is a declarator that {isn't part of another declarator}. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What is VMT an acronym form? +Back: **V**ariably **m**odified **t**ype. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What are the variably modified declarators of the parameters in the following? +```c +void foo(int n, int M[n][n]); +``` +Back: `M[n][n]` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What are the variably modified declarators of the parameters in the following? +```c +void foo(int M[static 1], int *N); +``` +Back: `M[static 1]` +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Which parameters are variably modified in the following prototype? +```c +void foo(int M, int[*]); +``` +Back: The last, unnamed parameter. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Which parameters are variably modified in the following prototype? +```c +void foo(int M, int (*fp)(int N[*])); +``` +Back: `fp` and `N`. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +## Definitions + +A **definition** is a declaration that causes storage to be reserved for the object (for object types) or includes the function body (for function types). + +%%ANKI +Basic +A definition contains how many declarators? +Back: One or more. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +For object types, what distinguishes a declaration from a definition? +Back: A definition causes storage to be reserved. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +For function types, what distinguishes a declaration from a definition? +Back: A definition includes a function body. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What is the relationship between a declaration and a definition? +Back: All definitions are also declarations, but not the other way around. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +### Initializers + +An **initializer** is an expression that gives an object a value at time of declaration. Only variable-length arrays (VLAs) do not allow for an initializer. The default initializer looks like `{0}`. + +%%ANKI +Basic +Which part of the following are initializers? +```c +int a = 3; +``` +Back: `3` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Which part of the following are initializers? +```c +double a = { 7.0 }; +``` +Back: `{ 7.0 }` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +Which part of the following are initializers? +```c +double a = { 7.0 }; +``` +Back: `{ 7.0 }` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +END%% + +%%ANKI +Basic +How is the following updated to include initializers `1` and `2` for `a` and `b` respectively? +```c +int a, b; +``` +Back: +```c +int a = 1, b = 2; +``` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What object types allow initializers? +Back: All but VLAs. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What object types do not allow initializers? +Back: Just variable-length arrays. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +What is the default initializer? +Back: `{0}` +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +`{0}` is a valid initializer for what object types? +Back: All but VLAs. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +%%ANKI +Basic +`{0}` is not a valid initializer for what object types? +Back: Just variable-length arrays. +Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). + +END%% + +## Precedence Rules + Declarations can be read by complying with the precedence rules outlined below: 1. Find the name of the declaration. @@ -275,96 +494,6 @@ Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Progra END%% -## Initializers - -An **initializer** is an expression that gives an object a value at time of declaration. Only variable-length arrays (VLAs) do not allow for an initializer. The default initializer looks like `{0}`. - -%%ANKI -Basic -Which part of the following are initializers? -```c -int a = 3; -``` -Back: `3` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -Which part of the following are initializers? -```c -double a = { 7.0 }; -``` -Back: `{ 7.0 }` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -Which part of the following are initializers? -```c -double a = { 7.0 }; -``` -Back: `{ 7.0 }` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). -END%% - -%%ANKI -Basic -How is the following updated to include initializers `1` and `2` for `a` and `b` respectively? -```c -int a, b; -``` -Back: -```c -int a = 1, b = 2; -``` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -What object types allow initializers? -Back: All but VLAs. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -What object types do not allow initializers? -Back: Just variable-length arrays. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -What is the default initializer? -Back: `{0}` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -`{0}` is a valid initializer for what object types? -Back: All but VLAs. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - -%%ANKI -Basic -`{0}` is not a valid initializer for what object types? -Back: Just variable-length arrays. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - ## Bibliography * Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. diff --git a/notes/c17/functions.md b/notes/c17/functions.md index 32653e7..3453332 100644 --- a/notes/c17/functions.md +++ b/notes/c17/functions.md @@ -113,14 +113,14 @@ END%% ## Prototypes -A function declaration/definition has two ways of using declarators: **parameter type lists** and **identifier type lists**. To make the distinction clear, consider the following two ways of defining an `add` function: +There exist two ways for a function [[c17/declarations|declaration]] to use declarators: **parameter type lists** and **identifier type lists**. To make the distinction clear, consider the following ways of defining an `add` function: ```c int f(int x, int y) { return x + y; } // Paramter type list int f(x, y) int x; int y; { return x + y } // Identifier type list ``` -A function **prototype** is a kind of function [[c17/declarations|declaration]] that specifies the function signature. There are three important points to make note of: +A function **prototype** is a function declaration that specifies a function signature. There are three important points to make note of: * Empty identifier lists are interpreted as "the compiler has not been told what this function's arguments are." * The standard prohibits declaring functions with a non-empty identifier list. @@ -166,7 +166,7 @@ END%% %%ANKI Basic -Which of identifier type lists and/or parameter type lists considered obsolete? +Which of identifier type lists and/or parameter type lists are considered obsolete? Back: Identifier type lists. Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). @@ -275,11 +275,22 @@ END%% %%ANKI Basic -Is the following a prototype or a declaration? +Is the following a prototype, declaration, both, or neither? +```c +void f(); +``` +Back: A declaration. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +Is the following a prototype, declaration, both, or neither? ```c void f(void); ``` -Back: A prototype. +Back: Both. Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% diff --git a/notes/c17/linkage.md b/notes/c17/linkage.md index 2d7ced1..2343b01 100644 --- a/notes/c17/linkage.md +++ b/notes/c17/linkage.md @@ -97,14 +97,6 @@ Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open END%% -%%ANKI -Basic -When can an identifier have both external and internal linkage? -Back: When specified in two different translation units. -Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). - -END%% - %%ANKI Basic Within a translation unit, what happens if an identifer has both external and internal linkage? diff --git a/notes/c17/types/derived.md b/notes/c17/types/derived.md index bda0f47..0457557 100644 --- a/notes/c17/types/derived.md +++ b/notes/c17/types/derived.md @@ -523,7 +523,7 @@ Is the following an FLA or VLA? int n = 2; double a[n] = {0}; ``` -Back: N/A. This is an invalid assignment. +Back: N/A. Variable-sized objects may not be initialized. Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). END%% diff --git a/notes/c17/types/simple.md b/notes/c17/types/simple.md index 165d021..83f6bc7 100644 --- a/notes/c17/types/simple.md +++ b/notes/c17/types/simple.md @@ -1417,32 +1417,40 @@ END%% %%ANKI Basic What name is given to members of an enumeration? -Back: An enumeration constant. +Back: Enumeration constants. Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% %%ANKI Basic -What type is given to enumerated-type variables? -Back: N/A. This is compiler dependent. -Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). - +An enumerated type must be compatible with what three possibilities? +Back: A `char`, a signed integer type, or an unsigned integer type. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + END%% %%ANKI Basic -What type is *usually* given to enumerated-type variables? -Back: `int` -Reference: Raymond, Eric. “The Lost Art of Structure Packing.” Accessed November 4, 2024. [http://www.catb.org/esr/structure-packing/](http://www.catb.org/esr/structure-packing/). - +What is the type given to an enumerated type? +Back: N/A. This is implementation-defined. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + +END%% + +%%ANKI +Basic +What restriction is enforced on the implementation-defined enumerated type? +Back: It must be capable of representing the values of all the members of the `enum`. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). + END%% %%ANKI Basic What kind of integer expressions are enumeration constants limited to? Back: Integer constant expressions with value representable as an `int`. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% @@ -1450,23 +1458,23 @@ END%% Basic Besides being an ICE, what other condition is expected on enumeration constants? Back: The ICE evaluates to an integer that fits within an `int`. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% %%ANKI Basic What mechanism(s) are available for defining constants of type `signed int`? -Back: `enum`s and macros. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Back: Macros and (possibly) `enum`s. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% %%ANKI Basic What mechanism(s) are available for defining constants of type `unsigned int`? -Back: Macros. -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). +Back: Macros and (possibly) `enum`s. +Reference: “ISO: Programming Languages - C17,” April 2017, [https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf](https://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf). END%% diff --git a/notes/calculus/integrals.md b/notes/calculus/integrals.md new file mode 100644 index 0000000..5fcb11a --- /dev/null +++ b/notes/calculus/integrals.md @@ -0,0 +1,137 @@ +--- +title: Integrals +TARGET DECK: Obsidian::STEM +FILE TAGS: calculus::integrals +tags: + - calculus + - integral +--- + +## Overview + +Let $s$ be a step function defined on [[intervals|interval]] $[a, b]$, and let $P = \{x_0, x_1, \ldots, x_n\}$ be a [[intervals#Partitions|partition]] of $[a, b]$ such that $s$ is constant on the open subintervals of $P$. Denote by $s_k$ the constant value that $s$ takes in the $k$th open subinterval, so that $$s(x) = s_k \quad\text{if}\quad x_{k-1} < x < x_k, \quad k = 1, 2, \ldots, n.$$ + +The **integral of $s$ from $a$ to $b$**, denoted by the symbol $\int_a^b s(x)\,dx$, is defined by the following formula: $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ + +%%ANKI +Basic +Apostol first introduces the integral for the ordinate sets of what kind of function? +Back: Step functions. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +How is the integral of $s$ from $a$ to $b$ denoted? +Back: $\int_a^b s(x) \,dx$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. How is the integral of $s$ from $a$ to $b$ defined? +Back: Given partition $P = \{x_0, x_1, \ldots, x_n\}$ with constant value $s_k$ on the $k$th open subinterval, $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +What is $\int_a^b s(x) \,dx$ called? +Back: The integral of $s$ from $a$ to $b$. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Integral $\int_a^b s(x) \,dx$ is assumed to be defined on what interval? +Back: Closed interval $[a, b]$. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. $\int_a^b s(x) \,dx$ corresponds to what big operator? +Back: $\sum$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. What does $s_k$ denote in the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: The value of $s$ on the $k$th open subinterval of $s$'s partition. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. What does $n$ denote in the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: The number of subintervals in $s$'s partition. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. What does $x_k$ denote in the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: The right endpoint of the $k$th subinterval of $s$'s partition. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. What does $x_{k-1}$ denote in the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: The left endpoint of the $k$th subinterval of $s$'s partition. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. What shape is described in the summation body of the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: A rectangle. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. *Why* don't the values at subdivision points matter in the following definition? $$\int_a^b s(x) \,dx = \sum_{k=1}^n s_k \cdot (x_k - x_{k - 1})$$ +Back: The area of a line segment is $0$. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a step function. How does $\int_a^b s(x) \,dx$ relate to refinements of $s$'s partition? +Back: N/A. Its value does not change. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $s$ be a constant function. What does $\int_a^b s(x) \,dx$ evaluate to? +Back: $c(b - a)$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Cloze +The {ordinate set} of any step function consists of a finite number of {rectangles}. +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +## Bibliography + +* Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). \ No newline at end of file diff --git a/notes/calculus/intervals.md b/notes/calculus/intervals.md index bf3ad7f..25313e8 100644 --- a/notes/calculus/intervals.md +++ b/notes/calculus/intervals.md @@ -97,6 +97,38 @@ Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Int END%% +%%ANKI +Basic +Let $a, b \in \mathbb{R}$ s.t. $a < b$ and $P = \{x_0, x_1, \ldots, x_n\}$ be a partition of $[a, b]$. What must $x_0$ equal? +Back: $a$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $a, b \in \mathbb{R}$ s.t. $a < b$ and $P = \{x_0, x_1, \ldots, x_n\}$ be a partition of $[a, b]$. What must $x_n$ equal? +Back: $b$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $a, b \in \mathbb{R}$ s.t. $a < b$ and $P = \{x_0, x_1, \ldots, x_n\}$ be a partition of $[a, b]$. How many subdivision points does $P$ have? +Back: $n + 1$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + +%%ANKI +Basic +Let $a, b \in \mathbb{R}$ s.t. $a < b$ and $P = \{x_0, x_1, \ldots, x_n\}$ be a partition of $[a, b]$. How many subintervals does $P$ have? +Back: $n$ +Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). + +END%% + %%ANKI Basic Let $a, b \in \mathbb{R}$ s.t. $a < b$. How is a partition of interval $[a, b]$ denoted? diff --git a/notes/geometry/cartesian.md b/notes/geometry/cartesian.md index 3002bfd..049b260 100644 --- a/notes/geometry/cartesian.md +++ b/notes/geometry/cartesian.md @@ -131,7 +131,152 @@ Reference: Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Int END%% +## Translations + +There are two kinds of translations that we can do to a graph: **shifting** and **scaling**. A **reflection** is a special case of scaling. + +%%ANKI +Basic +What are the two kinds of translations that can be done to a graph? +Back: Shifting and scaling. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Which of the two kinds of translations is reflection a special case of? +Back: Scaling. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +### Shifting + +A **vertical shift** adds a constant to every $y$-coordinate of a graph, leaving the $x$-coordinate unchanged. A **horizontal shift** adds a constant to every $x$-coordinate of a graph, leaving the $y$-coordinate unchanged. + +%%ANKI +Basic +What does it mean for a shift of a graph to be rigid? +Back: A shift does not change the size or shape of the graph. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +A {vertical} shift adds a constant to the {$y$}-coordinates of a graph. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Cloze +A {horizontal} shift adds a constant to the {$x$}-coordinates of a graph. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Let $f(x)$ be a function and $k$ be a constant. What kind of translation is $f(x + k)$? +Back: A horizontal shift. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Let $f(x)$ be a function and $k$ be a constant. What kind of translation is $f(x) + k$? +Back: A vertical shift. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Cloze +Let $f(x)$ be a function and $k$ be a constant. $f(x + k)$ horizontally shifts {left} when {$k > 0$}. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Cloze +Let $f(x)$ be a function and $k$ be a constant. $f(x) + k$ vertically shifts {down} when {$k < 0$}. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Cloze +Let $f(x)$ be a function and $k$ be a constant. $f(x) - k$ vertically shifts {up} when {$k > 0$}. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Cloze +Let $f(x)$ be a function and $k$ be a constant. $f(x + k)$ horizontally shifts {right} when {$k < 0$}. +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-right.png]] +Back: $f(x) = \lvert x - 2 \rvert$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-left.png]] +Back: $f(x) = \lvert x + 2 \rvert$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-up.png]] +Back: $f(x) = \lvert x \rvert + 2$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-down.png]] +Back: $f(x) = \lvert x \rvert - 2$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-right-down.png]] +Back: $f(x) = \lvert x - 2 \rvert - 2$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + +%%ANKI +Basic +Consider the graph of $f(x)$ below. What does $f(x)$ equal? +![[abs-left-down.png]] +Back: $f(x) = \lvert x + 2 \rvert - 2$ +Reference: James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). + +END%% + ## Bibliography * “Cartesian Coordinate System,” in _Wikipedia_, October 21, 2024, [https://en.wikipedia.org/w/index.php?title=Cartesian_coordinate_system](https://en.wikipedia.org/w/index.php?title=Cartesian_coordinate_system&oldid=1252434514). +* “James Jones, “Shifting, Reflecting, and Stretching Graphs,” accessed December 6, 2024, [https://people.richland.edu/james/lecture/m116/functions/translations.html](https://people.richland.edu/james/lecture/m116/functions/translations.html). * Tom M. Apostol, _Calculus, Vol. 1: One-Variable Calculus, with an Introduction to Linear Algebra_, 2nd ed. (New York: Wiley, 1980). \ No newline at end of file diff --git a/notes/geometry/images/abs-down.png b/notes/geometry/images/abs-down.png new file mode 100644 index 0000000000000000000000000000000000000000..fcec0a395b20c0e69ffd7704e8977761fb8a5c8c GIT binary patch literal 12594 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 literal 0 HcmV?d00001 diff --git a/notes/geometry/images/abs-left.png b/notes/geometry/images/abs-left.png new file mode 100644 index 0000000000000000000000000000000000000000..55199f9097cd31990b115c0985280aa53fffcfa2 GIT binary patch literal 12695 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 literal 0 HcmV?d00001 diff --git a/notes/geometry/images/abs-right-down.png b/notes/geometry/images/abs-right-down.png new file mode 100644 index 0000000000000000000000000000000000000000..b553308fb238951f0ea1bf35a258c216ffce1ca9 GIT binary patch literal 13399 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 literal 0 HcmV?d00001 diff --git a/notes/geometry/images/abs-up.png b/notes/geometry/images/abs-up.png new file mode 100644 index 0000000000000000000000000000000000000000..fce505b7cff53e5238715401271cebeb71972afb GIT binary patch literal 12674 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 literal 0 HcmV?d00001 diff --git a/notes/hashing/addressing.md b/notes/hashing/addressing.md index 7618873..e99e810 100644 --- a/notes/hashing/addressing.md +++ b/notes/hashing/addressing.md @@ -194,7 +194,7 @@ END%% %%ANKI Basic What is the theoretical maximum load factor in closed addressing? -Back: N/A +Back: N/A. There is no maximum. Reference: “Hash Tables: Open vs Closed Addressing | Programming.Guide,” accessed June 12, 2024, [https://programming.guide/hash-tables-open-vs-closed-addressing.html](https://programming.guide/hash-tables-open-vs-closed-addressing.html). END%% diff --git a/notes/set/cardinality.md b/notes/set/cardinality.md index 1171cf4..c24554f 100644 --- a/notes/set/cardinality.md +++ b/notes/set/cardinality.md @@ -189,7 +189,7 @@ END%% ## Finiteness -A set is **finite** if and only if it is equinumerous to some [[natural-numbers|natural number]]. Otherwise it is **infinite**. +A set is **finite** if and only if it is equinumerous to a [[natural-numbers|natural number]]. Otherwise it is **infinite**. %%ANKI Basic @@ -243,6 +243,8 @@ END%% No natural number is equinumerous to a proper subset of itself. More generally, no finite set is equinumerous to a proper subset of itself. +Likewise, any set equinumerous to a proper subset of itself must be infinite. + %%ANKI Basic How does Enderton state the pigeonhole principle for $\omega$? @@ -331,6 +333,108 @@ Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Pre END%% +%%ANKI +Basic +What does the contrapositive of the pigeonhole principle state? +Back: Any set equinumerous to a proper subset of itself is infinite. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +What general strategy is used to prove $\omega$ is an infinite set? +Back: Prove $\omega$ is equinumerous to a proper subset of itself. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +## Cardinal Numbers + +A **cardinal number** is a set that is $\mathop{\text{card}} A$ for some set $A$. The set $\mathop{\text{card}} A$ is defined such that + +* For any sets $A$ and $B$, $\mathop{\text{card}}A = \mathop{\text{card}}B$ iff $A \approx B$. +* For a finite set $A$, $\mathop{\text{card}}A$ is the natural number $n$ for which $A \approx n$. + +%%ANKI +Basic +How is the cardinal number of set $A$ denoted? +Back: As $\mathop{\text{card}} A$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Suppose $A$ is finite. What does $\mathop{\text{card}} A$ evaluate to? +Back: The unique $n \in \omega$ such that $A \approx n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Consider $n \in \omega$. What does $\mathop{\text{card}} n$ evaluate to? +Back: $n$ +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Suppose $a$, $b$, and $c$ are distinct objects. What does $\mathop{\text{card}} \{a, b, c\}$ evaluate to? +Back: $3$ +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +What does Enderton refer to by the "process called 'counting'"? +Back: Choosing a one-to-one correspondence between two sets. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Cloze +A {cardinal number} is a set that is {$\mathop{\text{card}} A$} for some set $A$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +How do cardinal numbers relate to equinumerosity? +Back: For any sets $A$ and $B$, $\mathop{\text{card}} A = \mathop{\text{card}} B$ iff $A \approx B$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +According to Enderton, what is the "essential demand" for defining numbers? +Back: Defining cardinal numbers such that for any sets $A$ and $B$, $\mathop{\text{card}} A = \mathop{\text{card}} B$ iff $A \approx B$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +What name is given to $\mathop{\text{card}} \omega$? +Back: $\aleph_0$ +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Who is attributed the assignment $\mathop{\text{card}} \omega = \aleph_0$? +Back: Georg Cantor. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + ## Bibliography * Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). \ No newline at end of file diff --git a/notes/x86-64/instructions/procedures.md b/notes/x86-64/instructions/procedures.md index 534a43e..30c2534 100644 --- a/notes/x86-64/instructions/procedures.md +++ b/notes/x86-64/instructions/procedures.md @@ -78,7 +78,7 @@ What return address is pushed onto the stack after `call` is run? 2: callq .L1 3: ... ``` -Back: `3` +Back: The address corresponding to line `3`. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. END%%