Úvod do programování Úvod do ICT, 6. listopadu 2023 Co je to vlastně program? • Převodník vstupů na výstupy • Vstupy: • Od uživatele – klávesnice, myš, řeč, biometrie • Ze souboru, z internetu, z databáze • Z přístroje – např. měřící nějaké fyzikální veličiny • Výstupy • Obrazovka, webová stránka • Tiskárna, reproduktory • Jiné soubory Svět programovacích jazyků • Nejrozšířenější – C, C++, Java, … • Zastaralé – Basic, Pascal, … • Moderní – Python, Ruby, Rust, … • Pro web – PHP, ASP, JavaScript, … • Doménově specifické – shell, Matlab (Octave), … • Neprocedurální – Lisp, Haskell, Prolog, … • Pro děti – Scratch, Karel, Logo, Baltík, … Základní prvky programu (v PHP) • Proměnné • $a = 1; $text = "Ahoj!"; $AnoNe = true; • Funkce • $nahodneCislo = rand(1, 10); $prvniPismeno = substr("Ahoj", 0, 1); • Programové závorky: { … } • Řídicí struktury • Větvení: if, switch • Cyklus: while, for, foreach • Komentáře: /* komentář 1*/ // komentář 2 Operátory • Aritmetické • +, -, *, /, % – zbytek při celočíselném dělení • Porovnávací • ==, !=, >, <, >=, <= … 1 == "1" versus 1 === "1" • Logické • ! – negace, && – logický součin (a), || – logický součet (nebo) • Spojování řetězců • . – tečka; např. $celyText = "Ahoj " . "Karle"; • Ostatní • =, +=, -=, *=, .= (přiřazovací); ++, -- zvyšování / snižování hodnoty o jednotku Větvení programu if (podmínka) { větev příkazů při splněné podmínce; } elseif (upřesňující podmínka) { volitelná větev příkazů při splněné upřesňujícípodmínce; } else { volitelná větev příkazů při nesplněné podmínce; } if ($akce == "prihlaseni") { zkontroluj_heslo($uzivatel); } elseif ($akce == "odhlaseni") { vyprazni_pamet(); zaznamenej_cas_odchodu(); } else { vygeneruj_menu(); } Cyklus while while (platí podmínka) { opakuj větev příkazů při splněné podmínce; } $hodKostkou = 0; while ($hodKostkou != 6) { $hodKostkou = rand(1, 6); print $hodKostkou; } Cyklus for for ( inicializace řídící proměnné; testování hodnoty ř. p.; změna hodnoty ř. p. ) { opakuj větev příkazů; } $noveHeslo = ""; for ( $i = 1; $i <= 6; $i++ ) { $noveHeslo .= substr("abcdefg", rand(1, 7) - 1, 1); } print $noveHeslo; Eukleidův algoritmus – naprogramujte Mějme dána dvě přirozená čísla,uložená v proměnných u a w. Dokud w není nulové, opakuj: Do r ulož zbytek po dělení čísla u číslem w Do u ulož w Do w ulož r Konec algoritmu, v u je uložen největší společný dělitel původních čísel. Zdroj: https://cs.wikipedia.org/wiki/Eukleidův_algoritmus https://www.w3schools.com/php/phptryit.asp?filename=tryphp_intro Z matematické olympiády … Najděte všechny dvojice přirozených čísel, kde rozdíl jejich druhých mocnin je roven 45. Nejdříve rozmyslete množinu myslitelných hodnot. https://www.w3schools.com/php/phptryit.asp?filename=tryphp _intro Další užitečné pojmy • Ladění (debugging – eliminace chyb) a Testování • Knihovny funkcí • pro práci s databázemi • pro manipulace s časem • pro komunikaci s internetovými službami (e-mail, WWW, …) • pro zpracování značkovacích jazyků • a mnohé další • Rekurze – funkce volá sama sebe • Backtracking – rekurzivní procházení množiny problémů (pokus – omyl) • Efektivita programů Odkazy • Programátorské kuchařky • https://ksp.mff.cuni.cz/kucharky/ • Oficiální stránky o PHP • https://www.php.net/ • Procházení bludiště • https://cs.qaz.wiki/wiki/Maze_solving_algorithm#Wall_follower Domácí úkol Naprogramujte kód, který vypočítá, jaká je pravděpodobnost, že registrační značka projíždějícího vozidla bude obsahovat alespoň dvě stejné cifry vedle sebe. Uvažujte jen blok čtyř čísel v druhé části RZ. Značky na přání ignorujte. Čtyřčíslí tedy může nabývat hodnot od 0000 po 9999, celkem tedy 10 tis. různých hodnot. Domácí úkol ve variantě plus: ne alespoň,ale právě dvě stejné cifry vedle sebe.