modsim skladnia id 305585 Nieznany

background image

Metody symulacyjne

Metody symulacyjne

J

Ę

ZYK SYMULACYJNY MODSIM

wprowadzenie do składni

wprowadzenie do składni

background image

CECHY JĘZYKA SYMULACYJNEGO

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

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

CACI PRODUCTS COMPANY ( www.caciasl.com )



Podstawowe cechy języka:



język obiektowo zorientowany do programowania symulacji
dyskretno-zdarzeniowej

JĘZYK I ŚRODOWISKO

JĘZYK I ŚRODOWISKO MODSIM

MODSIM II

II

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)

background image

Wprowadzenie

Wprowadzenie



Umożliwia realizację:



upływu czasu



interakcji obiektów



wizualizacji i animacji



monitorowania przebiegu symulacji



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

ModBench

background image

SimDraw

SimDraw

background image

SimVideo

SimVideo

background image

Moduły

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

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.

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



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

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

– 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

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

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

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.

Deklaracje c.d.



Definiowanie zmiennych:

VAR

liczbaPacjentow : INTEGER;

tablica : DynamicznaTablica; {zmienna referencyjna}

Uwaga

: nie ma zmiennych wskaźnikowych tylko referencje

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}

Podstawowe typy danych

Podstawowe typy danych



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]

background image

Operatory podstawowych działań

Operatory podstawowych działań

:=

przypisanie

+

dodawanie/konkatenacja łańcuchów
znakowych

-

odejmowanie/znak ujemności

*

mnożenie

*

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

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

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

Instrukcje sterujące



Instrukcja warunkowa

IF

:

IF Wyrażenie_logiczne1

Sekwencja_działań

[ ELSIF Wyrażenie_logiczne2

Sekwencja_działań]

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.

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ń

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 sterujące c.d.



Instrukcje pętli

WHILE

:

WHILE Wyrażenie_logiczne

Sekwencja_działań

END WHILE;

LOOP

:

LOOP

:

LOOP

Sekwencja_działań

END LOOP;

REPEAT

:

REPEAT

Sekwencja_działań

UNTIL Wyrażenie_logiczne;

background image

Instrukcje sterujące c.d.

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

Przykłady pętli



WHILE a < b

a := a + 2;

END WHILE;



REPEAT

a := a + b;

UNTIL a < 100;



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;

UNTIL a < 100;



LOOP

IF a > b

EXIT;

END IF;

END LOOP;

END FOR;



FOREACH el IN kolejka;

el.a := 6;

END FOR;

background image

Podprogramy

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ść

funkcje - określają zwrotnie wartość

procedury - nie zwracają żadnych wartości

background image

Podprogramy c.d.

Podprogramy c.d.



Deklaracja :

PROCEDURE

NazwaProcedury(

IN

w1:W1;

INOUT

w2:W2;

OUT

w3:W3)[: TypZwracanejWartości];

CONST

...

TYPE

...

VAR

...

CONST

...

TYPE

...

VAR

...

BEGIN

......

[

RETURN

...]

END PROCEDURE

;

background image

Podprogramy c.d.

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.

Podprogramy c.d.



Przykład:

PROCEDURE SrDlugoscKolejki(IN liczbaklientow: INTEGER;

IN liczbaKas : INTEGER) : REAL;

VAR

srdlkol : REAL;

BEGIN

IF liczbaKas <> 0

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

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);



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

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.

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.

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;

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.

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.

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

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.

Zło

ż

one typy danych c.d.

BEGIN

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

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.

Zło

ż

one typy danych c.d.



Wybrane działania na strukturach dynamicznych

:



przypisanie

TYPE

TypRekordowy = deklaracja;

VAR

j, k : INTEGER;

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

k

INTEGER

0

j

INTEGER

some data

someRecType instance

NILREC

a

someRecType reference

b

someRecType reference

Pamięć przed przypisaniem

Zło

ż

one typy danych c.d.

Zło

ż

one typy danych c.d.

4

j

INTEGER

4

k

INTEGER

some data

someRecType instance

a

someRecType reference

b

someRecType reference

Pamięć po przypisaniu

background image

Zło

ż

one typy danych c.d.

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

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

4

k

INTEGER

0

j

INTEGER

some data

NILREC

a

someRecType reference

b

someRecType reference

·

Pami

ęć

przed przypisaniem

Zło

ż

one typy danych c.d.

Zło

ż

one typy danych c.d.

some data

someRecType instance

some data

someRecType instance

someRecType reference

a

someRecType reference

b

someRecType reference

·

·

some data

someRecType instance

4

j

INTEGER

4

k

INTEGER

Pami

ęć

po przypisaniu


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron