diff --git a/semester3/analysis-ii/cheat-sheet-jh/analysis-ii-cheat-sheet.pdf b/semester3/analysis-ii/cheat-sheet-jh/analysis-ii-cheat-sheet.pdf index 654841d..c0d51ab 100644 Binary files a/semester3/analysis-ii/cheat-sheet-jh/analysis-ii-cheat-sheet.pdf and b/semester3/analysis-ii/cheat-sheet-jh/analysis-ii-cheat-sheet.pdf differ diff --git a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/00_line_integrals.tex b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/00_line_integrals.tex index b344fac..ff5d1ce 100644 --- a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/00_line_integrals.tex +++ b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/00_line_integrals.tex @@ -1,2 +1,60 @@ \newsectionNoPB \subsection{Line integrals} +\shortdef Let $I = [a, b]$ be a closed and bounded interval in $\R$. $f : I \rightarrow \R$ with $f(t) = (f_1(t), \ldots, f_n(t))$ continuous (also $f_i$ cont.). +\mrmvspace +\begin{enumerate}[noitemsep, label=(\arabic*)] + \item Then $\displaystyle \int_{a}^{b} f(t) \dx t = \left( \int_{a}^{b} f_1(t), \ldots, \int_{a}^{b} f_n(t) \right)$ + \item \bi{Parametrized Curve} in $\R^n$ is a continuous map $\gamma: I \rightarrow \R^n$, piecewise in $C^1$, i.e. for $k \geq 1$, we have partition $a = t_0 < t_1 < \ldots < t_k = b$, + such that if $f$ is restricted to interval $]t_{j - 1}, t_j$, restriction is $C^1$. $\gamma$ is a \textit{path} between $\gamma(a)$ and $\gamma(b)$ + \item \bi{Line integral} $X \subseteq \R^n$ is the image of $\gamma$ as above and $f : X \rightarrow \R^n$ cont.\\ + Integral $\displaystyle\int_{a}^{b} f(\gamma(t)) \cdot \gamma'(t) \dx t \in \R$ + is line integral of $f$ along $\gamma$, denoted $\displaystyle\int_{\gamma} f(s) \dx s$ or $\displaystyle\int_{\gamma} f(s) \dx \vec{s}$ or $\displaystyle\int_{\gamma} \omega$,\\ + with $\omega = f_1(x) \dx x_1 + \ldots f_n(x) \dx x_n$ +\end{enumerate} + +\rmvspace +We usually call $f : X \rightarrow \R^n$ a \bi{vector field}, which maps each point $x \in X$ to a vector in $\R^n$, displayed as originating from $x$ + +\setLabelNumber{all}{4} +\compactdef{Oriented reparametrization} of $\gamma$ is parametrized curve $\sigma : [c, d] \rightarrow \R^n$ s.t $\sigma = \gamma \circ \varphi$, with $\varphi : [c, d] \rightarrow I$ cont. map, +differentiable on $]a, b[$ and for which $\varphi(a) = c$ and $\varphi(b) = d$. +Conversely, $\gamma = \sigma \circ \varphi^{-1}$ + +\rmvspace +\shortproposition For $f : X \rightarrow \R^n$ with $X$ containing the image of of $\gamma$ and equivalently $\sigma$, +we have $\displaystyle\int_{\gamma} f(s) \cdot \dx \vec{s} = \int_{\sigma} f(s) \cdot \dx \vec{s}$ + +\mrmvspace +\setLabelNumber{all}{8} +\compactdef{Conservative Vector Field} If for any $x_1, x_2 \in X$ the line integral $\displaystyle\int_{\gamma} f(s) \dx \vec{s}$ is independent choice of $\gamma$ in $X$ + +\mrmvspace +\shortremark $f$ conservative iff $\int_{\gamma} f(s) \dx \vec{s} = 0$ for a \textit{closed} ($\gamma(a) = \gamma(b)$) parametrized curve\\ +% +\shorttheorem Let $X$ be open set, $f$ conservative vector field. Then $\exists C^1$ function $g$ s.t. $f = \nabla g$. +If any two points of $X$ can be joined by a parametrized curve, then $g$ is unique up to a constant: if $\nabla g_1 = f$, then $g - g_1$ is constant on $X$ + +\shortremark Two points $x, y \in X$ can be joined by parametrized curve $\gamma$ if $\gamma(a) = x$ and $\gamma(b) = y$. In that case, $X$ is called \bi{path-connected}. +It is true when $X$ is \textit{convex} (e.g. when $X$ is a disc or a product of intervals). +If $f$ is a vector field on $X$, then $g$ is called a \bi{potential} for $f$ and it is not unique, since we can add a constant to $g$ without changing the gradient.\\ +% +\stepLabelNumber{all} +\shortproposition For a vectorfield to be conservative, a \textit{necessary condition} is that $\displaystyle\frac{\partial f_i}{\partial x_j} = \frac{\partial f_j}{x_i}$ +for any $1 \leq i \neq j \leq n \in \N$\\ +% +\stepLabelNumber{all} +\compactdef{Start Shaped Set} $X \subseteq \R^n$ is star shaped if $\exists x_0 \in X$ s.t. $\forall x \in X$, the line segment from $x$ to $x_0$ is contained in $X$, +and we also say that $X$ is \textit{star shaped around} $x_0$\\ +% +\stepLabelNumber{all} +\shorttheorem Let $X$ start shaped and open, $f$ a $C^1$ vector field fulfilling Proposition \ref{all:4-1-13}. Then $f$ is conservative. + +\drmvspace +\setLabelNumber{all}{20} +\shortdef Let $X \subseteq \R^3$ open and $f$ a $C^1$ vector field. Then the \bi{curl} of $f$ is the conservative vector field +$\text{curl}(f) = \begin{bmatrix} + \partial_y f_3 - \partial_z f_2 \\ + \partial_z f_1 - \partial_x f_3 \\ + \partial_x f_2 - \partial_y f_1 + \end{bmatrix}$ +\ddrmvspace diff --git a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/01_int_in_rn.tex b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/01_int_in_rn.tex index bd650bb..a3ba31f 100644 --- a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/01_int_in_rn.tex +++ b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/01_int_in_rn.tex @@ -1,2 +1,48 @@ \newsectionNoPB \subsection{Riemann integral in Vector Space} +The integral of a continuous function $f: X \rightarrow \R$ with $X \subseteq \R^n$ bounded and closed, is denoted $\int_X f(x) \dx x$ with properties: +\rmvspace +\begin{enumerate}[label=(\arabic*), noitemsep] + \item \bi{(Compatibility)} If $n = 1$ and $X = [a, b]$, integral is the indefinite integral as per Analysis I + \item \bi{(Linearity)} If $f$, $g$ are continuous on $X$ and $a, b \in \R$, then $\displaystyle \int_X (a f(x) + b g(x)) \dx x = a \int_X f(x) \dx x + b \int_X g(x) \dx x$ + \item \bi{(Positivity)} If $f \leq g$, then so is the integral and if $f \geq 0$, so is the integral and if $Y \subseteq X$, then int. over $Y$ is $\leq$ over $X$ + \item \bi{(Upper bound \& Triangle Inequality)} $\displaystyle \left| \int_{X} f(x) \dx x \right| \leq \int_{X} |f(x)|\dx x$ and + $\displaystyle \left| \int_{X} (f(x) + g(x)) \dx x \right| \leq \int_{X} |f(x)| \dx x \int_X |g(x)|$ + \item \bi{(Volume)} The integral of $f$ is the volume of $\{ (x, y) \in X \times \R : 0 \leq y \leq f(x) \} \subseteq \R^{n + 1}$. + If $X$ is a bounded rectangle, e.g. $X = [a_1, b_1] \times \ldots \times [a_n, b_n] \subseteq \R^n$ and $f = 1$, then $\int_{X} \dx x = (b_n - a_n) \dots (b_1 - a_1)$. + We write $\text{Vol}(X)$ or $\text{Vol}_n(X)$ + \item \bi{(Multiple integral)} \textit{(Fubini)} If $n_1, n_2 \in \Z$ s.t. $n = n_1 + n_2$, + then for $x_1 \in \R^{n_1}$, let $Y_{x_1} = \{ x_2 \in \R^{n_2} : (x_1, x_2) \in X \} \subseteq \R^{n_2}$. + Let $X_1$ be the set of $x_1 \in \R^n$ such that $Y_{x_1}$ is not empty. Then $X_1$ and $Y_{x_1}$ are compact.\\ + If $\displaystyle g(x_1) = \int_{Y_{x_1}} f(x_1, x_2) \dx x_2$ is continuous on $X_1$, then + \dnrmvspace + \begin{align*} + \int_{X} f(x_1, x_2) \dx x = \int_{X_1} g(x_1) \dx x = \int_{X_1} g(x_1) \dx x_1 = \int_{X_1} \left( \int_{Y_{x_1}} f(x_1, x_2) \dx x_2 \right) \dx x_1 + \end{align*} + + \rmvspace + Exchanging the role of $x_1$ and $x_2$ we have (with $Z_{x_2} = \{ x_1 : (x_1, x_2) \in X \}$) if integral over $x_1$ is continuous. + \rmvspace + \begin{align*} + \int_{X} f(x_1, x_2) \dx x = \int_{X_2} \left( \int_{Z_{x_2}} f(x_1, x_2) \dx x_1 \right) \dx x_2 + \end{align*} + \drmvspace + \item \bi{(Domain additivity)} If $X_1$ and $X_2$ are compact and $f$ continuous on $X = X_1 \cup X_2$, then (for $Y = X_1 \cap X_2$) + \rmvspace + \begin{align*} + \int_X f(x) \dx x + \int_Y f(x) \dx x = \int_{X_1} f(x) \dx x + \int_{X_2} f(x) \dx x + \end{align*} + + \rmvspace + In particular, if $Y$ empty (or size is ``negligible''), then $\int_{X} f(x) \dx x = \int_{X_1} f(x) \dx x + \int_{X_2} f(x) \dx x$ +\end{enumerate} +\setLabelNumber{all}{3} +\shortdef For $m \leq n \in \N$, a \bi{parametrized $m$-set} in $\R^n$ is a continuous map $f: [a_1, b_1] \times \ldots \times [a_m, b_m] \rightarrow \R^n$, +which is $C^1$ on $]a_1, b_1[ \times \ldots \times ]a_m, b_m[$. +$B \subseteq \R^n$ is \bi{negligible} if $\exists k \geq 0 \in \Z$ and parametrized $m_i$-sets $f_i: X_i \rightarrow \R^n$ with $1 \leq i \leq k$ and $m_i < n$ s.t. +$X \subseteq f_1(x_1) \cup \ldots \cup f_k(X_k)$. A parametrized $1$-set in $\R^n$ is a parametrized curve. +\shortex Any $\R \times \{ 0 \} \subseteq \R^2$ is negligible in $\R^2$, or more generally, +if $H \subseteq \R^n$ is an affine subspsace of dimension $m < n$, then any subset of $\R^n$ that is contained in $H$ is negligible. +Image of par. curve $\gamma: [a, b] \rightarrow \R^n$ is negligible, since $\gamma$ is a $1$-set in $\R^n$ + +\shortproposition $X$ compact set, negligible. Then for any cont. function on $X$, $\displaystyle\int_{X} f(x) \dx x = 0$ diff --git a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/02_improper_int.tex b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/02_improper_int.tex index ad540dd..bd4c7fe 100644 --- a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/02_improper_int.tex +++ b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/02_improper_int.tex @@ -1,2 +1,11 @@ \newsectionNoPB \subsection{Improper integrals} +As in the one-dimensional case, we are looking at integrals that are undefined at the edge of the interval and thus, we apply a limit to them, +thus approaching said edge of the interval. + +For example, in the two-dimensional case, disc $D_R = [-R, R]^2$ with radius $R$ +\rmvspace +\begin{align*} + \limit{R}{\infty} \int_{D_R} f(d, y) \dx x \dx y +\end{align*} +\ddrmvspace diff --git a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/03_change_of_variable_formula.tex b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/03_change_of_variable_formula.tex index 59d1059..8e3f59d 100644 --- a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/03_change_of_variable_formula.tex +++ b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/03_change_of_variable_formula.tex @@ -1,2 +1,9 @@ \newsectionNoPB \subsection{Change of Variable Formula} +\compacttheorem{Change of variable formula} $\overline{X}, \overline{Y} \subseteq \R^n$ compact, $\varphi : \overline{X} \rightarrow \overline{Y}$ continuous. +For the open sets $X, Y$, negligible sets $B, C$ and restriction of $\varphi : X \rightarrow Y$ to open set $X$ is a $C^1$ bijection, +we can write $\overline{X} = X \cup B$ and $\overline{Y} = Y \cup C$. +The Jacobian $J_\varphi(x)$ is invertible at all $x \in X$. +For any cont. func. $f$ on $\overline{Y}$ we have $\displaystyle \int_{\overline{X}} f(\varphi(x)) |\det(J_\varphi(x))| \dx x = \int_{\overline{Y}} f(y) \dx y$ +% TODO: Add notes from TA's notes for how to apply it +\rmvspace diff --git a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/04_green_formula.tex b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/04_green_formula.tex index 39afce6..4a338e1 100644 --- a/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/04_green_formula.tex +++ b/semester3/analysis-ii/cheat-sheet-jh/parts/vectors/integration/04_green_formula.tex @@ -1,2 +1,22 @@ \newsectionNoPB \subsection{The Green Formula} +\compactdef{Simple parametrized curve} $\gamma : [a, b] \rightarrow \R^2$ is a closed parametrized curve s.t. +$\gamma(t) \neq \gamma(s)$ (if $s \neq t$ and $\{ s, t \} = \{ a, b \}$), s.t. $\gamma'(t) \neq 0$ for $a < t < b$. +If $\gamma$ only piecewise in $C^1$ in $]a, b[$, then only apply when $\gamma'(t)$ exists. + +\stepLabelNumber{all} +\compacttheorem{Green's Formula} $X \subseteq \R^2$ compact set with boundary $\partial X = \gamma_1 \cup \ldots \cup y_k$ +with $\gamma_i = (\gamma_{i, 1}, \gamma_{i, 2}) : [a_i, b_i] \rightarrow \R^2$ a simple closed parametrized curve, with property that $X$ lies ``to the left'' of tangent vector $\gamma_i'(t)$ based at $\gamma_i(t)$. +$f = (f_1, f_2)$ is a vector field of class $C^1$ on open set containing $X$. Then: +\drmvspace +\begin{align*} + \int_{X} \left( \frac{\partial f_2}{\partial x} - \frac{\partial f_1}{\partial_y} \right) \dx x \dx y = \sum_{i = 1}^{k} \int_{\gamma_i} f \cdot \dx \vec{s} +\end{align*} + +\stepLabelNumber{all}\dhrmvspace +\inlinecorollary $X \subseteq \R^2$ compact with boundary $\partial X$ as before. +$\gamma_i$ as above, then +\drmvspace +\begin{align*} + \text{Vol}(X) = \sum_{i = 1}^{k} \int_{\gamma_i} x \dx \vec{s} = \sum_{i = 1}^{k} \int_{a_i}^{b_i} \gamma_{i, 1}(t) \gamma_{i, 2}'(t) \dx t +\end{align*} diff --git a/semester3/numcs/numcs-summary.pdf b/semester3/numcs/numcs-summary.pdf index 24abcbb..adfdf8c 100644 Binary files a/semester3/numcs/numcs-summary.pdf and b/semester3/numcs/numcs-summary.pdf differ diff --git a/semester3/spca/code-examples/.clang-format b/semester3/spca/code-examples/.clang-format new file mode 100644 index 0000000..ea63d60 --- /dev/null +++ b/semester3/spca/code-examples/.clang-format @@ -0,0 +1,276 @@ +# ───────────────────────────────────────────────────────────────────── +# ╭─────────────────────────────────────────────────╮ +# │ clang-format config │ +# ╰─────────────────────────────────────────────────╯ +# ───────────────────────────────────────────────────────────────────── +BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: BlockIndent +AlignArrayOfStructures: Left +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCaseArrows: false + AlignCaseColons: false +AlignConsecutiveTableGenBreakingDAGArgColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveTableGenCondOperatorColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveTableGenDefinitionColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowBreakBeforeNoexceptSpecifier: Never +AllowShortBlocksOnASingleLine: Never +AllowShortCaseExpressionOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AttributeMacros: + - __capability +BinPackArguments: false +BinPackParameters: false +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Always +BreakAfterJavaFieldAnnotations: false +BreakAfterReturnType: None +BreakArrays: true +BreakBeforeBinaryOperators: All +BreakBeforeBraces: Attach +BreakBeforeConceptDeclarations: Always +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakFunctionDefinitionParameters: false +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +BreakTemplateDeclarations: MultiLine +ColumnLimit: 100 +CommentPragmas: "^ IWYU pragma:" +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: true +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: Always +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: ^"(llvm|llvm-c|clang|clang-c)/ + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: ^(<|"(gtest|gmock|isl|json)/) + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: .* + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: (Test)?$ +IncludeIsMainSourceRegex: "" +IndentAccessModifiers: true +IndentCaseBlocks: true +IndentCaseLabels: true +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: BeforeHash +IndentRequiresClause: true +IndentWidth: 4 +IndentWrappedFunctionNames: true +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLines: + AtEndOfFile: false + AtStartOfBlock: true + AtStartOfFile: true +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: "" +MacroBlockEnd: "" +MainIncludeChar: Quote +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PPIndentWidth: -1 +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +QualifierAlignment: Left +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: true +RemoveParentheses: MultipleParentheses +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Always +ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDeclarationName: true + AfterFunctionDefinitionName: true + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Custom +SpacesInParensOptions: + ExceptDoubleParentheses: false + InConditionalStatements: true + InCStyleCasts: false + InEmptyParentheses: false + Other: true +SpacesInSquareBrackets: true +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 4 +TableGenBreakInsideDAGArg: DontBreak +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE diff --git a/semester3/spca/code-examples/00_c/00_intro.c b/semester3/spca/code-examples/00_c/00_intro.c new file mode 100644 index 0000000..7635eed --- /dev/null +++ b/semester3/spca/code-examples/00_c/00_intro.c @@ -0,0 +1,16 @@ +// This is a line comment +/* this is a block comment */ +#include "01_func.h" // Relative import + +int i = 0; // This allocates an integer on the stack + +int main( int argc, char *argv[] ) { + // This is the function body of a function (here the main function) + // which serves as the entrypoint to the program in C and has arguments + printf( "Argc: %d\n", argc ); // Number of arguments passed, always >= 1 + // (first argument is the executable name) + for ( int i = 0; i < argc; i++ ) // For loop just like any other sane programming language + printf( "Arg %d: %s\n", i, argv[ i ] ); // Outputs the i-th argument from CLI + + get_user_input_int( "Select a number" ); // Function calls as in any other language +} diff --git a/semester3/spca/code-examples/00_c/01_func.c b/semester3/spca/code-examples/00_c/01_func.c new file mode 100644 index 0000000..374e138 --- /dev/null +++ b/semester3/spca/code-examples/00_c/01_func.c @@ -0,0 +1,37 @@ +#include "01_func.h" + +int get_user_input_int( char prompt[] ) { + int input_data; + printf( "%s", prompt ); // Always wrap strings like this for printf + scanf( "%d", &input_data ); // Get user input from CLI + + // If statements just like any other language + if ( input_data ) + printf( "Not 0" ); + else + printf( "Input is zero" ); + + switch ( input_data ) { + case 5: + printf( "You win!" ); + break; // Doesn't fall through + case 6: + printf( "You were close" ); // Falls through + default: + printf( "No win" ); // Case for any not covered input + } + + int input_data_copy = input_data; + + while ( input_data > 1 ) { + input_data -= 1; + printf( "Hello World\n" ); + } + + do { + input_data -= 1; + printf( "Bye World\n" ); + } while ( input_data_copy > 1 ); + + return 0; +} diff --git a/semester3/spca/code-examples/00_c/01_func.h b/semester3/spca/code-examples/00_c/01_func.h new file mode 100644 index 0000000..f0e9cb1 --- /dev/null +++ b/semester3/spca/code-examples/00_c/01_func.h @@ -0,0 +1,4 @@ +#include // Import from system path + // (like library imports in other languages) + +int get_user_input_int( char prompt[] ); diff --git a/semester3/spca/code-examples/00_c/02_pointers.c b/semester3/spca/code-examples/00_c/02_pointers.c new file mode 100644 index 0000000..e69de29 diff --git a/semester3/spca/code-examples/00_c/02_pointers.h b/semester3/spca/code-examples/00_c/02_pointers.h new file mode 100644 index 0000000..e69de29 diff --git a/semester3/spca/parts/00_c/00_intro.tex b/semester3/spca/parts/00_c/00_intro.tex new file mode 100644 index 0000000..2a4df05 --- /dev/null +++ b/semester3/spca/parts/00_c/00_intro.tex @@ -0,0 +1,15 @@ +\begin{scriptsize} + \textit{I can clearly C why you'd want to use C. Already sorry in advance for all the bad C jokes that are going to be part of this section} +\end{scriptsize} + +\texttt{C} is a compiled, low-level programming language, lacking many features modern high-level programming languages offer, like Object Oriented programming, +true Functional Programming (like Haskell implements), Garbage Collection, complex abstract datatypes and vectors, just to name a few. +(It is possible to replicate these using Preprocessor macros, more on this later). + +On the other hand, it offers low-level hardware access, the ability to directly integrate assembly code into the \texttt{.c} files, +as well as bit level data manipulation and extensive memory management options, again just to name a few. + +This of course leads to \texttt{C} performing excellently and there are many programming languages whose compiler doesn't directly produce machine code or assembly, +but instead optimized \texttt{C} code that is then compiled into machine code using a \texttt{C} compiler. +This has a number of benefits, most notably that \texttt{C} compilers can produce very efficient assembly, +as lots of effort is put into the \texttt{C} compilers by the hardware manufacturers. diff --git a/semester3/spca/parts/00_c/01_syntax.tex b/semester3/spca/parts/00_c/01_syntax.tex new file mode 100644 index 0000000..0db7469 --- /dev/null +++ b/semester3/spca/parts/00_c/01_syntax.tex @@ -0,0 +1,13 @@ +\subsection{The Syntax} +\texttt{C} uses a very similar syntax as many other programming languages, like \texttt{Java}, \texttt{JavaScript} and many more\dots +to be precise, it is \textit{them} that use the \texttt{C} syntax, not the other way around. So: +\inputcodewithfilename{c}{code-examples/00_c/}{00_intro.c} + +In \texttt{C} we are referring to the implementation of a function as a \bi{(function) definition} (correspondingly, \textit{variable definition}, if the variable is initialized) +and to the definition of the function signature (or variables, without initializing them) as the \bi{(function) declaration} (or, correspondingly, \textit{variable declaration}). + +\texttt{C} code is usuallt split into the source files, ending in \texttt{.c} (where the local functions and variables are declared, as well as all function definitions) +and the header files, ending in \texttt{.h}, where the external declarations are defined. Usually, no definition of functions are in the \texttt{.h} files +\inputcodewithfilename{c}{code-examples/00_c/}{01_func.h} + +\inputcodewithfilename{c}{code-examples/00_c/}{01_func.c} diff --git a/semester3/spca/parts/01_asm/00_intro.tex b/semester3/spca/parts/01_asm/00_intro.tex new file mode 100644 index 0000000..e69de29 diff --git a/semester3/spca/parts/02_hw/00_intro.tex b/semester3/spca/parts/02_hw/00_intro.tex new file mode 100644 index 0000000..e69de29 diff --git a/semester3/spca/parts/intro-to-c/start.tex b/semester3/spca/parts/intro-to-c/start.tex deleted file mode 100644 index 80cfc84..0000000 --- a/semester3/spca/parts/intro-to-c/start.tex +++ /dev/null @@ -1,10 +0,0 @@ -\newsection -\section{Introduction to C} -I can clearly C why you'd want to use C. Already sorry in advance for all the bad C jokes that are going to be part of this section - -\texttt{C} is a compiled, low-level programming language, lacking many features modern high-level programming languages offer, like Object Oriented programming, true Functional Programming, Garbage Collection, complex abstract datatypes and vectors, just to name a few. (It is possible to replicate these, more on this later). - -On the other hand, it offers the ability to directly integrate assembly code into the \texttt{.c} files, as well as bit level data manipulation and extensive memory management options, again just to name a few. - -This of course leads to \texttt{C} performing excellently and there are many programming languages who's compiler doesn't directly produce machine code or assembly, but instead optimized \texttt{C} code that is then compiled into machine code using a \texttt{C} compiler. -This has a number of benefits, most notably that \texttt{C} compilers can produce very efficient assembly, as lots of effort is put into the \texttt{C} compilers by the hardware manufacturers. diff --git a/semester3/spca/spca-summary.pdf b/semester3/spca/spca-summary.pdf index 8da51de..00e78cf 100644 Binary files a/semester3/spca/spca-summary.pdf and b/semester3/spca/spca-summary.pdf differ diff --git a/semester3/spca/spca-summary.tex b/semester3/spca/spca-summary.tex index c9c1598..e46a77a 100644 --- a/semester3/spca/spca-summary.tex +++ b/semester3/spca/spca-summary.tex @@ -1,11 +1,12 @@ \documentclass{article} -\newcommand{\dir}{~/projects/latex} -\input{\dir/include.tex} -\load{recommended} +\input{~/projects/latex/dist/full.tex} \setup{Systems Programming and Computer Architecture} +\usepackage{lmodern} +\setFontType{sans} + \begin{document} \startDocument \usetcolorboxes @@ -54,7 +55,21 @@ % │ Content │ % ╰────────────────────────────────────────────────╯ % ── Intro to C ────────────────────────────────────────────────────── -\input{parts/intro-to-c/start.tex} +\newsection +\section{The C Programming Language} +\input{parts/00_c/00_intro.tex} +\input{parts/00_c/01_syntax.tex} +% ── Intro to x86 asm ──────────────────────────────────────────────── +\newsection +\section{x86 Assembly} +\input{parts/01_asm/00_intro.tex} + + +% ── Hardware recap ────────────────────────────────────────────────── +\newsection +\section{Hardware} +\input{parts/02_hw/00_intro.tex} + \end{document}