This commit is contained in:
RobinB27
2026-01-05 15:23:05 +01:00
20 changed files with 520 additions and 14 deletions

View File

@@ -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

View File

@@ -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$

View File

@@ -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

View File

@@ -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

View File

@@ -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*}

Binary file not shown.

View File

@@ -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

View File

@@ -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
}

View File

@@ -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;
}

View File

@@ -0,0 +1,4 @@
#include <stdio.h> // Import from system path
// (like library imports in other languages)
int get_user_input_int( char prompt[] );

View File

@@ -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.

View File

@@ -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}

View File

View File

View File

@@ -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.

Binary file not shown.

View File

@@ -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}