Peter Lorenz English smaller fonts Simulation und Animation

3.2. Ausdrücke


Ausdrücke sind Formeln, die aus Operanden, Operationssymbolen und Klammern bestehen. Wenn die Werte aller Operanden bekannt sind, errechnet sich aus ihnen der Wert des Ausdruckes.
Einer der wesentlichen Vorzüge von GPSS/H im Vergleich zu älteren GPSS-Versionen liegt darin, dass für fast alle Operanden Ausdrücke zulässig sind. Das vereinfacht die Programme und fördert ihre Lesbarkeit. Der vorliegende Abschnitt beschreibt Syntax und Semantik der drei Klassen von Ausdrücken im GPSS/H: Arithmetische, logische und Zeichenkettenausdrücke. Man sollte ihn eher zum Nachschlagen benutzen, da seine Lektüre nicht besonders spannend werden dürfte.

3.2.1. Arithmetische AusdrückeTop of the Paragraph

Terme in arithmetischen Ausdrücken
Operatoren in arithmetischen Ausdrücken
Interpretation arithmetischer Operatoren
Verwendung der Typumwandlungsoperatoren FIX und FLT
Beispiele zur Berechnung arithmetischer Ausdrücke

Wie in vielen anderen Programmiersprachen sind arithmetische Ausdrücke auch im GPSS/H Formeln, die einen numerischen, also einen Zahlenwert besitzen.(Logische Ausdrücke haben logische und Zeichenkettenausdrücke haben Zeichenkettenwerte.)

GPSS/H gestattet die Verwendung arithmetischer Ausdrücke in einer Vielzahl von Zusammenhängen. Die im Vergleich zu alten GPSS-Versionen neu eingeführte Anwendung von Ausdrücken als Operanden von Blöcken und Steueranweisungen erhöht die Flexibilität der Sprache. Die Regeln für die Berechnung arithmetischer Ausdrücke hängen ab vom Zusammenhang, in dem sie auftreten.

Terme in arithmetischen Ausdrücken Top of the Paragraph

Terme sind die Elementarkomponenten von Ausdrücken. Die Terme arithmetischer Ausdrücke können sein.

Operatoren in arithmetischen Ausdrücken Top of the Paragraph

In arithmetischen Ausdrücken sind die folgenden Operatoren zugelassen:

OperatorOperation
+ Unäre und binäre Addition
- Unäre und binäre Subtraktion
* Multiplikation
/ Division
@ Modulodivision

Interpretation arithmetischer Operatoren

In GPSS/H hängt die Interpretation arithmetischer Operatoren vom Zusammenhang ab, in dem sie verwendet werden. In den folgenden Abschnitten werden Regeln für die Interpretation von Operatoren angegeben, die nicht innerhalb von VARIABLE-Anweisungen oder von FVARIABLE-Anweisungen verwendet werden. Diese werden im Abschnitt 3.7. angegeben und bis dahin auch nicht benötigt.

Die Berechnung arithmetischer Ausdrücke, die außerhalb von VARIABLE- und FVARIABLE-Anweisungen verwendet werden, erfolgt entsprechend den in Fortran und mehreren anderen höheren Programmiersprachen gültigen Regeln:

Typumwandlungsoperatoren FIX und FLT

Ein Ausdruck vom Typ Gleitkomma kann durch den Umwandlungsoperator FIX in einen Integer-Ausdruck umgewandelt werden. Dies erfolgt durch Abschneiden (truncation). Ein Ausdruck vom Typ Integer kann durch den Umwandlungsoperator FLT in einen Gleitkommaausdruck umgewandelt werden.

Beispiele zur Berechnung arithmetischer Ausdrücke

Voraussetzung Ausdruck Wert
&I=1 &I+1 2
&I=1, &X=1.2 &I+&X 2.2
&K=7 &K/3 2
&K=7 &K@3 1
&K=8 &K/16.0 0.5
&X=8.0 FIX(&X/16) 0

