-module(nzhf23m2). -author('hanak@emt.bme.hu'). -date('2020-11-19'). -vsn('$LastChangedDate: 2020-11-19 14:18:54 +0100 (Thu, 19 Nov 2020) $$'). %-compile(export_all). -export([dec2hex/1,d2hfa/1,test/0]). % Részfeladat: % Írjon dec2hex néven olyan függvényt, amely kiszámolja egy decimális számnak % a 0..9 és A..F karakterek füzéreként (sztringként) ábrázolt hexadecimális % alakját. A füzér utolsó karaktere legyen a legkisebb, egyes helyiértékű % számjegy. Ügyeljen a 0 helyes kezelésére! % % -spec dec2hex(D::integer()) -> H::string(). % % A D decimális szám $0-$9 és $A-$F karakterek füzéreként ábrázolt % % hexadecimális megfelelője H. % Teljes feladat: % Írjon d2hfa néven olyan függvényt a dec2hex/1 függvény felhasználásával, % amely a % -type fa(Elem) :: e | {n, Elem, fa(Elem), fa(Elem)} % típusspecifikációval megadott, fa(integer()) típusú bemenő argumentumát % fa(string()) típusúvá alakítja úgy, hogy minden 'n' csomópontban található % egész számot lecserél a füzérként ábrázolt hexadecimális megfelelőjére. % További segédfüggvényeket ne definiáljon! % % -spec d2hfa(Fa0::fa(integer())) -> Fa::fa(string()). % % A Fa0 decimális számokat tartalmazó fa hexadecimális számokat % % tartalmazó megfelelője Fa. %% ---------------------------------------------------------------------------- % Részfeladat: rekurzív függvény segédfüggvénnyel. -spec dec2hex(D::integer()) -> H::string(). dec2hex(0) -> [charcode(0)]; dec2hex(D) -> dec2hex(D, []). -spec dec2hex(D::integer(), Hs::[integer()]) -> H::string(). % A D decimális szám $0-$9 és $A-$F karakterek füzéreként ábrázolt % hexadecimális megfelelője a Hs gyűjtőargumentum elé fűzve H. dec2hex(0, Hs) -> Hs; dec2hex(D, Hs) -> dec2hex(D div 16, [charcode(D rem 16)|Hs]). %% ---------------------------------------------------------------------------- -spec charcode(C::integer()) -> H::char(). % A 0 =< C =< 15 egésznek megfelelő hexadecimális jegy a % $0, ..., $9, $A, ..., $F tartományban. charcode(C) when C < 10 -> C+$0; charcode(C) -> C-10+$A. %% ---------------------------------------------------------------------------- % Teljes feladat -type fa(Elem) :: e | {n, Elem, fa(Elem), fa(Elem)}. -spec d2hfa(Fa0::fa(integer())) -> Fa::fa(string()). d2hfa(e) -> e; d2hfa({n, D, Bfa, Jfa}) -> {n, dec2hex(D), d2hfa(Bfa), d2hfa(Jfa)}. %% ---------------------------------------------------------------------------- test() -> { dec2hex(0) =:= "0", dec2hex(7) =:= "7", dec2hex(14) =:= "E", dec2hex(75) =:= "4B", d2hfa(e) =:= e, d2hfa({n, 14, e, e}) =:= {n, "E", e, e}, d2hfa({n, 75, {n,200,e,e}, {n,35,e,e}}) =:= {n, "4B", {n,"C8",e,e}, {n,"23",e,e}} }.