Mercurial > 12ws.info2
changeset 34:f62e3ed2c90d
week 13 tutorial
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Wed, 30 Jan 2013 22:07:58 +0100 |
parents | 71b56f8b3069 |
children | 782323a762a2 |
files | exercises/src/Exercise_13.hs |
diffstat | 1 files changed, 73 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/exercises/src/Exercise_13.hs Wed Jan 23 23:22:07 2013 +0100 +++ b/exercises/src/Exercise_13.hs Wed Jan 30 22:07:58 2013 +0100 @@ -4,22 +4,89 @@ import System.Random (randomRIO) import Test.QuickCheck -{---------------------------------------------------------------------} -{- Aufgabe G13.1 -} + +helloWorld :: IO () +helloWorld = putStrLn "Hello, World!" + -nRandomR :: (Int, Int) -> Int -> IO [Int] -nRandomR lowhigh = undefined +greeter :: IO () +greeter = do + putStr "Tell me your name: " + name <- getLine + if name == "bye" + then putStrLn "Goodbye!" + else do + putStrLn $ "Ah, hi there, " ++ name ++ "!" + greeter +randomisator :: IO Int +randomisator = do + let bs = (1, 10) + a <- randomRIO bs + b <- randomRIO bs + c <- randomRIO bs + return $ a + b + c + {---------------------------------------------------------------------} {- Aufgabe G13.1 -} +nRandomR :: (Int, Int) -> Int -> IO [Int] +nRandomR lowhigh n = randHelp [] n + where + randHelp :: [Int] -> Int -> IO [Int] + randHelp xs 0 = return xs + randHelp xs n = do + x <- randomRIO lowhigh + if x `elem` xs + then randHelp xs n + else randHelp (x : xs) (n-1) + + +nRandomR' :: (Int, Int) -> Int -> IO [Int] +nRandomR' _ 0 = return [] +nRandomR' lowhigh n = do + i <- randomRIO lowhigh + is <- nRandomR' lowhigh (n-1) + if i `elem` is + then nRandomR' lowhigh n + else return (i:is) + + + +{---------------------------------------------------------------------} +{- Aufgabe G13.2 -} + getLineInt :: IO Int -getLineInt = undefined +getLineInt = do + putStr "Enter a Number: " + line <- getLine + if (not . null) line && all isDigit line + then return $ read line + else do + putStrLn "Not a nonnegative number!" + getLineInt + guessNum :: IO Int -guessNum = undefined +guessNum = do + rnd <- randomRIO (0, 100) + putStrLn "Guess my number!" + doGuessNum rnd 1 + where + doGuessNum :: Int -> Int -> IO Int + doGuessNum rnd n = do + x <- getLineInt + if x < rnd then do + putStrLn "Blubberlutsch." + doGuessNum rnd (n+1) + else if x > rnd then do + putStrLn "Brawarkl" + doGuessNum rnd (n+1) + else do + putStrLn "(...)" + return n