Difference between revisions of "Cum transform un numar intreg intr-un numar real ?"
Line 1: | Line 1: | ||
+ | [[Category:Ro]] |
||
Ca un exercitiu, puteti scrie si dumneavoastra o functie care sa transforme un intreg intr-un real sau invers dar aceste functii sunt deja definite: |
Ca un exercitiu, puteti scrie si dumneavoastra o functie care sa transforme un intreg intr-un real sau invers dar aceste functii sunt deja definite: |
||
Line 22: | Line 23: | ||
Nu pot imparti direct un real la un intreg, limbajul fiind puternic tipizat. |
Nu pot imparti direct un real la un intreg, limbajul fiind puternic tipizat. |
||
+ | <haskell> |
||
Prelude> (10.2::Float)/(2::Integer) |
Prelude> (10.2::Float)/(2::Integer) |
||
ERROR - Type error in application |
ERROR - Type error in application |
||
Line 35: | Line 37: | ||
*** Type : Float |
*** Type : Float |
||
*** Does not match : Int |
*** Does not match : Int |
||
+ | </haskell> |
||
+ | |||
'''Dar pot converti intregul la real si face impartirea pe urma.''' |
'''Dar pot converti intregul la real si face impartirea pe urma.''' |
||
+ | <haskell> |
||
Prelude> (10.2::Float)/fromInt(2::Int) |
Prelude> (10.2::Float)/fromInt(2::Int) |
||
− | + | 5.1 |
|
+ | </haskell> |
||
+ | |||
'''Puteti folosi in loc de fromInt si pe fromIntegral, cel putin in anumite circumstante.''' |
'''Puteti folosi in loc de fromInt si pe fromIntegral, cel putin in anumite circumstante.''' |
||
+ | <haskell> |
||
Prelude> (10.2::Float)/fromIntegral(2::Int) |
Prelude> (10.2::Float)/fromIntegral(2::Int) |
||
− | + | 5.1 |
|
− | + | Prelude> |
|
+ | </haskell> |
||
Observati ca sunt definite putin diferit, bazandu-se pe apartenenta argumentelor la alte clase de tipuri! Primul primeste doar argument de tip Int - intregi scurti. Al doilea primeste argument de orice tip din clasa Integral. |
Observati ca sunt definite putin diferit, bazandu-se pe apartenenta argumentelor la alte clase de tipuri! Primul primeste doar argument de tip Int - intregi scurti. Al doilea primeste argument de orice tip din clasa Integral. |
||
Line 66: | Line 75: | ||
+ | ---- |
||
⚫ | |||
+ | Pagina indexata la indexul [[Category:Ro]] [http://www.haskell.org/haskellwiki/Category:Ro Categories:Ro] |
||
+ | ---- |
||
⚫ | |||
+ | [http://www.haskell.org/haskellwiki/Intrebarile_incepatorului <'''-''' Inapoi la Intrebarile incepatorului Ro/Haskell. ] |
Revision as of 09:30, 23 January 2008
Ca un exercitiu, puteti scrie si dumneavoastra o functie care sa transforme un intreg intr-un real sau invers dar aceste functii sunt deja definite:
Incercati sa folositi:
fromInt :: Int -> Float -- transforma un Int intr-un Float .
ceiling :: Float -> Int -- rotunjeste la intregul imediat superior
floor :: Float -> Int -- rotunjeste la intregul imediat inferior
round :: Float -> Int -- rotunjeste la intregul cel mai apropiat
fromIntegral :: (Integral a, Num b) => a -> b -- transforma ceva de un tip de clasa Integral in ceea ce va trebuie.
Urmariti exemplele urmatoare, unde cu :: am fortat ca un numar sa apartina unui anumit tip. (Seamana cu cast-urile din C)
Nu pot imparti direct un real la un intreg, limbajul fiind puternic tipizat.
Prelude> (10.2::Float)/(2::Integer)
ERROR - Type error in application
*** Expression : 10.2 / 2
*** Term : 10.2
*** Type : Float
*** Does not match : Integer
Prelude> (10.2::Float)/(2::Int)
ERROR - Type error in application
*** Expression : 10.2 / 2
*** Term : 10.2
*** Type : Float
*** Does not match : Int
Dar pot converti intregul la real si face impartirea pe urma.
Prelude> (10.2::Float)/fromInt(2::Int)
5.1
Puteti folosi in loc de fromInt si pe fromIntegral, cel putin in anumite circumstante.
Prelude> (10.2::Float)/fromIntegral(2::Int)
5.1
Prelude>
Observati ca sunt definite putin diferit, bazandu-se pe apartenenta argumentelor la alte clase de tipuri! Primul primeste doar argument de tip Int - intregi scurti. Al doilea primeste argument de orice tip din clasa Integral.
Prelude> :t fromInt
fromInt :: Num a => Int -> a
Prelude> :t fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
Exercitiu: Definiti un operator, sa-i zicem /// pentru impartirea unui real la un intreg. Ce prioritete trebuie sa aiba? Cum va asocia ?
Indicatie: Prioritate 7 ca si impartirea si inmultirea. Operator infixat - adica plasat intre operanzi. Asociativitate la stanga deci se declara:
infixl 7
...inainte de a scrie functia care-i exprima comportarea. Numele sau va fi, de exemplu: (///)
Pagina indexata la indexul Categories:Ro
<= Inapoi la pagina principala Ro/Haskell.
<- Inapoi la Intrebarile incepatorului Ro/Haskell.