|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 24192 (0x5e80)
Types: TextFile
Names: »SKOMAL3.DOK«
└─⟦e96298e07⟧ Bits:30004225 SKOMAL Version 1.02 til ICL Comet
└─⟦this⟧ »SKOMAL3.DOK«
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 6.1
6. Programmer.
----------------
6.1 Programelementer.
----------------------
6.1.1 Tal.
------------
Skomal-fortolkeren behandler både reelle tal og heltal, som
kan indtastes som heltal, decimaltal eller som tal i E-notation.
F.ex 23 3456.234 1.23E-3 123.4255E12.
Hvis DEC sættes til nul, vil alle tal (op til 8 cifrede) ud-
skrives som afrundede heltal på normalsiden.
På lagersiden udskrives alle tal fast med to decimaler.
6.1.2 Variabler.
------------------
En variabel består af eet bogstav (A-Å).
Bruges flere variabler, skilles de ved komma.
Der kan maximalt benyttes 8 afleveringsvariabler og 8 modta-
gevariabler pr. program. Både afleverings-og modtagevariablerne
kan udelades.
6.1.3 Regnetegn.
------------------
Fortolkeren arbejder kun med '+', '-', '*' og '/'.
6.1.4 Logisk operator.
------------------------
De logiske operatorer er følgende:
1. = lig med
2. > større end
3. < mindre end
4. >= eller => større end og lig med
5. <= eller =< mindre end og lig med
6. <> eller >< forskellig fra
6.1.5 Udtryk.
---------------
Et udtryk opfattes som
1. et <tal> eller en <variabel>
2. to <tal> eller <variable> med et <regnetegn> imellem
Eksempler på LOVLIGE udtryk:
2+5 A-3 7*L -Q A/L 5/-B -2*P 5*-A
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 6.2
Eksempler på ULOVLIGE udtryk:
2*5+6 2*A/R A*B*C
6.1.6 Udsagn.
---------------
Udsagnet har følgende syntaks:
<udtryk><logisk operator><udtryk>
6.2 Programopbygning.
----------------------
Et program består af
1. programhoved
2. programdel
3. SLUT
Et program kan maksimalt bestå af 20 linier med 28 tegn.
Programordren SLUT skal altid være programmets sidste linie.
Editoren opfatter netop denne kommando, som en ordre til at af-
bryde indskrivningen/retningen af programmet.
6.2.1 Programhoved.
---------------------
Et programhoved består af følgende elementer :
<programnavn>(<variabel),..,<variabel>;<variabel),..,<variabel>
Variablerne mellem '(' og ';' kaldes for afleveringsvaria-
bler, mens variablerne fra ';' til ')' benævnes modtagevaria-
bler.
6.2.1.1 Programnavn.
-----------------------
Programnavnet kan bestå af et antal bogstaver eller tal (evt.
blandet) og kan være lige så langt, som linien tillader.
Programnavnet kan ikke være en af ordrerne nævnt i kap. 5.
Hvis programmet skal gemmes på diskette, bør programnavnets
længde ikke overstige 8 tegn, da fortolkeren (af hensyn til CP/M
-systemet) automatisk afskærer tegn udover det ottende, når der
arbejdes på disketten.
Eks. På disketten ligger programmet 'FUNKTION' under nav-
net 'FUNKTION' (8 tegn).
Programmet 'FUNKTIONER' gemmes.
Programmet 'FUNKTION' overskrives, og efter operati-
nen ligger programmet 'FUNKTIONER' nu på disketten un-
der navnet 'FUNKTION'.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 6.3
Hentes programmet ind i fortolkeren, vises nu i ka-
taloget programmet 'FUNKTIONER'.
Dvs. at hvis et programnavn overstiger 8 tegn vil
diskettekataloget kun vise de første 8.
6.2.2 Programdel.
----------------
Programdelen kan bestå af følgende dele :
1. en tildelingsordre
2. en sløjfe-struktur
3. en betinget ordre
4. en udhop-ordre
5. et programkald
Delene kan helt udelades eller kombineres frit.
6.2.2.1 Tildelingsordren.
----------------------------
I skomal foretages værditilskrivninger til variabler således
<variabel>:=<udtryk>
F.ex. er følgende tildelingsordrer lovlige :
A:=10 B:=-1.34E10 C:=A*B R:=R+2 T:=-2*-45
6.2.2.2 Sløjfe-strukturen.
-----------------------------
Sløjfer består af et antal programordrer eller programkald,
som skal gentages et vist antal gange evt. uendelig mange gange.
Syntaksen er følgende
1. GENTAG(<udtryk>)
2. ordredel
3. HERTIL
Ad. 1. Hvis <udtryk> udelades, gentages ordredelen i det uen-
delige.
Ad. 2. Hvis <udtryk> er positivt, udføres ordredelen <udtryk>
antal gange.
Ad. 3. Hvis <udtryk> er nul eller negativt, overspringes or-
dredelen, og linien efter HERTIL udføres.
BEMÆRK: Fortolkeren tillader kun een sløjfe pr. program. Ønskes
flere sløjfer (evt. inden i hinanden), gøres det ved at
kalde et nyt program, der udfører denne sløjfe.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 6.4
Eks. TABELLER TABEL(T)
T:=2 N:=0
GENTAG(9) GENTAG(11)
TABEL(T) R:=T*N
T:=T+1 UD(N,R)
HERTIL N:=N+1
SLUT HERTIL
SLUT
Programmet TABELLER vil 9 gange kalde programmet TABEL, som
udskriver tabellen T (T antager værdierne fra og med 2 til og
med 10).
6.2.2.3 Betingede ordrer.
----------------------------
Syntaksen er følgende : HVIS(<udsagn>)<ordre>
Hvis <udsagn> er sand, udføres <ordre>. Hvis <udsagn> er
falsk, overspringes sætningen, og næste programlinie udføres.
Hvis <ordre> er SLUT, forlades programmet (niveauet sættes et
ned).
<ordre> kan også være et programkald.
Eks. HVIS(N>=0)SLUT
HVIS(2<=2*N)TABEL(L+5)
Den betingede ordre giver tillige mulighed for at afbryde
afviklingen af rekursive programkald (se kap. 8.2).
6.2.2.4 UDHOP-ordren.
------------------------
I sløjfestrukturer kan sløjfegennemløbene afbrydes, hvis or-
dren UDHOP bruges evt. i en betinget ordre. Fortolkeren udfører
så linien efter HERTIL.
6.2.2.5 Programkald.
-----------------------
Programkald består af :
<programnavn>(<udtryk>,..,<udtryk>;<variabel>,..,<variabel>)
både <udtryk> og <variabel> kan udelades.
Det er vigtigt, at antallet af udtryk til programmet svarer
til antallet af programmets variabler. Det samme gør sig gæl-
dende for afleveringsvariablerne.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 6.5
6.2.3 SLUT-ordren.
--------------------
Alle skomal-programmer skal afsluttes med ordren SLUT. Det
er et signal til editoren om, at programindskrivningen/retningen
er afsluttet.
6.3 Programafbrydelse.
-----------------------
Alle programkørsler kan afbrydes ved tryk på 'S'-tasten el-
ler ESC-tasten. Det er dog ikke muligt at genstarte programmet
fra det sted, hvor det blev afbrudt.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 7.1
7. Indskrivning af programmer.
--------------------------------
Skrives ordren HUSK, aktiveres program-editoren, og indskriv-
ningen af programmet kan påbegyndes.
På et hvilket som helst tidpunkt under indskrivningen kan
editorens faciliteter benyttes.
Som en særlig hjælp til handicappede brugere er alle de ta-
ster, hvor SHIFT-tangenten samtidig skal holdes nede, kopieret
til funktionstasterne. I det følgende er disse mærket F1-F13,
F13 ligger øverst til højre på tastaturet.
- Piltasterne benyttes til at flytte markøren.
- 'DEL' tasten sletter tegnet under markøren og flytter re-
sten af linien en position til venstre.
- 'INS' tasten indsætter et mellemrum under markøren og flyt-
ter resten af linien en position til højre.
- 'BS' virker som tasten med pil til venstre.
- 'F1' svarer til '-' (minus-tegnet).
- 'F2' - - '*' (gange-tegnet).
- 'F3' - - '='
- 'F4' - - '<' (mindre end).
- 'F5' - - '>' (større end).
- 'F6' - - '(' (venstre parantes).
- 'F7' - - ')' (højre parantes).
- 'F11' sletter linien under markøren og rykker efterfølgende
linier en linie op.
- 'F12' indsætter en tom linie under markøren og rykker de
efterfølgede linier en linie ned.
NB: Hvis der stod noget i nederste linie, mistes det.
- 'F13' sletter alle tegn fra markøren til liniens slutning.
Editoren foretager selv indrykninger/udrykninger af program-
linierne.
Programindskrivningen afsluttes automatisk, når 'RETURN' ned-
trykkes, mens markøren står på linien, hvor ordren SLUT er pla-
ceret.
Skomal-programmer kan maksimal være på 20 linier. Hver linie
kan højst indeholde 28 tegn.
Skrivefeltets bredde er 32 anslag af hensyn til indrykninger-
ne. Når indskrivningen er færdig, fjerner editoren automatisk
alle mellemrum og afskærer alle tegn udover det 28nde.
Programmet lagres i arbejdsområdet, og programnavnet indføres
i kataloget. Hvis der allerede er et program med samme navn, gi-
ves der mulighed for at rette programnavnet i det sidst indta-
stede program, ellers overskrives det gamle.
Ordren RET giver også adgang til editoren og benyttes, når
man skal foretage rettelser i et eksisterende program.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 8.1
8. Variabelbegrebet i skomal.
--------------------------------
Skomalfortolkeren arbejder udelukkende med lokale variabler.
Hvert program har sit eget variabelsæt og evt. variabelover-
førsler sker ved hjælp af programmets variabeldel. Hvert pro-
gram har kun adgang til sit eget variabelsæt. Dvs. at varia-
blen A på niveau 1 er forskellig fra variablen på niveau 2 osv.
Ordren NUL nulstiller samtlige variabler på alle niveauer.
8.1 Program kalder program.
-----------------------------
Når et program kalder et andet program vil det kaldte rykke
et niveau ud.
Eks. Følgende programmer ligger i programområdet :
TABEL MOMS(U)
IND(F,T) M:=U*1.22
N:=F UD(U,M)
X:=T+1 TRYK(U,M)
GENTAG(X-F) SLUT
MOMS(N)
N:=N+1
HERTIL
SLUT
På kommandoniveauet (niveau 0) gives ordren TABEL. På niveau
1 indlæses TABEL i programlageret og ordren IND udføres. Pro-
grammet venter på indtastning af en værdi til F. Vi taster 1 og
variablen F oprettes og tildeles værdien 1. Programmet venter
derefter på en værdi til T-variablen. Vi indtaster 20. Varia-
blen T oprettes og får værdien 20.
I linie 3 oprettes en variabel N, som tildeles værdien 1. I
programmet bruges denne variabel som en såkaldt tællevariabel.
For hvert gennemløb af sløjfen GENTAG-HERTIL bliver N's værdi
en større.
Variablen X i linie 4 bruges som hjælpevariabel, da antallet
af gennemløb af sløjfen skal være een større end differensen
start- og slutværdien, altså T-F+1. Da skomal kun kan behandle
een regneoperation pr.linie er denne operation altså nødvendig.
I linie 5 udregnes antallet af gennemløb (ialt 21) og ned-
tælingen påbegyndes.
I linie 6 kaldes programmet MOMS med afleveringsvariablen N
sat til værdien 1.
MOMS indlæses i programlageret på niveau 2 og variablen U
oprettes og tildeles værdien 1.
Udtrykket U*1.22 udregnes og resultat 1.22 tildeles varia-
blen M.
Variablerne U og M udskrives i linie 3 på normalsiden med 2
decimalers nøjagtighed, hvis DEC ikke er tildelt en anden værdi
siden opstart.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 8.2
Linie 4 sender den samme udskrift til printeren.
Når ordren SLUT udføres, forlader vi niveau 2 og returnerer
til niveau 1, hvor programmet er klar til at udføre linie nr.7.
Her optælles variablen N til værdien 2, og MOMS kaldes igen, da
vi kun har gennemløbet sløjfen een gang.
Således forsætter vi, til sløjfen er gennemløbet 21 gange,
hvorefter SLUT linien udføres, og vi vender tilbage til komman-
doniveauet (niveau 0).
Hvis vi ønsker momstabellen udskrevet med 10 øre-spring,
skal linie 7 ændres til N:=N+0.1 og samtidigt skal antallet af
gennemløbene 10-dobles.
8.2 Program kalder sig selv.
------------------------------
Ved rekursiv programmering vil hvert programkald rykke et
niveau ud.
Husk: Der er maximalt 36 niveauer til rådighed.
Ordren HVIS giver mulighed for tilbagevikling ved rekursive
programkald.
Eks. Følgende program ligger i arbejdsområdet :
FAKULTET(N;R)
R:=1
HVIS(N=0)SLUT
FAKULTET(N-1;R)
R:=R*N
UD(N,R)
SLUT
Programmet kaldes f.eks. med ordren FAKULTET(2) på komman-
doniveauet (niveau 0). Man behøver ikke her at angive en mod-
tagevariabel, da vi ikke behøver at modtage resultatet på ni-
veau 0 (resultaterne udskrives på normalsiden).
På niveau 1 indlæses FAKULTET i programlageret og variablen
N oprettes og tildeles værdien 2. I linie 2 oprettes R og til-
deles værdien 1. Udsagnet i linie tre er falsk hvorfor skomal
forsætter med linie 4. Programmet kalder sig selv med parame-
teren N-1, altså værdien 1.
Der skiftes til niveau 2, hvor FAKULTET indlæses i program-
lageret, og variablen N oprettes og tildeles værdien 1. Varia-
blen R oprettes og tildeles værdien 1. Linie 3 over springes
da udsagnet er falsk. FAKULTET kalder sig selv med parameteren
N-1, altså værdien 0.
Der skiftes til niveau 3, FAKULTET indlæses og variablen
oprettes og får værdien 0. R oprettes og får værdien 1. Udsag-
net i linie 3 er sandt (N=0), hvorfor programmet slutter. Der
returneres til niveau 2, idet afleveringsvariablen R overfører
værdien 1.
På niveau 2 udføres linie 5, dvs. at variablen R tildeles
værdien 1*1 idet N=1 og R=1. Variablerne N og R udskrives på
normalsiden med 2 decimaler, hvis man ikke har indstillet ud-
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 8.3
skrivningsformatet til heltal ( v.h.a. DEC(0) ). Ordren SLUT
bevirker at niveau 2 forlades, og værdien i R overføres til
niveau 1.
På niveau 1 får variablen R værdien 2, idet N=2 og R=1.
Værdierne i N og R udskrives på normalsiden, og niveau 1 for-
lades. Aflereringsvariablen R afleverer intet til niveau 1, da
vi i vores oprindelige ordre FAFULTET(2) ikke angav en modta-
gevariabel. Havde vi afgivet ordren FAKULTET(2;Q) ville varia-
blen Q på niveau indeholde værdien 2 efter programafviklingen.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 9.1
9. Lidt om fortolkeren.
--------------------------
9.1 Specifikationer.
----------------------
Fortolkerens tegnsæt består af :
- Alle store bogstaver (A til Å).
- Cifrene 0 til 9.
- Parenteser til parameterangivelser.
- Komma til adskillelse af variabler/udtryk.
- Semikolon til adskillelse af aflevering-og modtagevaria-
bler.
- Kolon benyttes i tildelingsordren.
- Minus til angivelse af negative tal.
- De fire regneoperatorer ( +, -, * og / ).
- De logiske operatorer ( >, < og = ).
Kommandoliniens længde ......................... 28 tegn.
Programliniens længde ......................... 28 tegn.
Antal linier pr. program ....................... 20 linier.
Antal programmer i arbejdsområdet .............. 17 stk.
Antal programniveauer .......................... 36
Antal variabler pr. niveau ..................... 29
Antal modtagevariabler pr. program ............. 8
Antal afleveringsvariabler pr. program ......... 8
9.2 Fortolkningen.
--------------------
I korte træk foretages tolkningen af en kommando-eller pro-
gramlinie som følger :
Tegn til venstre for ':' tolkes som en variabel, (hvis der
står flere bogstaver, er det det første, der benyttes).
Tegn til venstre for '(' eller linieslut tolkes, som en or-
dre.
Hvis ordren ikke findes i fortolkerens ordre-liste, under-
søges det, om den findes i programkataloget.
Findes den en af disse steder, udføres ordren ellers gives
et signal i højttaleren (dog kun på maskiner med lydfunktion).
Har fortolkeren fundet en '(' søger den efter variabler, tal
udtryk og udsagn.
Bruges flere bogstaver i en variabel, benytter fortolkeren
kun sidste bogstav som variabelnavn. F.eks. vil variablen SKR
opfattes som en variabel med navnet R.
Udelades skilletegnet ',' mellem variablerne, opfattes de
således kun som een variabel med navnet bestemt af det sidste
bogstav i variabelrækken.
Sættes et regnetegn foran et tal eller en variabel, vil kun
minus-tegnet tolkes, og tallet/variablen vil skifte fortegn.
Brugervejledning SKOMAL v. 1.0
Jan 86/TH s. 9.2
I regneudtryk vil tolkningen ske således :
Eks. Hvis L:=-5 vil L efter udførslen af tildelingen L:=-2*L
eller L:=L*-2 have værdien +25.
Hvis der benyttes flere regnetegn sammen (bortset fra minus)
benyttes kun det sidst indtastede regnetegn. To minustegn tol-
kes som eet plustegn.
Eks. Udtrykket K*/+5 vil blive tolket som K+5.
Ved ordren HVIS opfattes alt efter ')' som en ny ordre, som
tolkes selvstændigt, hvis udsagnet efter HVIS er sandt.
Eks. Følgende har altså god mening :
HVIS(A=0)HVIS(B=0)SLUT
Kun hvis både A og B er 0 samtidig udføres ordren SLUT.
«eof»