3.2.2. Logische oder Boolesche AusdrückeTop of the Paragraph

Terme von Booleschen Ausdrücken
Die Operatoren AND und OR
Der Boolesche Operator NOT
Beispiele Boolescher Ausdrücke
Optimierung Boolescher Ausdrücke
Boolesche Ausdrücke bestehen aus Elementen, welche nur die Werte true oder false annehmen können. Boolesche Ausdrücke können in drei Zusammenhängen verwendet werden: Die Regeln zur Berechnung Boolescher Ausdrücke hängen vom Zusammenhang, in dem sie auftreten, ab.

Terme von Booleschen Ausdrücken

Die Terme eines Booleschen Ausdrucks können Logische Standardattribute (LSA), Vergleiche oder arithmetische Ausdrücke sein.

Logische Standardattribute (LSA)
LSA werden zum Testen des Zustandes von Objekten in einem Modell verwendet. SF(JOE) testet z.B., ob der Speicher JOE augenblicklich voll ist.
Vergleiche
Ein Vergleich besteht aus zwei durch einen Vergleichsoperator verbundenen arithmetischen Ausdrücken oder aus zwei durch einen Vergleichsoperator verbundenen Zeichenkettenausdrücken. Es stehen folgende Vergleichsoperatoren zur Verfügung:
Operator Alternativer Operator Bedeutung
'G' > größer als
'GE'>= größer als oder gleich
'L' < kleiner als
'LE' <= kleiner als oder gleich
'E'= gleich
'NE'!= ungleich
Arithmetische Ausdrücke
Arithmetische Ausdrücke als Terme eines Booleschen Ausdruckes sind true, wenn ihr Wert nicht Null ist, ansonsten false. Mit Ausnahme der besonderen Bedeutung von + und * in Booleschen Variablen gestattet GPSS/H die Verwendung beliebig komplizierter arithmetischer Ausdrücke.

Die Operatoren AND und OR

Terme von Booleschen Ausdrücken können mit Hilfe der Booleschen Operatoren AND und OR kombiniert werden. Die Codierung dieser Operatoren hängt vom Zusammenhang ab, in dem der Boolesche Ausdruck verwendet wird.
In GPSS/H hat der AND-Operator eine höhere Priorität als der OR-Operator.

AND und OR in Booleschen Variablen

Innerhalb einer Booleschen Variablen (BVARIABLE) werden AND und OR als * bzw. + geschrieben. Alternativ dazu können geklammerte Terme kombiniert werden, indem die Wörter AND und OR ausgeschrieben werden. Die Wahl von * und + anstelle von AND und OR durch die Entwickler von GPSS ist unglücklich, da sie die direkte Anwendung von Addition und Multiplikation in einer Booleschen Variablen ausschließt. Sind Addition oder Multiplikation in einer Booleschen Variablen erforderlich, muß die Operation in einer entsprechend definierten Variablen erfolgen, auf die dann als ein Element des Booleschen Ausdruckes zugegriffen wird, der die Boolesche Variable definiert.

AND und OR in IF- und ELSEIF-Anweisungen

Die Verwendung von * und + anstelle von AND und OR als Besonderheit der Booleschen Variablen wurde beim (späteren) Entwurf der Anweisungen IF und ELSEIF bewußt vermieden. In diesen Anweisungen werden AND und OR ausgeschrieben. Folglich können hier Addition und Multiplikation in ihrer gewohnten Form ausgeführt werden.

IF X(JOE)*X(FRED)>=PF(LIMIT)+10
vergleicht z.B. das Produkt aus X(JOE) und X(FRED) mit der Summe PF(LIMIT)+10.

Der Boolesche Operator NOT

Terme eines Booleschen Ausdruckes können mit Hilfe des Operators NOT negiert werden. Der NOT-Operator kann nur auf einen Ausdruck angewandt werden, der in Klammern eingeschlossen ist. Als Folge dieser Syntax steht die Priorität des NOT-Operators gegenüber anderen Operatoren nicht zur Frage.

