Browse Source

Updated lectures

xnecas 1 month ago
parent
commit
bb2c5c2b58

+ 1 - 0
.gitignore.txt

@@ -0,0 +1 @@
+**/.ipynb_checkpoints/

+ 6 - 0
.ipynb_checkpoints/Untitled-checkpoint.ipynb

@@ -0,0 +1,6 @@
+{
+ "cells": [],
+ "metadata": {},
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

+ 0 - 0
UserManual.ipynb → .ipynb_checkpoints/UserManual-checkpoint.ipynb


+ 0 - 119
lectures/MicropythonPriklady.ipynb

@@ -1,119 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "b8a81d77-1483-4bbf-abe4-ff7844df47d9",
-   "metadata": {},
-   "source": [
-    "## Príklad č. 1: Riadenie výstpov pomocou B-funkcií"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "747f22d6-bd70-4acb-9f75-97f7c963a10d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%serialconnect\n",
-    "\n",
-    "from machine import Pin\n",
-    "import time\n",
-    "\n",
-    "# definovanie vstupov a vystupov\n",
-    "pinA = Pin(25, Pin.IN)\n",
-    "pinB = Pin(33, Pin.IN)\n",
-    "pinC = Pin(32, Pin.IN)\n",
-    "pinY = Pin(18, Pin.OUT)\n",
-    "\n",
-    "# hlavny program\n",
-    "while True:\n",
-    "    # nacitanie hodnot vstupov\n",
-    "    A = pinA.value() \n",
-    "    B = pinB.value()\n",
-    "    C = pinC.value()\n",
-    "    \n",
-    "    # vypocet hodnoty vystupu pomocou funkcie\n",
-    "    Y = A * (not B) + C + (not A) * B * C\n",
-    "    # Y = A and (not B) or C or (not A) and B and C\n",
-    "    # Y = A & (~B) | C | (~A) & B & C\n",
-    "    \n",
-    "    # zapisanie vyslednej hodnoty\n",
-    "    pinY.value(Y)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "c3f72b33-74a5-4a63-b273-92a30a8d3154",
-   "metadata": {},
-   "source": [
-    "## Príklad č. 2: Riadenie výstupov pomocou pravdivostnej tabuľky"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ec73b597-8744-4a5a-a1e1-eddaf5e3416c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%serialconnect\n",
-    "\n",
-    "from machine import Pin\n",
-    "import time\n",
-    "\n",
-    "# definovanie vstupov a vystupov\n",
-    "pinA = Pin(25, Pin.IN)\n",
-    "pinB = Pin(33, Pin.IN)\n",
-    "pinC = Pin(32, Pin.IN)\n",
-    "pinY = Pin(18, Pin.OUT)\n",
-    "\n",
-    "# definovanie pravdivostnej tabulky\n",
-    "tab = {\n",
-    "  (0, 0, 0): 0,\n",
-    "  (0, 0, 1): 1,\n",
-    "  (0, 1, 0): 1,\n",
-    "  (0, 1, 1): 0,\n",
-    "  (1, 0, 0): 0,\n",
-    "  (1, 0, 1): 0,\n",
-    "  (1, 1, 0): 0,\n",
-    "  (1, 1, 1): 1\n",
-    "}\n",
-    "\n",
-    "# hlavny program\n",
-    "while True:\n",
-    "    # nacitanie hodnot vstupov\n",
-    "    A = pinA.value() \n",
-    "    B = pinB.value()\n",
-    "    C = pinC.value()\n",
-    "    \n",
-    "    # vypocet hodnoty vystupu pomocou tabulky\n",
-    "    Y = tab[A, B, C]\n",
-    "    \n",
-    "    # zapisanie vyslednej hodnoty\n",
-    "    pinY.value(Y)"
-   ]
-  }
- ],
- "metadata": {
-  "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.13.5"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}

+ 405 - 0
manual.ipynb

