Programmeren in REXX/Functies deel 2: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
k Titel van Programmeren in REXX/Functies2 gewijzigd in Programmeren in REXX/Functies deel 2: Mooiere titel |
Verbeteringen tekst - navigatiesjabloon |
||
Regel 1:
{{Programmeren in REXX}}
In dit hoofdstuk behandelen we een tweede reeks functies die standaard met REXX
Het gaat om functies die toelaten getallen te formatteren.
Zoals steeds zullen resultaten tussen « en » worden getoond. Als er sprake is van een '''pad''' karakter, dan dient dit karakter om de (kortste) string op te vullen. Standaard wordt daar de spatie voor gebruikt.
=Hoe rekent REXX ?=
Het resultaat van een
*Het resultaat is berekend tot een maximaal aantal significante cijfers. Standaard is de nauwkeurigheid beperkt tot 9 cijfers, maar dit aantal kan aangepast worden
*Behalve bij deling en machtsverheffing worden de nullen aan eind van de decimalen behouden, dus 2.40+2=2.40;
*Als het resultaat nul is dan wordt het steeds als één enkel cijfer 0 voorgesteld;
*Exponentiële notatie wordt pas gebruikt als het aantal significante cijfers
1e6
1 /
*Alvorens een berekening aan te vatten zal REXX de spaties wegnemen
*Noteer dat ".92" omgezet wordt tot "0.92".
*Machtsverheffing kan enkel met een exponent die een '''geheel''' positief of negatief getal is.
<!----------------------------------------------------------------------------------------------->
=NUMERIC - nauwkeurigheid van bewerkingen bepalen=
Alvorens dieper in te gaan op de numerieke functies moeten we het bevel '''numeric''' nog
'''numeric digits''' [uitdrukking]
of
Regel 25 ⟶ 26:
'''numeric form''' [formaat]
De eerste vorm bepaalt
<br id=DIGITS>Noteer dat met de functie '''digits()''' de actuele cijfergrootte kan worden opgevraagd.</br>
say 1*999999999 «999999999»
say 1*9999999999 «1.00000000E+10»
Dus, eens men de nauwkeurigheid overschrijdt wordt het getal afgerond.
Met '''numeric fuzz''' kunnen we bepalen
<br id=FUZZ>De actuele
en zal dus ook invloed hebben op eventuele afrondingen van getallen.</br>
numeric fuzz 5
say 0.123456789=0.123409876 «0»
numeric fuzz 6
say 0.123456789=0.123409876 «1»
Met '''numeric form''' tenslotte controleren we de vorm van de exponentiële notatie van getallen. We kunnen 2 formaten kiezen:
Regel 36 ⟶ 44:
*'''engeneering''', waarbij in het exponentieel deel de macht steeds een veelvoud van 3 is.
<br id=FORM>De actuele exponent-vorm kan men opvragen met de functie '''form()'''.</br>
numeric form scientific
say 1*9999999999 «1.00000000E+10»
numeric form engineering
say 1*9999999999 «10.0000000E+9»
=Manipulatie van getallen=
Regel 62 ⟶ 74:
say datatype('3','Logical') datatype(12,'O') «0 0»
say datatype('01000001'b,'B') «0»
In het laatste geval is de binaire string gelijk aan '41'x, of de letter «A» in het ASCII stelsel, en dat is noch een karakter 1 ('31'x) noch een karakter 0 ('30'x), dus geen string die een binair getal voorstelt.
Met de gelijkwaardige types '''V'''ariable en '''S'''ymbol wordt getest of de string een syntactisch geldige naam heeft om als REXX variabele gebruikt te kunnen worden.
Regel 71 ⟶ 83:
'''symbol'''(''"token"'')
Deze functie antwoord:
*'''«BAD»''' als het token geen geldige naam
*'''«LIT«''' als het wel een geldige naam
*'''«VAR»''' als het een geldige naam
Hier is het belangrijk te begrijpen dat we het te onderzoeken token als een constante moeten schrijven, anders onderzoeken we de '''inhoud''' van het token op geldigheid.
Regel 82 ⟶ 94:
say symbol(hello) «LIT»
say symbol("Hello") «LIT»
In het tweede geval maken we de fout de variabele niet als constante te schrijven, en dus testen we "10"
<!------------------------------------>
==ABS - Absolute waarde van een getal==
'''abs'''(''getal'')
Deze functie geeft de absolute waarde (positieve waarde) van het getal terug. De opgegeven parameter kan natuurlijk een uitdrukking zijn die na interpretatie in een getal
say abs(24-12) «12»
say abs(12-24) «12»
Regel 93 ⟶ 105:
'''max'''(''getal''[,''getal''][,''getal'']...)
'''min'''(''getal''[,''getal''][,''getal'']...)
Deze functies
a=12 ; b=14
say max(a,b,24) min(4,-1*b,24) «24 -14»
Regel 120 ⟶ 132:
Het ''getal'' wordt eerst afgerond volgens de geldende afrondingsregels. Het resultaat is exact gelijk aan wat "getal+0" zou geven.
Men kan echter ook bepalen hoeveel cijfers er in het resultaat ''vóór'' en/of ''na'' de komma moeten komen. Geeft men een aantal ''vóór'' de komma
say trunc(10.676,2) «10.67»
say format(10.676,,2) «10.68»
Regel 127 ⟶ 139:
say format(12.343392211,4,3) « 12.343»
say format(12.343792211,4,3) « 12.344»
Merk het verschil op tussen '''trunc''' en '''format''' wat de afronding betreft.
<!---------------------------------------------------------------------------->
==Omzetten van formaten==
Regel 136 ⟶ 148:
Deze functie zal de binaire waarde van karakterreeks ''string'' omzetten naar een decimaal getal. Hiermee wordt bedoeld dat de ''string'' als een opeenvolging van bits wordt gezien, en dat die reeks dan als decimaal getal wordt geïnterpreteerd.
Een binaire waarde kan geïnterpreteerd worden als een absolute waarde, of een getal met een teken. In het laatste geval zal het getal negatief zijn als de eerste bit op 1 staat. Lees voor meer informatie over negatieve binaire getallen het artikel [[w:2-complement|Two's complement]]. De opgegeven ''lengte'' zal bepalen of de eerste bit op 1 staat en of we dus een negatief getal bekomen.
Dit zijn voorbeelden op een PC, dus voor een ASCII karaktertabel:
Regel 147 ⟶ 159:
say c2d('FF'x,2) «255»
In het laatste 2 gevallen hebben we een lengte meegegeven. Met een lengte 1 hebben we binair "11111111", en dus het negatief
(2-complement) getal -1. Met de lengte 2 hebben we binair echter "0000000011111111", en dat
<!------------------------------------->
===C2X - van karakter naar hexadecimaal===
'''c2x'''(string)
Onze string wordt nu omgezet
say c2x("A") «41»
say c2x(' A') «2041»
Regel 164 ⟶ 176:
===D2X - van decimaal naar hexadecimaal===
'''d2x'''(getal)
Het getal wordt omgezet naar hexadecimale
say d2x(10) «A» (dit is '0A'x, een controlekarakter)
say d2x(c2d('K')) «4B»
Regel 194 ⟶ 206:
say x2b(b2x(11110000)) «11110000»
say x2b(4B0) «010010110000»
In ons [[Programmeren in REXX/Voorbeeld 2 |tweede voorbeeld]] zullen we een programma beschrijven dat handig is om met deze functies vlot te kunnen werken.
<!----------------------------------------------------------------------->
==Binair rekenen==
Regel 227 ⟶ 240:
'''bitxor'''(string1[,string2][,pad])
say c2x(bitxor('11111111'b,'A')) «BE» ('10111110'b)
{{Sjabloon:Navigatie
|Boek =Programmeren in REXX
|vorige =Bevelen, deel 2
|huidige =Functies deel 2
|volgende=Parse in detail}}
{{sub}}
|