modsim składnia

background image

Metody symulacyjne

JĘZYK SYMULACYJNY MODSIM

wprowadzenie do składni

background image

CECHY JĘZYKA

SYMULACYJNEGO

OPIS MODELOWANEGO SYSTEMU

PROCEDURY UPŁYWU CZASU

ŚLEDZENIE ZDARZEŃ, CZYNNOŚCI I
PROCESÓW

TWORZENIE I USUWANIE ZDARZEŃ ORAZ
PRZETWARZANIE DANYCH Z NIMI ZWIĄZANYCH

GENEROWANIE ZMIENNYCH LOSOWYCH O
ZADANYCH ROZKŁADACH

GROMADZENIE, ANALIZA I PREZENTACJA
WYNIKÓW SYMULACJI

background image

Wytwórca środowiska programowego MODSIM
II

CACI PRODUCTS COMPANY

( www.caciasl.com

)

Podstawowe cechy języka:

język obiektowo zorientowany do programowania
symulacji dyskretno-zdarzeniowej

składnia zbliżona do składni języków:

Modula 2, Ada, Pascal

wersje dla systemów: Windows, Windows NT, UNIX,
OS/2 na platformy sprzętowe PC oraz RISC

MODSIM II wymaga preinstalowanego środowiska
C/C++
(np. MSVC v 1.5)

JĘZYK I ŚRODOWISKO

MODSIM II

background image

Wprowadzenie

Umożliwia realizację:

upływu czasu

interakcji obiektów

wizualizacji i animacji

monitorowania przebiegu symulacji

Środowisko programowe stanowią:

edytor kodu źródłowego wraz z kompilatorem i
debuggerem

ModBench

edytor grafiki

SimDraw

edytor animacji

SimVideo

SimObj

background image

ModBench

background image

SimDraw

background image

SimVideo

background image

Moduły

Każdy program stworzony w

MODSIM II

musi posiadać:

dokładnie jeden moduł główny -

MAIN MODULE

dowolną liczbę par modułów skojarzonych w
osobnych plikach:

DEFINITION MODULE

- zawiera deklaracje

struktur, procedur i obiektów; udostępnia
procedury innym modułom

IMPLEMENTATION MODULE

- zawiera kod

wykonywalny oraz dodatkowe deklaracje

Uwaga:

w module DEFINITION nie może być kodu
wykonywalnego

IMPLEMENTATION występują zawsze w parze z
DEFINITION

stałe, typy, zmienne i procedury zadeklarowane w
module DEFINITION są widoczne w skojarzonym
IMPLEMENTATION oraz mogą być importowane z
innych modułów

background image

Moduły c.d.

elementy zaimportowane do modułu DEFINITION nie są
widoczne w IMPLEMENTATION

nie można nic importować z modułu MAIN

do importowania służy polecenie

IMPORT

, np.

FROM UtilMod IMPORT DateTime, Delay;

sekwencja

FROM

...

IMPORT

... musi być umieszczona na

początku modułu (przed innymi sekwencjami poleceń)

nie można zaimportować całego modułu (biblioteki)
tylko poszczególne elementy

nazewnictwo:

MAIN MODULE

- MNazwa

mmnazwa.mod

DEFINITION MODULE

nazwa -

dnazwa.mod

IMPLEMENTATION MODULE

nazwa -

inazwa.mod

{ograniczenia na długość nazwy modułu}

background image

Identyfikatory

- nazwy zdefiniowanych przez użytkownika
elementów programowych, np.: modułów,
stałych, zmiennych, typów, procedur itd.

Wymagania:

– nierozdzielony ciąg znaków (bez spacji,

myślników oraz podkreśleń) - liter i/lub cyfr

– pierwszy znak - litera (!)

Uwaga: w MODSIM rozróżnia się małe/wielkie
litery

Przykład:

– licznik, LICZNIK, Pole1,

liczbaStanowiskObslugi...

background image

Deklaracje

blok programowy położony w module
definicyjnym lub przed częścią kodu
wykonywalnego w pozostałych
modułach lub podprogramach
zaczynający się od jednego ze słów
kluczowych: CONST, TYPE, VAR

opisuje definiowane przez
użytkownika wyrażenia przyjmujące
stałe i zmienne wartości oraz
opisujące nowe typy danych

background image

Deklaracje

Definiowanie stałej wartości:

CONST

MaxLiczbaPacjentow = 30;
MaxCzasPracy = 120.0;

