Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.org
- open System
- (* type ulam = int * int (* ulamek jako para (a, b), gdzie b<>0 *) *)
- exception DzieleniePrzezZero
- let ( ++ ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d + b*c, b*d)
- let ( -- ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d - b*c, b*d)
- let ( ** ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*c, b*d)
- let ( /./ ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a,b) ** (d, c)
- let ( == ) (a, b) (c, d) = if b = 0 || d = 0 then raise DzieleniePrzezZero else (a*d = b*c)
- let rec NWD = function
- | (0, n) -> n
- | (m, n) -> NWD(n % m, m) (* tylko liczby naturalne *)
- let skroc (l,m) =
- let znak = if l*m<0 then -1 else 1
- let al = abs l
- let am = abs m
- let d = NWD(al,am)
- in (znak * (al / d), am / d)
- (* zamiana ulamka na string *)
- (* let naString (l, m) =
- let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
- let al = abs l (* wart.bezw. = liczba nat. *)
- let am = abs m
- let d = NWD(al, am)
- in znak + (System.Convert.ToString(al / d))
- + "/" + (System.Convert.ToString(am / d)) *)
- let naString (l, m) =
- let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
- let al = abs l (* wart.bezw. = liczba nat. *)
- let am = abs m
- let czescCalk = al / am
- let reszta = al % am
- let al = reszta
- let d = NWD(al, am)
- in "Czesc calkowita: " + znak + (System.Convert.ToString(czescCalk)) + " " + "Czesc ulamkowa: " + (System.Convert.ToString(al / d))
- + "/" + (System.Convert.ToString(am / d))
- type samochod = {marka : string; rocznik : int; pojemnosc : float}
- let siena = { marka = "FIAT"; rocznik = 1997; pojemnosc = 1586.0}
- let maluch = { marka = "FIAT"; rocznik = 1987; pojemnosc = 648.0}
- type ulamek = {licznik : int; mianownik : int}
- type osoba = {imie : string; nazwisko : string; telefon : int}
- type ksiazka = {tytul: string; nazwiskoAutora:string; rokWydania:int; mutable cena:int}
- exception ERROR
- let rec podzielnaOdDo(q:int,w:int,dzielnik:int) =
- if(q>w) then raise ERROR
- if(q%dzielnik=0) then q
- else podzielnaOdDo(q+1, w, dzielnik);
- (* type ulam = int * int (* ulamek jako para (a, b), gdzie b<>0 *) *)
- (* let mnozUlamek((licznik, mianownik), liczba:int) =
- (licznik*liczba, mianownik)
- let dzielUlamek((licznik, mianownik), liczba:int) =
- (licznik, mianownik*liczba)
- let pierwiastkujkUlamel(licznik, mianownik) =
- (Math.Sqrt licznik, Math.Sqrt mianownik)
- let odwrocUlamek(l, m) =
- (m, l) *)
- [<EntryPoint>]
- let main argv =
- let ( ++ ) ulamekPierwszy ulamekDrugi =
- if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
- else { licznik = ulamekPierwszy.licznik * ulamekDrugi.mianownik + ulamekPierwszy.mianownik * ulamekDrugi.licznik;
- mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
- let ( -- ) ulamekPierwszy ulamekDrugi =
- if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
- else { licznik = ulamekPierwszy.licznik * ulamekDrugi.mianownik - ulamekPierwszy.mianownik * ulamekDrugi.licznik;
- mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
- let ( ** ) ulamekPierwszy ulamekDrugi =
- if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
- else { licznik = ulamekPierwszy.licznik * ulamekDrugi.licznik;
- mianownik=ulamekPierwszy.mianownik * ulamekDrugi.mianownik };
- let ( /./ ) ulamekPierwszy ulamekDrugi =
- if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
- else ulamekPierwszy ** ulamekDrugi ;
- let ( == ) ulamekPierwszy ulamekDrugi =
- if ulamekPierwszy.mianownik = 0 || ulamekDrugi.mianownik = 0 then raise DzieleniePrzezZero
- else ulamekPierwszy.licznik * ulamekDrugi.mianownik = ulamekPierwszy.mianownik * ulamekDrugi.licznik;
- let mnozUlamek(licznik, mianownik, liczba:int) =
- (licznik*liczba, mianownik)
- let dzielUlamek(licznik, mianownik, liczba:int) =
- (licznik, mianownik*liczba)
- let pierwiastkujkUlamek(licznik, mianownik) =
- (Math.Sqrt licznik, Math.Sqrt mianownik)
- let odwrocUlamek(licznik:int, mianownik:int) =
- (mianownik, licznik)
- (* let osoba1:osoba = {imie = "Paweł"; nazwisko = "Kocan"; telefon=572750330}
- let osoba2:osoba = {imie = "Zbigniew"; nazwisko = "Kocan"; telefon=0700880188}
- let sprawdzNazwisko(osoba1:osoba,osoba2:osoba)= osoba1.nazwisko=osoba2.nazwisko
- let wynikPorownania = sprawdzNazwisko(osoba1,osoba2)
- printfn "%A\n" wynikPorownania *)
- (* printfn "%A\n" (ulam(2, 0) ++ ulam(2,3))
- printfn "%A\n" (ulam(2, 3) -- ulam(2,3))
- printfn "%A\n" (ulam(2, 3) ** ulam(2,3))
- printfn "%A\n" (ulam(2, 3) /./ ulam(2,3))
- printfn "%A\n" (1./2. + 2./3. * 3./4.)
- printfn "%A\n" (ulam(1, 2) ++ ulam(2, 3) ** ulam(3, 4))
- printfn "%A\n" (naString(1, 2))
- printfn "%A\n" (naString(-1, -2))
- printfn "%A\n" (naString(1, -2))
- printfn "%A\n" (naString(-1, 2))
- printfn "%A\n" (NWD(0, 5))
- printfn "%A\n" (NWD(10, 5))
- printfn "%A\n" (NWD(2, 3))
- printfn "%A\n" (NWD(12, 4))
- printfn "%A\n" (maluch)
- printfn "%A\n" (siena) *)
- (* let ulamekPierwszy = {licznik=2; mianownik=1};
- let ulamekDrugi = {licznik=2; mianownik=1};
- let ulamekTrzeci= {licznik=3; mianownik=1};
- let ulamekCzwarty = {licznik=3; mianownik=1};
- let wynik1:ulamek = ulamekPierwszy ++ ulamekDrugi;
- let wynik2:ulamek = ulamekPierwszy -- ulamekDrugi;
- let wynik3:ulamek = ulamekPierwszy ** ulamekDrugi;
- let wynik4:ulamek = ulamekTrzeci /./ ulamekCzwarty;
- let wynik5 = ulamekTrzeci == ulamekCzwarty;
- printfn "%A\n" (ulamekPierwszy)
- printfn "%A\n" (ulamekDrugi)
- printfn "%A\n" (wynik1)
- printfn "%A\n" (wynik2)
- printfn "%A\n" (wynik3)
- printfn "%A\n" (wynik4)
- printfn "%A\n" (wynik5) *)
- (* let ( ++ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*d + b*c, b*d);
- let ( -- ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*d - b*c, b*d);
- let ( ** ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a*c, b*d);
- let ( /./ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else skroc(a,b) ** (d,c);
- let ( == ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a*d = b*c);
- let wynik6 = (2, 4) == (2, 4); *)
- (* printfn "%A\n" (naString(1, 2))
- printfn "%A\n" (naString(-2, -2))
- printfn "%A\n" (naString(3, -2))
- printfn "%A\n" (naString(-4, 2)) *)
- (* printfn "%A\n" (podzielnaOdDo(10,20,2)); *)
- (* printfn "%A\n" (mnozUlamek(4, 2, 2))
- printfn "%A\n" (dzielUlamek(4, 2, 2))
- printfn "%A\n" (pierwiastkujkUlamek(4.0, 1.0))
- printfn "%A\n" (odwrocUlamek(4, 2)) *)
- (* let osoba1:osoba = {imie = "Paweł"; nazwisko = "Kocan"; telefon=572750330}
- let osoba2:osoba = {imie = "Zbigniew"; nazwisko = "Kocan"; telefon=514061047}
- let sprawdzNazwisko(osoba1:osoba,osoba2:osoba)= osoba1.nazwisko=osoba2.nazwisko
- let wynikPorownania = sprawdzNazwisko(osoba1,osoba2)
- printfn "%A\n" wynikPorownania *)
- let ksiazka1 = {tytul = "Potop"; nazwiskoAutora="Sienkiewicz"; rokWydania=1886; cena=60};
- let zmienCene(ksiazka1:ksiazka, cena:int) =
- if cena < ksiazka1.cena then ksiazka1.cena <- cena;
- let z = zmienCene (ksiazka1, 70);
- printfn "%A\n" ksiazka1.cena
- System.Console.ReadKey() |> ignore
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement