Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.net
- // See the 'F# Tutorial' project for more help.
- open System
- open System.Text.RegularExpressions
- let rec nwd (l:int, m:int) =
- printfn "%d %d" l m
- match l,m with
- | (0, m) -> m
- | (l, m) -> nwd(l%m ,m)
- let StringToList(s: String) =
- let array = s.ToCharArray() |> List.ofArray
- array
- let rec createMianownikExec(cz_ok: List<char>, cz_nok: List<char>, r: String) =
- match cz_ok, cz_nok with
- | [],[] -> String.Concat(r,"")
- | [],h::t -> createMianownikExec(cz_ok, t, String.Concat(r,"0"))
- | h::t,_ -> createMianownikExec(t, cz_nok, String.Concat(r,"9"))
- let createMianownik(cz_ok: String, cz_nok: String) =
- createMianownikExec(StringToList(cz_ok), StringToList(cz_nok),"")
- let regExp(input, pattern) =
- let r = new Regex(pattern)
- r.Matches(input)
- let readGroups(input, pattern) =
- ((new Regex(pattern)).Match(input)).Groups
- let if_null(input : String, default_value) =
- match input with
- | "" -> default_value
- | _ -> int(input)
- let fract(n: System.String) =
- let pattern = "0[,|.]([0-9]+)?(\(([0-9]+)\))"
- //printfn "%A" (readGroups(n, pattern))
- if (regExp(n, pattern)).Count > 0 then
- let groups = (readGroups(n, pattern))
- let cz_ok = groups.Item(3).ToString()
- let cz_nok = groups.Item(1).ToString()
- let cz_wsp = String.Concat(cz_nok, cz_ok)
- let l1 = int(cz_wsp)
- let l2 = if_null(cz_nok, 0)
- if (l1 = 0 && l2 = 0) then
- "ERR"
- else
- let licz = l1 - l2
- let mian = int(createMianownik(cz_ok, cz_nok))
- let d = nwd(licz, mian)
- printfn "%d/%d" (licz/d) (mian/d)
- n
- else
- "ERR"
- [<EntryPoint>]
- let main argv =
- //let num = System.Console.ReadLine()
- printfn "%A" (fract("0.78(5)"))
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement