|
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 - 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»