Search
Email: podhope1@fit.cvut.cz
Konzultace: po dohodě mailem
Stránky k původní verzi předmětu (lze nalézt užitečné materiály/příklady): http://service.felk.cvut.cz/courses/X36ALG
Ddocházka, bodování, kdo má jakou semestrální práci (formát .xlsx; aktuálnost dokumentu poznáte snadno podle toho, kdy je napsaná docházka):
dochazka.15.12.2010.zip
Pokud zjistíte, že jsem Vám nezapočítal domácí úkol, zkontrolujte si, že jste ode mne nedostali nějakou přípomínku. Pokud si myslíte, že je z Vaší strany vše ok a body přesto chybí, napište mi.
Vzorové řešení testu z 12. týdne
Již potvrzeno od přednášejícího: ze cvičení bude 50 bodů, zbylých 50 bodů pak u zkoušky.
Semestrální práce - 20 bodů (nutné minimum pro zápočet - 10 bodů)
Test u počítače - 20 bodů (nutné minimum pro zápočet - 10 bodů)
Aktivita, domácí úkoly - 10 bodů (nutné minimum pro zápočet - 5 bodů)
Zadejte číslo 1: 2 Zadejte číslo 2: 5 Zadejte číslo 3: 4 Minimum: 2, maximum: 5, průměr: 3,66. </code>
Napište program, který se bude ptát uživatele na celá čísla (int) a pro každé zadané číslo vypíše, zda-li jde o prvočíslo nebo ne. Při zadání 0 (nuly) program končí.
Definice prvočísla: číslo je prvočíslem tehdy, pokud je dělitelné pouze samo sebou a jedničkou. Nápověda: otestujte všechny čísla mezi 1 a zadaným číslem (bez nich), jestli je zbytek po celočíselném dělení nenulový (pokud bude nenulový, jde o prvočíslo; pokud Vám vyjde alespoň jednou nula, znamená to, že číslo je dělitelné a nejde o prvočíslo). Zbytek po celočíselném dělení zajišťuje operátor % (tedy například 4 % 3 == 1 a 6 % 2 == 0).
Ukázka výstupu:
Zadejte cislo (0 pro konec): 2 Cislo 2 JE prvocislo Zadejte cislo (0 pro konec): 3 Cislo 3 JE prvocislo Zadejte cislo (0 pro konec): 5 Cislo 5 JE prvocislo Zadejte cislo (0 pro konec): 6 Cislo 6 NENI prvocislo Zadejte cislo (0 pro konec): 9 Cislo 9 NENI prvocislo Zadejte cislo (0 pro konec): 11 Cislo 11 JE prvocislo Zadejte cislo (0 pro konec): 0 Program konci
Napište funkci, která zjistí, zda zadané číslo je celočíselnou druhou mocninou nějakého čísla (celého) - například 4 = 2*2 (4 tedy je), 9 = 3*3 (9 tedy je), 5 není (nelze rozepsat jakou součin X*X).
Dále napište funkci, která pro zadané hranice uzavřeného intervalu zjistí, kolik obsahuje druhých mocnin (tedy kolik čísel v intervalu splňuje výše uvedenou podmínku). Program na vstupu načte od uživatele dvě čísla a vypíše kolik je v zadaném intervalu celočíselných druhých mocnin (pokud tedy zadám například 9 a 12, tak výsledkem bude jedna, protože v tomto intervalu je pouze 3*3, nic dalšího).
V proceduře main bude pouze načtení hodnot (začátku a konce intervalu) od uživatele a vypsání výsledku funkce, která spočítá počet druhých mocnin.
Napište program, který zinicializuje pole čísel (int nebo double), náhodně nastavených od 0 do 20. Velikost pole zadává uživatel. Program nejprve zinicializované pole vypíše, pak ho seřadí vzestupně a pak vypíše seřazené. Kód bude logicky strukturován - bude tedy obsahovat funkce/procedury na vytvoření pole (rovnou s naplněním náhodnými čísly), seřazení prvků v poli a vypsání pole.
Pro náhodné číslo použijte funkci Math.random(), která vrátí náhodné číslo typu double mezi 0.0 a 1.0.
Pokud neznáte žádný algoritmus na setřídění prvků v poli, můžete použít například tento: V poli naleznete minimální prvek a prohodíte ho s prvním. Nyní máte setříděný jeden prvek. Pak naleznete minimum ve zbytku pole (tedy od druhé pozice dál) a prohodíte toto nalezené minimum s druhým prvkem. Nyní už máte hotové dva prvky. Takto postupujete, až budete mít seřazené celé pole. Jinými slovy: při každém kroku hledáte minimum, dáte ho na správnou pozici a pak už řešíte jen zbytek.
Popis třídícího algoritmu můžete nalézt také například na Wiki: anglická verze, česká verze
Doplnění: třídění napište sami, nepoužívejte knihovní funkci Arrays.sort nebo nějakou jinou.
Vytvořte třídu reprezentující komplexní číslo (reálná a imaginární část typu double), která bude obsahovat následující:
Program se uživatele zeptá na n (int) a intervaly, ve kterých má komplexní čísla vytvořit (půjde tedy o 4 hodnoty double, reprezentující minimální a maximální velikosti reálné a imaginární složky). Vytvoří se pole s n komplexními čísly zinicializovanými v těchto intervalech. Program tato čísla vypíše (udělejte samostatnou proceduru na výpis), pak je seřadí podle absolutního hodnoty sestupně (!) (samostatná procedura na seřazení) a znova je vypíše (voláme znovu proceduru na výpis). Při výpisu vypisujte jak komplexního číslo (jeho složky), tak i jeho absolutní hodnotu.
Rada: nezalekněte se delšího zadání, jde pouze o určitou kombinaci toho, co jsme dělali na cvičení a jaký byl minulý domácí úkol. Postupujte po jednotlivých krocích, program nebude ve výsledku o mnoho delší, než poslední úkol. V projektu budete mít dva soubory - posílejte mi zdrojové kódy jako dosud, jen je do emailu vložte za sebe, nějak si s tím poradím.
Ukázka výsledného výpisu programu (příklad):
Zadej pocet cisel: 5 Minimalni realna slozka: -3 Maximalni realna slozka: 4 Minimalni imaginarni slozka: -5 Maximalni imaginarni slozka: 5 Neserazena cisla: |0.4607010358547905-1.785884347440796| = 1.8443503861445945 |3.7042987939700875+0.1882570933123917| = 3.7090794394553854 |0.7737508685580314-2.044624792302161| = 2.186133790025433 |-2.047140609352005-3.5970866880996732| = 4.138818347809188 |0.6664080411314797+0.058721573585776454| = 0.6689902095614596 Serazena cisla: |-2.047140609352005-3.5970866880996732| = 4.138818347809188 |3.7042987939700875+0.1882570933123917| = 3.7090794394553854 |0.7737508685580314-2.044624792302161| = 2.186133790025433 |0.4607010358547905-1.785884347440796| = 1.8443503861445945 |0.6664080411314797+0.058721573585776454| = 0.6689902095614596
Napište program, který se zeptá uživatele na rozměry dvojrozměrného pole, naplní ho náhodnými čísly od 0 do 9 (včetně) a vypíše součet “černých” čísel. Černá čísla jsou myšlena tak, že pokud byste dvojrozměrné pole vybarvili jako šachovnici (střídají se bílá a černá pole, vlevo nahoře bude bílé), půjde o čísla na černých polích. Celý program bude pracovat na dva kroky. V první kroku se program zeptá na rozměry pole, pole se vytvoří, zobrazí a uloží do souboru. Ve druhém kroku se ze souboru načte (uživatel již nezadává nic), opět se zobrazí a vypíše se zmíněný součet.
Požaduji opět program strukturovaný do rozumných logických bloků - minimálně tedy bude procedura na výpis dvojrozměrného pole, funkce na zjištění součtu černých polí a každý krok bude mít samostatnou proceduru. V proceduře main tedy bude pouze dotaz na uživatele, zda-li se má provést první nebo druhý krok, a následně if/switch se zavoláním příslušné procedury.
Příklad - 1. krok:
Co se ma udelat? 1 pro vytvoreni, 2 pro nacteni: 1 Pocet radku: 3 Pocet sloupcu: 4 2 4 8 0 2 7 7 2 8 1 9 8
Příklad - 2. krok:
Co se ma udelat? 1 pro vytvoreni, 2 pro nacteni: 2 2 4 8 0 2 7 7 2 8 1 9 8 Soucet cernych poli je 22
Vysvětlení pro součet: 22 = 4 + 0 + 2 + 7 + 1 + 8 (když bych bral černá pole zleva doprava, shoru dolů).
Tento týden bude bez úkolu - doporučuji jej využít pro zapracování na semestrální práci. Příští cvičení bude čistě konzultační, takže Vám doporučuji si přinést Vaši práci, pracovat na ni a využít mé přítomnosti na řešení problémů. Stejně tak můžete využít tento týden a následující cvičení pro zopakování látky, která Vám nebyla jasná - zkuste si sami nějaký příklad; klidně mi jej můžete poslat, pokud si s ním nebudete vědět rady a já Vám pomohu.
Úterý 12:45 - 1, 2, 3, 5, 6, 9, 10, 11, 15, 16, 17.
Úterý 14:30 - 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17.
Úkolem je napsat program, který převede zadané číslo z celočíselného formátu na textový. Přičemž nový řetězec bude slovním zápisem zadaného čísla. Slovní zápis bude načten ze souboru a tak se určí cílový jazyk.
Napište program, který bude provádět běžné matematické operace(+, -, * a inverzi) s maticemi, jejichž velikost zadá uživatel, které půjdou načíst ze souboru.
Naprogramuje správu položek nesoucí několik informací(Kontakty - Jméno, Číslo, Adresa atd.), který bude umožňovat přidání, odebrání a vyhledávání podle položek.
Naprogramujte hru Člověče, nezlob se
Naprogramujte slovník pro překlad výrazů s možností zkoušení slovíček. Do programu půjde přidávat nové výrazy a aktuální slovník bude ukládán do souboru a po spuštění ze souboru načítán.
Napište program, který pro zadaný počet proměnných vypočte soustavu rovnic s číselnou pravou stranou.
Ze souboru načtěte souřadnice bodů v rovině. Uživatel zadá souřadnice a program vrátí souřadnice nejbližšího bodu.
Napište program, který zjistí 10 nejpoužívanější, nejméně používaná a nejdelší slova ve vstupním textu. Slova jsou oddělena bílými znaky(mezera, tabulátor, konec řádku).
Napište program, který pomocí substituce a transpozice zašifruje nebo rozšifruje vstupní text ze souboru. Velikost posunutí využité substituce a rozměry a přeházení sloupců zadává uživatel heslem.
Naprogramujte hru miny.
Naprogramujte hru pro 2 hráče podle pravidel Piškvorek.
Vstupem do programu bude řetězec s čísly, operátory +, -, * a / a závorkami ( a ). Program vypočte takto zadaný výraz a bude přitom respektovat prioritu operátorů, že * a / mají přednost před - a +. Závorky uzavírají podvýraz, který musí být spočten před dalším použitím.
Naprogramujte hru Dáma pro 2 hráče.
Naprogramujte generátor nových her Sudoku a rozhraní pro jejich hraní. Hru půjde uložit na disk a případně znovu vyvolat. Hra může nabízet i pomocníka při řešení.
Napišto program, který přečte ze vstupního souboru text zakódovaný v Morseově abecedě, převede jej do znakové podoby a výsledek zapíše do výstupního souboru.
Napište program, který pro zadanou částu a hodnoty bankovek načtených ze souboru najde způsob ja danou částku vyplatit. Pokud je více možností vybere tu, kde je více velkých bankovek. Výsledek zapíśe do souboru.
Napište hru Šibenice, kdy ze slovniku v souboru načtete slovo a hráč ho bude po písmenech hádat. Přineuhádnutí klesne počet bodů a hráč prohraje, když klesnou body pod 0. Modifikujte hru i pro dva hráče, kteří se budou v zadávání slov střídat, když akt. hráč prohraje získá body oponent. Takto se bude moci i rozšiřovat slovník programu.
Implementujte hru pro dva hráče Lodě. Hráči nesmí vědět, jak rozdělil lodě oponent.
Implementujte algoritmus pro nalezení nejkratší cesty grafem, který načtete ze souboru.
Vlastní návrh semestrální práce musím schválit. Měl by obsahovat práci se souborem a poly nebo jinou datovou strukturou. Vysledný kód by měl mít minimálně 250 řádků.
Na tomto místě máte ke stažení zabalené projekty ze cvičení ve stavu, v jakém byly na konci cvičení. Dávat je sem budu pouze na požádání (pokud je látka všem jasná, není nutné zahlcovat server).
utery3_1245.zip
utery3_1430.zip
utery4_1430.zip
utery5_1430.zip
utery6_1245.zip
utery6_1430.zip - Jednorozměrné pole
utery6_1430b.zip - Dvourozměrné pole
utery7_1430.zip
utery8_1430.zip
utery9_1430.zip
Jednoduché příklady na čtení/zápis do souboru lze nalézt na http://service.felk.cvut.cz/courses/Y36ALG/alg_cviceni/cvic11.html.