Soutěž dětí a mládeže v programování – 16. ročník krajské kolo 2001/2002
Napište program, který nalezne všechna dokonalá čísla v intervalu 2 až 1000000. Dokonalé číslo je takové číslo, které je součtem všech svých dělitelů vyjma sama sebe. Tedy například 6 je dokonalé číslo, protože 1+2+3=6, podobně 1+2+4+7+14 = 28.
funkčnost | 4 body | běží a vypisuje správná čísla |
2 body | zobrazuje průběh výpočtu | |
efektivita | 2 body | dělitelnost čísla N netestuje až do N ale jen do odmocniny z N |
1 bod | Všechna dokonalá čísla mají tvar (2n-1)(2n-1) a to pro taková n, pro něž je (2n-1) prvočíslo. Toto je však obtížné dokázat a tak předpokládáme, že soutěžící budou problém řešit postupným hledáním dělitelů. Pokud někdo využije výše zmíněné vztahy, má nárok na bod navíc a všeobecnou úctu. Páté dokonalé číslo je 33550336 | |
dokumentace | 0,5 bodu | komentáře nebo popis činnosti |
0,5 bodu | přehledný zdrojový text |
CSV soubor je soubor obsahující tabulku. Co řádek tabulky, to řádek souboru. Jednotlivé položky na řádku jsou odděleny čárkami. Položky obsahující čárku musí být uzavřeny v uvozovkách, ostatní položky v uvozovkách být mohou, ale nemusí. Samotné položky uvozovky obsahovat nemohou. Jako oddělovač desetinných míst se používá tečka. Prázdné položky chápejte jako číselné s hodnotou 0. Pokud se ve sloupci alespoň jednou objeví nečíselná hodnota, celý sloupec je nečíselný.
Příklad souboru:
"Lopaty","5",125.50 "Krumpáče",10,"4340" "Kladiva, násady",30,900
Vaším úkolem je navrhnout program, který sečte číselné sloupečky zadaného souboru. Tedy pro soubor z tohoto zadání program vypíše:
Sloupec 1: není číslo Sloupec 2: 45 Sloupec 3: 5365.5
Předpokládejte maximální délku řádku 1024 znaků a nejvýše 100 položek na řádku.
funkčnost | 1 bod | zadání souboru, kontrola existence souboru |
2 body | výpočet a zobrazení výsledků, soubory bez uvozovek | |
1 bod | výpočet a zobrazení výsledků, soubory s uvozovkami | |
1 bod | zpracuje i záporná a desetinná čísla | |
1 bod | rozpozná chyby a singulární případy v datech (neuzavřené uvozovky, apod. – soubory problem1.csv, prazdny.csv, sloupec.csv, problem2.csv) | |
efektivita | 1 bod | pouze jeden průchod čtení souboru |
2 body | jednoprůchodová analýza řádku souboru | |
dokumentace | 0,5 bodu | komentáře nebo popis činnosti |
0,25 bodu | přehledný zdrojový text | |
0,25 bodu | výstižné názvy proměnných |
Napište program, který vytvoří hrací plochu 20×20 pro hru piškvorky a umožní je hrát dvěma hráčům. Počítač bude kontrolovat průběh hry a sledovat zda nějaký hráč nevyhrál.
funkčnost | 1 bod | vykreslení hrací plochy |
2 body | možnost přikládat piškvorky, střídání hráčů | |
0,5 bodu | test vítězství – vodorovně | |
0,5 bodu | test vítězství – svisle | |
1 bod | test vítězství – na hlavní diagonále | |
1 bod | test vítězství – na vedlejší diagonále | |
efektivita | 3 body | při testování vítězství se kontroluje jen okolí právě položené piškvorky, ne celá hrací plocha |
dokumentace | 0,5 bodu | komentáře nebo popis činnosti |
0,25 bodu | přehledný zdrojový text | |
0,25 bodu | výstižné názvy proměnných |
Napište program, který vykreslí graf funkce k1*tan(k2*x). Konstanty k1, k2 a interval hodnot proměnné x bude zadám z klávesnice. Graf musí optimálně vyplnit plochu.
funkčnost | 1 bod | zadání hodnot a kontrola jejich správnosti |
1 bod | správné vykreslení os | |
1 bod | vykreslení grafu funkce | |
3 body | správné vyplnění plochy grafu | |
efektivita | 1 bod | tabelační krok pro výpočet hodnot funkce se volí tak, aby se nepočítaly hodnoty navíc |
1 bod | při hledání minima a maxima se vypočtené hodnoty uloží do pole, z kterého se následně vykreslí graf | |
1 bod | pomocné konstanty se vypočtou před cyklem počítajícím hodnoty funkce | |
dokumentace | 0,5 bodu | komentáře nebo popis činnosti |
0,25 bodu | přehledný zdrojový text | |
0,25 bodu | výstižné názvy proměnných |
Napište program na motivy karetní hry "Bitva". Program by měl simulovat následující funkce:
Na začátku hry se zadají následující údaje: počet karet (32 nebo 64), počet hráčů (2–4), počet karet na začátku hry (5–10).
Míchání karet probíhá po dobu stisku klávesy mezerník. Míchání probíhá tak, že se balíček karet rozdělí na dvě části dle náhodného čísla z intervalu <1;počet karet>, a tento balíček se přeloží. Vše se opakuje dokud hráč neuvolní klávesu mezerník.
Každý hráč dostane daný počet karet (balíčky by měly být vizuálně zobrazené na monitoru).
Vykládání se děje buď v režimu krokování na klávesu Enter nebo automaticky po 2 sekundách. Vizuálně se zobrazí karty všech hráčů a určí se vítěz, v případě rovnosti nejvyšších karet v daném kole se vyloží další kolo (vykládají jen ti hráči, kteří předtím vyložili karty se stejnou hodnotou). Hráč, který již nemá kartu končí.
Konec hry nastane v okamžiku, kdy zbude pouze jediný hráč.
Popis hry. Na začátku hry má každý hráč daný počet karet. Jedno kolo hry probíhá tak, že všichni hráči vezmou horní kartu ze svého balíčku a vyloží ji. Karty se musí brát pouze shora a jejich pořadí je dáno tím, jak karty hráč dostal. Z vyložených karet se vybere vítěz podle nejvyšší hodnoty vyložené karty (pořadí karet je 7, 8, 9, 10, spodek, svršek, král, eso). V případě rovnosti dvou karet vykládají odpovídající hráči znovu po jedné kartě. Vítězí ten, kdo má nejvyšší kartu. Vítěz získá všechny vyložené karty a ty se přidají dospod jeho balíčku karet v libovolném pořadí. Pokud hráč již nemá kartu na vykládání, končí.
funkčnost | 1 bod | zadání hodnot a kontrola jejich správnosti (dodržení intervalu, číselné hodnoty) |
1 bod | funkční míchání karet | |
1 bod | míchání se ukončí po uvolnění mezerníku | |
1 bod | rozdání karet | |
1 bod | automatický a ruční režim vykládání | |
1 bod | správné určení vítěze kola a předání karet | |
efektivita | 3 body | grafické ztvárnění programu |
dokumentace | 0,5 bodu | komentáře nebo popis činnosti |
0,25 bodu | přehledný zdrojový text | |
0,25 bodu | výstižné názvy proměnných |