Definiowanie nowego typu danych:

TYPE

DniWolne = (Sobota, Niedziela);
DynamicznaTablica = ARRAY INTEGER

OF REAL;

background image

Deklaracje c.d.

Definiowanie zmiennych:

VAR

liczbaPacjentow : INTEGER;
tablica : DynamicznaTablica; {zmienna

referencyjna}

Uwaga

: nie ma zmiennych wskaźnikowych tylko

referencje

Automatyczna inicjalizacja wartości
zmiennych podstawowego typu

:

INTEGER

: 0

REAL

: 0.0

BOOLEAN

: FALSE

STRING

: null

CHAR

: CHR(0)

background image

skalarne :

INTEGER (32-bit): -2.147.483.648 do
+2.147.483.648

REAL (64-bit): +/- 1,7 E-308 do 1,7 E+308

CHAR:

pojedynczy znak, np. ’a’

BOOLEAN

{TRUE, FALSE}

łańcuchy znakowe (dynamiczne łańcuchy znaków
automatycznie zarządzane): STRING, np. „Pacjent
oczekuje w kolejce”

wyliczeniowe : dopuszczalne nazwane wartości
jednoznacznie wyliczone w deklaracji „TYPE” np.
Miesiace=(styczeń, luty);

okrojony typ skalarny lub wyliczeniowy, np. I = [1 ..
50]

Podstawowe typy danych

background image

Operatory podstawowych

działań

:=

przypisanie

+

dodawanie/konkatenacja łańcuchów

znakowych

-

odejmowanie/znak ujemności

*

mnożenie

/

dzielenie rzeczywiste

DIV

dzielenie całkowitoliczbowe

MOD modulo

Uwaga: operandy muszą być kompatybilne;
operator powinien być dostosowany do typu
operand

– błędne wyrażenia: 2.0 + 2, 5 / 7, 5 + ’a’

background image

Operatory relacji logicznych

Porównują wartości - wynik typu BOOLEAN

=

równy

<>

nierówny

<

mniejszy niż

<=

mniejszy niż lub równy

>

większy niż

>=

większy niż lub równy

Uwaga: operandy muszą być
kompatybilne

– błędne wyrażenia: 2.0 < 2, 5 = ’a’

background image

Operatory działań logicznych

Dwie operandy po obu stronach

OR

suma logiczna

AND

iloczyn logiczny

Operand po prawej stronie

NOT

przeczenie

Uwaga: operandy muszą być wyrażeniami
logicznymi

background image

Instrukcje sterujące

Instrukcja warunkowa

IF

:

IF Wyrażenie_logiczne1

Sekwencja_działań

[ ELSIF Wyrażenie_logiczne2

Sekwencja_działań]

[ ELSE

Sekwencja_działań ]
END IF;

Uwaga: -brak słowa kluczowego

THEN

-

END

występuje w parze z

IF

background image

Instrukcje sterujące c.d.

Instrukcja wyboru

CASE

:

CASE [typ prosty | string]

WHEN a..e, m:

Sekwencja_działań

WHEN p:

Sekwencja_działań

WHEN x...z: Sekwencja_działań
[ OTHERWISE

Sekwencja_działań ]

END CASE;

Uwaga: -brak słowa kluczowego

OF

-

END

występuje w parze z

IF

background image

Instrukcje sterujące c.d.

Instrukcje pętli

WHILE

:

WHILE Wyrażenie_logiczne

Sekwencja_działań

END WHILE;

LOOP

:

LOOP

Sekwencja_działań

END LOOP;

REPEAT

:

REPEAT

Sekwencja_działań
UNTIL Wyrażenie_logiczne;

background image

Instrukcje sterujące c.d.

FOR

:

FOR ident := wyrażenie TO | DOWNTO wyrażenie [BY
wyrażenie]
Sekwencja_działań
END FOR;

FOREACH

:

FOREACH obiekt IN GROUP

Sekwencja_działań

END FOREACH;

Instrukcja natychmiastowego opuszczenia
pętli:

EXIT

Uwaga: -

END

występuje w parze z

nazwą

pętli

background image

Przykłady pętli

WHILE a < b

a := a + 2;

END WHILE;

REPEAT

a := a + b;

UNTIL a < 100;

LOOP


IF a > b

EXIT;

END IF;

END LOOP;

FOR i := 1 TO 20 BY 2;

t[i] := i * 2;

END FOR;

FOR i := 100 DOWNTO -20
BY 4;

