www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

innasa

Gepostet:
17.01.2005 11:38

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    
 
Jacke

Gepostet:
17.01.2005 14:01

   
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    
 
Jacke

Gepostet:
17.01.2005 20:43

   
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 15Smilie

gruß jacke
Zum Seitenanfang    
 
Humas

Gepostet:
13.05.2008 13:54

   
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    
 
Siracusa

Gepostet:
13.05.2008 14:19

   
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    
 
Humas

Gepostet:
13.05.2008 22:22

   
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