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
Prosim o radu, jak to naprogramovat, v haskellu mame ted druhou prednasku a nejak to moc nepobiram, dekuji
tridy :: (a -> a -> Bool) -> [a] -> [[a]]
tridy ekv seznam vrátí třídy rozkladu na množině zadané seznamem podle relace ekvivalence zadané binární funkcí ekv.
> tridy (\x y -> x `mod` 3 == y `mod` 3) [1..10]
[[1,4,7,10], [2,5,8], [3,6,9]]
Offline

patri :: a->(a->a->Bool)->[a]->Bool patri x ekv [] = True patri x ekv (y:_) = ekv x y zarad :: a->(a->a->Bool)->[[a]]->[[a]]->[[a]] zarad x ekv [] stare = [x]:stare zarad x ekv (t:nove) stare = if (patri x ekv t) then ((x:t):nove) ++ stare else (zarad x ekv nove (t:stare)) tridy :: (a->a->Bool)->[a]->[[a]] tridy ekv [] = [[]] tridy ekv (x:seznam) = zarad x ekv (tridy ekv seznam) []
patri -- dostane prvek, ekvivalenci a třídu a rozhodne, zda prvek do třídy patří.
zarad -- dostane prvek, ekvivalenci, nezkontrolované třídy a zkontrolované třídy. Podívá se, jestli prvek patří do první nezkontrolované třídy. Pokud ano, přidá ho do ní a vrátí seznam všech tříd. Pokud ne, přidá ji mezi zkontrolované a jde dál.
Než se budeš ptát ohledně případných nejasností, koukni do materiálů zde: http://fi.muni.cz/~libor/vyuka/IB015/
Offline
Sice ma uz Kondr predbehol ale postnem aj svoje riesenie:
tridy :: (a -> a -> Bool) -> [a] -> [[a]]
tridy f [] = []
tridy f (x:xs) = (vrat f x (x:xs)):(tridy f (zmaz f x (x:xs)))
vrat :: (a -> a -> Bool) -> a -> [a] -> [a]
vrat f p [] = []
vrat f p (x:xs) = if ( f p x ) then
x:(vrat f p xs)
else
vrat f p xs
zmaz :: (a -> a -> Bool) -> a -> [a] -> [a]
zmaz f p [] = []
zmaz f p (x:xs) = if (f p x) then
zmaz f p xs
else
x:(zmaz f p xs)Offline