t[i] := i * 2;

END FOR;

FOREACH el IN kolejka;

el.a := 6;

END FOR;

background image

Podprogramy

- nazwana, ograniczona kluczowymi słowami
część kodu programowego, dostępna z innych
części programu poprzez nazwę, realizująca
określone operacje

Typy:

funkcje - określają zwrotnie wartość
procedury - nie zwracają żadnych wartości

background image

Podprogramy c.d.

Deklaracja :

PROCEDURE

NazwaProcedury(

IN

w1:W1;

INOUT

w2:W2;

OUT

w3:W3)[:

TypZwracanejWartości];

CONST

...

TYPE

...

VAR

...

BEGIN

......
[

RETURN

...]

END PROCEDURE

;

background image

Podprogramy c.d.

Wywołanie procedury:

[w := ] NazwaProcedury(... , ... , ...);

Lista parametrów:

IN

- wartość przekazywana do procedury

OUT

- wartość zwracana przez procedurę po słowie

RETURN

INOUT

- wartość zmiennej przekazana do procedury i

zwrócona do tej zmiennej, bez tworzenia kopii
zmiennej

background image

Podprogramy c.d.

Przykład:

PROCEDURE SrDlugoscKolejki(IN liczbaklientow: INTEGER;

IN liczbaKas : INTEGER) :

REAL;

VAR

srdlkol : REAL;

BEGIN

IF liczbaKas <> 0

srdlkol := FLOAT (liczbaKlientow) / FLOAT (liczbaKas);

END IF;
RETURN srdlkol;

END PROCEDURE;

wywołanie:
.....

OUTPUT ( „Wyliczono :”, SrDlugoscKolejki(95, 15) );

.....

background image

Standardowe procedury

Wej/Wyj

INPUT (w1,... ,wN)

- wczytanie N ciągów znaków z

klawiatury oraz zinterpretowanie zgodnie z typami

zmiennych w1,..., wN

INPUT(dlugoscKolejki, liczbaKas);

OUTPUT (w1,... ,wN)

- wypisanie w powoływanym

oknie sekwencji wartości w1,...,wN

OUTPUT(nr, „Czas zmierzony = ” ,czasObslugi);

PRINT (w1,...,wN) WITH string

- wypisanie w

powoływanym oknie sekwencji wartości w postaci
sformatowanego zgodnie ze string ciągu wartości
w1,..,wN

PRINT(nr, kwota) WITH „Kasa *** zarobiła
*****.* zł.”

Uwaga:

w1,...,wN muszą być typu prostego

ciąg formatujący może być stałą, zmienną lub
znakowy

background image

Złożone typy danych

Struktury statyczne :

FIXED ARRAY

- uporządkowany skończony zbiór

elementów
jednego typu, np.

Pole = (..., figuraSzachowa, ...);
PlanszaSzachowa = FIXED ARRAY [1..8],[1..8]
OF Pole;

elementy tablicy muszą mieć ustalony rozmiar

alokują ilość pamięci, zależną od ilości i typu

zadeklarowanych w definicji tablicy
elementów

dostęp do elementów tablicy przez indeksy:

plansza[2, 3]

nie mogą być przekazywane jako parametr IN

procedur

FIXED RECORD

- zdefiniowana przez użytkownika

struktura
danych złożona ze skończonej liczby nazwanych
pól prostego
lub złożonego typu, np.

background image

Złożone typy danych c.d.

SrodekWalki = FIXED RECORD;
typ : TypSrodkaWalki;
zasieg : REAL;
szybkostrzelnosc : REAL;
jednostkaAmunicyjna : INTEGER;
END RECORD;

elementy rekordu muszą mieć ustalony rozmiar

alokują ilość pamięci, zależną od ilości i typu

zadeklarowanych w definicji rekordu pól

dostęp do pola uzyskuje się przez złożenie

nazwy rekordu
oraz nazwy pola, np.

srodekwalki.zasieg

może być używany w operacjach

arytmetycznych oraz
wyrażeniach logicznych, np.

srodekwalki.zasieg := 500.0;

background image

Złożone typy danych c.d.

Struktury dynamiczne :

ARRAY

: tablica dynamicznie powoływana i

usuwana przez
procedury wbudowane NEW oraz DISPOSE

VAR kolejkiSklepu : ARRAY INTEGER, INTEGER OF

BOOLEAN;
k : INTEGER;
BEGIN

...
NEW( kolejkiSklepu, 1..5);

