Gepostet: |
nochmal Haskell | ||||||||||
Hallo, ich soll die Funktion factorize schreiben. Die Funktion soll die Primfaktoren einer Zahl in einem Arrray speichern. factorize :: Int -> [Int] Int i = 2 [Int] z = [] factorize a = while (i <= a) && (a /= 1) { if (a mod i == 0) {then zufuegen(z ,i) a = a div i } else i = i +1} zufuegen z i = i:z Das ist mein Anfang, ich brauch jedoch erstmal dringend ein tutorial glaube ich, bitte helft mir! Und wenn noch Zeit ist hab ich in meinen vorigen Thread auch noch ein Problem! Danke! |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
naja dein code ist nich ganz haskell konform ;) also du mußt zum beispiel nicht den typ vor die varialble schreiben... das wird alles in der ersten zeile geregelt... factorize:: Int -> [Int]->[Int] diese zeile sagt ein Int und ein leeres Intarray wird einegegeben und ein Intarray würd zurrück gegeben... auch liste genannt soweit so gut die nächste zeile muß mit dem Funktionsnamen beginnen und dann kommt ne varaible(ein Int) du kannst nicht schreiben das Int i gleich zwei dafür schreibt man eine extra funktion oder macht es so wie ich hier in dem beispiel mit where... statt while benutzt man rekursion...in haskell wird einfach alles mit rekursion gemacht...man kann sich natürlich auch ne while funktion schreiben aber das wäre übertrieben factorize a []= hmm ich muß los...schreib dir nachher noch den rest muß erstmal in die uni... gruß jacke...gut das es edit gibt |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
hab doch etwas anders gemacht... also factors bestimmt alle faktoren eine funktion factors :: Int -> [Int] factors n= [x | x <- [1..n], n `mod` x == 0] prime überprüft ob einen zahl eine primzahl ist prime :: Int -> Bool prime n = factors n == [1,n] und factorice ist deine eigentlich funktion factorice :: Int -> [Int] factorice n = [x | x<-factors n, prime x] aufruf mit factorice 15 gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hi, ich stehe gerade vor der selben Aufgabe. Ich habe mir gedacht das dieses Programm schick is aber leider mag WinHug das nicht :( ------------------------------------------------------ faktor :: Integer -> [Integer] getfaktor :: Integer -> [Integer] -> [Integer] faktor n = getfaktor n [x | x <- [2..n], n `mod` x == 0] getfaktor n (x:xs) | n == x = [x] | x == 1 = getfaktor n xs | otherwise = faktor (n div x) ++ [x] ------------------------------------------------------ ERROR file:.\aufgabe4.1.hs:8 - Type error in application *** Expression : n div x *** Term : n *** Type : Integer *** Does not match : a -> b -> c Wäre nett wenn jemand sagen könnte was da schief läuft und wie ichs behebe =) |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, der Fehler wird verursacht durch fehlende Hochkommas `` (backquotes oder wie die heißen). Die Berechnung faktor (n div x) muß umgeschrieben werden in faktor (n `div` x), wie oben beim mod. Sonst denkt der Compiler das n ist eine zweistellige Funktion, die die Parameter div und x übergeben bekommt. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
jaaa es funzt, danke =) Programm zur Primfaktorzerlegung: faktor :: Integer -> [Integer] getfaktor :: Integer -> [Integer] -> [Integer] faktor n = getfaktor n [x | x <- [2..n], n `mod` x == 0] getfaktor n (x:xs) | n == x = [x] | x == 1 = getfaktor n xs | otherwise = faktor (n `div` x) ++ [x] |
|||||||||||
Zum Seitenanfang | |||||||||||