PRM044 Programování I paralelka Y ZS 2006/7
Co bylo na přednáškách
paralelka Y - čtvrtek 14:00 K1
Hromadná konzultace k předmětu PRM044 se koná v pondělí 15.ledna 2007 od 13:00 v posluchárně S3.
- přednáška 5.října
- přednáška 12.října
- přednáška 19.října
- přednáška 26.října
- přednáška 2.listopadu
- přednáška 9.listopadu
- přednáška 16.listopadu
- přednáška 23.listopadu
- přednáška 30.listopadu
- přednáška 7.prosince
- přednáška 14.prosince
- přednáška 21.prosince
- přednáška 4.ledna
- přednáška 11.ledna
- přednáška 5.října
- Úvodní povídání o předmětu a studiu na MFF UK.
- Podmínky k zápočtu, praktický test, zkouška v letním semestru
- Pojem algoritmu, jeho "filosofické vymezení"
příklady konkrétních algoritmů:
- Eukleidův algoritmus
- Erathostenovo síto (a úpravy jeho efektivity)
- aritmetické operace v desítkové soustavě
- konstrukce magického čtverce lichého řádu
- Úloha o bludišti a jednoduchý "Ariadnin" algoritmus,
který ji řeší (trasování na konkrétním bludišti).
- Algoritmus je správný, když je
- konečný (na každý přípustných datech skončí)
a
- parciálně správný (pokud skončí, tak dá správný výsledek)
- Důkaz konečnosti Ariadnina algoritmu
- Čísla ve světě
- Úlohy na rozmyšlení:
- Nalézt algoritmus pro nalezení stabilního párování
- Zkusit dokázat parciální správnost "Ariadnina" algoritmu
- přednáška 12.října
- WWW stranky předmětu, literatura, překladače
- Úloha o bludišti, poznámky k formulaci algoritmu, důkaz jeho správnosti .
- Pojem invariantu algoritmu
- Problém stabilního párování a jeho řešení algoritmem pánské volenky.
Důkaz toho, že pánská volenka vytvoří stabilní párování, které je mezi všemi
stabilními párováními "optimální pro muže".
- Měření časové složitosti algoritmu, asymptotická složitost - formální definice pomocí O(f).
- Nejlepší, nejhorší a průměrný případ
- Paradoxní aspekty pojmu asymptotické složitosti.
- Příklad na hledání maximálního jedničkového obdélníku v 0/1 obdélníku rozměrů m x n.
- Trivální algoritmus složitosti n3*m3
- Algoritmus se složitostí n*m2 využívající předvýpočet "počtu jedniček pod danou jedničkou"
- rozmyslet: Algoritmus pracující v čase n*m
prezence
- přednáška 19.října
- Algoritmus na hledání maximálního jedničkového obdélníku v 0/1 obdélníku rozměrů m x n pracující v čase n*m.
Animace algorimů pro nalezení největšího jedničkového obdélníka.
- Motivační příklad pro zavedení konstrukcí obvyklých v programovacích jazycích.
- Proměnná - jméno místa pro uložení hodnoty, nikoli hodnoty samé. Přiřazovací příkaz.
Příkazy pro čtení (read) a výstup (write).
- Datový typ, deklarace proměnných.
- Identifikátor, zápis číselné konstanty, klíčové slovo.
- Tvar programu v Pascalu
- Strukturované příkazy. Úplný a neúplný podmíněný příkaz, složený příkaz, cykly while a repeat.
Syntaktická nejednoznačnost konstrukce podmíněného příkazu.
- Čísla ve světě
- přednáška 26.října
- Opakování:
Proměnná, přiřazovací příkaz,
Úplný a neúplný podmíněný příkaz, složený příkaz, cykly while a repeat.
Syntaktická nejednoznačnost konstrukce podmíněného příkazu.
- Čísla ve světě, v matematice, "počítačová" čísla.
- Typ integer, aritmetické operace a jejich priority, konstanta maxint, přetečení hodnoty.
(ukázka, že díky němu není sčítání integerů asociativní)
- Celočíselné typy v Borland Pascalu:
integer, shortint, longint,
bez znaménka: byte, word
- Typ real, standardní funkce,
- Ukázkový program, demonstrující,
že není rozumné používat pro kontrolu běhu výpočtu programu výsledek testu reálný čísel na rovnost.
- Typová ochrana přiřazovacího příkazu. Funkce trunc a round.
- Konstanty jako nástroj pro snadnou modifikaci programů.
Ukázkové programy.
- Typ boolean.
- Program, který testuje, zda číslo na vstupu je prvočíslo.
- přednáška 2.listopadu
- Opakování
proměnná, typ, konstanta, literál,
číselné typy integer a real
- Absolutní a relativní přesnost (udává se počtem platných cifer)
reálné typy v Borland Pascalu real, double a single
- Typ char, funkce ord a chr.
- Zápis čísla v poziční soustavě, výpočet jeho hodnoty Hornerovým schématem
- Příklad programu,
který čte ze vstupu řádky obsahující vždy číslo k udávající základ soustavy
a zápis nějakého čísla X v této soustavě a spočítá a vytiskne hodnotu čísla X
- Výčtové typy
- "Zoologie" typů v Pascalu (jednoduché - strukturované,
standardní - definované programátorem, ordinální).
- Typ interval. Hostitelský typ, běhové kontroly a možnost je vypínat
(a proč to není žádoucí).
- Funkce ord pro ordinální typy - succ, prev, inc, dec.
- Pole, indexový typ, typ složky, přístup ke složce pole pomocí indexového výrazu.
- for cyklus, jeho syntaxe a sématnika, jednoduché příklady.
- přednáška 9.listopadu
- Opakování
- Jednoprůchodovost překladače Pascalu a z toho vyplývající požadavek,
aby každý identifikátor byl v (textu) programu definován před tím než je použit.
- Vícerozměrná pole
- Kvadratický algoritmus pro nalezení nejdelší rostoucí vybrané posloupnosti
(program).
- Funkce počítající mocninu s optimálním početem násobení, faktoriál
- Výpočet kombinačních čísel s prevencí přetečení
- Rekursivní funkce - mocnina, faktoriál
- Rekursivní a nerekursivní podprogramy
Fibonnaciova posloupnost - chybné řešení s exponenciální složitostí - animace
- Procedury.
- Předávání parametrů hodnotou a referencí. Jednoduchý příklad.
- přednáška 16.listopadu
- Opakování předávání parametrů hodnotou a referencí
- Bloková struktura programu a viditelnost objektů,
Lokální versus globální deklarace a jim odpovídající objekty.
- Alokace lokálních objektů (parametrů a lokálních proměnných) na zásobníku.
- Kdy použít předávání parametrů hodnotou resp. referencí
- Příklad "neintuitivního" chování podprogramu, který byl zavolán
se stejným skutečným parametrem pro dva různé formální parametry předávané referencí.
- Typ záznam (record) a příkaz with,
jednoduché příklady
- Typická reprezentace vektoru jako záznamu o dvou složkách:
pole a jeho skutečně využitá délka.
- Hledání prvku v tabulce.
- první výskyt, použití zarážky pro urychlení testu, prostřední výskyt.
- Hledání prvku v uspořádané tabulce, metoda půlení intervalu.
- Unity utab a seektab
realizující probírané algoritmy vyhledávání v tabulce
- Samostatně překládané programové jednotky - unity. Interfaceová a implementační část, klausule uses.
Význam používání unit.
- Úplné a neúplné vyhodnocování booleovských výrazů.
Přepinače B a R ovlivňujicí činnost překladače Pascalu
- přednáška 23.listopadu
- Opakování: Samostatně překládané programové jednotky - unity.
- Textové řetězce - stringy
- Datové a textové soubory - rozdíl v použití.
- Textové soubory v Pascalu - abstraktní model a konkrétní reprezentace.
- Procedura assign
- Otevření textového souboru ke čtení, k zápisu a přípisu. Zavírání textového souboru.
- Všechny procedury mají nepovinný první parametr udávající, ze/do kterého souboru se má číst/psát
pokud není uveden jde o vstup/výstup z/do souboru input/output
- Vstup z textového souboru.
- Testy eof, eoln,
- Procedura readln,
- Čtení znaků
- Čtení čísel
- Anomální chování programu s testem
while not eof(F) do
begin read(F,I); ..... end;
- Testy seekeof, seekeoln.
- Výstup do textového souboru
- přednáška 30.listopadu
- Opakování práce se soubory
- výstup čísel typu real, výstup v semilogaritmickém tvaru nebo se zadaným počtem desetinných míst
- Textové řetězce (stringy)
- Vstup a výstup stringů
- Standardní podprogramy pro práci se stringy
- Hanojské věže - animace
- Nerekursivní a rekursivní
verze programu hledajícího všechny rozklady zadaného čísla na sčítance
- Výstup otočeného řetězce pomocí rekursivní procedury s lokální proměnnou.
- Přímá a nepřímá rekurze, direktiva forward
- přednáška 7.prosince
- povídání o ladění
- Hledání všech pozic N nezávislých dam na šachovnici N x N - volba datových struktur
umožňujících inkrementální aktualizaci - Program
- Rozmyslet:
- Program, který hledá jen ty pozice N nezávislých dam, které nelze získat
pomocí symetrie z již dříve nalezených pozic.
- Program pro hledaní všech maximálních nezávislých konfigurací
obecné (exo)figury zadané na vstupu.
- Formální definice aritmetického výrazu a z něj odvozené rekursivní procedury
pro vyčíslení hodnoty aritmetického výrazu (metoda rekursivního sestupu)
- Rozmyslet: Modifikace programu tak, aby nepoužíval podprogramů lokálních v jiném.
Jak se musí změnit hlavičky podprogramů a jejich vzájemná komunikace?
- vyčíslování hodnoty aritmetického výrazu
- metoda shora dolů - nalezení "nejvnějšnějšího" operátoru a rekursivní volání
- metoda zdola nahoru - postupné vyčíslování toho, co jde "hned vyčíslit"
- k dalším metodám se vrátíme
- typy souboru při práci s Pascalem *.pas, *.tpu, *.tpl, *.exe
překlad Compile, Make a Bild
- přednáška 14.prosince
- "typované" konstanty (pozor nejsou konstanty !) jako příjemný způsob inicializace hodnot
proměnných (i strukturovaných) typů
- Pseudonáhodná čísla - princip použití, hnízdo generátoru.
- Pseudonáhodná čísla v Borland Pascalu
( RandSeed, Randomize, Random, Random(n) )
- Metoda Monte Carlo.
- Typ množina, jeho realizace v Borland Pascalu.
- Velká množina jako pole množin.
- Sekvenční algoritmus pro nalezení reflexního, symetrického a transitivního
uzávěru binární relace ze vstupujícího seznamu jejich dvojic. - Program
a jeho realističtější verze.
- Různé reprezentace grafu,
Matice sousednosti, matice incidence, seznam hran, seznam následníků.
- přednáška 21.prosince
- Systémové unity SYSTEM Graph a CRT.
- unita CRT
- Zásobník, fronta a jejich implementace
- Prohledávání grafu do hloubky a šířky.
Animace: do hloubky,
do šířky,
s výběrem
tyto animace obsahují (poměrně závažnou chybu)
- Společná implementace se seznamy OPEN a CLOSE,
ve které se tyto algoritmy liší jen implementací seznamu OPEN (zásobník/fronta).
- Hledání nejkratší cesty (měřeno počtem hran) procházením grafu
- Algoritmus vlny - animace
- Komentář k programování úlohy o hledání nejkratší cesty dané figury po šachovnici se zakázanými políčky
- přednáška 4.ledna
- Zápočty, praktické testy a přihlašování k nim, přečtěte si pokyny a požadavky
- Dlouhá čísla - reprezentace a aritmetické oprace s nimi
- Použití mocnění matice sousednosti pro zjišťování hranové vzdálenosti
- Dijktstrův algoritmus - animace , invariant a důkaz správnosti
- Úloha vnitřního třídění
- Jednoduché algoritmy složitosti O(n2):
- přímé zatřiďování
- třídění výběrem
Programy
- přednáška 11.ledna
Pravděpodobný obsah zbývajících přednášek - mimo jiné
- Komponenty souvislosti prohledáváním grafu - animace
a faktorová množnina - animace
- Funkcionální a procedurální parametry.
Funkcionální a procedurální typy, dlouhé adresy a přepinač F.
- Jednoduché algoritmy složitosti O(n2):
- přímé zatřiďování
- třídění výběrem
- třídění výměnami - bubblesort, shakesort
Programy
- Algoritmus quicksort - zákládní idea (vrátíme se k němu podrobně v letním semestru)