Advertisement
pabloducato

F# Lab2

Mar 25th, 2020
2,945
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 7.77 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.org
  2.  
  3. open System
  4.  
  5. (* type ulam = int * int (* ulamek jako para (a, b), gdzie b<>0 *) *)
  6. exception DzieleniePrzezZero
  7.  
  8. let ( ++ ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d + b*c, b*d)
  9. let ( -- ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d - b*c, b*d)
  10. let ( ** ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*c, b*d)
  11. let ( /./ ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a,b) ** (d, c)
  12. let ( == ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d = b*c)
  13.  
  14. let rec NWD = function
  15.     | (0, n) -> n
  16.     | (m, n) -> NWD(n % m, m) (* tylko liczby naturalne *)
  17.  
  18. let skroc (l,m) =
  19.     let znak = if l*m<0 then -1 else 1
  20.     let al = abs l
  21.     let am = abs m
  22.     let d = NWD(al,am)
  23.     in (znak * (al / d), am / d)
  24.  
  25.                             (* zamiana ulamka na string *)
  26. (* let naString (l, m) =
  27.     let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
  28.     let al = abs l (* wart.bezw. = liczba nat. *)
  29.     let am = abs m
  30.     let d = NWD(al, am)
  31.     in znak + (System.Convert.ToString(al / d))
  32.             + "/" + (System.Convert.ToString(am / d)) *)
  33.  
  34. let naString (l, m) =
  35.     let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
  36.     let al = abs l (* wart.bezw. = liczba nat. *)
  37.     let am = abs m
  38.     let czescCalk = al / am
  39.     let reszta = al % am
  40.     let al = reszta
  41.     let d = NWD(al, am)
  42.     in "Czesc calkowita: " + znak + (System.Convert.ToString(czescCalk)) + " " + "Czesc ulamkowa:  " + (System.Convert.ToString(al / d))
  43.             + "/" + (System.Convert.ToString(am / d))
  44.  
  45. type samochod = {marka : string; rocznik : int; pojemnosc : float}
  46.  
  47. let siena = { marka = "FIAT"; rocznik = 1997; pojemnosc = 1586.0}
  48. let maluch = { marka = "FIAT"; rocznik = 1987; pojemnosc = 648.0}
  49.  
  50. type ulamek = {licznik : int; mianownik : int}
  51.  
  52. type osoba = {imie : string; nazwisko : string; telefon : int}
  53.  
  54. type ksiazka = {tytul: string; nazwiskoAutora:string; rokWydania:int; mutable cena:int}
  55.  
  56. exception ERROR
  57.  
  58. let rec podzielnaOdDo(q:int,w:int,dzielnik:int) =
  59.         if(q>w) then raise ERROR
  60.         if(q%dzielnik=0) then q
  61.         else podzielnaOdDo(q+1, w, dzielnik);
  62.  
  63.  
  64. (* type ulam = int * int (* ulamek jako para (a, b), gdzie b<>0 *) *)
  65.     (* let mnozUlamek((licznik, mianownik), liczba:int) =
  66.         (licznik*liczba, mianownik)
  67.     let dzielUlamek((licznik, mianownik), liczba:int) =
  68.         (licznik, mianownik*liczba)
  69.     let pierwiastkujkUlamel(licznik, mianownik) =
  70.         (Math.Sqrt licznik, Math.Sqrt mianownik)
  71.     let odwrocUlamek(l, m) =
  72.         (m, l) *)
  73.  
  74.  
  75. [<EntryPoint>]
  76. let main argv =
  77.     let ( ++ ) ulamekPierwszy ulamekDrugi =
  78.         if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
  79.         else { licznik = ulamekPierwszy.licznik * ulamekDrugi.mianownik + ulamekPierwszy.mianownik * ulamekDrugi.licznik;
  80.                mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
  81.  
  82.     let ( -- ) ulamekPierwszy ulamekDrugi =
  83.         if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
  84.         else { licznik = ulamekPierwszy.licznik * ulamekDrugi.mianownik - ulamekPierwszy.mianownik * ulamekDrugi.licznik;
  85.                 mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
  86.  
  87.     let ( ** ) ulamekPierwszy ulamekDrugi =
  88.         if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
  89.         else { licznik = ulamekPierwszy.licznik * ulamekDrugi.licznik;
  90.                 mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
  91.  
  92.     let ( /./ ) ulamekPierwszy ulamekDrugi =
  93.         if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
  94.         else ulamekPierwszy ** ulamekDrugi ;
  95.  
  96.     let ( == ) ulamekPierwszy ulamekDrugi =
  97.         if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
  98.         else ulamekPierwszy.licznik * ulamekDrugi.mianownik = ulamekPierwszy.mianownik * ulamekDrugi.licznik;
  99.    
  100.     let mnozUlamek(licznik, mianownik, liczba:int) =
  101.         (licznik*liczba, mianownik)
  102.     let dzielUlamek(licznik, mianownik, liczba:int) =
  103.         (licznik, mianownik*liczba)
  104.     let pierwiastkujkUlamek(licznik, mianownik) =
  105.         (Math.Sqrt licznik, Math.Sqrt mianownik)
  106.     let odwrocUlamek(licznik:int, mianownik:int) =
  107.         (mianownik, licznik)
  108.  
  109.     (* let osoba1:osoba = {imie = "Paweł"; nazwisko = "Kocan"; telefon=572750330}
  110.     let osoba2:osoba = {imie = "Zbigniew"; nazwisko = "Kocan"; telefon=0700880188}
  111.     let sprawdzNazwisko(osoba1:osoba,osoba2:osoba)= osoba1.nazwisko=osoba2.nazwisko
  112.     let wynikPorownania = sprawdzNazwisko(osoba1,osoba2)
  113.     printfn "%A\n" wynikPorownania *)
  114.    
  115.    
  116.     (* printfn "%A\n" (ulam(2, 0) ++ ulam(2,3))
  117.     printfn "%A\n" (ulam(2, 3) -- ulam(2,3))
  118.     printfn "%A\n" (ulam(2, 3) ** ulam(2,3))
  119.     printfn "%A\n" (ulam(2, 3) /./ ulam(2,3))
  120.     printfn "%A\n" (1./2. + 2./3. * 3./4.)
  121.     printfn "%A\n" (ulam(1, 2) ++ ulam(2, 3) ** ulam(3, 4))
  122.     printfn "%A\n" (naString(1, 2))
  123.     printfn "%A\n" (naString(-1, -2))
  124.     printfn "%A\n" (naString(1, -2))
  125.     printfn "%A\n" (naString(-1, 2))
  126.     printfn "%A\n" (NWD(0, 5))
  127.     printfn "%A\n" (NWD(10, 5))
  128.     printfn "%A\n" (NWD(2, 3))
  129.     printfn "%A\n" (NWD(12, 4))
  130.     printfn "%A\n" (maluch)
  131.     printfn "%A\n" (siena) *)
  132.     (* let ulamekPierwszy = {licznik=2; mianownik=1};
  133.     let ulamekDrugi = {licznik=2; mianownik=1};
  134.     let ulamekTrzeci= {licznik=3; mianownik=1};
  135.     let ulamekCzwarty = {licznik=3; mianownik=1};
  136.     let wynik1:ulamek = ulamekPierwszy ++ ulamekDrugi;
  137.     let wynik2:ulamek = ulamekPierwszy -- ulamekDrugi;
  138.     let wynik3:ulamek = ulamekPierwszy ** ulamekDrugi;
  139.     let wynik4:ulamek = ulamekTrzeci /./ ulamekCzwarty;
  140.     let wynik5 = ulamekTrzeci == ulamekCzwarty;
  141.     printfn "%A\n" (ulamekPierwszy)
  142.     printfn "%A\n" (ulamekDrugi)
  143.     printfn "%A\n" (wynik1)
  144.     printfn "%A\n" (wynik2)
  145.     printfn "%A\n" (wynik3)
  146.     printfn "%A\n" (wynik4)
  147.     printfn "%A\n" (wynik5) *)
  148.  
  149.     (* let ( ++ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*d + b*c, b*d);
  150.     let ( -- ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*d - b*c, b*d);
  151.     let ( ** ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*c, b*d);
  152.     let ( /./ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a,b) ** (d,c);
  153.     let ( == ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a*d = b*c);
  154.     let wynik6 =  (2, 4) == (2, 4); *)
  155.  
  156.     (* printfn "%A\n" (naString(1, 2))
  157.     printfn "%A\n" (naString(-2, -2))
  158.     printfn "%A\n" (naString(3, -2))
  159.     printfn "%A\n" (naString(-4, 2)) *)
  160.  
  161.     (* printfn "%A\n" (podzielnaOdDo(10,20,2)); *)
  162.  
  163.     (* printfn "%A\n" (mnozUlamek(4, 2, 2))
  164.     printfn "%A\n" (dzielUlamek(4, 2, 2))
  165.     printfn "%A\n" (pierwiastkujkUlamek(4.0, 1.0))
  166.     printfn "%A\n" (odwrocUlamek(4, 2)) *)
  167.  
  168.     (* let osoba1:osoba = {imie = "Paweł"; nazwisko = "Kocan"; telefon=572750330}
  169.     let osoba2:osoba = {imie = "Zbigniew"; nazwisko = "Kocan"; telefon=514061047}
  170.     let sprawdzNazwisko(osoba1:osoba,osoba2:osoba)= osoba1.nazwisko=osoba2.nazwisko
  171.     let wynikPorownania = sprawdzNazwisko(osoba1,osoba2)
  172.     printfn "%A\n" wynikPorownania *)
  173.  
  174.     let ksiazka1 = {tytul = "Potop"; nazwiskoAutora="Sienkiewicz"; rokWydania=1886; cena=60};
  175.     let zmienCene(ksiazka1:ksiazka, cena:int) =
  176.         if cena < ksiazka1.cena then ksiazka1.cena <- cena;
  177.     let z = zmienCene (ksiazka1, 70);
  178.     printfn "%A\n" ksiazka1.cena
  179.     System.Console.ReadKey() |> ignore
  180.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement