Odpověděl sis alespoň jednou ano? Pak hledáme
|
|
- Zdeněk Zeman
- před 6 lety
- Počet zobrazení:
Transkript
1 Korespondenční Seminář z Programování Milí chlapci a děvčata, jako každý rok je tu opět Korespondenční Seminář z Programování. Že jste o něm ještě neslyšeli? V tom případě si zkuste odpovědět na následující kvíz: Zajímáš se o počítače? Rád soutěžíš? Chceš se dozvědět něco nového? Chceš poznat nové lidi? Nevíš co s volným časem? Hledáš výzvu pro svoji hlavu? Odpověděl sis alespoň jednou ano? Pak hledáme právě Tebe. KSP hledá nové řešitele a zapojit se může každý. Máš-li chut, otoč list...
2 Nyní určitě hledáš odpověd na otázku, která se Ti honí v hlavě od chvíle, kdy jsi spatřil tento leták. Ty znáš tu otázku. Bohužel Ti neumíme dost dobře popsat, co KSP je, ale můžeme Ti to ukázat. Pro bližší představu jsme připravili pár informací, které by Tě mohly zajímat: KSP je celostátní a celoroční soutěž v programování pro studenty středních i základních škol. Jeden ročník je rozdělen na 4 5 sérií. V každé sérii účastníci obdrží poštou zadání úloh. Úlohy vyřeší v teple domácího krbu a svá řešení nám zašlou zpět (opět poštou, případně přes webové rozhraní). My jim vrátíme opravené úlohy společně se vzorovými řešeními, zpravidla se zadáním další série. Na vyřešení jedné série je několik týdnů času. Série obsahuje šest programátorských úložek a každému řešiteli jsou započítány čtyři nejlépe vyřešené. Úlohy jsou čistě algoritmického rázu. Rychlejší a lépe popsané algoritmy mají přednost před programy hýřícími barvami. Každá úloha je bodována, body ze všech úloh ze všech sérií se sčítají a tvoří celkové hodnocení. Pro nejlepší řešitele pořádáme na začátku dalšího školního roku (obvykle v říjnu) soustředění, na kterém se nejen dozví užitečné věci z programování, ale také si protáhnou tělo i mysl při ryze neinformatických činnostech. Další informace a přihlášku nalezneš na dotazy (ale ne řešení úloh) můžeš posílat na ksp@mff.cuni.cz. Hodně štěstí!
3 Svá řešení nám zasílejte do 16. října 2006 buďto elektronicky na nebo klasickou poštounaadresu: Korespondenčníseminářzprogramování Předmluva KSVIMFFUK Malostranské náměstí Praha1 Jetrochumalýzázrak,žeteďčtetetytořádky.Řádky,na nichž vás očekává příběh o mně, detektivu Přesprstovi. A tak Tiještějednouděkuji,mémiléKSP.Nejenžejsiopravilo chybyvmémrukopisu,aledokoncejsibylotaklaskavoa jako jediné jsi mé dílko vydalo Vzorová úloha Poznámka KSP: To si zaslouží vysvětlit. Rukopisy pro náš speciální tiskařský lis je třeba psát v následující formě: name jméno_kapitoly name jméno_podkapitoly name jméno_další_podkapitoly name jméno_vnořené_podkapitoly Každá kapitola tedy začíná řádkem, jehož prvním slovem je name, a končí řádkem obsahujícím jediné slovo. V každé kapitole pak může být libovolný počet podkapitol s totožnou syntaxí. V čem je problém? Přesprst totiž občas nedodržoval tuto syntaxi a slova name a psal víceméně nahodile. Buď začal novou kapitolu, aniž by ukončil předchozí, nebo ukončil kapitolu, kterou ani nezačal. A chudák mistrtiskař,kterýnevěděl,cosisrukopisempočít,zesamého zoufalství počal jíst barvu. Je jasné, že mistrů tiskařů zase nemáme tolik, a tak bychom rádi poznali, že rukopis je chybný, abychom ho mohli Přesprstovi vrátit Vzorovéřešenívzorovéúlohy Jaknato? Nejprve se zamyslíme, co se vlastně může pokazit. Můžeme neukončit existující kapitolu a ukončit neexistující kapitolu.dálebysemohlostát,žesenějakékapitoly překříží, čili že ukončíme nějakou kapitolu dříve než její podkapitolu. Ale počkat jednotlivé nejsou pojmenované a každý patřík nejbližšímu namenadním,takženemůžemeukončit kapitolu předtím, než ukončíme její podkapitolu. Jména kapitol nejsou tím pádem vůbec důležitá, roli hraje pouze jejich vnořený počet. Když jsme si to uvědomili, úlohu již vyřešíme jednoduše. Stačí nám si pamatovat, kolik kapitol zatím začalo a nebylo ještě ukončeno. Každý name na vstupu zvýší tento počet ojedna,každýhoojednasníží(pokudmůže).správný text pak poznáme tak, že každý snižuje nenulový počet začatých kapitol a navíc je na konci tento počet nulový. Řešení v pseudopascalu může vypadat například takto: počet_kapitol := 0; while not konec_textu do begin if řádek_začíná_na_name then inc(počet_kapitol); První série devatenáctého ročníku KSP 3 if řádek_začíná_na_ then if počet_kapitol=0 then begin write( Ukončena neexistující kapitola! ); halt; else dec(pocet_name); if počet_kapitol<>0 then write( Neukončená kapitola! ) else write( Rukopis je v pořádku. ); Nyní určíme časovou a paměťovou náročnost našeho řešení. Řešení načítá řádky textu, každý právě jednou, a s každým řádkem provede jednoduchou operaci(zjistí, zda začíná slovem name či a případně příslušně upraví proměnnou počet_kapitol) v čase úměrném délce tohoto řádku. Celkový čas našeho řešení je tedy lineární vzhledem ke vstupnímu textu, což je jistě asymptoticky nejlepší možné, protože v menším než lineárním čase bychom ani nedokázali načíst celý vstup. Paměti potřebujeme jenom konstatní množství (proměnná počet_kapitol a čtyři první nemezerové znaky načítanéhořádkuproporovnánísnamea),cožtaké můžeme těžko zlepšit. Naše řešení je tedy v určitém smyslu nejlepšímožné.hurá! Kapitola 1 Můjpříběhseodehrávávdobách,kdydanéslovomělovětší váhunežtisícsmluvapřijítočestbylohoršínežpřijítoživot.avmnohaohledechitěžší.býtsoukromýmočkemvdivočině mafiánských rodin bylo pořádně nebezpečnou hrou a člověk si musel dávat sakra, ale sakra pozor, aby nešlápl naněčíkuříoko,jestlimirozumíte.jenžeobčasstačíjen chvilka nepozornosti a... Ten den jsem seděl v kanceláři. Stejně jako den předtím. Aidenpředtím.Vlastněužsianinevzpomínám,kdyjsem měl trochu víc případů a hlavně teda peněz Zlaté časy 8 bodů Pojďme Přesprstovi pomoci zjistit, kdy byly jeho zlaté časy, aby si mohl zavzpomínat, a nahlédněme do jeho knihy příjmů.vtésipečlivěvedlsvépříjmy(kladnáčísla)avýdaje (záporná čísla). No a zlaté časy je přirozeně takové souvislé období, kdy dosáhl nejvyššího součtu příjmů a výdajů. Vstupem bude posloupnost příjmů a výdajů a na výstupu by měl váš program vypsat číslo záznamu, kdy zlaté časy začaly, a číslo záznamu, kdy zlaté časy skončily. Příklad: Pro posloupnost 1,6, 13,12,3, 2,1,5,6, 4se Přesprstovinejlépevedlomezi4a9(tehdybylsoučet25). Ještě že mi zbylo alespoň na mou oblíbenou whisky, doutníkyačokoládu.čokoládu... Kdejenjimám.Začaljsemse přehrabovat v šuplíku. Konečně jsem ji našel a třesoucíma se rukama ji začal lámat Čokoláda 6bodů Třesoucímaserukamasealelámešpatně,atakbyPřesprsta zajímalo, kolikrát bude muset lámat. Představte si tabulkučokoládyadvěruce.ruceuchopíčokoláduarozlomíji (zlom je úsečka vedená zúženým místem mezi dílky) na dvě nenutněstejněvelkéčásti.potéruceuchopíjednuzčástíaopětjirozlomínadvakusy.apřesprstabyzajímalo, kolikrát je třeba lámat v nejlepším a v nejhorším případě, aby získal jednotlivé dílečky tabulky čokolády. Pomůžetemu?Navstupudostanetedvěčísla Na M,což jsou rozměry tabulky čokolády v dílcích. Na výstupu by měla být rovněž dvě čísla: minimální a maximální počet
4 zlomů nutných k dosažení cíle. A protože Přesprst už nikomunedůvěřuje,mělibystemuidokázat,ženamenšía větší počet zlomů to nejde. Příklad: Má-li Přesprst čokoládu o rozměrech 1 3, musí v každém případě lámat dvakrát, protože jedním zlomením jednotlivé dílky čokolády nedostane, a třikrát lámat nelze. Ajeto.Vložiljsemhladovějedílekdoúst.Pakjsem sinalilwhisky,sedlsiačokoláduzapil.jakměwhiskytak hladila po jazyce, hledal jsem východisko ze své situace a asi bych se prohledal až ke dnu lahve, kdyby někdo nezaklepal. Dále, promluviljsempřekvapeněkedveřím. Dobrýden,mohuseposadit? Mlčkyjsemkývlazavřelpusu. Nebudu vás otravovat popisem té dámy, která zabloudila do mé kanceláře, byla prostě kus. Comátenasrdci? prohodiljsemnedbaleanenápadně jsemsijiprohlíželvmístech,kdejsemsrdcetušil. To, co mi ta chudinka říkala, mě ani nepřekvapilo. Jenom jsem netušil, proč mi to všechno vykládá. Byla ženou jednoho z místních mafiánských kmotrů, Carla Assassina. Vyprávělaotom,jakjejímanželobchodujesalkoholemazbraněmi, pere špinavé a tiskne falešné peníze a pořádá večírky pro podsvětní smetánku Tiskárna 10 bodů Během vyprávění se Carlova žena rozpovídala o tom, jak se ony falešné peníze tiskly. Tiskárna měla vstup a výstup. Na vstup se daly bankovky a na výstupu se objevily bankovky původníaještějednakopiekaždéznich.tedypřesnědvojnásobný počet. Když se všechny bankovky okopírovaly, dal secelýbalíkzvýstupuzpětnavstupanavrchsepřidala jedna bankovka s novým sériovým číslem. Carlově ženě se podařilo získat všechny bankovky ze vstupu ještě před tím, než tiskárna začala kopírovat, a Přesprstovi je donesla. Přesprsta by teď zajímalo, která bankovka se přidala naposledynavrch,tedytabankovka,kterámávcelémbalíku unikátní sériové číslo. Bohužel se během cesty promíchalo pořadí bankovek. Na vstupu dostane program seznam sériových čísel bankovek přinesený Carlovou ženou a na výstupu by měl program vypsat sériové číslo bankovky, která byla přidána jako poslední, tedy takové, která je v seznamu právě jednou, zatímco ostatní lze spárovat do dvojic. Sériové číslo je řetězec kratší než 100 znaků obsahující pouze číslice a velká písmena anglické abecedy. Příklad: Pro vstup 9G873W, Z8D43, 9G873W, 9G873W, A456C, Z8D43 a 9G873W by měl program napsat A456C. Všechno trpělivě snášela a snažila se do jeho věcí nemíchat, aleto,žesinašeljinouženu,pronibylaasiposledníkapka ktomu,abysedojehověcímíchatzačala.životjeboj,pomyslel jsem si, a vstal jsem, abych ji utěšil, neboť vypadala, žesekaždouchvilkouzhroutí... Kapitola 2 Nevím,copřesněsevtuchvílistalo,vímjen,žeserozrazily dveře a já se probudil svázaný v temné místnosti. Nejprve jsem si jazykem přepočítal zuby a pak jsem si překontrolovalvšechnykosti.zdálose,žeažnabolestihlavysemi nic nestalo. Začal jsem přemýšlet, komu jsem stál za únos. Ve městě byla spousta mafiánských rodin. Popravdě řečeno,nikdonevědělpřesněkolik.apřitombylotaksnadnéje spočítat Mafiánské rodiny 10 bodů Policie si vedla o každém mafiánovi záznam o jeho přímých nadřízených a podřízených. Každý mafián má nejvýše jednoho přímého nadřízeného, pokud nadřízeného nemá, je to kmotr. Každá rodina má právě jednoho kmotra. No, zas tak snadné to nebylo, protože na popud rodiny Farmot byly spisy poničeny vandaly a nebylo možné vyčíst, jestli je záznam ve tvaru šéf podřízený nebo naopak. Na vstupu dostane váš program seznam policejních záznamůanavýstupubymělprogramvypsatpočetrodinve městě. Příklad:prozáznamy:1 2,2 1,3 6,4 6,5 6,6 3,6 4,6 5,5 7,7 5lzezjistit,ževeměstějsoudvě rodiny. Nestihljsemsianivduchupřeříkatjménarodin,jimžbych se nechtěl znelíbit, když tu mě z uvažování vytrhly hlasy. Já bych navrhoval nejdžíve thání nechtů, pak vlasů, pak usekatpfstya... Neblbnimátopřežít.Aspoňnapoprvé. Aha,natošemšapomněl,takcotšebavyřžazitžubiažlámatnohi? Ne,toužjsmedělaliminule. Ale žubibyšme mohli, né? Mě toproště baví a štěma novejma kleštiškama, co nám pořžídil šéfík, to jde jako po mášle. Achjo.Sijakmalej.Takjo,alejentak,abymohlmluvit. Hulá!Mušeníško,tojemojepotěšeníško. Snažiljsemsejemocnevmímat,cožstejněmocnešlo,protože jsem se všemožně snažil uniknout ze svých pout Zámek 13bodů Přesprst měl štěstí, únosci použili pouta s číselným zámkem,kterýonvelmidobřeznal.věděl,žetentotypzámku lze vždy odemknout jednou z kombinací, které splňují podmínku, že po nějaké číslici následuje pouze číslice z určité množiny. Dokonce si ty seznamy pro jednotlivé číslice dobře pamatoval a teď by ho zajímalo, kolik různých kombinací musí prozkoumat. Na vstupu dostane program K, počet cifer čísla na zámku, a seznam číslic, které mohou následovat za jednotlivými číslicemi. Na výstup by měl program vypsat, kolik všech možných čísel je na zámku možno nastavit. Příklad:Protřícifernéčíslo(K=3)aseznam cifra možné následující cifry 1 1, jepočetrůznýchkombinací6(111,113,131,231,311,313). Už jsem měl odzkoušeno několik desítek kombinací, když najednouhlasyutichlyaotevřelysedveře... Tobecontinued Prolog 12bodů Milí řešitelé, v letošním seriálu se budeme zabývat poněkud zvláštním, ale velmi zajímavým programovacím jazykem Prolog. Většina programovacích jazyků, které znáte(pascal, C) patří do skupiny tzv. procedurálních jazyků. Programátor píšící kód v procedurálním jazyce přesně popíše, jakým způsobem se má daná úloha vyřešit. V Prologu budeme programovat jinak, logicky. Nejprve nějakým způsobem popíšeme nám
5 známýsvětapotéseprologuzeptámenařešenídanéhoproblému. Nepřikazujeme tedy, jak se má Prolog dobrat výsledku, pouze říkáme, co chceme vyřešit, ale ne přesně, jakým způsobem. Zapomeňme tedy na chvíli na klasické proměnnécoby škatulky,napřiřazovacípříkazanaalokování paměti. Programujeme logicky PROgramming in LOGic. Jak na Prolog Aby se vám s Prologem seznamovalo co nejlépe a nejradostněji,připravilijsmeprováskroměklasického papírového seriálu také internetovou prologovskou poradnu. Na adrese najdete fórum, kam můžete posílatsvéotázkyamyvámsvašímproblémemporadíme. Nestyďte se ptát, rádi vám pomůžeme. Kromě poradny najdete na uvedené adrese také zadání úloh, učební texty, užitečné odkazy a také on-line interpreter Prologu, kde si můžete zkoušet své prográmky. Poznámka:Tentosymboloznačujeobtížnoučást,která ale není nutná pro pochopení dalšího textu. Instalace Prologu RadykinstalaciaodkazynaPrologjakproWindows,tak pro Linux najdete také na Program v Prologu, predikát, fakt, klauzule, proměnná Program v Prologu je možné napsat buď přímo v prostředí Prologu, pokud to vaše prostředí umožňuje, nebo v libovolnémtextovémeditoru(vi,emacs,...).ukážemesipříklad jednoduchého prográmku. muz(antoch). muz(bonifac). zena(cecilka). rodic(cecilka,antoch). rodic(bonifac,antoch). manzele(bonifac,cecilka). Prolog popisuje situaci pomocí predikátů. Predikát muz(x) říká Xjemuž.Vnašemprográmkumámečtyřipredikáty: unární predikáty muz(x) a zena(x) a binární predikáty manzele(x,y) a rodic(x,y). Proměnné se v Prologu značí velkým písmenem na začátku, např. X, Y, zatímco konkrétní hodnoty atomy(můžete si je představovat trošku jako stringy) začínají malým písmenem, např. antoch, bonifac. Takže jakmile jsme v programu použili predikát muz a dosadili donějantoch,dalijsmesvětunajevo,žeantochje muž. Základní jednotkou prologovského programu je klauzule. Klauzule vždy končí tečkou. V našem programu jsme zatím použili nejjednodušší typ klauzulí, fakta. Jakmile jsme napsali náš první program v Prologu, můžeme si jej pustit v prologovském prostředí. Prolog je interaktivní jazyk, takže po spuštění se objeví výzva: Nejprve musíme Prologu sdělit, že si přejeme pracovat s naším programem. To uděláme pomocí [ nasprogram.pl ]. Teď začneme konečně náš program využívat. Zeptejme se, jestli je antoch muž. muz(antoch). Co nyní Prolog udělá? Projde námi dodaný program a podívá se, jestli v něm existuje predikát muz(antoch). A odpoví nám: 5 muz(antoch). Poznámka: muz(antoch) jsme napsali my. Nesmíme zapomenout na tečku na konci. Pak stiskneme Enter a výsledné yes napsal zase Prolog, pochopitelně. Nakonec se znovu vypíšeotazníkačekásenadalšídotaz.kdybyprolognenašel v programu muz(antoch), odpověděl by no. Můžeme se ale zeptat jinak: muz(x). %kdojemuž? % antoch je muž PrologopětprojdecelýprogramapokusísezaX dosadit, správně říkáme unifikovat, někoho, kdo je muž, a nabídne nám antocha. Kdyby žádného muže nenašel, odpoví nám no. Pokud jsme s antochem spokojení, dáme Enter a program odpovíyesaopětotazníkemčekánadalšídotaz.můžese ale stát, že nechceme antocha, nýbrž boniface. Pak můžeme tuto odpověď odmítnout a vyzvat Prolog, aby našel jiného muže tím, že zmáčkneme středník: muz(x). %kdojemuž? ; % chceme dalšího muže ; % ještě dalšího muže Jistě víte, co dělá dotaz rodic(bonifac,x). %užžádnýnení Vidíme, že dotazy činíme pomocí proměnných. Na začátku je proměnná X volná, tedy nevíme, kdo je dítě boniface. Proměnná X zatím není svázaná. Prolog zjistí, že dítětem boniface je antoch a sváže neboli unifikuje proměnnou X santochem. Pravidla Zatímbysemohlozdát,žePrologjejenšikovnádatabáze. Bylo by opravdu slabé, kdybychom k dispozici měli jen klauzuletypufaktaamohlisenanějenptát.existujítedy ještě klauzule typu pravidla. Přidejme do programu řádku: je_otec(x):- rodic(x,y), muz(x). Tohlepravidloříká Xjeotec,pokudplatípredikáty,žeXje něčírodič(vyskytujesevpredikáturodič)aještěktomu Xjemuž.Čárka mezipredikátymávýznamazároveň. Tedyabysesplnilo,žejeněkdootcem,musímsplnitoba predikáty na pravé straně. Poznámka: Jejasné,žezapredikátynapravéstraněse mohou skrývat další pravidla. Vyhodnocení dotazu, unifikace volných proměnných Jak tedy Prolog vyhodnotí dotaz: je_otec(cecilka). Nejprve zjistí, že cecilka je skutečně rodičem(rodičem antocha,aletonásmocnezajímá),apaksesnažísplnit taképredikát,žececilkajemuž,cožsemunepovede,a protoskončísno.mělijsmesplnitobadvapredikátyato se nám nepovedlo. Acodotaz: je_otec(x). To už je trošku zapeklitější. Prolog ví, že musí splnit nejprve predikát rodic, takže se podívá, kdo je rodičem. Nejprvemu padnedooka predikátrodic(cecilka,antoch),
6 vybere si tedy cecilku. Jinými slovy unifikuje X=cecilka. Pak hledá, jestli je cecilka mužem, jenže zjistí, že cecilka není mužem, proto cecilka nebyla ta správná volba. A teď přichází kouzlo Prologu: Prolog odunifikuje X=cecilka, tedyuvolníproměnnouxazkusínovouvolbu,tedyznovuunifikuje X=bonifac, zkusí to s bonifacem a tentokrát uspěje, neboť bonifac je rodič i muž. V tomto okamžiku samozřejmě vypíše X=bonifac. KdyžsetedyPrologsnažísplnitnějakýpredikátamánějakou volnou, nesvázanou proměnnou X, zkusí za ni dosadit,unifikovatnějakouhodnotu.nejprvevyberetu,která je v programu na nejbližším řádku od začátku programu. Když má proměnnou X svázanou s nějakou hodnotou, zkusí splnit všechny predikáty, které mu přikazuje pravá strana pravidla, a používá přitom tuto zvolenou hodnotu X. Když setopodaří,skončísúspěchemavypíšetutozvolenouhodnotu proměnné X jako správnou. Když Prolog někde narazí na nesplnitelný predikát(prostě cecilka holt není muž), musísevrátitaproměnnouxodunifikovat.xjezasevolná. Pokud máme na výběr ještě nějaké jiné hodnoty, zkusíme proměnnou X znovu zunifikovat s jinou hodnotou(další v pořadí v programu) a vyhodnotit predikáty znovu. Pokud takto vyčerpáme všechny možnosti, musíme bohužel skončit neúspěšně a vypsat no. Poznámka: Vidíme, že neexistuje žádná jiná možnost, jak změnit hodnotu proměnné, než že se v průběhu vyhodnocování odunifikuje při návratu z neúspěšné větve a zunifikuje při vstupu do nové větve. Do jednou zunifikované proměnné neumímeuž přiřadit novouhodnotu. Veskutečnostijetentopopisdostnepřesný,Prologneunifikuje zvlášť proměnné, ale celý predikát s hlavou klauzule.(že to zní ďábelsky: ) Vyhodnocení dotazu, predikáty Stejným způsobem, jako Prolog postupně zkouší unifikovat volné proměnné, pracuje i s výběrem predikátů. Ukážeme si příklad. Máme program: kocka(micka). pes(alik). zelva(matylda). je_savec(x):- kocka(x). je_savec(x):- pes(x). Zeptejme se: je_savec(alik). Prolog nejprve zkusí klauzuli je_savec(x):- kocka(x) salíkemasamozřejmězjistí,žealíkneníkočka.alenevzdá se tak snadno, protože má na výběr ještě jednu variantu predikátu je_savec(x):- pes(x) a tam s alíkem uspěje. Pro Prolog predikáty se stejným názvem a stejným počtemargumentůjaksi patříksobě apostupnějevyzkouší všechny. Pozor, predikát je_savec(x,y) je jiný predikát, Prolog tedy rozlišuje predikáty stejného názvu a rozdílného počtu argumentů. Poznámka: Místo rozepsání na dva řádky můžeme napsat také: je_savec(x):- kocka(x);pes(x). Středník má tedy při splňování pravé strany pravidla význam nebo. 6 Anonymní proměnná Kolikprogramátorův Prologu je potřeba na výměnu žárovky? Vzpomeňme si na predikát je_otec: je_otec(x):- rodic(x,y), muz(x). Vpredikátuje_otecnámšlooto,zdajeněkdootcem,ale nezajímalonás,číotectoje.jenámpopravděúplnějedno, jakseonodítkojmenuje,hlavně,ženějakéje.proměnnáy jetadyvlastnědocelazbytečnáamůževníbýtcokoliv.to můžeme vyjádřit tzv. anonymní proměnnou: je_otec(x):- rodic(x,_),muz(x). Anonymní proměnná se značí_(podtržítkem). Pokud máme v klauzuli více anonymních proměnných, tak spolu nemají vůbec žádný vztah, i když jsou všechny značeny podtržítkem. Prostě je to hromada proměnných, z nichž každá může mít jakoukoli hodnotu a ta nás nezajímá. Porovnávání Zjistit, jestli se dvě proměnné rovnají, není v Prologu tak jednoduché. Záleží na tom, jestli už jsou proměnné zunifikovanéacovnichvlastněje.pronašeúčelyzatímstačí vědět, jak porovnáváme obsahy dvou již zunifikovaných proměnných, které obsahují atomy(například jména). jsou_stejne(x,y):- X=Y. % Prolog greenhorn Predikátjsou_stejneuspěje,pokudjeXrovnoYvtom smyslu, jak bychom čekali, tedy pokud atomy v nich jsou stejné. Namísto pravidla můžeme takovéto porovnání vlastně provést ještě jednodušeji: jsou_stejne(x,x). % Prolog guru Tento predikát uspěje, pokud dostane dvě proměnné svázané se stejnými hodnotami atomů. Acobysestalo,kdybychomdopredikátujsou_stejne pustili proměnnou X zunifikovanou třeba X=pavel a proměnnou Y zatím nezunifikovanou? Odpověď se nabízí YbysezunifikovalanaY=pavelapredikátbyuspěl. Rozsah platnosti proměnných Platnost proměnné se omezuje na jednu klauzuli. Tedy proměnnáxjeplatná(čilijednaatatáž)vklauzuli je_otec(x):- rodic(x,_),muz(x). Ale máme-li klauzule s predikáty je_otec(x):-... je_matka(x):-... Xvjednéadruhéklauzulijsourůzná. Představme si, že bychom chtěli naprogramovat predikát prarodic(x,y), který by dokázal zjišťovat, kdo je čím prarodičem, resp. kdo je čím vnukem/vnučkou, a případně zda-
7 li udaná dvojice má vztah prarodič vnuk. Jak na to? Uvědomíme si, co vlastně znamená být prarodičem. Prarodičem jste,pokudmátedítěatotodítěmázasedítě.zapsáno vprologu: prarodic(pra,vnuk):- rodic(pra,rod), rodic(rod,vnuk). Napsat babičku a dědečka by pro vás jistě bylo jednoduché. Rekurze Chtěli bychom napsat predikát predek(pred,pot), který bude zjišťovat, zdali je Pred předkem potomka Pot, čili jeho rodič, prarodič, praprarodič atd. V příkladu s prarodičem jsme dopředu věděli, že hledáme vztah přes jednu generaci a také jsme tak daný predikát napsali. Jenže teď nemáme ani tušení, kolik generací může mezi Pred a Pot být. Pomůže nám rekurze: predek(pred,pot):- rodic(pred,pot). predek(pred,pot):- rodic(pred,x),predek(x,pot). A zeptáme se: predek(anna,kvetos). Jakužvíme,Prologsenejdřívpodívánaprvnířádeka zjistí, jestli náhodou anna není přímo rodičem kvetose. Rodič je přeci také předek. Pokud anna opravdu je rodičem kvetose, problém je vyřešen a končíme s yes. Dobře, ale co když zjistíme, že anna není přímým rodičem kvetose? Pak se musíme zamyslet nad tím, co znamená být předkem: anna je předkem kvetose, pokud má anna nejaké dítě X, které je předkem kvetose. Prolog najde nějaké dítě anny,třebapavla.pakvezmepavlaakvetoseazkoumá predikát predek(pavel,kvetos). Opět najde třeba nějakéhocyrila,kterýjedítětempavlaamělbybýtpředkem kvetose. Takto pokračuje dál a dál, až najde celý řetězec dětíapradětíanny,začínajícípavel,cyril,...aposlední dítě je přímým rodičem kvetose. Samozřejmě v každé generaci může mít Prolog na výběr spoustudětí,aleonjevšechnyvyzkouší(toužvíme,postupně unifikuje proměnné), a tak prohledá celý generační strom a najde cestu od anny ke kvetosovi.(samozřejmě pouze pokud nějaká existuje.) Kvíz Vyzkoušejte si, co si vám utkvělo v paměti. Správné výsledky s vysvětlením jsou na Jakým písmenem může začínat proměnná 1. velkým písmenem 2. malým písmenem 3. podtržítkem Označte řádek, na kterém je právě jedna klauzule 1. pes(alik). pes(brok). 2. pes(hafistek). 3.savec(X):- pes(x). Jaký je vztah pravidla a faktu 1. Fakt je pravidlo, které nemá žádnou pravou stranu. 2. Fakt je pravidlo, které vždy uspěje. 3. Mezi faktem a pravidlem není žádný vztah. Jakého rodinného příslušníka hledá prislusnik(x)? manzele(x,y). rodic(x,y). prislusnik(x):- manzele(a,b), rodic(a,y), rodic(b,z), Y=Z, X=Y. 1. každého rodiče, který je v manželském svazku 2. všechny manželské děti 3. všechny manžele, kteří mají vnuka Uspěje dotaz pred(_), pokud mame program: pred(a). 1. Uspěje. 2. Neuspěje. Soutěžní úlohy 1. Tchyně(2 body) Napište predikát tchyne(tch,x). Vysvětleníproty,kdoneví,cojetchyně:Pokudjeněkdo ženatý/vdaná, tak tchyně je matka jeho/jejího partnera/partnerky. 2. Oprava(3 body) Popište, proč tento program nefunguje, a zkuste jej opravit, aby fungoval tak, jak nejspíš zamýšlel autor: predek(pred,pot):- predek(mlpred,pot), rodic(pred,mlpred). predek(rod,pot):- rodic(rod,pot). 3. Evoluce(7 bodů) Biologové vás požádali o řešení následujícího problému. Existuje databáze rostlin, ve které jsou uloženy informaceotom,kterárostlinasevyvinulazkteré.mátetedy predikát(fakt) mutace(x,y), který popisuje, že rostlina YsevyvinulazrostlinyXmutací.Biologovévědí,ženěkteré rostliny jsou nejpůvodnější, takže nemají žádného evolučního předka. Lze rozpoznat, které rostliny to jsou, takže máte k dispozici predikát je_puvodni_druh(x), který uspěje, pokud byla rostlina X na začátku evoluce. Dále máte k dispozici predikát je_odvozeny_druh(x), který uspěje, pokud je rostlina odvozená od nějaké původní(jinými slovy není původní). Je dokázáno, že každá rostlina se vyvinula mutací z právě jedné rostliny, tudíž neexistuje křížení. Každá rostlina tedy odvozuje svůj původ od jedné z evolučně původních rostlin. Biologa by zajímalo, jestli daná dvojice rostlin odvozuje svůj původ od stejné původní rostliny. Napište predikát stejny_druh(x,y), který uspěje, pokudrostlinyxayodvozujísvůjpůvododstejnéhodruhu od počátku evoluce. Posílejte i nefunkční a částečná řešení, bodové odměny budouizaně! Rozloučení Děkujemevámzapozornostadoufáme,žesenanásbrzy obrátíte se svými dotazy. Nakonec se s vámi rozloučíme příkazem pro ukončení Prologu: halt. 7
MILAN STRAKA A KOLEKTIV
ÃÓÖ ÔÓÒ Ò Ò Ñ Ò MILAN STRAKA A KOLEKTIV Á ºÖÓ Ò ß¾¼¼»¾¼¼ ÞÔÖÓ Ö ÑÓÚ Ò VYDAVATELSTVÍ MATEMATICKO-FYZIKÁLNÍ FAKULTY UNIVERZITY KARLOVY V PRAZE MILAN STRAKA A KOLEKTIV Korespondenční seminář z programování
Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:
Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury
Výroková logika II. Negace. Již víme, že negace je změna pravdivostní hodnoty výroku (0 1; 1 0).
Výroková logika II Negace Již víme, že negace je změna pravdivostní hodnoty výroku (0 1; 1 0). Na konkrétních příkladech si ukážeme, jak se dají výroky negovat. Obecně se výrok dá negovat tak, že před
Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1
Negativní informace Petr Štěpánek S použitím materiálu M.Gelfonda a V. Lifschitze 2009 Logické programování 15 1 Negace jako neúspěch Motivace: Tvrzení p (atomická formule) neplatí, jestliže nelze odvodit
Algoritmus pro hledání nejkratší cesty orientovaným grafem
1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval
Seminární práce z Teorie ICT
ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE Provozně ekonomická fakulta Seminární práce z Teorie ICT Implementace logické hádanky v Prologu Autor : Petr Pechek 1 Popis zvoleného problému Mým úkolem bylo vyřešit
Lingebraické kapitolky - Analytická geometrie
Lingebraické kapitolky - Analytická geometrie Jaroslav Horáček KAM MFF UK 2013 Co je to vektor? Šipička na tabuli? Ehm? Množina orientovaných úseček majících stejný směr. Prvek vektorového prostoru. V
Logické programování I
Logické programování I PROLOG Program popisuje "svět" Prologu = databáze faktů a pravidel (tzv. klauzulí). fakta: predikát(arg1, arg2,...argn). cíle:?- predikát(arg1, arg2,...argn). pravidla: hlava :-
Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David
Úvod do Prologu Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David Warren (Warren Abstract Machine) implementace
PHP tutoriál (základy PHP snadno a rychle)
PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve
Metodika poradenství. Vypracovali: Jiří Šupa Edita Kremláčková
Metodika poradenství Vypracovali: Jiří Šupa Edita Kremláčková Úvod V následujícím textu je popsán způsob vedení rozhovoru s klientem, jehož cílem je pomoci klientovi prozkoumat jeho situaci, která ho přivedla
popel, glum & nepil 16/28
Lineární rezoluce další způsob zjemnění rezoluce; místo stromu směřujeme k lineární struktuře důkazu Lineární rezoluční odvození (důkaz) z Ë je posloupnost dvojic ¼ ¼ Ò Ò taková, že Ò ½ a 1. ¼ a všechna
Domény. Petr Štěpánek. S využitím materialu Krysztofa R. Apta
Domény Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 10 1 Typy programů v čistém Prologu je možné uspořádat podle různých pohledů. Zajímavá je charakteristika podle domén,
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
Rovnice s neznámou pod odmocninou I
.7.15 Rovnice s neznámou pod odmocninou I Předpoklady: 711, 71 Pedagogická poznámka: Látka této hodiny vyžaduje tak jeden a půl vyučovací hodiny, pokud nepospícháte, můžete obětovat hodiny dvě a nechat
6 Příkazy řízení toku
6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
Programovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
Výběr báze. u n. a 1 u 1
Výběr báze Mějme vektorový prostor zadán množinou generátorů. To jest V = M, kde M = {u,..., u n }. Pokud je naším úkolem najít nějakou bázi V, nejpřímočařejším postupem je napsat si vektory jako řádky
Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012
Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18
Informatika 8. třída/6
Rekurze Jedním z důležitých principů pro návrh procedur je tzv. rekurze. Nejlépe uvidíme tento princip na příkladech dvou velmi jednoduchých procedur (hvězdička označuje násobení). Rekurze vlastně označuje
ŘEŠENÍ KVADRATICKÝCH A ZLOMKOVÝCH NEROVNIC V ŠESTI BODECH
(Tento text je součástí výkladu k definičním oborům, tam najdete další příklady a pokud chcete část tohoto textu někde použít, můžete čerpat ze stažené kompletní verze definičních oborů ve formátu.doc.)
Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)
Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná
Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).
JAZYK PASCAL ÚVOD materiály pro studenty Jiráskova gymnázia v Náchodě (verze 2005-10-28) RNDr Jan Preclík, PhD preclik@gymnachodcz Jazyk Pascal byl navržen profesorem curyšské univerzity Niklausem Wirthem
Scénář ukázkového testu Přetištěno z knihy Nenuťte uživatele přemýšlet! 2010 Steve Krug
Scénář ukázkového testu Přetištěno z knihy Nenuťte uživatele přemýšlet! 2010 Steve Krug Ve webovém prohlížeči by měla být načtení nějaká neutrální stránka, například Google. Dobrý den. Jmenuji se a budu
Kvadratické rovnice (dosazení do vzorce) I
.. Kvadratické rovnice (dosazení do vzorce) I Předpoklady: 000 Rovnicí se nazývá vztah rovnosti mezi hodnotami dvou výrazů obsahujícími jednu nebo více neznámých. V této kapitole se budeme zabývat pouze
( ) ( ) Rozklad mnohočlenů na součin I (vytýkání) Předpoklady:
1.8.6 Rozklad mnohočlenů na součin I (vytýkání) Předpoklady: 010805 Pedagogická poznámka: Na začátku každé rozkládací hodiny jsou přidány příklady na opakování úprav mnohočlenů. Důvod je jediný, čtyři
Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují
Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují 1. u + v = v + u, u, v V 2. (u + v) + w = u + (v + w),
1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1
1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,
Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Podmíněný příkaz
Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Podmíněný příkaz
StatSoft Jak vyzrát na datum
StatSoft Jak vyzrát na datum Tento článek se věnuje podrobně možnostem práce s proměnnými, které jsou ve formě datumu. A že jich není málo. Pokud potřebujete pracovat s datumem, pak se Vám bude tento článek
Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín
Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit
Digitální učební materiál
Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)
Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog
Úvod do programování
Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal
Začneme vysvětlením pojmů, které budeme používat a jejichž definic je nutné se držet.
Rozdělování IP sítí Vložil/a cm3l1k1 [1], 8 Červen, 2005-22:18 Networks & Protocols [2] Na českém internetu jsem nenalezl smysluplný a podrobný článek, který by popisoval rozdělování IP sítí. Je to základní
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
6. blok část C Množinové operátory
6. blok část C Množinové operátory Studijní cíl Tento blok je věnován problematice množinových operátorů a práce s množinovými operátory v jazyce SQL. Čtenáři se seznámí s operátory, UNION, a INTERSECT.
for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }
Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný
MS SQL Server 2008 Management Studio Tutoriál
MS SQL Server 2008 Management Studio Tutoriál Vytvoření databáze Při otevření management studia a připojením se ke konkrétnímu sql serveru mám v levé části panel s názvem Object Explorer. V tomto panelu
Logické programování
30. října 2012 Osnova Principy logického programování 1 Principy logického programování 2 3 1 Principy logického programování 2 3 Paradigmata programování Strukturované programování Procedurální programování
DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v
DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve
Tabulkový procesor. Základní rysy
Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních
VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
Jednoduchá exponenciální rovnice
Jednoduchá exponenciální rovnice Z běžné rovnice se exponenciální stává, pokud obsahuje proměnnou v exponentu. Obecně bychom mohli exponenciální rovnici zapsat takto: a f(x) = b g(x), kde a, b > 0. Typickým
Prolog 1-1. Rodinné vztahy pomocí Prologu:
Prolog 1-1 - Prolog znamená programování v logice - namísto otázky jak se má získat určitá hodta se ptáme co platí mezi objekty - vhodný jazyk pro úlohy kde nás zajímají vztahy mezi objekty - namísto definic
Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek
Otázka 06 - Y01MLO Zadání Predikátová logika, formule predikátové logiky, sentence, interpretace jazyka predikátové logiky, splnitelné sentence, tautologie, kontradikce, tautologicky ekvivalentní formule.
1 Linearní prostory nad komplexními čísly
1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)
Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,
Anotace Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), základní třídicí algoritmy. Soubory a práce s nimi Dnes budou pouze soubory textové. Textový soubor ovládáme pomocí proměnné
Testování prvočíselnosti
Dokumentace zápočtového programu z Programování II (NPRG031) Testování prvočíselnosti David Pěgřímek http://davpe.net Úvodem V různých oborech (například v kryptografii) je potřeba zjistit, zda je číslo
Binární vyhledávací stromy
Binární vyhledávací stromy Definice: Binární vyhledávací strom (po domácku BVS) je buďto prázdná množina nebo kořen obsahující jednu hodnotu a mající dva podstromy (levý a pravý), což jsou opět BVS, ovšem
2 Datové typy v jazyce C
1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,
PSK3-9. Základy skriptování. Hlavička
PSK3-9 Název školy: Autor: Anotace: Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3 Ing. Marek Nožka Základy skriptování v unixovém shellu Vzdělávací oblast: Informační a komunikační technologie
Řešení úloh z TSP MU SADY S 1
Řešení úloh z TSP MU SADY S 1 projekt RESENI-TSP.CZ úlohy jsou vybírány z dříve použitých TSP MU autoři řešení jsou zkušení lektoři vzdělávací agentury Kurzy-Fido.cz Masarykova univerzita nabízí uchazečům
Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky
Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové
Programovací jazyk Prolog
Programovací jazyk Prolog Logické programování Šárka Vavrečková Ústav informatiky, Filozoficko-přírodovědecká fakulta Slezské univerzity v Opavě sarka.vavreckova@fpf.slu.cz 1. prosince 2008 Prolog Co je
Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague
1 / 23 Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 2 / 23 biologové často potřebují najít často se opakující sekvence DNA tyto sekvence bývají relativně krátké,
Patronus 1/06. Pobertovi od Namy ze Zmijozelu
Patronus 1/06 Pobertovi od Namy ze Zmijozelu Rozhovor Cho Chang Vánoce jsou za dveřmi,nalaďme tedy vánoční vlnu... Co máš na vánocích nejraději? 1.Na vánocích mám nejraději tu vánoční náladu,klid a pohodu
VISUAL BASIC. Práce se soubory
VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit
VAŠE RODINNÁ KRONIKA KROK ZA KROKEM. Plynulý tok příběhu
VAŠE RODINNÁ KRONIKA KROK ZA KROKEM Plynulý tok příběhu 6 PLYNULÝ L TOK PŘÍBĚHU Pátrání po vlastních kořenech je zápasem, jehož průběh není vždy férový. Zatímco na vaší straně se investují hodiny a hodiny
Výroková a predikátová logika - XII
Výroková a predikátová logika - XII Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - XII ZS 2018/2019 1 / 15 Rezoluční metoda v PL Rezoluční důkaz Obecné
Funkce, podmíněný příkaz if-else, příkaz cyklu for
Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto
12. Lineární programování
. Lineární programování. Lineární programování Úloha lineárního programování (lineární optimalizace) je jedním ze základních problémů teorie optimalizace. Našim cílem je nalézt maximum (resp. minimum)
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky
Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice
Řídicí příkazy V této kapitole se seznámíte s příkazy, které řídí postup provádění programu Příkazy řízení programu se řadí do třech kategorií: příkazy výběru, kam patří příkazy if a switch, příkazy iterace,
Sny, které nepočkají
Sny, které nepočkají Pár slov úvodem Zcela klíčové je znát odpovědi na následující 3 otázky, proto si je napřed vypište a pak Vám o tom, proč je to důležité, něco povíme. Otázka 1: Jaký je ten Váš sen,
PROGRAMOVÁNÍ V SHELLU
PROGRAMOVÁNÍ V SHELLU Prostředí, jazyk, zdrojový kód chceme-li posloupnost jistých příkazů používat opakovaně, případně z různých míst adresářové struktury, můžeme tuto posloupnost uložit souboru, který
Binární soubory (datové, typované)
Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i
ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ
ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ Parametrické vyjádření přímky v rovině Máme přímku p v rovině určenou body A, B. Sestrojíme vektor u = B A. Pro bod B tím pádem platí: B = A + u. Je zřejmé,
Maturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
Seznam funkcí pro kurz EXCEL I. Jaroslav Nedoma
Seznam funkcí pro kurz EXCEL I Jaroslav Nedoma 2010 Obsah ÚVOD... 3 SUMA... 4 PRŮMĚR... 6 MIN... 8 MAX... 10 POČET... 12 POČET2... 14 ZAOKROUHLIT... 16 COUNTIF... 18 SVYHLEDAT... 22 2 ÚVOD Autor zpracoval
Vědomostní test. Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek
1 Vědomostní test Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek Dokumentace ročníkového projektu Dong Viet Van 1.E Květen 2014 2 1) Úvod 1.1 Anotace Česky: Vědomostní test
Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel
Přílohy Příloha 1 Řešení úlohy lineárního programování v MS Excel V této příloze si ukážeme, jak lze řešit úlohy lineárního programování pomocí tabulkového procesoru MS Excel 2007. Výpočet budeme demonstrovat
Programujeme v softwaru Statistica - příklady
Programujeme v softwaru Statistica - příklady Newsletter Statistica ACADEMY Téma: Programování, makra, skripty Typ článku: Návody, příklady V předchozích článcích bylo vyřčeno mnoho teorie k problematice
IB111 Programování a algoritmizace. Programovací jazyky
IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky Programovací jazyk Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači Program Zápis algoritmu v programovacím
Obr. P1.1 Zadání úlohy v MS Excel
Přílohy Příloha 1 Řešení úlohy lineárního programování v MS Excel V této příloze si ukážeme, jak lze řešit úlohy lineárního programování pomocí tabulkového procesoru MS Excel. Výpočet budeme demonstrovat
2. Složitost, grafové algoritmy (zapsal Martin Koutecký)
2. Složitost, grafové algoritmy (zapsal Martin Koutecký) Model Ram Při analýze algoritmu bychom chtěli nějak popsat jeho složitost. Abychom mohli udělat toto, potřebujeme nejprve definovat výpočetní model.
7 = 3 = = Učivo Vysvětlení Př. + pozn. Zlomek = vyjádření části celku 3 část snědla jsem 3 kousky
0 Učivo Vysvětlení Př. + pozn. Zlomek vyjádření části celku část snědla jsem kousky celek a pizza byla rozdělena na kousky Pojem zlomek Vyjádření zlomku Základní tvar: čitatel a jmenovatel jsou nesoudělná
Vyplatí se vám investovat do nemovitosti na pronájem?
Vyplatí se vám investovat do nemovitosti na pronájem? Ceny nemovitostí šly v poslední době dolů a v současnosti jsou na zajímavých úrovních. Přitom investice do nemovitostí a příjem z jejich pronájmů jsou
Úvod. Programovací paradigmata
.. Úvod. Programovací paradigmata Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Cíl: programování efektivně a bezpečně Programovací techniky
63. ročník Matematické olympiády 2013/2014
63. ročník Matematické olympiády 2013/2014 Úlohy ústředního kola kategorie P 2. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Při soutěži je zakázáno používat jakékoliv pomůcky kromě psacích
2.3.8 Lineární rovnice s více neznámými II
..8 Lineární rovnice s více neznámými II Předpoklady: 07 Tato hodina má dva cíle: Procvičit si řešení rovnic se dvěma neznámými z minulé hodiny. Zkusit vyřešit dodržováním pravidel a pochopením základů
2.7.6 Rovnice vyšších řádů
6 Rovnice vyšších řádů Předpoklady: 50, 05 Pedagogická poznámka: Pokud mám jenom trochu čas probírám látku této hodiny ve dvou vyučovacích hodinách V první probíráme separaci kořenů, v druhé pak snížení
1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5
Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5
Programování v jazyce VISUAL BASIC.NET
GYMNÁZIUM ŠTERNBERK Programování v jazyce VISUAL BASIC.NET JAROSLAV ZAVADIL 1. ČÁST ŠTERNBERK 2009 1 / 51 1. kapitola Úvod V následujících kapitolách se seznámíme s ukázkou programování ve vyšším programovacím
x 0; x = x (s kladným číslem nic nedělá)
.. Funkce absolutní hodnota Předpoklady: 08, 07 x - zničí znaménko čísla, všechna čísla změní na nezáporná Jak vyjádřit matematicky? Pomocí číselné osy: x je vzdálenost obrazu čísla na číselné ose od počátku.
Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu
StatSoft Typy souborů ve STATISTICA Tento článek poslouží jako přehled hlavních typů souborů v programu STATISTICA, ukáže Vám jejich možnosti a tím Vám dovolí využívat program efektivněji. Jistě jste již
2.7.6 Rovnice vyšších řádů
6 Rovnice vyšších řádů Předpoklady: 50, 05 Pedagogická poznámka: Pokud mám jenom trochu čas probírám látku této hodiny ve dvou vyučovacích hodinách V první probíráme separaci kořenů, v druhé pak snížení
Obsah. 1. KROK: Víte, za co utrácíte?... 2. 2. KROK? Máte odpovídající životní úroveň?... 4. 3. KROK: Využíváte finančního trhu?...
Obsah 1. KROK: Víte, za co utrácíte?... 2 2. KROK? Máte odpovídající životní úroveň?... 4 3. KROK: Využíváte finančního trhu?... 5 4. Nechejte si poradit od odborníka... 6 www.anekamickova.cz 1 Zdravím
Časová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
2.1.6 Jak vidíme. Předpoklady: Pomůcky: sady čoček, další čočky, zdroje rovnoběžných paprsků, svíčka
2.1.6 Jak vidíme Předpoklady: 020105 Pomůcky: sady čoček, další čočky, zdroje rovnoběžných paprsků, svíčka Pedagogická poznámka: V ideálním případě by se látka probírala dvě vyučovací hodiny v první by
Proč děláme práci, která nás nebaví?
Proč děláme práci, která nás nebaví? Podle průzkumů se věnuje až 70% lidí zaměstnání, které je nenaplňuje a někdy i doslova sere. V poslední době nad touto otázkou hodně přemýšlím. Sám jsem vlastně dlouho
Úžasný rok 2018 Váš plán pro úspěšný nový rok
Úžasný rok 2018 Váš plán pro úspěšný nový rok Na rok 2018 vyhlásila firma Pantone barvou roku odstín Ultra Violet (to je ten, který vidíte tady v nadpisech). A není to náhoda. Podle tohoto odstínu máme
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016
ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace
Hledání v textu algoritmem Boyer Moore
Zápočtová práce z Algoritmů a Datových Struktur II (NTIN061) Hledání v textu algoritmem Boyer Moore David Pěgřímek http://davpe.net Algoritmus Boyer Moore[1] slouží k vyhledání vzoru V v zadaném textu
Úvod do informatiky. Miroslav Kolařík
Úvod do informatiky přednáška první Miroslav Kolařík Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Co a k čemu je logika? 2 Výroky a logické spojky
Anotace. Pointery. Martin Pergel,
Anotace Pointery K čemu jsou dynamické proměnné? K mnoha algoritmům bychom potřebovali pole proměnlivé délky nebo aspoň jinou datovou strukturu proměnlivé délky. Jak implementovat frontu a zásobník? Použijeme
Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj
Anotace Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj Direktivy překladače Překladač kontroluje plno věcí, například: zda nekoukáme za konec
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??