FOR k := 1 TO 5

NEW(kolejkiSklepu[k], 1..k);

DISPOSE(kolejkiSklepu[k]);

END FOR;

...

DISPOSE(kolejkiSklepu

);

background image

Złożone typy danych c.d.

Efekt powyższej sekwencji poleceń :

Uwaga:

– w przypadku tablicy wielowymiarowej należy

pamiętać

o oddzielnym powołaniu jej pól

– procedurą DISPOSE można zwalniać tylko

wcześniej

zaalokowane obszary pamięci

– do chwili powołania tablicy zmienna typu

ARRAY jest

inicjalizowana na wartość NILARRAY

– tablice mogą być operandami w wyrażeniach

logicznych

’ = ’, ’ < > ’.

background image

Złożone typy danych c.d.

RECORD

: struktura danych podobna do FIXED

RECORD-
różnice:

zajmuje pamięć dopiero po wykonaniu NEW(...),

zwalnia
natychmiast po wykonaniu DISPOSE(...)

pola mogą być dynamicznymi strukturami

danych

TYPE

playerType = RECORD

imie : STRING;
team : STRING;
pozycja : positionType;
kolejnyGracz : playerType;

END RECORD;

VAR

team, gracz : playerType;

background image

Złożone typy danych c.d.

BEGIN

NEW(gracz);
team :=gracz;
NEW(gracz);
gracz.kolejnyGracz := team;
team := gracz;
...

dla rekordu predefiniowane są:

NILREC

– wartość zmiennej typu RECORD do

chwili
zaalokowania pamięci

ANYREC

– typ kompatybilny z każdym typem

RECORD, nie wolno używać go w procedurze
NEW

rekordy mogą być operandami w wyrażeniach

logicznych z
operatorami: ’ = ’ , ’ < > ’

background image

Złożone typy danych c.d.

Wybrane działania na strukturach dynamicznych

:

przypisanie

TYPE

TypRekordowy = deklaracja;

VAR

j, k : INTEGER;
a, b : TypRekordowy;
...

BEGIN

k := 4; { przypisanie wartości }
NEW(b); { powołanie instancji b }
b := dane
{ uzupełnienie pól rekordu danymi }
...
j := k; { kopia wartości k przepisana do j }
a := b; { a oraz b wskazują na tę samą

instancję rekordu }

background image

4

j

INTEGER

4

k

INTEGER

some

data

someRecType instance

a

someRecType reference

b

someRecType reference

4

k

INTEGER

0

j

INTEGER

some

data

someRecType instance

NILREC

a

someRecType
reference

b

someRecType reference

·

·

·

Pamięć przed przypisaniem

Pamięć po przypisaniu

Złożone typy danych c.d.

background image

Złożone typy danych c.d.

klonowanie- działanie polegające na stworzeniu

kopii struktury dynamicznej oraz przypisaniu jej
do nowej zmiennej referencyjnej

TYPE

TypRekordowy = deklaracja;

VAR

j, k : INTEGER;
a, b : TypRekordowy;
...

BEGIN

k := 4; { przypisanie wartości }
NEW(b); { powołanie instancji b }
b := dane { uzupełnienie pól rekordu danymi }
...
j := k; { kopia wartości k przepisana do j }
a := CLONE(b); { a wskazuje teraz na kopię instancji

b}

background image

some

data

someRecType instance

4

k

INTEGER

0

j

INTEGER

some

data

someRecType instance

NILREC

a

someRecType reference

b

someRecType reference

a

someRecType reference

b

someRecType reference

·

·

some

data

someRecType instance

4

j

INTEGER

4

k

INTEGER

·

Pamięć przed przypisaniem

Pamięć po przypisaniu

Złożone typy danych c.d.


Document Outline


Wyszukiwarka

Podobne podstrony:
Modsim Skladnia
modsim skladnia id 305585 Nieznany
Modsim Skladnia
Prezentacja Składniki chemiczne kwasu nukleinowego
zapotrzebowanie ustroju na skladniki odzywcze 12 01 2009 kurs dla pielegniarek (2)
W2 Chemiczne skladniki komorki
Składniki mineralne w diecie kobiet ciężarnych prezentacja
Analiza Składniowa
Istota , cele, skladniki podejscia Leader z notatkami d ruk
SKŁADNIA JM
17 G11 H09 Składniki krwi wersja IHiT
składniki mineralne
Mobilność i straty składników nawozowych

więcej podobnych podstron