@@ -0,0 +1,405 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "60b1df67-aa55-4b3f-b9ff-41716ea8eb11",
+   "metadata": {},
+   "source": [
+    "## Install the MicroPython kernel\n",
+    "To run MicroPython code, you'll need to install the `MicroPython - USB` kernel. Follow these steps:\n",
+    "\n",
+    "1. Visit this GitHub page https://github.com/goatchurchprime/jupyter_micropython_kernel\n",
+    "2. Install the kernel into Jupyter.\n",
+    "4. After installation, select the kernel `MicroPython - USB` to run MicroPython code.\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3e1eaac9-5bf1-495f-8464-59e15aed589d",
+   "metadata": {},
+   "source": [
+    "## Customizing the run button\n",
+    "\n",
+    "By default, the option for the `run` button is set to `Run Selected Cell and Advance`. However, for certain use cases, this default behavior might be confusing, beacause after cell execution, the cursor automatically jumps to next cell. To modify it to `Run Selected Cell and Do not Advance`, follow these steps:\n",
+    "\n",
+    "1. Navigate to the Jupyter file browser.\n",
+    "2. Click on `Settings` in the top menu, then select `Settings Editor`.\n",
+    "3. In the left menu, choose `Notebook Panel`.\n",
+    "4. Locate the section with the `unique name`: `run` (it's `toolbar-5` by default).\n",
+    "5. Change the `Command id` from `notebook:run-cell-and-select-next` to `notebook:run-cell`.\n",
+    "6. Additionally, set the `Item icon id` to `ui-components:run`.\n",
+    "7. Refresh the active notebook.\n",
+    "\n",
+    "To revert to the default option, simply click on `Restore to Defaults`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "bb0b9359-5de5-468f-82b2-fea3e99928de",
+   "metadata": {},
+   "source": [
+    "## Flashing new firmware\n",
+    "\n",
+    "Flash new firmware via esptool. Esptool must be located in the same folder as this notebook."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "de5bb819-cfea-4fe7-9bfb-36019c02df8b",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\u001b[34mExecuting:\n",
+      "  esptool --port COM6 erase_flash\n",
+      "\n",
+      "\u001b[0mesptool.py v4.7.0\n",
+      "Serial port COM6\n",
+      "Connecting....\n",
+      "\u001b[34m[Press the PRG button now if required]\n",
+      "\u001b[0mDetecting chip type... Unsupported detection protocol, switching and trying again...\n",
+      "Connecting....\n",
+      "\u001b[34m[Press the PRG button now if required]\n",
+      "\u001b[0mDetecting chip type... ESP32\n",
+      "Chip is ESP32-D0WD-V3 (revision v3.1)\n",
+      "Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\n",
+      "Crystal is 40MHz\n",
+      "MAC: 6c:c8:40:8b:d2:b4\n",
+      "Uploading stub...\n",
+      "Running stub...\n",
+      "Stub running...\n",
+      "Erasing flash (this may take a while)...\n",
+      "Chip erase completed successfully in 5.7s\n",
+      "Hard resetting via RTS pin...\n",
+      "\u001b[34mExecuting:\n",
+      "  esptool --port COM6 --chip esp32 write_flash -z 0x1000 firmware/ESP32_GENERIC-20240222-v1.22.2.bin\n",
+      "\n",
+      "\u001b[0mesptool.py v4.7.0\n",
+      "Serial port COM6\n",
+      "Connecting.....\n",
+      "\u001b[34m[Press the PRG button now if required]\n",
+      "\u001b[0mChip is ESP32-D0WD-V3 (revision v3.1)\n",
+      "Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\n",
+      "Crystal is 40MHz\n",
+      "MAC: 6c:c8:40:8b:d2:b4\n",
+      "Uploading stub...\n",
+      "Running stub...\n",
+      "Stub running...\n",
+      "Configuring flash size...\n",
+      "Flash will be erased from 0x00001000 to 0x001a9fff...\n",
+      "Compressed 1737776 bytes to 1143554...\n",
+      "Writing at 0x00001000... (1 %)\n",
+      "Writing at 0x00010a97... (2 %)\n",
+      "Writing at 0x00018bb4... (4 %)\n",
+      "Writing at 0x00020d44... (5 %)\n",
+      "Writing at 0x0002704e... (7 %)\n",
+      "Writing at 0x00030666... (8 %)\n",
+      "Writing at 0x0003f150... (10 %)\n",
+      "Writing at 0x000457df... (11 %)\n",
+      "Writing at 0x0004ebd0... (12 %)\n",
+      "Writing at 0x00054cbb... (14 %)\n",
+      "Writing at 0x0005a183... (15 %)\n",
+      "Writing at 0x0005f27a... (17 %)\n",
+      "Writing at 0x00064362... (18 %)\n",
+      "Writing at 0x00069359... (20 %)\n",
+      "Writing at 0x0006e3e6... (21 %)\n",
+      "Writing at 0x000735fa... (22 %)\n",
+      "Writing at 0x00078141... (24 %)\n",
+      "Writing at 0x0007ce65... (25 %)\n",
+      "Writing at 0x0008388f... (27 %)\n",
+      "Writing at 0x00088e6c... (28 %)\n",
+      "Writing at 0x0008e944... (30 %)\n",
+      "Writing at 0x00093fe2... (31 %)\n",
+      "Writing at 0x00099661... (32 %)\n",
+      "Writing at 0x0009f242... (34 %)\n",
+      "Writing at 0x000a475e... (35 %)\n",
+      "Writing at 0x000a9d37... (37 %)\n",
+      "Writing at 0x000afd14... (38 %)\n",
+      "Writing at 0x000b5c05... (40 %)\n",
+      "Writing at 0x000bbca5... (41 %)\n",
+      "Writing at 0x000c1690... (42 %)\n",
+      "Writing at 0x000c673c... (44 %)\n",
+      "Writing at 0x000cc318... (45 %)\n",
+      "Writing at 0x000d2122... (47 %)\n",
+      "Writing at 0x000d7cde... (48 %)\n",
+      "Writing at 0x000ddcba... (50 %)\n",
+      "Writing at 0x000e2c48... (51 %)\n",
+      "Writing at 0x000e7ca9... (52 %)\n",
+      "Writing at 0x000ecd89... (54 %)\n",
+      "Writing at 0x000f21f3... (55 %)\n",
+      "Writing at 0x000f7697... (57 %)\n",
+      "Writing at 0x000fcc38... (58 %)\n",
+      "Writing at 0x00101da3... (60 %)\n",
+      "Writing at 0x00106e43... (61 %)\n",
+      "Writing at 0x0010cf4b... (62 %)\n",
+      "Writing at 0x001131da... (64 %)\n",
+      "Writing at 0x001180c3... (65 %)\n",
+      "Writing at 0x0011d470... (67 %)\n",
+      "Writing at 0x00122af8... (68 %)\n",
+      "Writing at 0x00127dcc... (70 %)\n",
+      "Writing at 0x0012ce81... (71 %)\n",
+      "Writing at 0x00132be7... (72 %)\n",
+      "Writing at 0x00137d8c... (74 %)\n",
+      "Writing at 0x0013d1ef... (75 %)\n",
+      "Writing at 0x00142463... (77 %)\n",
+      "Writing at 0x00147b68... (78 %)\n",
+      "Writing at 0x0014d140... (80 %)\n",
+      "Writing at 0x001527fb... (81 %)\n",
+      "Writing at 0x00158325... (82 %)\n",
+      "Writing at 0x0015de70... (84 %)\n",
+      "Writing at 0x001638b7... (85 %)\n",
+      "Writing at 0x0016b541... (87 %)\n",
+      "Writing at 0x00173097... (88 %)\n",
+      "Writing at 0x0017aa80... (90 %)\n",
+      "Writing at 0x0017feef... (91 %)\n",
+      "Writing at 0x001859e5... (92 %)\n",
+      "Writing at 0x0018e0ce... (94 %)\n",
+      "Writing at 0x00193b9f... (95 %)\n",
+      "Writing at 0x001995e1... (97 %)\n",
+      "Writing at 0x0019ee6a... (98 %)\n",
+      "Writing at 0x001a4812... (100 %)\n",
+      "Wrote 1737776 bytes (1143554 compressed) at 0x00001000 in 101.3 seconds (effective 137.2 kbit/s)...\n",
+      "Hash of data verified.\n",
+      "\n",
+      "Leaving...\n",
+      "Hard resetting via RTS pin...\n"
+     ]
+    }
+   ],
+   "source": [
+    "%esptool erase\n",
+    "%esptool esp32 firmware/ESP32_GENERIC-20240222-v1.22.2.bin"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d47bbc46-d358-47fa-8192-d0a29dbf95e0",
+   "metadata": {},
+   "source": [
+    "## Connect to device\n",
+    "\n",
+    "Connect to device via USB serial interface. Port is autodetected. Required command before program start."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a38e2a25-be18-4b8b-b403-32ca27733071",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%serialconnect"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0283278c-5063-4008-bb2f-e7fb890e8291",
+   "metadata": {},
+   "source": [
+    "## Load custom module to device"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b8e742c4-e10e-4fad-ae4a-32d2af2df95f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%sendtofile RGBLed.py\n",
+    "\n",
+    "# internal library\n",
+    "from machine import Pin, PWM\n",
+    "\n",
+    "#intensities\n",
+    "SUPER_BRIGHT   = const(1023)\n",
+    "BRIGHT         = const(511)\n",
+    "MEDIUM         = const(255)\n",
+    "DIM            = const(127)\n",
+    "SUPER_DIM      = const(63)\n",
+    "NEARLY_VISIBLE = const(7) \n",
+    "OFF            = const(0) \n",
+    "\n",
+    "# base colors\n",
+    "RED     = (1,    0,    0)\n",
+    "GREEN   = (0,    1,    0)\n",
+    "BLUE    = (0,    0,    1)\n",
+    "\n",
+    "BLACK   = (0,    0,    0)\n",
+    "WHITE   = (1,    1,    1)\n",
+    "\n",
+    "CYAN    = (0,    1,    1)\n",
+    "MAGENTA = (1,    0,    1) \n",
+    "YELLOW  = (1,    1,    0)\n",
+    "\n",
+    "# operating class\n",
+    "class RGBLed:\n",
+    "    def __init__(self, pinRed, pinGreen, pinBlue, freq):\n",
+    "        # create pwm pins\n",
+    "        self.__pwmR = PWM(pinRed)\n",
+    "        self.__pwmG = PWM(pinGreen)\n",
+    "        self.__pwmB = PWM(pinBlue)\n",
+    "\n",
+    "        # set frequency\n",
+    "        self.__pwmR.freq(freq)\n",
+    "        self.__pwmG.freq(freq)\n",
+    "        self.__pwmB.freq(freq)\n",
+    "\n",
+    "    def light(self, color, intensity=1023):\n",
+    "        self.__pwmR.duty(int(intensity * color[0]))\n",
+    "        self.__pwmG.duty(int(intensity * color[1]))\n",
+    "        self.__pwmB.duty(int(intensity * color[2]))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2d47509a-532e-4da1-b1d8-8f46c487d0ea",
+   "metadata": {},
+   "source": [
+    "## Simple program using custom module"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f6518ae4-05e8-4e5b-8837-a574d8a616b2",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from RGBLed import *\n",
+    "\n",
+    "ledRGB = RGBLed(Pin(25), Pin(26), Pin(27), 10000)\n",
+    "\n",
+    "ledRGB.light(CYAN)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e680daab-1c60-4571-bf3b-e859dc7b9731",
+   "metadata": {},
+   "source": [
+    "## Show device filesystem"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "14997298-27bb-4e3b-91ce-d8b620e3c78d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%ls "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "962d3ee8-63e2-4007-be03-ad3af27d750e",
+   "metadata": {},
+   "source": [
+    "## Show contents of stored file"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "160c3261-49fd-4eed-9d61-5d3c63f418aa",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%fetchfile --print boot.py"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a959657f-b4a0-4231-bf6e-132e13cd9dd4",
+   "metadata": {},
+   "source": [
+    "## Store terminal output into file (PC filesystem)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "66e4e37d-033c-4a3e-b018-98d439859dc0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%capture output.txt\n",
+    "\n",
+    "# program to generate output text\n",
+    "for i in range(0, 10):\n",
+    "    print(i)\n",
+    "    i += 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "348504d8-0fac-4a8f-bc86-30b861149c0c",
+   "metadata": {},
+   "source": [
+    "## Load program to boot file\n",
+    "\n",
+    "After completion, reset device usnig EN button. The serial connection will be lost, so you need to reconnect using %serialconnect command."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "aad4a8c0-1b5d-4b94-95e5-dbc546ba826c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%sendtofile boot.py\n",
+    "\n",
+    "from RGBLed import *\n",
+    "import time\n",
+    "\n",
+    "ledRGB = RGBLed(Pin(25), Pin(26), Pin(27), 10000)\n",
+    "\n",
+    "while True:\n",
+    "    ledRGB.light(RED)\n",
+    "    time.sleep(1)\n",
+    "    ledRGB.light(MAGENTA)\n",
+    "    time.sleep(1)\n",
+    "    ledRGB.light(YELLOW)\n",
+    "    time.sleep(1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "29df8fc3-d866-4434-8505-af90c24735b0",
+   "metadata": {},
+   "source": [
+    "## Show all \"Magic commands\""
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ac8d25b0-f7ef-4a72-91c1-a2939ea78041",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%lsmagic"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "MicroPython - USB",
+   "language": "micropython",
+   "name": "micropython"
+  },
+  "language_info": {
+   "codemirror_mode": "python",
+   "file_extension": ".py",
+   "mimetype": "text/python",
+   "name": "micropython"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

+ 215 - 0
prednasky/.ipynb_checkpoints/MicropythonPriklady-checkpoint.ipynb

@@ -0,0 +1,215 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "b8a81d77-1483-4bbf-abe4-ff7844df47d9",
+   "metadata": {},
+   "source": [
+    "## Príklad č. 1: Riadenie výstupov pomocou B-funkcií"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e6c39763-75e5-471b-a55a-a1f76bd2a1ba",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.jpg\" width=70%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5d556eae-608a-4158-b2b9-1e25508fbb76",
+   "metadata": {},
+   "source": [
+    "* Zjednodušený Python pre mikrokontroléry.\n",
+    "* Umožňuje ovládať piny, senzory a iné periférie.\n",
+    "* Beží na doskách ako ESP32, ESP8266, STM32, Raspberry Pi Pico.\n",
+    "* Má interaktívnu konzolu (REPL) – dá sa skúšať kód priamo.\n",
+    "* Výhody: jednoduchý, prehľadný, rýchle prototypovanie.\n",
+    "* Nevýhody: nižší výkon a väčšia pamäťová náročnosť než C/C++.\n",
+    "* Oficiálna dokumentácia: https://docs.micropython.org/en/latest/esp32/tutorial/intro.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "747f22d6-bd70-4acb-9f75-97f7c963a10d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\u001b[34mConnecting to --port=COM3 --baud=115200 \u001b[0m\n",
+      "\u001b[34mReady.\n",
+      "\u001b[0m..............................................\u001b[34m\n",
+      "\n",
+      "*** Sending Ctrl-C\n",
+      "\n",
+      "\u001b[0m"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "Traceback (most recent call last):\n",
+      "  File \"<stdin>\", line 23, in <module>\n",
+      "KeyboardInterrupt: \n"
+     ]
+    }
+   ],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a vystupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(18, Pin.OUT)\n",
+    "\n",
+    "# hlavny program\n",
+    "while True:\n",
+    "    # nacitanie hodnot vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # vypocet hodnoty vystupu pomocou funkcie\n",
+    "    Y = A * (not B) + C + (not A) * B * C\n",
+    "    # Y = A and (not B) or C or (not A) and B and C\n",
+    "    # Y = A & (~B) | C | (~A) & B & C\n",
+    "    \n",
+    "    # zapisanie vyslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "2da2da3b-f309-4877-9012-80a8b6aa9a52",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c3f72b33-74a5-4a63-b273-92a30a8d3154",
+   "metadata": {},
+   "source": [
+    "## Príklad č. 2: Riadenie výstupov pomocou pravdivostnej tabuľky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "ec73b597-8744-4a5a-a1e1-eddaf5e3416c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "\u001b[34mConnecting to --port=COM6 --baud=115200 \u001b[0m\n",
+      "MicroPython v1.22.2 on 2024-02-22; Generic ESP32 module with ESP32\n",
+      "Type \"help()\" for more information.\n",
+      ">>>[reboot detected 0]repl is in normal command mode\n",
+      "[\\r\\x03\\x03] b'\\r\\n>>> '\n",
+      "[\\r\\x01] b'\\r\\n>>> \\r\\nraw REPL; CTRL-B to exit\\r\\n>' \u001b[34mReady.\n",
+      "\u001b[0m................................................................................................\n",
+      "**[ys] <class 'serial.serialutil.SerialException'>\n",
+      "**[ys] ClearCommError failed (PermissionError(13, 'Access is denied.', None, 5))\n",
+      "\n",
+      "\n",
+      "**[ys] <class 'serial.serialutil.SerialException'>\n",
+      "**[ys] ClearCommError failed (PermissionError(13, 'Access is denied.', None, 5))\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a vystupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# definovanie pravdivostnej tabulky\n",
+    "tab = {\n",
+    "  (0, 0, 0): 0,\n",
+    "  (0, 0, 1): 1,\n",
+    "  (0, 1, 0): 1,\n",
+    "  (0, 1, 1): 0,\n",
+    "  (1, 0, 0): 0,\n",
+    "  (1, 0, 1): 0,\n",
+    "  (1, 1, 0): 0,\n",
+    "  (1, 1, 1): 1\n",
+    "}\n",
+    "\n",
+    "# hlavny program\n",
+    "while True:\n",
+    "    # nacitanie hodnot vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # vypocet hodnoty vystupu pomocou tabulky\n",
+    "    Y = tab[A, B, C]\n",
+    "    \n",
+    "    # zapisanie vyslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ae05be27-ae4b-4d12-b8db-51e07928c1ee",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"images/schematic1.png\" width=70%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0dd3c112-d34b-4f25-92b5-b56eef478cc6",
+   "metadata": {},
+   "source": [
+    "$a^2 = b + c$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f031b8a5-fdb4-4be0-982c-aec47d72f41e",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "MicroPython - USB",
+   "language": "micropython",
+   "name": "micropython"
+  },
+  "language_info": {
+   "codemirror_mode": "python",
+   "file_extension": ".py",
+   "mimetype": "text/python",
+   "name": "micropython"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

+ 0 - 0
lectures/PythonPrednaska.ipynb → prednasky/.ipynb_checkpoints/PythonPrednaska-checkpoint.ipynb


+ 219 - 0
prednasky/micropython-LUR/.ipynb_checkpoints/MicropythonPriklady-checkpoint.ipynb

@@ -0,0 +1,219 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1487d453-698d-4f3a-a8b1-3f0b4e54c7e9",
+   "metadata": {},
+   "source": [
+    "# Praktické ukážky v MicroPythone"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a3f33b6b-a5bf-4776-bb10-329f0ae98e92",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.jpg\" width=45%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "afbdc202-ed11-4473-b31f-17334d64258c",
+   "metadata": {},
+   "source": [
+    "# MikroPython"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7fd4adcb-b1d9-4823-b73a-a701a6c8eae8",
+   "metadata": {},
+   "source": [
+    "* Zjednodušený Python pre mikrokontroléry.\n",
+    "* Umožňuje ovládať piny, senzory a iné periférie.\n",
+    "* Beží na doskách ako ESP32, ESP8266, STM32, Raspberry Pi Pico.\n",
+    "* Má interaktívnu konzolu (REPL) – dá sa skúšať kód priamo.\n",
+    "* Výhody: jednoduchý, prehľadný, rýchle prototypovanie.\n",
+    "* Nevýhody: nižší výkon a väčšia pamäťová náročnosť než C/C++.\n",
+    "* Oficiálna dokumentácia: https://docs.micropython.org/en/latest/esp32/tutorial/intro.html"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9b492736-7b54-40f7-8d8c-8abde7ca6392",
+   "metadata": {},
+   "source": [
+    "# Úloha\n",
+    "\n",
+    "Implementujte kombinačný logický obvod (pozri obrázok) na mikrokontroléri ESP32 pomocou:\n",
+    "\n",
+    "* B-funkcie.\n",
+    "* Pravdivostnej tabuľky."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ae05be27-ae4b-4d12-b8db-51e07928c1ee",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    $f(A,B,C) = \\bar A B \\bar C + \\bar A \\bar B C + ABC$\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/blokova_schema.svg\" width=25%/>\n",
+    "</div>\n",
+    "\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 1: Bloková schéma kombinačného obvodu\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c610a04e-6fb5-46a1-be8c-2c24645d3bfd",
+   "metadata": {},
+   "source": [
+    "# Riešenie"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1597a903-0cbd-4e29-96c8-cecd5c3b1c3b",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/schema_zapojenia.png\" width=50%/>\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 2: Schéma zapojenia hardvérového riešenia\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b8a81d77-1483-4bbf-abe4-ff7844df47d9",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou B-funkcie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "747f22d6-bd70-4acb-9f75-97f7c963a10d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "..............................."
+     ]
+    }
+   ],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# hlavný program\n",
+    "while True:\n",
+    "    # načítanie hodnôt vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # výpočet hodnoty vystupu pomocou B-funkcie\n",
+    "    Y = (not A) and B and (not C) or       \\\n",
+    "        (not A) and (not B) and C or       \\\n",
+    "         A and B and C\n",
+    "    \n",
+    "    # alternatívny zápis\n",
+    "    # Y = (not A) * B * (not C) + (not A) * (not B) * C + A * B * C\n",
+    "    # Y = (~A) & B & (~C) | (~A) & (~B) & C | A & B & C\n",
+    "  \n",
+    "    # zapísanie výslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c3f72b33-74a5-4a63-b273-92a30a8d3154",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou pravdivostnej tabuľky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ec73b597-8744-4a5a-a1e1-eddaf5e3416c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# definovanie pravdivostnej tabuľky\n",
+    "tab = {\n",
+    "  (0, 0, 0): 0,\n",
+    "  (0, 0, 1): 1,\n",
+    "  (0, 1, 0): 1,\n",
+    "  (0, 1, 1): 0,\n",
+    "  (1, 0, 0): 0,\n",
+    "  (1, 0, 1): 0,\n",
+    "  (1, 1, 0): 0,\n",
+    "  (1, 1, 1): 1\n",
+    "}\n",
+    "\n",
+    "# hlavny program\n",
+    "while True:\n",
+    "    # nacitanie hodnot vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # vypocet hodnoty vystupu pomocou tabulky\n",
+    "    Y = tab[A, B, C]\n",
+    "    \n",
+    "    # zapisanie vyslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "MicroPython - USB",
+   "language": "micropython",
+   "name": "micropython"
+  },
+  "language_info": {
+   "codemirror_mode": "python",
+   "file_extension": ".py",
+   "mimetype": "text/python",
+   "name": "micropython"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

+ 223 - 0
prednasky/micropython-LUR/.ipynb_checkpoints/micropython-LUR-checkpoint.ipynb

@@ -0,0 +1,223 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1487d453-698d-4f3a-a8b1-3f0b4e54c7e9",
+   "metadata": {},
+   "source": [
+    "# Praktické ukážky v MicroPythone"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a3f33b6b-a5bf-4776-bb10-329f0ae98e92",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.jpg\" width=45%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "afbdc202-ed11-4473-b31f-17334d64258c",
+   "metadata": {},
+   "source": [
+    "# MikroPython"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7fd4adcb-b1d9-4823-b73a-a701a6c8eae8",
+   "metadata": {},
+   "source": [
+    "* Zjednodušený Python pre mikrokontroléry.\n",
+    "* Umožňuje ovládať piny, senzory a iné periférie.\n",
+    "* Beží na doskách ako ESP32, ESP8266, STM32, Raspberry Pi Pico.\n",
+    "* Má interaktívnu konzolu (REPL) – dá sa skúšať kód priamo.\n",
+    "* Výhody: jednoduchý, prehľadný, rýchle prototypovanie.\n",
+    "* Nevýhody: nižší výkon a väčšia pamäťová náročnosť než C/C++.\n",
+    "* Oficiálna dokumentácia: https://docs.micropython.org/en/latest/esp32/tutorial/intro.html"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9b492736-7b54-40f7-8d8c-8abde7ca6392",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Úloha\n",
+    "\n",
+    "Implementujte kombinačný logický obvod (pozri obrázok) na mikrokontroléri ESP32 pomocou:\n",
+    "\n",
+    "* B-funkcie.\n",
+    "* Pravdivostnej tabuľky."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ae05be27-ae4b-4d12-b8db-51e07928c1ee",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    $f(A,B,C) = \\bar A B \\bar C + \\bar A \\bar B C + ABC$\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/blokova_schema.svg\" width=25%/>\n",
+    "</div>\n",
+    "\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 1: Bloková schéma kombinačného obvodu\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c610a04e-6fb5-46a1-be8c-2c24645d3bfd",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Riešenie"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1597a903-0cbd-4e29-96c8-cecd5c3b1c3b",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/schema_zapojenia.png\" width=50%/>\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 2: Schéma zapojenia hardvérového riešenia\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b8a81d77-1483-4bbf-abe4-ff7844df47d9",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou B-funkcie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "747f22d6-bd70-4acb-9f75-97f7c963a10d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "..............................."
+     ]
+    }
+   ],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# hlavný program\n",
+    "while True:\n",
+    "    # načítanie hodnôt vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # výpočet hodnoty vystupu pomocou B-funkcie\n",
+    "    Y = (not A) and B and (not C) or       \\\n",
+    "        (not A) and (not B) and C or       \\\n",
+    "         A and B and C\n",
+    "    \n",
+    "    # alternatívny zápis\n",
+    "    # Y = (not A) * B * (not C) + (not A) * (not B) * C + A * B * C\n",
+    "    # Y = (~A) & B & (~C) | (~A) & (~B) & C | A & B & C\n",
+    "  \n",
+    "    # zapísanie výslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c3f72b33-74a5-4a63-b273-92a30a8d3154",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou pravdivostnej tabuľky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ec73b597-8744-4a5a-a1e1-eddaf5e3416c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# definovanie pravdivostnej tabuľky\n",
+    "tab = {\n",
+    "  (0, 0, 0): 0,\n",
+    "  (0, 0, 1): 1,\n",
+    "  (0, 1, 0): 1,\n",
+    "  (0, 1, 1): 0,\n",
+    "  (1, 0, 0): 0,\n",
+    "  (1, 0, 1): 0,\n",
+    "  (1, 1, 0): 0,\n",
+    "  (1, 1, 1): 1\n",
+    "}\n",
+    "\n",
+    "# hlavny program\n",
+    "while True:\n",
+    "    # nacitanie hodnot vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # vypocet hodnoty vystupu pomocou tabulky\n",
+    "    Y = tab[A, B, C]\n",
+    "    \n",
+    "    # zapisanie vyslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "MicroPython - USB",
+   "language": "micropython",
+   "name": "micropython"
+  },
+  "language_info": {
+   "codemirror_mode": "python",
+   "file_extension": ".py",
+   "mimetype": "text/python",
+   "name": "micropython"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

+ 223 - 0
prednasky/micropython-LUR/micropython-LUR.ipynb

@@ -0,0 +1,223 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1487d453-698d-4f3a-a8b1-3f0b4e54c7e9",
+   "metadata": {},
+   "source": [
+    "# Praktické ukážky v MicroPythone"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a3f33b6b-a5bf-4776-bb10-329f0ae98e92",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.jpg\" width=45%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "afbdc202-ed11-4473-b31f-17334d64258c",
+   "metadata": {},
+   "source": [
+    "# MikroPython"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7fd4adcb-b1d9-4823-b73a-a701a6c8eae8",
+   "metadata": {},
+   "source": [
+    "* Zjednodušený Python pre mikrokontroléry.\n",
+    "* Umožňuje ovládať piny, senzory a iné periférie.\n",
+    "* Beží na doskách ako ESP32, ESP8266, STM32, Raspberry Pi Pico.\n",
+    "* Má interaktívnu konzolu (REPL) – dá sa skúšať kód priamo.\n",
+    "* Výhody: jednoduchý, prehľadný, rýchle prototypovanie.\n",
+    "* Nevýhody: nižší výkon a väčšia pamäťová náročnosť než C/C++.\n",
+    "* Oficiálna dokumentácia: https://docs.micropython.org/en/latest/esp32/tutorial/intro.html"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9b492736-7b54-40f7-8d8c-8abde7ca6392",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Úloha\n",
+    "\n",
+    "Implementujte kombinačný logický obvod (pozri obrázok) na mikrokontroléri ESP32 pomocou:\n",
+    "\n",
+    "* B-funkcie.\n",
+    "* Pravdivostnej tabuľky."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ae05be27-ae4b-4d12-b8db-51e07928c1ee",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    $f(A,B,C) = \\bar A B \\bar C + \\bar A \\bar B C + ABC$\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/blokova_schema.svg\" width=25%/>\n",
+    "</div>\n",
+    "\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 1: Bloková schéma kombinačného obvodu\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c610a04e-6fb5-46a1-be8c-2c24645d3bfd",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Riešenie"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1597a903-0cbd-4e29-96c8-cecd5c3b1c3b",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/schema_zapojenia.png\" width=50%/>\n",
+    "</div>\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    Obr. 2: Schéma zapojenia hardvérového riešenia\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b8a81d77-1483-4bbf-abe4-ff7844df47d9",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou B-funkcie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "747f22d6-bd70-4acb-9f75-97f7c963a10d",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "..............................."
+     ]
+    }
+   ],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# hlavný program\n",
+    "while True:\n",
+    "    # načítanie hodnôt vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # výpočet hodnoty vystupu pomocou B-funkcie\n",
+    "    Y = (not A) and B and (not C) or       \\\n",
+    "        (not A) and (not B) and C or       \\\n",
+    "         A and B and C\n",
+    "    \n",
+    "    # alternatívny zápis\n",
+    "    # Y = (not A) * B * (not C) + (not A) * (not B) * C + A * B * C\n",
+    "    # Y = (~A) & B & (~C) | (~A) & (~B) & C | A & B & C\n",
+    "  \n",
+    "    # zapísanie výslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c3f72b33-74a5-4a63-b273-92a30a8d3154",
+   "metadata": {},
+   "source": [
+    "## Riešenie pomocou pravdivostnej tabuľky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ec73b597-8744-4a5a-a1e1-eddaf5e3416c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%serialconnect\n",
+    "\n",
+    "from machine import Pin\n",
+    "import time\n",
+    "\n",
+    "# definovanie vstupov a výstupov\n",
+    "pinA = Pin(25, Pin.IN)\n",
+    "pinB = Pin(26, Pin.IN)\n",
+    "pinC = Pin(27, Pin.IN)\n",
+    "pinY = Pin(5, Pin.OUT)\n",
+    "\n",
+    "# definovanie pravdivostnej tabuľky\n",
+    "tab = {\n",
+    "  (0, 0, 0): 0,\n",
+    "  (0, 0, 1): 1,\n",
+    "  (0, 1, 0): 1,\n",
+    "  (0, 1, 1): 0,\n",
+    "  (1, 0, 0): 0,\n",
+    "  (1, 0, 1): 0,\n",
+    "  (1, 1, 0): 0,\n",
+    "  (1, 1, 1): 1\n",
+    "}\n",
+    "\n",
+    "# hlavny program\n",
+    "while True:\n",
+    "    # nacitanie hodnot vstupov\n",
+    "    A = pinA.value() \n",
+    "    B = pinB.value()\n",
+    "    C = pinC.value()\n",
+    "    \n",
+    "    # vypocet hodnoty vystupu pomocou tabulky\n",
+    "    Y = tab[A, B, C]\n",
+    "    \n",
+    "    # zapisanie vyslednej hodnoty\n",
+    "    pinY.value(Y)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "MicroPython - USB",
+   "language": "micropython",
+   "name": "micropython"
+  },
+  "language_info": {
+   "codemirror_mode": "python",
+   "file_extension": ".py",
+   "mimetype": "text/python",
+   "name": "micropython"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}

File diff suppressed because it is too large
+ 2 - 0
prednasky/micropython-LUR/obrazky/blokova_schema.svg


BIN
prednasky/micropython-LUR/obrazky/obalka.jpg


BIN
prednasky/micropython-LUR/obrazky/schema_zapojenia.png


+ 1841 - 0
prednasky/python-prednaska/.ipynb_checkpoints/python-prednaska-checkpoint.ipynb

@@ -0,0 +1,1841 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Programovací jayzk Python"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Ing. Matuš Nečas\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.png\" width=70%/>\n",
+    "</div"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Opis jazyka"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pôvod\n",
+    "\n",
+    "* **Autor:** Guido van Rossum (Holandsko).\n",
+    "* **Rok vzniku:** Vianoce 1989.\n",
+    "* **Cieľ:** jednoduchý, čitateľný a zároveň výkonný skriptovací jazyk.\n",
+    "* **Pôvod mena:** inšpirácia humorom britskej komediálnej skupiny *Monty Python*.\n",
+    "  \n",
+    "#### Vlastnosti\n",
+    "\n",
+    "* **Interpretovaný** – kód sa vykonáva postupne pomocou tzv. *interpretera*.  \n",
+    "* **Interaktívny** – riadky zdrojového kódu sa dajú priamo písať a spúšťať v konzole.  \n",
+    "* **Objektovo orientovaný** – podporuje princípy OOP.  \n",
+    "* **Vhodný pre začiatočníkov** – kód sa podobá jednoduchej angličtine.  \n",
+    "* **Široké použitie** – napr. dátové inžinierstvo, databázy, strojové učenie, webové aplikácie.\n",
+    "\n",
+    "#### Oficiálna dokumentácia\n",
+    "\n",
+    "https://www.python.org"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Začíname"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/zaciname.jpg\" width=70%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Komentáre"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Slúžia na dokumentáciu kódu, na chod programu nemajú efekt.\n",
+    "* V Pythone existujú:\n",
+    "    * Jednoriadkové. \n",
+    "    * Blokové."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoriadkoý kometár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Začína znakom `#` a má platnosť iba jeden riadok."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# toto je jednoriadkový komentár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Blokový komentár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Je ohraničený apostrofmi `'`, resp. úvodzovkami `\"`. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\"\"\"\n",
+    "Toto je \n",
+    "blokový\n",
+    "komentár\n",
+    "\"\"\"\n",
+    "\n",
+    "'''\n",
+    "Aj toto \n",
+    "je \n",
+    "blokový\n",
+    "komentár\n",
+    "'''"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Štandardný vstup a výstup"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Štandardný  vstup (klávesnica): `input()`.\n",
+    "* Štandardný  výstup (konzola): `print()`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Použitie štandardného výstupu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ahoj Svet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"Ahoj Svet!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Použitie štandardného vstupu aj výstupu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte svoje meno:  Adam\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Vaše meno je: Adam\n"
+     ]
+    }
+   ],
+   "source": [
+    "meno = input(\"Zadajte svoje meno: \")\n",
+    "print(\"Vaše meno je:\", meno)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Dátové typy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/datove_typy.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Vlastnosti"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* **Dynamická typová kontrola** - netreba deklarovať typ premennej.\n",
+    "* Môžu niesť akúkoľvek hodnotu - celé číslo, reálne číslo, reťazec.\n",
+    "* Case senzitivita - rozlišujú sa malé a veľké písmená.\n",
+    "* Názvy premenných sa môžu skladať iba z písmen, číslic a podčiarkovníkov.\n",
+    "* Existujú:\n",
+    "    * Jednoduché dátové typy.\n",
+    "    * Zložené dátové typy."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Jednoduché dátové typy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Uchovávajú len jednu hodnotu.\n",
+    "* Sú to:\n",
+    "    * Booleovské hodnoty: `bool`.\n",
+    "    * Celé čísla: `int`.\n",
+    "    * Reálne čísla: `float`.\n",
+    "    * Komplexné čísla: `complex`.\n",
+    "    \n",
+    "> *Poznámka:* Znak `char` v Pythone neexistuje."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vytvorenie jednoduchých dátových typov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "20 17.5 (2+3j) True\n"
+     ]
+    }
+   ],
+   "source": [
+    "a = 20      # int\n",
+    "b = 17.5    # float\n",
+    "c = 2+3j    # complex\n",
+    "d = True    # bool\n",
+    "print(a, b, c, d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Operácie s jednoduchými dátovými typmi"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Aritmetické: (`+`, `-`, `*`, `/`, `%`, `//`, `**`).\n",
+    "* Porovnávacie: (`<`,  `>`,  `==`,  `!=`,  `<=`,  `>=`).\n",
+    "* Pretypovanie: (`int()`, `float()`, `bool()`, `complex()`).\n",
+    "* Logické: (`and`, `or`, `not`).\n",
+    "* Bitové: (`&`, `|`, `~`, `^`, `<<`, `>>`).\n",
+    "* Priraďovacie (`+=`, `-=`, `*=`, ...)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Aritmetické operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "súčet:  7\n",
+      "rozdiel:  1\n",
+      "súčin:  12\n",
+      "podiel (reálny):  1.3333333333333333\n",
+      "podiel (celočíselný):  1\n",
+      "mocnina:  64\n",
+      "zvyšok po delení:  1\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad aritmetických operácií: \n",
+    "a = 4\n",
+    "b = 3\n",
+    "\n",
+    "sucet = a + b  \n",
+    "rozdiel = a - b  \n",
+    "sucin = a * b  \n",
+    "podiel_r = a / b  \n",
+    "podiel_c = a // b\n",
+    "mocnina = a ** b \n",
+    "zvysok = a % b\n",
+    "\n",
+    "print(\"súčet: \", sucet)\n",
+    "print(\"rozdiel: \", rozdiel)\n",
+    "print(\"súčin: \", sucin)\n",
+    "print(\"podiel (reálny): \", podiel_r)\n",
+    "print(\"podiel (celočíselný): \", podiel_c)\n",
+    "print(\"mocnina: \", mocnina)\n",
+    "print(\"zvyšok po delení: \", zvysok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Porovnávacie operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "a > b: True\n",
+      "a < b: False\n",
+      "a == b: False\n",
+      "a != b: True\n",
+      "a >= b: True\n",
+      "a <= b: False\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady porovnávacích operácií:\n",
+    "a = 100\n",
+    "b = 10\n",
+    "\n",
+    "print(\"a > b:\", a > b) \n",
+    "print(\"a < b:\", a < b) \n",
+    "print(\"a == b:\", a == b) \n",
+    "print(\"a != b:\", a != b) \n",
+    "print(\"a >= b:\", a >= b) \n",
+    "print(\"a <= b:\", a <= b) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pretypovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Typ: <class 'int'> , Hodnota: 3\n",
+      "Typ: <class 'float'> , Hodnota: 3.14\n",
+      "Typ: <class 'complex'> , Hodnota: (3.14+0j)\n",
+      "Typ: <class 'bool'> , Hodnota: True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad pretypovania:\n",
+    "\n",
+    "cislo1 = 3.14\n",
+    "\n",
+    "cislo2 = int(cislo1) # integer\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = float(cislo1) # float\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = complex(cislo1) # complex\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = bool(cislo1) # bool\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Logické operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "a and b: False\n",
+      "a or b: True\n",
+      "not a: False\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady logických operácií:\n",
+    "x = True\n",
+    "y = False\n",
+    "\n",
+    "z = x and y         # a && b\n",
+    "print(\"a and b:\", z) \n",
+    "\n",
+    "z = x or y          # a || b\n",
+    "print(\"a or b:\", z) \n",
+    "\n",
+    "z = not x           # !a\n",
+    "print(\"not a:\", z) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Priraďovacie operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "5\n",
+      "7\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad priraďovacích operácií:\n",
+    "a = 3\n",
+    "a = a + 2\n",
+    "\n",
+    "print(a)\n",
+    "\n",
+    "a += 2\n",
+    "\n",
+    "print(a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Zložené dátové typy."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Uchovávajú viacero hodnôt.\n",
+    "* Sú to:\n",
+    "    * reťazce: *strings*,\n",
+    "    * zoznamy: *lists*,\n",
+    "    * množiny: *sets*,\n",
+    "    * n-tice: *tuples*,\n",
+    "    * slovníky: *dictionaries*.\n",
+    "\n",
+    "> *Poznámka:* Pre jednoduchosť sú v prednáške ďalej rozobraté iba `list` a `string`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### String"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Skupina znakov `str`.\n",
+    "* Nie je modifikovateľný.\n",
+    "* Znaky sú číslované od `0`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### List"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Usporiadaná skupina prvkov `list`.\n",
+    "* Prvky môžu byť rovnakého i rôzneho dátového typu.\n",
+    "* Je modifikovateľný.\n",
+    "* Sú povolené duplicity.\n",
+    "* Prvky sú číslované od `0`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vytvorenie zoznamov a reťazcov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "\n",
+      "Ahoj Svet\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "[]\n",
+      "[1, 2, 3, 4, 5]\n",
+      "['Jablko', 1, 2, True, (3+1j), [1, 2, 3, 4, 5]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vytvorenia reťazcov:\n",
+    "prazdny = \"\"\n",
+    "slovo = 'Ahoj Svet'\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(prazdny)\n",
+    "print(slovo)\n",
+    "\n",
+    "# Príklad vytvorenia zoznamov:\n",
+    "\n",
+    "prazdny = []\n",
+    "cisla = [1, 2, 3, 4, 5]\n",
+    "mix = [\"Jablko\", 1, 2, True, 3+1j, cisla]\n",
+    "\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(prazdny)\n",
+    "print(cisla)\n",
+    "print(mix)      "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Operácie so zloženými dátovými typmi"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Zlučovanie: (`+`, `*`).\n",
+    "* Porovnanie dĺžky reťazcov: (`<`,  `>`,  `==`,  `!=`,  `<=`,  `>=`).\n",
+    "* Vyhľadávanie prvkov: (`in`, `not in`).\n",
+    "* Indexovanie: (pre `list`, `string`, `tuple`).\n",
+    "* Pretypovanie: (`str()`, `list()`, ...).\n",
+    "* Pridávanie / mazanie prvkov: (pre `list`, `set`, `dictionary`).\n",
+    "* Modifikácia prvkov: (pre `list`, `dictionary`).\n",
+    "* Užitočné funkcie, špecifické pre konkrétny dátový typ."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Zlučovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "Janko Hraško\n",
+      "12\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "Mix:  [10, 20, 30, 'jablko', 'hruška', 'slivka']\n",
+      "Cisla 3x:  [10, 20, 30, 10, 20, 30, 10, 20, 30]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady zlučovania reťazcov:\n",
+    "meno = \"Janko\" + \" Hraško\"\n",
+    "cislo = \"1\" + \"2\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(meno)\n",
+    "print(cislo)\n",
+    "\n",
+    "# Príklady zlučovania zoznamov:\n",
+    "cisla = [10, 20, 30]\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "\n",
+    "mix = cisla + ovocie\n",
+    "cisla_3x = cisla * 3\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(\"Mix: \", mix)\n",
+    "print(\"Cisla 3x: \", cisla_3x)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Porovnanie dĺžky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "r1 > r2: True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady porovnávania dĺžky reťazcov:\n",
+    "r1 = \"pomaranč\"\n",
+    "r2 = \"kiwi\"\n",
+    "\n",
+    "print(\"r1 > r2:\", r1 > r2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Vyhľadávanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "Je Janko v reťazci meno?  True\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "Chýba číslo 6 v zozname cisla?  True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady vyhľadávania v reťazcoch:\n",
+    "meno = \"Janko Hraško\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(\"Je Janko v reťazci meno? \", \"Janko\" in meno)\n",
+    "\n",
+    "# Príklady vyhľadávania v zoznamoch:\n",
+    "cisla = [1, 2, 3, 4, 5]\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(\"Chýba číslo 6 v zozname cisla? \", 6  not in cisla)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Indexovanie "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "a\n",
+      "nk\n",
+      "Jank\n",
+      "anko Hraško\n",
+      "12\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "jablko\n",
+      "['jablko', 'hruška']\n",
+      "['jablko', 'hruška']\n",
+      "['hruška', 'slivka']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady indexovania reťazcov:\n",
+    "meno = \"Janko Hraško\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(meno[1])\n",
+    "print(meno[2:4])\n",
+    "print(meno[:4])\n",
+    "print(meno[1:])\n",
+    "\n",
+    "print(len(meno))\n",
+    "\n",
+    "# Príklady indexovania zoznamov:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(ovocie[0])\n",
+    "print(ovocie[0:2])\n",
+    "print(ovocie[:2])\n",
+    "print(ovocie[1:])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pretypovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "18\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad pretypovania - súčet cifier:\n",
+    "\n",
+    "cislo = 945\n",
+    "\n",
+    "cifry = str(cislo)    # pretypovanie na reťazec\n",
+    "\n",
+    "cifra1 = int(cifry[0]) # pretypovanie znakov na čísla\n",
+    "cifra2 = int(cifry[1])\n",
+    "cifra3 = int(cifry[2])\n",
+    "\n",
+    "vysledok = cifra1 + cifra2 + cifra3\n",
+    "\n",
+    "print(vysledok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pridávanie, mazanie a modifikácia prvkov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Pôvodný zoznam: ['jablko', 'hruška', 'slivka']\n",
+      "Modifikácia prvku: ['mango', 'hruška', 'slivka']\n",
+      "Pridanie prvkov: ['kiwi', 'mango', 'hruška', 'slivka', 'banán']\n",
+      "Mazanie prvkov: ['hruška', 'slivka', 'banán']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady pridávania, mazania a modifikácie zoznamov:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "print(\"Pôvodný zoznam:\", ovocie)\n",
+    "\n",
+    "# modifikácia prvku\n",
+    "ovocie[0] = \"mango\"      # modifikovanie prvku na 0-tom indexe\n",
+    "print(\"Modifikácia prvku:\", ovocie)\n",
+    "\n",
+    "# pridanie prvkov\n",
+    "ovocie.append(\"banán\")    # pridanie prvku na koniec zoznamu\n",
+    "ovocie.insert(0, \"kiwi\")  # pridanie prvku na 0-tú pozíciu\n",
+    "print(\"Pridanie prvkov:\", ovocie)\n",
+    "\n",
+    "# mazanie prvkov\n",
+    "ovocie.pop(1)              # vzmazanie prvku s indexom 1\n",
+    "ovocie.remove(\"kiwi\")      # vymazanie prvku s hodnotou \"kiwi\"\n",
+    "print(\"Mazanie prvkov:\", ovocie)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Špecifické funkcie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Velke jablko: JABLKO\n",
+      "Zoradné ovocie: ['hruška', 'jablko', 'slivka']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad špecifickej funkcie reťazca:\n",
+    "jablko = \"jablko\"\n",
+    "jablko = jablko.upper()\n",
+    "\n",
+    "print(\"Velke jablko:\", jablko)\n",
+    "\n",
+    "# Príklad špecifickej funkcie zoznamu:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "ovocie.sort()\n",
+    "\n",
+    "print(\"Zoradné ovocie:\", ovocie)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Riadiace štruktúry"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/riadiace_struktury.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Podmienky"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Predstavujú rozhodovanie programu.\n",
+    "* Kľúčové slová: `if`, `elif`, `else`.\n",
+    "* Jednotlivé vetvy musia byť odsadené: **1x TAB**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoduchá podmienka"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  3\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad jednoduchej podmienky - znamienko čísla:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "if cislo > 0:\n",
+    "    print(\"kladné\")\n",
+    "elif cislo < 0:\n",
+    "    print(\"záporné\")\n",
+    "else: \n",
+    "    print(\"nula\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vnorená podmienka"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  4000\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n",
+      "veľké\n",
+      "cislo\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vnorenej podmienky - znamienko čísla 2.0:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "\n",
+    "if cislo > 0:\n",
+    "    print(\"kladné\")\n",
+    "        \n",
+    "    if cislo > 2000:    # vnorená podmienka\n",
+    "        print(\"veľké\")\n",
+    "    \n",
+    "    print(\"cislo\")\n",
+    "        \n",
+    "elif cislo < 0:\n",
+    "    print(\"záporné\")\n",
+    "else: \n",
+    "    print(\"nula\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoriadková podmienka (ternárny operátor)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  200\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad jednoriadkovej podmienky - znamienko čísla 3.0:\n",
+    "# nepočítame so vstupom 0\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "vysledok = \"kladné\" if cislo > 0 else \"záporné\"\n",
+    "\n",
+    "print(vysledok) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Cykly"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Umožňujú opakovať tie isté príkazy viackrát za sebou.\n",
+    "* Dva rôzne typy: `for` a `while` (v Pythone neexistuje `do..while`).\n",
+    "* Python podporuje príkazy: `break` a `continue`.\n",
+    "* Telo cyklu musí byť odsadené: <b>1x TAB</b>."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### For cyklus"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Cyklus s <b>pevným počtom opakovaní</b> – dopredu vieme povedať, koľkokrát sa kód vykoná.\n",
+    "* Slúži najmä na <b>prechádzanie dátových štruktúr</b>, ako sú reťazce, zoznamy, n-tice, množiny a slovníky. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Prechádzanie dátových štruktúr"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "150\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia cyklu for na prechádzanie zložených dátových typov:\n",
+    "# Súčet prvkov.\n",
+    "\n",
+    "cisla = [10, 20, 30, 40, 50]\n",
+    "vysledok = 0\n",
+    "\n",
+    "for c in cisla:\n",
+    "    vysledok += c\n",
+    "\n",
+    "print(vysledok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Vytvorenie postupností (zoznamov)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "postupnosť č. 1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]\n",
+      "postupnosť č. 2 [1, 2, 3, 4, 5, 6, 7, 8, 9]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vytvorenia postupnosti od 0 do 9 s využitím cyklu for:\n",
+    "\n",
+    "postupnost1 = []\n",
+    "\n",
+    "for prvok in range(1, 10, 1):\n",
+    "    postupnost1.append(prvok)\n",
+    "    \n",
+    "for prvok in range(10, 0, -1):\n",
+    "    postupnost1.append(prvok)\n",
+    "\n",
+    "print(\"postupnosť č. 1\", postupnost1)\n",
+    "\n",
+    "# zjednodušená konštrukcia:\n",
+    "\n",
+    "postupnost2 = [prvok for prvok in range(1, 10, 1)]\n",
+    "\n",
+    "print(\"postupnosť č. 2\", postupnost2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### While cyklus"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Cyklus s podmienkou na začiatku.\n",
+    "* Slúži na vykonávanie tých istých príkazov, pokiaľ je splnená **riadiaca podmienka**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Použitie cyklu while"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0\n",
+      "1\n",
+      "2\n",
+      "3\n",
+      "4\n",
+      "5\n",
+      "6\n",
+      "7\n",
+      "8\n",
+      "9\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia cyklu while:\n",
+    "# Výpis postupnosti prvkov od 0 do 9.\n",
+    "\n",
+    "x = 0\n",
+    "\n",
+    "while x < 10:\n",
+    "    print(x) \n",
+    "    x += 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Použitie cyklu while s využitím break a continue"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0\n",
+      "1\n",
+      "2\n",
+      "3\n",
+      "4\n",
+      "6\n",
+      "7\n",
+      "8\n",
+      "9\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia break a continue v cykle while:\n",
+    "# Výpis postupnosti: iteruj od 0 do 9, vynechaj číslo 5.\n",
+    "z = 0\n",
+    "\n",
+    "while True:       # podmienka je vždy splnená\n",
+    "    if z == 5:    # vynechaj číslo 5\n",
+    "        z += 1\n",
+    "        continue \n",
+    "    if z == 10:  # ukonči cyklus ak dosiahneš číslo 10\n",
+    "        break\n",
+    "    print(z)\n",
+    "    z += 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vnáranie cyklov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1, 2, 3, \n",
+      "4, 5, 6, \n",
+      "7, 8, 9, \n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia vnorených cyklov:\n",
+    "# Výpis matice.\n",
+    "\n",
+    "matica = [[1, 2, 3], \n",
+    "          [4, 5, 6], \n",
+    "          [7, 8, 9]]\n",
+    "\n",
+    "for riadok in matica:\n",
+    "    for stlpec in riadok:\n",
+    "        print(stlpec, end=\", \")\n",
+    "    print()  # nový riadok"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Organizácia kódu a riadenie chýb"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/organizacia_kodu.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Funkcie"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú bloky kódu, vykonávajúce určitú úlohu.\n",
+    "* Kľúčové slová: `def` a `return`.\n",
+    "* Môžu mať ľubovoľný počet parametrov (aj žiadne).\n",
+    "* Môžu vracať ľubovoľný počet návratových hodnôt (aj žiadnu).\n",
+    "* Telo funkcie musí byť odsadené: <b>1x TAB</b>.\n",
+    "* Funkcie v Pythone podporujú rekurziu."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ahoj Svet\n",
+      "Meno: Janko Priezvisko: Hraško\n",
+      "súčet: ab\n",
+      "súčet: 50 rozdiel: -30\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady použitia funkcií:\n",
+    "\n",
+    "# funkcia bez parametrov a návratovej hodnoty:\n",
+    "def ahojSvet():\n",
+    "    print(\"Ahoj Svet\")\n",
+    "\n",
+    "# funkcia s 2-mi parametrami a bez návratovej hodnoty:\n",
+    "def vypisMeno(x, y):\n",
+    "    print(\"Meno:\", x, \"Priezvisko:\", y)\n",
+    "\n",
+    "# funkcia, čo vracia súčet čísel x a y (2 parametre, 1 návratová hodnota):\n",
+    "def sucetCisel(x, y):\n",
+    "    return x + y\n",
+    "\n",
+    "# funkcia, čo vracia viacero hodnôt (2 parametre, 2 návratové hodnoty):\n",
+    "def vratSucetRozdiel(x, y):\n",
+    "    return x + y, x - y\n",
+    "\n",
+    "# volanie funkcií:\n",
+    "ahojSvet()\n",
+    "vypisMeno(\"Janko\", \"Hraško\")\n",
+    "\n",
+    "A = sucetCisel(\"a\", \"b\")\n",
+    "S, R = vratSucetRozdiel(10, 40)\n",
+    "\n",
+    "print(\"súčet:\", A)\n",
+    "print(\"súčet:\", S, \"rozdiel:\", R)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Výnimky"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú to udalosti, vyvolané pri chybe programu.\n",
+    "* Kľúčové slová `try`, `except`, `finally` a `raise`.\n",
+    "* Jednotlivé bloky musia byť odsadené: **1x TAB**.\n",
+    "* Môžu byť vyvolané:\n",
+    "    * Automaticky.\n",
+    "    * Programovo."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Automatické vyvolávanie výnimiek"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  0\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Chyba, nastalo delenie nulou!\n",
+      "Tento kód sa vykoná vždy.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad automatického vyvolania výnimky:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \" ))\n",
+    "\n",
+    "try:\n",
+    "    vysledok = 2 / cislo   # môže nastať delenie 0\n",
+    "    print(\"Výseldok je:\", vysledok)\n",
+    "except ZeroDivisionError:\n",
+    "    print(\"Chyba, nastalo delenie nulou!\") # blok, ktorý sa vykoná pri chybe delenia 0\n",
+    "finally:\n",
+    "    print(\"Tento kód sa vykoná vždy.\")     # blok, ktorý sa vykoná vždy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Automatické aj programové vyvolávanie výnimiek"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte kladné číslo:  -2\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Chyba, číslo je záporné!\n",
+      "Tento kód sa vykoná vždy.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad automatického aj programového vyvolania výnimky:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte kladné číslo: \" ))\n",
+    "\n",
+    "try:\n",
+    "    if(cislo < 0):          # ak je číslo záporné, vyvolaj výnimku\n",
+    "        raise ValueError(\"Chyba, záporné číslo\")\n",
+    "    \n",
+    "    vysledok = 2 / cislo    # môže nastať delenie 0\n",
+    "    print(\"Výsledok je:\", vysledok)\n",
+    "    \n",
+    "except ValueError:                            # blok, ktorý sa vykoná, ak je číslo záporné alebo 0\n",
+    "    print(\"Chyba, číslo je záporné!\")\n",
+    "    \n",
+    "except ZeroDivisionError:\n",
+    "    print(\"Chyba, nastalo delenie nulou!\")    # blok, ktorý sa vykoná pri chybe delenia 0\n",
+    "finally:\n",
+    "    print(\"Tento kód sa vykoná vždy.\")        # blok, ktorý sa vykoná vždy\n",
+    "    \n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Moduly"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú to súbory, obsahujúce sadu preddefinovaných funkcií, procedúr a premenných.\n",
+    "* Možno importovať **celý modul** alebo **iba jeho časť**.\n",
+    "* Možno v aplikácii vytvárať vlastné pomenovania modulov - **aliasy**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie celého modulu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania celého modulu:\n",
+    "\n",
+    "import numpy # modul pre matematické funkcie\n",
+    "\n",
+    "a = numpy.sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = numpy.log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie celého modulu s aliasom"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania celého modulu s aliasom:\n",
+    "\n",
+    "import numpy as pikachu # modul pre matematické funkcie s aliasom np\n",
+    "\n",
+    "a = pikachu.sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = pikachu.log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie časti modulu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania časti modulu:\n",
+    "#import numpy\n",
+    "from numpy import sqrt, log10 # z modulu numpy importuj iba funkcie sqrt a log10\n",
+    "\n",
+    "a = sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Dokumentácia kódu pomocou docstringov"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* <b>Docstring</b> - špeciálne reťazcové komentáre umiestnené na začiatku funkcií, tried alebo modulov. \n",
+    "* Hlavným cieľom je poskytnúť dokumentáciu kódu, ktorá je následne ľahko dostupná pre ľudí, ktorí čítajú alebo používajú daný kód.\n",
+    "* Existuje viacero používaných formátov:\n",
+    "    - reST (reStructuredText).\n",
+    "    - javadoc.\n",
+    "    - epytext.\n",
+    "    - Google.\n",
+    "    - Numpydoc.\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Dôvody dokumentácie funkcií"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "- Vyhnutie sa neočakávaným chybovým stavom počas behu programu.\n",
+    "- Dokumentácia je priamo integrovaná do vývojového prostredia.\n",
+    "- Ľahšie debugovanie.\n",
+    "- Lepšia komunikácia v tíme."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Dôležité body"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "- Bližšie definovaný opis správania funkcie.\n",
+    "- Jasné definovanie dátových typov parametrov a výstupu funkcie.\n",
+    "- Jasné definovanie výnimiek, ktoré funkcia vracia (ak vracia)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Príklad kódu bez dokumentácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\"\"\"\n",
+    "Nasledujúci príklad demonštruje funkciu \"zmen\". K funkcii nie sú priložené ďalšia informácie.\n",
+    "Tentokrát vidíme telo funkcie, takže je pomerne ľahké zistiť, čo robí. \n",
+    "Ale napr. pri externýchknižniciach spravidla nemáme prístup k implementácii funkcie. \n",
+    "\n",
+    "Vynára sa niekoľko otázok:\n",
+    "    - Čo tá funkcia mení? Hrušky na jablká?\n",
+    "    - Akého typu je parameter hodnota? Celé číslo, reálne číslo, reťazec?\n",
+    "    - Aký typ funkcia vracia? A vracia funkcia vôbec niečo?\n",
+    "    - Môže funkcia zlyhať? A čo sa stane, keď funkcia zlyhá?\n",
+    "    \n",
+    "Bez priloženej dokumentácie to musíme zistiť experimentálne ...\n",
+    "\"\"\"\n",
+    "\n",
+    "def zmen(hodnota):\n",
+    "    cifry_str = str(hodnota)\n",
+    "    cifry_int = []\n",
+    "    \n",
+    "    try:\n",
+    "        for c in cifry_str:\n",
+    "            cifry_int.append(int(c))\n",
+    "    \n",
+    "    except ValueError as err:\n",
+    "        print(\"Chyba: \" + str(err))\n",
+    "\n",
+    "    return cifry_int"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Príklad kódu s dokumentáciou"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[3, 2, 7, 6, 8]\n"
+     ]
+    }
+   ],
+   "source": [
+    "\"\"\"\n",
+    "V tomto príklade je tá istá funkcia `zmen`, ale teraz obsahuje aj dokumentáciu.  \n",
+    "Dokumentácia je napísaná vo formáte reStructuredText (reST),  \n",
+    "čo je bežne používaný štandard napríklad v PyCharm IDE.  \n",
+    "\n",
+    "Funkcia používa typové anotácie pre lepšie definovanie rozhrania funkcie.\n",
+    "\"\"\"\n",
+    "\n",
+    "def zmen(hodnota: int) -> list[int]:\n",
+    "    \"\"\"\n",
+    "    Funkcia zmení celé číslo na zoznam cifier.\n",
+    "    \n",
+    "    :param hodnota: číslo ktoré sa má konvertovať    \n",
+    "    :return: pole cifier\n",
+    "    :raises ValueError: ak vstup nie je celé číslo\n",
+    "    \"\"\"\n",
+    "    \n",
+    "    cifry_str = str(hodnota)\n",
+    "    cifry_int = []\n",
+    "    \n",
+    "    try:\n",
+    "        for c in cifry_str:\n",
+    "            cifry_int.append(int(c))\n",
+    "    \n",
+    "    except ValueError as err:\n",
+    "        print(\"Chyba: \" + str(err))\n",
+    "\n",
+    "    return cifry_int     \n",
+    "\n",
+    "# použitie\n",
+    "print(zmen(32768))"
+   ]
+  }
+ ],
+ "metadata": {
+  "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.13.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

BIN
prednasky/python-prednaska/obrazky/datove_typy.jpg


BIN
prednasky/python-prednaska/obrazky/obalka.png


BIN
prednasky/python-prednaska/obrazky/organizacia_kodu.jpg


BIN
prednasky/python-prednaska/obrazky/riadiace_struktury.jpg


BIN
prednasky/python-prednaska/obrazky/zaciname.jpg


+ 1841 - 0
prednasky/python-prednaska/python-prednaska.ipynb

@@ -0,0 +1,1841 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Programovací jayzk Python"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Ing. Matuš Nečas\n",
+    "\n",
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/obalka.png\" width=70%/>\n",
+    "</div"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Opis jazyka"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pôvod\n",
+    "\n",
+    "* **Autor:** Guido van Rossum (Holandsko).\n",
+    "* **Rok vzniku:** Vianoce 1989.\n",
+    "* **Cieľ:** jednoduchý, čitateľný a zároveň výkonný skriptovací jazyk.\n",
+    "* **Pôvod mena:** inšpirácia humorom britskej komediálnej skupiny *Monty Python*.\n",
+    "  \n",
+    "#### Vlastnosti\n",
+    "\n",
+    "* **Interpretovaný** – kód sa vykonáva postupne pomocou tzv. *interpretera*.  \n",
+    "* **Interaktívny** – riadky zdrojového kódu sa dajú priamo písať a spúšťať v konzole.  \n",
+    "* **Objektovo orientovaný** – podporuje princípy OOP.  \n",
+    "* **Vhodný pre začiatočníkov** – kód sa podobá jednoduchej angličtine.  \n",
+    "* **Široké použitie** – napr. dátové inžinierstvo, databázy, strojové učenie, webové aplikácie.\n",
+    "\n",
+    "#### Oficiálna dokumentácia\n",
+    "\n",
+    "https://www.python.org"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Začíname"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/zaciname.jpg\" width=70%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Komentáre"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Slúžia na dokumentáciu kódu, na chod programu nemajú efekt.\n",
+    "* V Pythone existujú:\n",
+    "    * Jednoriadkové. \n",
+    "    * Blokové."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoriadkoý kometár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Začína znakom `#` a má platnosť iba jeden riadok."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# toto je jednoriadkový komentár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Blokový komentár"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Je ohraničený apostrofmi `'`, resp. úvodzovkami `\"`. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\"\"\"\n",
+    "Toto je \n",
+    "blokový\n",
+    "komentár\n",
+    "\"\"\"\n",
+    "\n",
+    "'''\n",
+    "Aj toto \n",
+    "je \n",
+    "blokový\n",
+    "komentár\n",
+    "'''"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Štandardný vstup a výstup"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Štandardný  vstup (klávesnica): `input()`.\n",
+    "* Štandardný  výstup (konzola): `print()`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Použitie štandardného výstupu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ahoj Svet!\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"Ahoj Svet!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Použitie štandardného vstupu aj výstupu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte svoje meno:  Adam\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Vaše meno je: Adam\n"
+     ]
+    }
+   ],
+   "source": [
+    "meno = input(\"Zadajte svoje meno: \")\n",
+    "print(\"Vaše meno je:\", meno)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Dátové typy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/datove_typy.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Vlastnosti"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* **Dynamická typová kontrola** - netreba deklarovať typ premennej.\n",
+    "* Môžu niesť akúkoľvek hodnotu - celé číslo, reálne číslo, reťazec.\n",
+    "* Case senzitivita - rozlišujú sa malé a veľké písmená.\n",
+    "* Názvy premenných sa môžu skladať iba z písmen, číslic a podčiarkovníkov.\n",
+    "* Existujú:\n",
+    "    * Jednoduché dátové typy.\n",
+    "    * Zložené dátové typy."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Jednoduché dátové typy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Uchovávajú len jednu hodnotu.\n",
+    "* Sú to:\n",
+    "    * Booleovské hodnoty: `bool`.\n",
+    "    * Celé čísla: `int`.\n",
+    "    * Reálne čísla: `float`.\n",
+    "    * Komplexné čísla: `complex`.\n",
+    "    \n",
+    "> *Poznámka:* Znak `char` v Pythone neexistuje."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vytvorenie jednoduchých dátových typov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "20 17.5 (2+3j) True\n"
+     ]
+    }
+   ],
+   "source": [
+    "a = 20      # int\n",
+    "b = 17.5    # float\n",
+    "c = 2+3j    # complex\n",
+    "d = True    # bool\n",
+    "print(a, b, c, d)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Operácie s jednoduchými dátovými typmi"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Aritmetické: (`+`, `-`, `*`, `/`, `%`, `//`, `**`).\n",
+    "* Porovnávacie: (`<`,  `>`,  `==`,  `!=`,  `<=`,  `>=`).\n",
+    "* Pretypovanie: (`int()`, `float()`, `bool()`, `complex()`).\n",
+    "* Logické: (`and`, `or`, `not`).\n",
+    "* Bitové: (`&`, `|`, `~`, `^`, `<<`, `>>`).\n",
+    "* Priraďovacie (`+=`, `-=`, `*=`, ...)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Aritmetické operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "súčet:  7\n",
+      "rozdiel:  1\n",
+      "súčin:  12\n",
+      "podiel (reálny):  1.3333333333333333\n",
+      "podiel (celočíselný):  1\n",
+      "mocnina:  64\n",
+      "zvyšok po delení:  1\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad aritmetických operácií: \n",
+    "a = 4\n",
+    "b = 3\n",
+    "\n",
+    "sucet = a + b  \n",
+    "rozdiel = a - b  \n",
+    "sucin = a * b  \n",
+    "podiel_r = a / b  \n",
+    "podiel_c = a // b\n",
+    "mocnina = a ** b \n",
+    "zvysok = a % b\n",
+    "\n",
+    "print(\"súčet: \", sucet)\n",
+    "print(\"rozdiel: \", rozdiel)\n",
+    "print(\"súčin: \", sucin)\n",
+    "print(\"podiel (reálny): \", podiel_r)\n",
+    "print(\"podiel (celočíselný): \", podiel_c)\n",
+    "print(\"mocnina: \", mocnina)\n",
+    "print(\"zvyšok po delení: \", zvysok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Porovnávacie operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "a > b: True\n",
+      "a < b: False\n",
+      "a == b: False\n",
+      "a != b: True\n",
+      "a >= b: True\n",
+      "a <= b: False\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady porovnávacích operácií:\n",
+    "a = 100\n",
+    "b = 10\n",
+    "\n",
+    "print(\"a > b:\", a > b) \n",
+    "print(\"a < b:\", a < b) \n",
+    "print(\"a == b:\", a == b) \n",
+    "print(\"a != b:\", a != b) \n",
+    "print(\"a >= b:\", a >= b) \n",
+    "print(\"a <= b:\", a <= b) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pretypovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Typ: <class 'int'> , Hodnota: 3\n",
+      "Typ: <class 'float'> , Hodnota: 3.14\n",
+      "Typ: <class 'complex'> , Hodnota: (3.14+0j)\n",
+      "Typ: <class 'bool'> , Hodnota: True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad pretypovania:\n",
+    "\n",
+    "cislo1 = 3.14\n",
+    "\n",
+    "cislo2 = int(cislo1) # integer\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = float(cislo1) # float\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = complex(cislo1) # complex\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)\n",
+    "\n",
+    "cislo2 = bool(cislo1) # bool\n",
+    "print(\"Typ:\", type(cislo2), \", Hodnota:\", cislo2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Logické operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "a and b: False\n",
+      "a or b: True\n",
+      "not a: False\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady logických operácií:\n",
+    "x = True\n",
+    "y = False\n",
+    "\n",
+    "z = x and y         # a && b\n",
+    "print(\"a and b:\", z) \n",
+    "\n",
+    "z = x or y          # a || b\n",
+    "print(\"a or b:\", z) \n",
+    "\n",
+    "z = not x           # !a\n",
+    "print(\"not a:\", z) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Priraďovacie operácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "5\n",
+      "7\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad priraďovacích operácií:\n",
+    "a = 3\n",
+    "a = a + 2\n",
+    "\n",
+    "print(a)\n",
+    "\n",
+    "a += 2\n",
+    "\n",
+    "print(a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Zložené dátové typy."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Uchovávajú viacero hodnôt.\n",
+    "* Sú to:\n",
+    "    * reťazce: *strings*,\n",
+    "    * zoznamy: *lists*,\n",
+    "    * množiny: *sets*,\n",
+    "    * n-tice: *tuples*,\n",
+    "    * slovníky: *dictionaries*.\n",
+    "\n",
+    "> *Poznámka:* Pre jednoduchosť sú v prednáške ďalej rozobraté iba `list` a `string`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### String"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Skupina znakov `str`.\n",
+    "* Nie je modifikovateľný.\n",
+    "* Znaky sú číslované od `0`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### List"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Usporiadaná skupina prvkov `list`.\n",
+    "* Prvky môžu byť rovnakého i rôzneho dátového typu.\n",
+    "* Je modifikovateľný.\n",
+    "* Sú povolené duplicity.\n",
+    "* Prvky sú číslované od `0`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vytvorenie zoznamov a reťazcov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "\n",
+      "Ahoj Svet\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "[]\n",
+      "[1, 2, 3, 4, 5]\n",
+      "['Jablko', 1, 2, True, (3+1j), [1, 2, 3, 4, 5]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vytvorenia reťazcov:\n",
+    "prazdny = \"\"\n",
+    "slovo = 'Ahoj Svet'\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(prazdny)\n",
+    "print(slovo)\n",
+    "\n",
+    "# Príklad vytvorenia zoznamov:\n",
+    "\n",
+    "prazdny = []\n",
+    "cisla = [1, 2, 3, 4, 5]\n",
+    "mix = [\"Jablko\", 1, 2, True, 3+1j, cisla]\n",
+    "\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(prazdny)\n",
+    "print(cisla)\n",
+    "print(mix)      "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Operácie so zloženými dátovými typmi"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Zlučovanie: (`+`, `*`).\n",
+    "* Porovnanie dĺžky reťazcov: (`<`,  `>`,  `==`,  `!=`,  `<=`,  `>=`).\n",
+    "* Vyhľadávanie prvkov: (`in`, `not in`).\n",
+    "* Indexovanie: (pre `list`, `string`, `tuple`).\n",
+    "* Pretypovanie: (`str()`, `list()`, ...).\n",
+    "* Pridávanie / mazanie prvkov: (pre `list`, `set`, `dictionary`).\n",
+    "* Modifikácia prvkov: (pre `list`, `dictionary`).\n",
+    "* Užitočné funkcie, špecifické pre konkrétny dátový typ."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Zlučovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "Janko Hraško\n",
+      "12\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "Mix:  [10, 20, 30, 'jablko', 'hruška', 'slivka']\n",
+      "Cisla 3x:  [10, 20, 30, 10, 20, 30, 10, 20, 30]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady zlučovania reťazcov:\n",
+    "meno = \"Janko\" + \" Hraško\"\n",
+    "cislo = \"1\" + \"2\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(meno)\n",
+    "print(cislo)\n",
+    "\n",
+    "# Príklady zlučovania zoznamov:\n",
+    "cisla = [10, 20, 30]\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "\n",
+    "mix = cisla + ovocie\n",
+    "cisla_3x = cisla * 3\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(\"Mix: \", mix)\n",
+    "print(\"Cisla 3x: \", cisla_3x)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Porovnanie dĺžky"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "r1 > r2: True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady porovnávania dĺžky reťazcov:\n",
+    "r1 = \"pomaranč\"\n",
+    "r2 = \"kiwi\"\n",
+    "\n",
+    "print(\"r1 > r2:\", r1 > r2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Vyhľadávanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "Je Janko v reťazci meno?  True\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "Chýba číslo 6 v zozname cisla?  True\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady vyhľadávania v reťazcoch:\n",
+    "meno = \"Janko Hraško\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(\"Je Janko v reťazci meno? \", \"Janko\" in meno)\n",
+    "\n",
+    "# Príklady vyhľadávania v zoznamoch:\n",
+    "cisla = [1, 2, 3, 4, 5]\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(\"Chýba číslo 6 v zozname cisla? \", 6  not in cisla)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Indexovanie "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Reťazce:\n",
+      "a\n",
+      "nk\n",
+      "Jank\n",
+      "anko Hraško\n",
+      "12\n",
+      "\n",
+      "\n",
+      "Zoznamy:\n",
+      "jablko\n",
+      "['jablko', 'hruška']\n",
+      "['jablko', 'hruška']\n",
+      "['hruška', 'slivka']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady indexovania reťazcov:\n",
+    "meno = \"Janko Hraško\"\n",
+    "\n",
+    "print(\"Reťazce:\")\n",
+    "print(meno[1])\n",
+    "print(meno[2:4])\n",
+    "print(meno[:4])\n",
+    "print(meno[1:])\n",
+    "\n",
+    "print(len(meno))\n",
+    "\n",
+    "# Príklady indexovania zoznamov:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "\n",
+    "print(\"\\n\")\n",
+    "print(\"Zoznamy:\")\n",
+    "print(ovocie[0])\n",
+    "print(ovocie[0:2])\n",
+    "print(ovocie[:2])\n",
+    "print(ovocie[1:])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pretypovanie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "18\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad pretypovania - súčet cifier:\n",
+    "\n",
+    "cislo = 945\n",
+    "\n",
+    "cifry = str(cislo)    # pretypovanie na reťazec\n",
+    "\n",
+    "cifra1 = int(cifry[0]) # pretypovanie znakov na čísla\n",
+    "cifra2 = int(cifry[1])\n",
+    "cifra3 = int(cifry[2])\n",
+    "\n",
+    "vysledok = cifra1 + cifra2 + cifra3\n",
+    "\n",
+    "print(vysledok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Pridávanie, mazanie a modifikácia prvkov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Pôvodný zoznam: ['jablko', 'hruška', 'slivka']\n",
+      "Modifikácia prvku: ['mango', 'hruška', 'slivka']\n",
+      "Pridanie prvkov: ['kiwi', 'mango', 'hruška', 'slivka', 'banán']\n",
+      "Mazanie prvkov: ['hruška', 'slivka', 'banán']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady pridávania, mazania a modifikácie zoznamov:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "print(\"Pôvodný zoznam:\", ovocie)\n",
+    "\n",
+    "# modifikácia prvku\n",
+    "ovocie[0] = \"mango\"      # modifikovanie prvku na 0-tom indexe\n",
+    "print(\"Modifikácia prvku:\", ovocie)\n",
+    "\n",
+    "# pridanie prvkov\n",
+    "ovocie.append(\"banán\")    # pridanie prvku na koniec zoznamu\n",
+    "ovocie.insert(0, \"kiwi\")  # pridanie prvku na 0-tú pozíciu\n",
+    "print(\"Pridanie prvkov:\", ovocie)\n",
+    "\n",
+    "# mazanie prvkov\n",
+    "ovocie.pop(1)              # vzmazanie prvku s indexom 1\n",
+    "ovocie.remove(\"kiwi\")      # vymazanie prvku s hodnotou \"kiwi\"\n",
+    "print(\"Mazanie prvkov:\", ovocie)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Špecifické funkcie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Velke jablko: JABLKO\n",
+      "Zoradné ovocie: ['hruška', 'jablko', 'slivka']\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad špecifickej funkcie reťazca:\n",
+    "jablko = \"jablko\"\n",
+    "jablko = jablko.upper()\n",
+    "\n",
+    "print(\"Velke jablko:\", jablko)\n",
+    "\n",
+    "# Príklad špecifickej funkcie zoznamu:\n",
+    "ovocie = [\"jablko\", \"hruška\", \"slivka\"]\n",
+    "ovocie.sort()\n",
+    "\n",
+    "print(\"Zoradné ovocie:\", ovocie)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Riadiace štruktúry"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/riadiace_struktury.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Podmienky"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Predstavujú rozhodovanie programu.\n",
+    "* Kľúčové slová: `if`, `elif`, `else`.\n",
+    "* Jednotlivé vetvy musia byť odsadené: **1x TAB**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoduchá podmienka"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  3\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad jednoduchej podmienky - znamienko čísla:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "if cislo > 0:\n",
+    "    print(\"kladné\")\n",
+    "elif cislo < 0:\n",
+    "    print(\"záporné\")\n",
+    "else: \n",
+    "    print(\"nula\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vnorená podmienka"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  4000\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n",
+      "veľké\n",
+      "cislo\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vnorenej podmienky - znamienko čísla 2.0:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "\n",
+    "if cislo > 0:\n",
+    "    print(\"kladné\")\n",
+    "        \n",
+    "    if cislo > 2000:    # vnorená podmienka\n",
+    "        print(\"veľké\")\n",
+    "    \n",
+    "    print(\"cislo\")\n",
+    "        \n",
+    "elif cislo < 0:\n",
+    "    print(\"záporné\")\n",
+    "else: \n",
+    "    print(\"nula\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Jednoriadková podmienka (ternárny operátor)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  200\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "kladné\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad jednoriadkovej podmienky - znamienko čísla 3.0:\n",
+    "# nepočítame so vstupom 0\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \"))\n",
+    "\n",
+    "vysledok = \"kladné\" if cislo > 0 else \"záporné\"\n",
+    "\n",
+    "print(vysledok) "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Cykly"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Umožňujú opakovať tie isté príkazy viackrát za sebou.\n",
+    "* Dva rôzne typy: `for` a `while` (v Pythone neexistuje `do..while`).\n",
+    "* Python podporuje príkazy: `break` a `continue`.\n",
+    "* Telo cyklu musí byť odsadené: <b>1x TAB</b>."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### For cyklus"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Cyklus s <b>pevným počtom opakovaní</b> – dopredu vieme povedať, koľkokrát sa kód vykoná.\n",
+    "* Slúži najmä na <b>prechádzanie dátových štruktúr</b>, ako sú reťazce, zoznamy, n-tice, množiny a slovníky. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Prechádzanie dátových štruktúr"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "150\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia cyklu for na prechádzanie zložených dátových typov:\n",
+    "# Súčet prvkov.\n",
+    "\n",
+    "cisla = [10, 20, 30, 40, 50]\n",
+    "vysledok = 0\n",
+    "\n",
+    "for c in cisla:\n",
+    "    vysledok += c\n",
+    "\n",
+    "print(vysledok)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Vytvorenie postupností (zoznamov)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "postupnosť č. 1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]\n",
+      "postupnosť č. 2 [1, 2, 3, 4, 5, 6, 7, 8, 9]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad vytvorenia postupnosti od 0 do 9 s využitím cyklu for:\n",
+    "\n",
+    "postupnost1 = []\n",
+    "\n",
+    "for prvok in range(1, 10, 1):\n",
+    "    postupnost1.append(prvok)\n",
+    "    \n",
+    "for prvok in range(10, 0, -1):\n",
+    "    postupnost1.append(prvok)\n",
+    "\n",
+    "print(\"postupnosť č. 1\", postupnost1)\n",
+    "\n",
+    "# zjednodušená konštrukcia:\n",
+    "\n",
+    "postupnost2 = [prvok for prvok in range(1, 10, 1)]\n",
+    "\n",
+    "print(\"postupnosť č. 2\", postupnost2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### While cyklus"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Cyklus s podmienkou na začiatku.\n",
+    "* Slúži na vykonávanie tých istých príkazov, pokiaľ je splnená **riadiaca podmienka**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Použitie cyklu while"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0\n",
+      "1\n",
+      "2\n",
+      "3\n",
+      "4\n",
+      "5\n",
+      "6\n",
+      "7\n",
+      "8\n",
+      "9\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia cyklu while:\n",
+    "# Výpis postupnosti prvkov od 0 do 9.\n",
+    "\n",
+    "x = 0\n",
+    "\n",
+    "while x < 10:\n",
+    "    print(x) \n",
+    "    x += 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Použitie cyklu while s využitím break a continue"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0\n",
+      "1\n",
+      "2\n",
+      "3\n",
+      "4\n",
+      "6\n",
+      "7\n",
+      "8\n",
+      "9\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia break a continue v cykle while:\n",
+    "# Výpis postupnosti: iteruj od 0 do 9, vynechaj číslo 5.\n",
+    "z = 0\n",
+    "\n",
+    "while True:       # podmienka je vždy splnená\n",
+    "    if z == 5:    # vynechaj číslo 5\n",
+    "        z += 1\n",
+    "        continue \n",
+    "    if z == 10:  # ukonči cyklus ak dosiahneš číslo 10\n",
+    "        break\n",
+    "    print(z)\n",
+    "    z += 1"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vnáranie cyklov"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1, 2, 3, \n",
+      "4, 5, 6, \n",
+      "7, 8, 9, \n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad použitia vnorených cyklov:\n",
+    "# Výpis matice.\n",
+    "\n",
+    "matica = [[1, 2, 3], \n",
+    "          [4, 5, 6], \n",
+    "          [7, 8, 9]]\n",
+    "\n",
+    "for riadok in matica:\n",
+    "    for stlpec in riadok:\n",
+    "        print(stlpec, end=\", \")\n",
+    "    print()  # nový riadok"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "# Organizácia kódu a riadenie chýb"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<div style=\"text-align:center\">\n",
+    "    <img src=\"obrazky/organizacia_kodu.jpg\" width=60%/>\n",
+    "</div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Funkcie"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú bloky kódu, vykonávajúce určitú úlohu.\n",
+    "* Kľúčové slová: `def` a `return`.\n",
+    "* Môžu mať ľubovoľný počet parametrov (aj žiadne).\n",
+    "* Môžu vracať ľubovoľný počet návratových hodnôt (aj žiadnu).\n",
+    "* Telo funkcie musí byť odsadené: <b>1x TAB</b>.\n",
+    "* Funkcie v Pythone podporujú rekurziu."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Ahoj Svet\n",
+      "Meno: Janko Priezvisko: Hraško\n",
+      "súčet: ab\n",
+      "súčet: 50 rozdiel: -30\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklady použitia funkcií:\n",
+    "\n",
+    "# funkcia bez parametrov a návratovej hodnoty:\n",
+    "def ahojSvet():\n",
+    "    print(\"Ahoj Svet\")\n",
+    "\n",
+    "# funkcia s 2-mi parametrami a bez návratovej hodnoty:\n",
+    "def vypisMeno(x, y):\n",
+    "    print(\"Meno:\", x, \"Priezvisko:\", y)\n",
+    "\n",
+    "# funkcia, čo vracia súčet čísel x a y (2 parametre, 1 návratová hodnota):\n",
+    "def sucetCisel(x, y):\n",
+    "    return x + y\n",
+    "\n",
+    "# funkcia, čo vracia viacero hodnôt (2 parametre, 2 návratové hodnoty):\n",
+    "def vratSucetRozdiel(x, y):\n",
+    "    return x + y, x - y\n",
+    "\n",
+    "# volanie funkcií:\n",
+    "ahojSvet()\n",
+    "vypisMeno(\"Janko\", \"Hraško\")\n",
+    "\n",
+    "A = sucetCisel(\"a\", \"b\")\n",
+    "S, R = vratSucetRozdiel(10, 40)\n",
+    "\n",
+    "print(\"súčet:\", A)\n",
+    "print(\"súčet:\", S, \"rozdiel:\", R)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Výnimky"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú to udalosti, vyvolané pri chybe programu.\n",
+    "* Kľúčové slová `try`, `except`, `finally` a `raise`.\n",
+    "* Jednotlivé bloky musia byť odsadené: **1x TAB**.\n",
+    "* Môžu byť vyvolané:\n",
+    "    * Automaticky.\n",
+    "    * Programovo."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Automatické vyvolávanie výnimiek"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte číslo:  0\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Chyba, nastalo delenie nulou!\n",
+      "Tento kód sa vykoná vždy.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad automatického vyvolania výnimky:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte číslo: \" ))\n",
+    "\n",
+    "try:\n",
+    "    vysledok = 2 / cislo   # môže nastať delenie 0\n",
+    "    print(\"Výseldok je:\", vysledok)\n",
+    "except ZeroDivisionError:\n",
+    "    print(\"Chyba, nastalo delenie nulou!\") # blok, ktorý sa vykoná pri chybe delenia 0\n",
+    "finally:\n",
+    "    print(\"Tento kód sa vykoná vždy.\")     # blok, ktorý sa vykoná vždy"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Automatické aj programové vyvolávanie výnimiek"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdin",
+     "output_type": "stream",
+     "text": [
+      "Zadajte kladné číslo:  -2\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Chyba, číslo je záporné!\n",
+      "Tento kód sa vykoná vždy.\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad automatického aj programového vyvolania výnimky:\n",
+    "\n",
+    "cislo = int(input(\"Zadajte kladné číslo: \" ))\n",
+    "\n",
+    "try:\n",
+    "    if(cislo < 0):          # ak je číslo záporné, vyvolaj výnimku\n",
+    "        raise ValueError(\"Chyba, záporné číslo\")\n",
+    "    \n",
+    "    vysledok = 2 / cislo    # môže nastať delenie 0\n",
+    "    print(\"Výsledok je:\", vysledok)\n",
+    "    \n",
+    "except ValueError:                            # blok, ktorý sa vykoná, ak je číslo záporné alebo 0\n",
+    "    print(\"Chyba, číslo je záporné!\")\n",
+    "    \n",
+    "except ZeroDivisionError:\n",
+    "    print(\"Chyba, nastalo delenie nulou!\")    # blok, ktorý sa vykoná pri chybe delenia 0\n",
+    "finally:\n",
+    "    print(\"Tento kód sa vykoná vždy.\")        # blok, ktorý sa vykoná vždy\n",
+    "    \n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Moduly"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Sú to súbory, obsahujúce sadu preddefinovaných funkcií, procedúr a premenných.\n",
+    "* Možno importovať **celý modul** alebo **iba jeho časť**.\n",
+    "* Možno v aplikácii vytvárať vlastné pomenovania modulov - **aliasy**."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie celého modulu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania celého modulu:\n",
+    "\n",
+    "import numpy # modul pre matematické funkcie\n",
+    "\n",
+    "a = numpy.sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = numpy.log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie celého modulu s aliasom"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania celého modulu s aliasom:\n",
+    "\n",
+    "import numpy as pikachu # modul pre matematické funkcie s aliasom np\n",
+    "\n",
+    "a = pikachu.sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = pikachu.log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Importovanie časti modulu"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "10.0 2.0\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Príklad importovania časti modulu:\n",
+    "#import numpy\n",
+    "from numpy import sqrt, log10 # z modulu numpy importuj iba funkcie sqrt a log10\n",
+    "\n",
+    "a = sqrt(100) # použitie funkcií sqrt a log10 z modulu numpy\n",
+    "b = log10(100)\n",
+    "\n",
+    "print(a, b)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "jp-MarkdownHeadingCollapsed": true
+   },
+   "source": [
+    "## Dokumentácia kódu pomocou docstringov"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* <b>Docstring</b> - špeciálne reťazcové komentáre umiestnené na začiatku funkcií, tried alebo modulov. \n",
+    "* Hlavným cieľom je poskytnúť dokumentáciu kódu, ktorá je následne ľahko dostupná pre ľudí, ktorí čítajú alebo používajú daný kód.\n",
+    "* Existuje viacero používaných formátov:\n",
+    "    - reST (reStructuredText).\n",
+    "    - javadoc.\n",
+    "    - epytext.\n",
+    "    - Google.\n",
+    "    - Numpydoc.\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Dôvody dokumentácie funkcií"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "- Vyhnutie sa neočakávaným chybovým stavom počas behu programu.\n",
+    "- Dokumentácia je priamo integrovaná do vývojového prostredia.\n",
+    "- Ľahšie debugovanie.\n",
+    "- Lepšia komunikácia v tíme."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Dôležité body"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "- Bližšie definovaný opis správania funkcie.\n",
+    "- Jasné definovanie dátových typov parametrov a výstupu funkcie.\n",
+    "- Jasné definovanie výnimiek, ktoré funkcia vracia (ak vracia)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Príklad kódu bez dokumentácie"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\"\"\"\n",
+    "Nasledujúci príklad demonštruje funkciu \"zmen\". K funkcii nie sú priložené ďalšia informácie.\n",
+    "Tentokrát vidíme telo funkcie, takže je pomerne ľahké zistiť, čo robí. \n",
+    "Ale napr. pri externýchknižniciach spravidla nemáme prístup k implementácii funkcie. \n",
+    "\n",
+    "Vynára sa niekoľko otázok:\n",
+    "    - Čo tá funkcia mení? Hrušky na jablká?\n",
+    "    - Akého typu je parameter hodnota? Celé číslo, reálne číslo, reťazec?\n",
+    "    - Aký typ funkcia vracia? A vracia funkcia vôbec niečo?\n",
+    "    - Môže funkcia zlyhať? A čo sa stane, keď funkcia zlyhá?\n",
+    "    \n",
+    "Bez priloženej dokumentácie to musíme zistiť experimentálne ...\n",
+    "\"\"\"\n",
+    "\n",
+    "def zmen(hodnota):\n",
+    "    cifry_str = str(hodnota)\n",
+    "    cifry_int = []\n",
+    "    \n",
+    "    try:\n",
+    "        for c in cifry_str:\n",
+    "            cifry_int.append(int(c))\n",
+    "    \n",
+    "    except ValueError as err:\n",
+    "        print(\"Chyba: \" + str(err))\n",
+    "\n",
+    "    return cifry_int"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Príklad kódu s dokumentáciou"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[3, 2, 7, 6, 8]\n"
+     ]
+    }
+   ],
+   "source": [
+    "\"\"\"\n",
+    "V tomto príklade je tá istá funkcia `zmen`, ale teraz obsahuje aj dokumentáciu.  \n",
+    "Dokumentácia je napísaná vo formáte reStructuredText (reST),  \n",
+    "čo je bežne používaný štandard napríklad v PyCharm IDE.  \n",
+    "\n",
+    "Funkcia používa typové anotácie pre lepšie definovanie rozhrania funkcie.\n",
+    "\"\"\"\n",
+    "\n",
+    "def zmen(hodnota: int) -> list[int]:\n",
+    "    \"\"\"\n",
+    "    Funkcia zmení celé číslo na zoznam cifier.\n",
+    "    \n",
+    "    :param hodnota: číslo ktoré sa má konvertovať    \n",
+    "    :return: pole cifier\n",
+    "    :raises ValueError: ak vstup nie je celé číslo\n",
+    "    \"\"\"\n",
+    "    \n",
+    "    cifry_str = str(hodnota)\n",
+    "    cifry_int = []\n",
+    "    \n",
+    "    try:\n",
+    "        for c in cifry_str:\n",
+    "            cifry_int.append(int(c))\n",
+    "    \n",
+    "    except ValueError as err:\n",
+    "        print(\"Chyba: \" + str(err))\n",
+    "\n",
+    "    return cifry_int     \n",
+    "\n",
+    "# použitie\n",
+    "print(zmen(32768))"
+   ]
+  }
+ ],
+ "metadata": {
+  "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.13.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

Some files were not shown because too many files changed in this diff