background image

Metody symulacyjne

Metody symulacyjne

JĘZYK SYMULACYJNY MODSIM

wprowadzenie do składni

background image

CECHY JĘZYKA 

CECHY JĘZYKA 

SYMULACYJNEGO

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

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 

JĘZYK I ŚRODOWISKO 

MODSIM II

MODSIM II

background image

Wprowadzenie

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

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

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

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

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

Podstawowe typy danych

background image

Operatory podstawowych 

Operatory podstawowych 

działań

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

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ń]

          [ 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ń 

       

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

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

Procedury

Procedury

- 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

Procedury

Procedury

Deklaracja :

PROCEDURE

 NazwaProcedury(

IN

 

w1:W1;

INOUT

 w2:W2;

OUT

 w3:W3)[: 

TypZwracanejWartości];

CONST

 ...

TYPE

 ... 

VAR

 ...

BEGIN

  ......
  [

RETURN

 ...]

END PROCEDURE

;

background image

Procedury c.d.

Procedury 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

Procedury c.d.

Procedury 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 

Standardowe procedury 

Wej/Wyj

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

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

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

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

Złożone typy danych c.d.

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

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.

Złożone typy danych c.d.


Document Outline