Beispiele Boolescher Ausdrücke
Voraussetzungen
Die Einrichtung JOE ist vorrangig belegt (preempted)
Der Speicher SAM ist voll.
XH2=0
X1=1
XB3=-1
XL1=5.0
&STRING='WALLA'
Wert
Boolescher Ausdruck in Booleschen Variablen in IF oder ELSEIF
FU(JOE)TRUETRUE
XB3 TRUE (nicht Null) TRUE (nicht Null)
X1'E'XH2 FALSE FALSE
XB3<=XH2 TRUE TRUE
&STRING<'WALLX' TRUE TRUE
FNU(JOE)+SE(SAM) FALSE FALSE (Null plus Null)
XB3+X1 TRUE (TRUE OR TRUE) FALSE ( -1 plus 1)
(XB3)0R(X1) TRUE (TRUE OR TRUE) TRUE (TRUE OR TRUE)
XL1*XB3 TRUE (TRUE AND TRUE) TRUE (nicht Null mal nicht Null)
(XH2+FI(JOE))*NOT(SE(SAM)) TRUE ((F OR T) AND NOT F) TRUE (Addition und Multiplikation)

Optimierung Boolescher Ausdrücke

Die Berechnung Boolescher Ausdrücke wird so optimiert, dass nur notwendige Terme berechnet werden.

(FU(JOE))AND((FNU(SAM))OR(FNU(RALPH)))
wird wie folgt ausgewertet:

3.2.3. ZeichenkettenausdrückeTop of the Paragraph

Terme von Zeichenkettenausdrücken
Operatoren für Zeichenkettenausdrücke
Das Substring - Zeichenketten-Standardattribut
Das Zeichenketten-Standardattribut LEN
Das Zeichenketten-Standardattribut SYM

Die Fähigkeit, Zeichenketten zu manipulieren, erhöht die Freiheit der Modelle zur Kommunikation mit der Außenwelt. Zeichenketten können ohne Probleme gelesen und geschrieben werden; neue Zeichenketten werden durch Verkettung bereits existierender gebildet, außerdem können Teilketten (Substrings) abgeleitet werden.

Terme von Zeichenkettenausdrücken

Die Terme von Zeichenkettenausdrücken könnenZeichenkettenkonstanten, Zeichenketten-Standardattribute (ZSA), CHAR*n-Ampervariablen und VCHAR*n-Ampervariablen sein. Die drei in GPSS/H zur Verfügung gestellten ZSA (SSG, LEN und SYM) werden weiter unten beschrieben. CHAR*n und VCHAR*n Ampervariablen dienen zum Speichern und Manipulieren von Zeichenketten. Sie sind besonders nützlich für die symbolische Kommunikation mit den Modellnutzern. Sie können z.B. verwendet werden, um interaktiv Nachrichten an den Nutzer zu senden sowie dessen Antworten zu speichern und zu analysieren.

Operatoren für Zeichenkettenausdrücke und Zeichenketten-Standardattribute

Der Verkettungsoperator (Konkatenationsoperator)

Der Verkettungsoperator || fügt zwei Zeichenketten zu einer zusammen. Seine Verwendung wird im folgenden Beispiel illustriert:

AnweisungOperanden Resultat
CHAR*10&NAME
VCHAR*14&VNAME1,&VNAME2
LET&VNAME1='Walla '
LET&VNAME2=&VNAME1||'WALLA' &VNAME2='Walla WALLA'
LET&NAME=&VNAME2 &NAME='Walla WALL'
LET&VNAME1=&NAME||'A '||&VNAME2 &VNAME1='Walla WALLA Wa'

Das Substring-Zeichenketten-Standardattribut

