Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 21. 11. 2010 17:25 — Editoval PeterSheldon (21. 11. 2010 17:28)

PeterSheldon
Příspěvky: 128
Reputace:   
 

matice

Potřeboval bych ještě dnes menší help s touto úlohou, která má být realizována v C. Nejsem si vůbec jistý jak takovou úlohu řešit. Je to pro mě důležité. Pomůžete mi?


Úkolem je realizovat program, který bude hledat výskyty zadané matice v druhé zadané matici. Program vypíše, kolikrát se mu podařilo matici najít.

Vstupem programu jsou hledaná matice (co se hledá) a prohledávaná matice (kde se hledá). Pro hledanou matici je zadaná výška (počet řádek) a následuje jej tento počet řádek textu (co řádek textu, to jeden řádek matice). Obsahem řádku mohou být pouze znaky 0 až 9, každý znak reprezentuje jeden prvek matice.

Po zadání hledané matice je obdobně zadaná prohledávaná matice. Výška prohledávané matice není zadaná přímo, program musí poznat ukončení jejího zadávání podle signalizovaného konce souboru (feof (stdin)).

Výstupem programu je informace o počtu výskytů hledané matice v zadané prohledávané matici. Formát výstupu je zřejmý z ukázek níže.

Program musí být odolný proti zadání nesprávných vstupních dat. Pokud jsou zadaná neplatná vstupní data, program je musí detekovat, zobrazit chybové hlášení a ukončit se. Chyby musí být detekovány (a program musí reagovat) okamžitě jakmile lze chybu zjistit. Za chybu je považováno:

zadání nesmyslného počtu řádek hledané matice (záporné číslo),
zadání obsahu matice, který je tvořen jinými znaky než 0 až 9,
zadání řádku matice, který se svoji délkou liší od délky ostatních řádek matice.
Program je testován v omezeném prostředí. Je omezena jak doba běhu tak i velikost dostupné paměti. Podmínky jsou nastavené tak, aby správně implementované naivní řešení stihlo výpočet v časovém a paměťovém limitu. Pokud chcete získat body za bonusový test, musí být řešení optimalizováno -- nenačítejte celý obsah prohledávané matice do paměti.



Ukázka práce programu:
Zadejte pocet radek hledane matice:
3
Zadejte hledanou matici:
123
456
789
Matice, ktera bude prohledana:
1231231234
4564554567
7817897892
Matice nalezena 1 krat.



Zadejte pocet radek hledane matice:
3
Zadejte hledanou matici:
123
456
789
Matice, ktera bude prohledana:
1212331234
4545654123
7878997456
3456845789
Matice nalezena 2 krat.



Zadejte pocet radek hledane matice:
3
Zadejte hledanou matici:
121212
212121
121212
Matice, ktera bude prohledana:
12121212121212
21212121212121
12121212123212
21212121212121
12121212121212
Matice nalezena 8 krat.



Zadejte pocet radek hledane matice:
3
Zadejte hledanou matici:
11
11
11
Matice, ktera bude prohledana:
1234567890
1234567890
1234567890
1234567890
Matice nalezena 0 krat.



Zadejte pocet radek hledane matice:
3
Zadejte hledanou matici:
2a
Nespravny vstup.



Zadejte pocet radek hledane matice:
2
Zadejte hledanou matici:
123
4567
Nespravny vstup.



Zadejte pocet radek hledane matice:
2
Zadejte hledanou matici:
123
456
Matice, ktera bude prohledana:
12345
678
Nespravny vstup.

Offline

 

#2 21. 11. 2010 19:10

vojta01
Příspěvky: 63
Reputace:   
 

Re: matice

Ahoj, s ověřováním korektnosti vstupu ti neporadím, ale poradím ti s efektivním vyhledávání výskytu matice v druhé matici. Princip bude stejný jako u vykledávání nějakých řetězců v daném vstupním textu - modifikuji známý algoritmus KMP, popsaný např. zde:

http://ksp.mff.cuni.cz/tasks/18/cook5.html

pokud např. vyhledávám slovo "aaabbc", tak pokud se shodují první 4 znaky ("aaab") a 5. znak už ne, pak nemusím vyhledávat ve vstupním řetězci na dalším "okýnku", ale můžu okýnko posunout rovnou o 4 pozice doprava (vyhledávaný řetězec nezačíná kombinací znaků "aab", "ab", "b").

Modifikace tohoto vyhledávání pro tuto matice bude pracovat podobně: Pokud např. naleznu celý 1. žádek hledané matice, ale ve 2. řádku nastane nesrovnalost, pak jestliže se v 1. řádku neopakují číslice, pak nemusím okýnko posunout jen o 1 pozici doprava, ale rovnou o celou šiřku matice (o počet znaků na řádku hledané matice).

Pokud tomu vůbec nerozumíš, ozvi se a můžu ti to podrobněji vysvětlit.

Offline

 

#3 21. 11. 2010 19:31

PeterSheldon
Příspěvky: 128
Reputace:   
 

Re: matice

↑ vojta01:

v tomto celkem lítám, nejsem si jistý, jak to provádět konkrétně... stačilo by mi vidět jak to vyhledávat (jen proceduru) a blíže ten postup vysvětlit

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson