diff --git a/ForeleserNotebooks/Uke34/forelesning_25082023.ipynb b/ForeleserNotebooks/Uke34/forelesning_25082023.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..0913542ecaa18ea1c3ce5dda2b750a60f2891961
--- /dev/null
+++ b/ForeleserNotebooks/Uke34/forelesning_25082023.ipynb
@@ -0,0 +1,621 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "83a05082-91db-48b1-ba9b-2eee7c1dc8be",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Programmering i Python - introduksjon\n",
+    "- Hva er Python\n",
+    "- hvordan skrive og utføre noen enkle programmer i Python, \n",
+    "- se på to forskjellige måter å gjøre det på\n",
+    "   - JupyterLab / Jupyter Notebook\n",
+    "   - Thonny, en såkalt IDE (integrert utviklingsmiljø)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "08b0b43c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "Det vi skal lære om Python er\n",
+    "- Noen datatyper\n",
+    "   - tall\n",
+    "   - strenger (tekst)\n",
+    "   - tupler (flere data samlet)\n",
+    "- Input, output\n",
+    "- Vanlige regneoperasjoner med Python\n",
+    "- Lagre resultater i variabler med *tilordningsoperatoren* =\n",
+    "- Dele opp et program i ved hjelp av funksjoner som vi kan så *kalle* (utføre)\n",
+    "- Veldig kort og numpy og matplotlib"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "900b35c9-be98-4996-96de-b2564242863f",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Først: Hva er Python?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1e78cebb-faa5-4b7a-b44b-034b960d7b17",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- Python er et programmeringsspråk:\n",
+    "- Ligner litt på \"vanlige\" språk, skal gjøre det lettere for oss å lage programmer\n",
+    "- Mye mer firkantet, dvs vi må følge skrivereglene (gramatikken) nøye\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cfe59edb-3b98-40bd-873e-58f1e3617bb5",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Hvordan programmerer vi, rent praktisk, i Python?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "494b6b22-882d-412d-90b6-cbe137820bf2",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- Vi skriver programmet som ren tekstfil, kalt *kildekode*\n",
+    "- Vi får Python-tolkeren (et program) til å lese kildekoden og utføre den:\n",
+    "   - linje for linje\n",
+    "   - gjør det om til *maskinkode* som datamaskinen utfører (litt forenklet forklart) \n",
+    "\n",
+    "For å gjøre dette skal vi se på to dataprogrammer som er laget for dette:\n",
+    "- JupyterLab / Jupyter Notebook\n",
+    "- Thonny, en såkal IDE"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "19fa7619-19c8-4b38-aa7a-ed99da814e49",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Hvordan ser et program ut?\n",
+    "En vanlig struktur på et program er\n",
+    "- input\n",
+    "- prosessering/beregning\n",
+    "- output\n",
+    "\n",
+    "### Eksempel: Andregradsformelen, også kjent som \"abc-formelen\"\n",
+    "VI kjører programmet ved å klikke i cellen, og trykke Ctrl-Enter"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c9da3b94-2639-4f94-b196-735ab537de74",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "# Input, her er de hardkodet\n",
+    "a = 1\n",
+    "b = -2\n",
+    "c = -3\n",
+    "\n",
+    "# Utregninger med mellomlagring\n",
+    "D = b**2 - 4 * a * c\n",
+    "d = D**0.5\n",
+    "\n",
+    "x1 = (-b + d)/(2*a)\n",
+    "x2 = (-b - d)/(2*a)\n",
+    "\n",
+    "# Output\n",
+    "print(x1)\n",
+    "print(x2)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c12cfa8e-75ad-47f3-a5d7-6ac0a2950ad2",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "I koden over, kan du se hvor vi har\n",
+    "- input?\n",
+    "- utregninger?\n",
+    "- lagring av verdier i variabler?\n",
+    "- output?\n",
+    "- kommentarer i koden?\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "be663932-0cae-455b-9c02-459330a3efed",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Litt mer strukturering av koden over\n",
+    "### DÃ¥rlig praksis:\n",
+    "Hvis jeg ønsker å regne ut løsningene til flere andregradsligninger, så kan\n",
+    "jeg bare endre på tilordningen av variablene, og kjøre programmet på nytt.\n",
+    "\n",
+    "**Det er dumt å måtte endre på selve koden, når det bare er input som endres**\n",
+    "\n",
+    "### GOD PRAKSIS:\n",
+    "**Input som varierer leses inn av programmet**\n",
+    "\n",
+    "Under skal vi endre koden over, slik at vi henter verdiene ved kjøring, og ikke trenger endre koden\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b52d5266-5fce-4c96-ab93-60612e555641",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "# Modifisert kode, med bruk av input\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "645005e8",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Datatyper: Tall\n",
+    "- Heltall: Skrives rett frem uten komma. Det er ingen begrensning på antall siffer (sort of...)\n",
+    "- Flyttall, desimaltall. Kan ikke være vilkårlig store"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c0a5dac0",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "heltall = 42\n",
+    "print(heltall ** 100)\n",
+    "\n",
+    "x = 4.37\n",
+    "print(x**100)\n",
+    "\n",
+    "y = 1.23e-3\n",
+    "print(y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "635fb594",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Datatype: Tekst\n",
+    "Kanskje vi tenker mest på at data er tall? Men tekst er også data.\n",
+    "\n",
+    "For å angi tekst som data, så bruker vi *fnutter* for å angi at noe er tekst, og ikke kommandoer som Python skal tolke:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d5a34108-3797-4f50-98a3-45f0a3e8c889",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "navn = 'Dag Olav Kjellemo'\n",
+    "\n",
+    "# Vi kan også bruke dobbel-fnutter, som fungerer akkurat som enkle fnutter:\n",
+    "emne = \"ITGK TDT4110\"\n",
+    "\n",
+    "# Eller triple-dobbelfnutter. Denne er mer \"special\". Den kan skrives over flere linjer\n",
+    "enLitenTekst = \"\"\"25. august 2023\n",
+    "Jeg foreleser ITGK.\n",
+    "\n",
+    "Hilsen Dag Olav\"\"\"\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "012e1f23-4bb6-49f3-ba26-ffd23af4b3f1",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Litt om funksjoner\n",
+    "- input og print er navn på *funksjoner* i Python, som utfører gitte oppgaver (som navnet tilsier)\n",
+    "- Vi kan *gjenbruke* funksjoner uten å måtte skrive koden på nytt\n",
+    "- Funksjoner gjør det også lettere å se hva koden gjør\n",
+    "- Vi *kaller* (utfører) funksjoner ved å skrive navnet, etterfulgt av paranteser.\n",
+    "- Vi \"mater\" funksjonene ved å angi inputverdier inne i parantesene. \n",
+    "   - dette kalles for *argumentene* til funksjonen\n",
+    "\n",
+    "Det finnes en masse forskjellige ferdige funksjoner i Python, men de fleste er ikke tilgjengelig uten at vi *ber om det*. Vi laster inn disse med nøkkelordet **import**"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7c1ab5ea-b890-4679-8a08-564f444627ce",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "import math  # Standard matte-ting\n",
+    "\n",
+    "# math inneholder f.eks. en del trigonometriske funksjoner og en (tilnærmet) verdi for pi\n",
+    "print(math.pi)  # NB! pi er ikke en funksjone, men et tall\n",
+    "print(math.sin(math.pi/2))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "455b5594-5d98-4cf2-8670-76f5cef45503",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Definere egne funksjoner\n",
+    "La oss lage en litt unyttig funksjon, som skriver ut en slags overskrift.\n",
+    "\n",
+    "Funksjoner definerer vi ved å begynne å skrive \"def\" i koden:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "fede75f1-3fe8-44d3-a812-395ad32fd958",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "def banner():\n",
+    "    print(\"***************************************\")\n",
+    "    print(\"***************BANNER******************\")\n",
+    "    print(\"***************************************\")\n",
+    "    \n",
+    "print(\"Dette er ikke en del av funksjonen\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f6e8ca70-2c7d-455f-8685-f8c3f3684b02",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Viktige ting å legge merke til:\n",
+    "- *nøkkelordet* **def** signaliserer at vi skal definere en *funksjon*\n",
+    "- Funksjonsnavnet er **banner**\n",
+    "- Funksjonsnavnet etterfølges alltid av et parantespar ( )\n",
+    "- Inne i parantesen står det hva som skal være *input* til funksjonen. Her er det ingen input ennå.\n",
+    "- Python bruker kolon (:) og innrykk av kodenlinjene etterpå for å skille ut en *kodeblokk*\n",
+    "- Funksjonsdefinisjonen slutter der hvor det ikke lenger er innrykk i koden.\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e665b2ef-6d75-4c66-94c6-c39e882a2ee3",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Kall av funksjoner\n",
+    "- **Når vi definerer en funksjon, så blir den ikke utført, bare lagret for bruk\n",
+    "- Vi *kaller* en funksjon ved å bruke funksjonsnavnet med parantes:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "07ee629c-8da2-4e82-91d0-459ab685acc8",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "banner()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "863f52cc-cb76-415a-a378-3b16bf87c21c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "La oss gjøre funksjonen litt mer nyttig. Vi vil kunne sende den teksten den\n",
+    "skal skrive. Da må den ha en *parameter*. Parameteren er et variabelnavn som gjelder bare inne i funksjonen, som lagrer argumentet som sendes til funksjonen når vi kaller den."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "75b32642-7f4c-4af9-a2ec-ba84ca1f6286",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "def banner_med_input(tekst):\n",
+    "    tekst_lengde = len(tekst) # en funksjon som gir antall tegn i tekst.\n",
+    "    banner_lengde = tekst_lengde + 2*10\n",
+    "    print(\"*\" * banner_lengde)\n",
+    "    print(\"*\" * 10 + tekst + \"*\" * 10)\n",
+    "    print(\"*\" * banner_lengde)\n",
+    "    \n",
+    "# La oss kalle funksjonen \n",
+    "banner_med_input(\"ITGK - TDT4110\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6b76c47b-0159-42d1-87a6-13894273f1e0",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "### Et eksempel til på bruk av funksjoner\n",
+    "La oss skille ut utregningen for abc-formelen i en egen *funksjon*. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8b7c8646-246e-426a-8704-1c5bd710a849",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "def abc_formel(a,b,c):  # ikke abc-formel. Bindestrek tolkes som minus.\n",
+    "    D = b**2 - 4 * a * c\n",
+    "    d = D**0.5\n",
+    "\n",
+    "    x1 = (-b + d)/(2*a)\n",
+    "    x2 = (-b - d)/(2*a)\n",
+    "    return x1, x2  # Returnerer begge verdiene som et 2-tuppel\n",
+    "\n",
+    "# La oss kalle funksjonen over:\n",
+    "print(abc_formel(1,4,4)) \n",
+    "\n",
+    "# Samme som over, men vi lagrer løsningene i to variabler:\n",
+    "løsning1, løsning2 = abc_formel(1,4,4)\n",
+    "\n",
+    "print(løsning1, løsning2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "bf213854-a3f7-4677-a283-50c5d0056b73",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Viktige ting å legge merke til,\n",
+    "- *nøkkelordet* **def** signaliserer at vi skal definere en *funksjon*\n",
+    "- Funksjonsnavnet er **abc_formel**\n",
+    "- Funksjonsnavnet etterfølges alltid av et parantespar ( )\n",
+    "- Inne i parantesen står det hva som skal være *input* til funksjonen,\n",
+    "- Python bruker kolon (:) og innrykk av kodenlinjene etterpå for å skille ut en *kodeblokk*\n",
+    "- *nøkkelordet* **return** gjør at funksjonen avsluttes, og to verdier *returneres* til der hvor funksjonen ble kalt\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "52e7b012-bb0e-4e39-8730-b00345b1872c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Numpy og Matplotlib\n",
+    "To *bibliotek* av funksjoner som vi skal bruke mye i emnet. Disse må importeres før bruk.\n",
+    "Num\n",
+    "\n",
+    "- Numpy er laget for å jobbe matematisk/numerisk med data. Sentralt er *arrays* (vektorer, matriser).\n",
+    "\n",
+    "- Matplotlib brukes til å visualisere data (forskjellige typer grafer og figurer)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "63bae919-66d7-468c-a509-168b979ba562",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "import numpy as np                    # np blir et alias, for få litt kortere skrivemåte\n",
+    "\n",
+    "from matplotlib import pyplot as plt  # Vi importerer funksjonen pyplot fra biblioteket matplotlib, og slik at vi IKKE trenger å skrive\n",
+    "                                      # matplotlib.pyplot, kun plt\n",
+    "\n",
+    "def f(x):                             # En egendefinert funksjon som heter f, med en input parameter x\n",
+    "    return x*x - 2*x - 3              # Den regner ut verdien til et andregradsuttrykk, og returnerer det \"på direkten\"\n",
+    "\n",
+    "xs = np.linspace(-3, 5, 20)  # genererer en array med 20 tall jevnt fordelt fra -3 til 5\n",
+    "ys = f(xs)                   # regner ut funksjonsverdien til alle de 20 verdiene, og lagrer resultatet i en ny array\n",
+    "                             # som lagres i variabelen ys\n",
+    "print(\"x-verdiene:\", xs)     \n",
+    "print(\"y-verdiene:\", ys)\n",
+    "\n",
+    "plt.plot(xs,ys)              # Den aller enkelste måten å lage et plot på i matplotlib\n",
+    "plt.show()\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ffa9cdc9-4547-42f8-b519-127507a6eb99",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Tilgang til hjelp i Python\n",
+    "I tillegg til ressursene vi har i Blackboard, finnes det uttallige nettressurser, f.eks. w3schools.\n",
+    "\n",
+    "Legg også merke til hjelp som finnes i verktøyene vi bruker for å skrive kode. Det er mer hjelp i f.eks. Thonny (og enda mer i f.eks. Visual Studio Code, PyCharm etc).\n",
+    "\n",
+    "NB! På eksamen er ikke disse hjelpemidlene tilgjengelige. Det kan også være en fordel for læringen at en må øve seg på å huske ting, og ikke få alt foreslått før man har rukket å tenke selv. \n",
+    "\n",
+    "Hvis kan bruke help-funksjonen i Python til å få en beskrivelse av funksjoner"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "473fd5a2-8a64-4bcd-9656-0b95de998232",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "help(print)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c917cb33-3785-4782-8a80-fc8510a3e216",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "help(math.sin)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5c1323bd-d05d-4c32-87e8-17fa741b1129",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Hva skal dere gjøre kommende uke:\n",
+    "- Se videoer og gå gjennom tilhørende notatbøker\n",
+    "- Begynn å jobbe med Øving 1 som kommer ganske snart.\n",
+    "\n",
+    "# Hva du bør kunne om en uke: \n",
+    "Det du bør beherske etter at du har jobbet deg gjennom uke 34-stoffet, er\n",
+    "- Aritmetiske uttrykk med regnerekkefølge i Python (se FP_00)\n",
+    "- Kunne bruke innebygde funksjoner\n",
+    "- Definere egne funksjoner\n"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Slideshow",
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}