diff --git a/exercise1/Makefile b/exercise1/Makefile index 60ff9ae..8a69619 100644 --- a/exercise1/Makefile +++ b/exercise1/Makefile @@ -13,3 +13,7 @@ movie: ${IMAGES} ffmpeg -y -an -i images/%5d.png -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3 -r 12 wave.mp4 clean: -rm -fr ${TARGETS} data images wave.mp4 +zip: theory.pdf Makefile wave_1d.c + zip handin.zip theory.pdf Makefile wave_1d.c +unzip: handin.zip + unzip handin.zip -d handin diff --git a/exercise1/theory.typ b/exercise1/theory.typ new file mode 100644 index 0000000..b86e3a7 --- /dev/null +++ b/exercise1/theory.typ @@ -0,0 +1,70 @@ +#import "@preview/cetz:0.3.2"; +#import "@preview/cetz-plot:0.1.1": plot +#import "@preview/physica:0.9.4": * +#import "@preview/plotsy-3d:0.1.0": plot-3d-parametric-surface +#import "@preview/fletcher:0.5.4" as fletcher: diagram, edge, node + +#set page(paper: "a4", margin: (x: 2.6cm, y: 2.8cm), numbering: "1 : 1") +#set par(justify: true, leading: 0.52em) + +#let FONT_SIZE = 18pt; +#set text(font: "FreeSerif", size: FONT_SIZE, lang: "us") +#show math.equation: set text(font: "Euler Math", size: (FONT_SIZE * 1.0), lang: "en") + +#set heading(numbering: none) +#show heading.where(level: 1): it => { + rect(inset: FONT_SIZE / 2)[#it] +} + +// Dracula palette +#let bg = rgb("#282a36") +#let fg = rgb("#f8f8f2") +#let sec = rgb("#44475a") + + +#align(center)[ + #text(size: FONT_SIZE * 2, weight: "bold")[#underline[exercise 0]] +] + +these are my solutions to exercise set 1 of TDT4200. + +this document was created using +#link("https://typst.app/")[#text(blue.darken(5%))[typst]]. + +#v(42pt) + +#outline(title: none) + +#v(42pt) + += macros + +macros define programmer-friendly syntax that is preprocessed at compile time, +thus incurring no performance penality. they constitute a fundamental part in +meta programming (see lisp). excessive use of macros may obfuscate semantics, +but can often be used to make the code clearer to read. in this case, it helps +simplify the indexing of the buffers for easier to read calculations. + += boundary conditions + +the boundary condition could be changed from reflection to wrapping around. this +can be achieved by setting the left boundary to be the right-most point, and the +right boundary to be the left-most point. + += no memory + +if you don't allocate memory in T1, the buffers will be unallocated and you will +get indexing errors as you try to access the buffers using the predefined +macros. + +basically, you segfault. + += `float const *a` vs `float *const b` + +- `float const *a` is a constant pointer to some memory address, assigned to the + constant name `a`. since `a` is constant, it cannot be reassigned. +- `float *const b` is a pointer to some constant value, assigned to the + variable `b`. since `b` points to a constant, the dereferenced value cannot be + changed. + +these are not the same.