Das Substring-ZSA wird verwendet, um Substrings aus Zeichenkettenvariablen oder -ausdrücken abzuleiten. Es hat die Syntax SSG(string,i,j) oder SSG(string,i). In beiden Fällen ist string ein Zeichenkettenausdruck. (Damit sind einfache CHAR*n oder VCHAR*n Variablen eingeschlossen, da sie entartete Formen solcher Ausdrücke sind.). Werden drei Operanden angegeben, kennzeichnet i die Startposition in der Zeichenkette (die Zeichen werden von 1...n numeriert) und j die Länge des abzuleitenden Substrings. Werden für SSG nur zwei Operanden angegeben, ergibt sich die Länge des abzuleitenden Substrings aus dem Rest von string der Startpunkt ist i. Das folgende Beispiel demonstriert die Verwendung von SSG:


Das Zeichenketten-Standardattribut LEN

LEN
ist ein Zeichenkettensymbol, das die Länge von Zeichenkettenausdrücken bestimmt. Für gewöhnlich wird es dazu verwendet, die aktuelle Länge von VCHAR*n Ampervariablen zu ermitteln. Es hat die Syntax LEN(string),
wobei string ein Zeichenkettenausdruck ist.
Das folgende Beispiel demonstriert die Verwendung von LEN:

","
In dem obigen Beispiel hat die Länge von &VNAME nach der ersten Zuweisung den Wert 6. Deshalb hat 8-LEN(&VNAME) in der zweiten Zuweisung den Wert 2, der als dritter Operand für SSG verwendet wird. Es wird folglich der Substring ' ' abgeleitet, die ersten zwei Zeichen eines Strings von 8 Leerzeichen. Wenn schließlich &VNAME mit dem Ergebnissubstring verkettet wird, erhält &NAME(1) den Wert ' A Name'. Diese Technik ist nützlich zur Erzeugung von Tabellenausgaben, die rechtsbündige Namen enthalten.

Das Zeichenketten-Standardattribut SYM

SYM
bestimmt den symbolischen Namen, der mit einem GPSS/H-Objekt verbunden ist. Es wird vorrangig verwendet, um Ausgabezeilen mit Namen zu versehen. Das ZSA SYM hat die Syntax
SYM(entity_code,index)
entity_code
ist eine Kennung für einen GPSS/H-Objekttyp, z.B. FAC für eine Einrichtung (Facility).
index
ist ein Integer - Ausdruck, der die Mitgliedsnummer innerhalb der Objektklasse angibt. Folglich liefert SYM(FAC,I) den symbolischen Namen, der mit der Einrichtung verbunden ist, deren Nummer durch &l gegeben ist.
Der Rückgabewert des ZSA SYM ist ein linksbündiger VCHAR*8 String.
Das folgende Beispiel illustriert die Verwendung des ZSA SYM beim Drucken einer Tabelle des Inhalts von Warteschlangen (Queue).

Kontrollfragen über Ausdrücke

  1. Was versteht man in GPSS/H unter einem Ausdruck?
  2. Welche Typen von Ausdrücken unterscheidet man?
  3. Welche Terme können in arithmetischen Ausdrücke vorkommen?
  4. Welche Operatoren treten in arithmetischen Ausdrücken auf?
  5. Welcher Operator steht für die Modulo-Division?
  6. Wie erhält man den ganzzahligen Wert eines reellwertigen Ausdrucks? Wie wandelt man einen ganzzahligen Wert in einen reellwertigen um?
  7. Welche Vergleichsoperatoren können in logischen Ausdrücken auftreten?
  8. Welche Terme können in Zeichenkettenausdrücken auftreten?
  9. Welche Argumente und welchen Wert hat das Zeichenkettenstandardattribut SSG?
  10. Welche Argumente und welchen Wert hat das Standardattribut SYM?
  11. Wie kann man die Länge eines Zeichenkettenausdruckes bestimmen?

SAHome previous next up Englishsmaller fonts Top Line
Last Modified Fri 05-27-11 06:54 GMT Valid CSS!

Comments please to:pelosim@yahoo.com