Program Szimulacio_Keret; Uses Crt,Graph; Const Jobbra=#75; Balra=#77; Fel=#72; Le=#80; Esc=#27; Enter=#13; Max=10; Mdb=7; Mpont: Array [1..Mdb] of String=('Norml','Csendes','Grafikon ki/be','Lpsenknt', 'Paramterek','Sg','Kilps'); const nmax=100; {tombmax} Type TMpont=Record e,v : Integer; End; TMenu=Array [1..Max] Of TMpont; Var path : String; szl : Integer; s_szl : String; x,y:integer; szin:integer; n_e,n_t,n_v,n_a : integer; {nev: eleje,teteje,alja} szt_e,szt_t,szt_v,szt_a : integer; {szoveg} p_e,p_t,p_v,p_a : integer; {parameterek} g_e,g_t,g_v,g_a : integer; {grafikon} m_t,m_a : Integer; {menu: teteje,alja} {--darazsakhoz--} n:integer; {darazsszam} i:integer; a:integer; {az 1. dobozban levo darazsak szama} d:array[1..2] of integer; {az i. darazs melyik dobozban van} s:array[1..nmax] of integer; {hanyszor volt pontosan i db mol. az 1. dobozban} {--darazsak vege--} Procedure Szovegesre; begin CloseGraph; {lezarja a grafikus uzemmodot} RestoreCrtMode; {Visszaallitja az InitGraph meghivasa elotti kepernyokezelesi modot} end; Procedure Grafikusra; Var gd,gm : integer; hiba:integer; kilep:boolean; valasz:char; Begin kilep:=False; path:={'d:\nyelvek\tp7\bgi';}'c:\langs\tp\bgi'; Repeat DetectGraph(gd,gm); {detektalja a grafikus eszkozt} InitGraph(gd,gm,path); {inicializalja a grafikus rendszert} hiba:=GraphResult; If hiba<>Grok Then Begin ClrScr; GotoXY(2,2); WriteLn('A grafikus mdhoz szksges a Graph.tpu elrsi tja.'); Gotoxy(2,3); Write('Kivnja megadni az elrsi utat (i/n)? '); Repeat valasz:=ReadKey; Until (valasz='i') or (valasz='I') or (valasz='n') or (valasz='N'); If (valasz='i') or (valasz='I') Then Begin Gotoxy(2,4); Write('Az utvonal: '); ReadLn(path); End Else Begin kilep:=True; End; End Else Begin kilep:=True; End; Until kilep; End; Procedure diagram(bfx,bfy,jax,jay:integer; Tomb:array of integer; elemszam:integer; tengely,felirat:boolean; szin:Byte); Var i,max:integer; nx,ny:real; s:string; Begin max:=Tomb[1]; For i:=1 to elemszam do if Tomb[i]>max then max:=Tomb[i]; ny:=(jay-bfy)/(max*1.1); nx:=(jax-bfx)/((elemszam+1)*1.1); SetFillStyle(1,szin); SetTextStyle(2,0,2); SetTextJustify(1,0); For i:=0 to elemszam do Begin Bar(bfx+round(nx*i), jay-round(ny*Tomb[i]), bfx+round(nx*(i+1)), jay); If felirat then Begin str(Tomb[i],s); outtextxy(bfx+round(nx*(i+0.5)),jay-3-round(ny*Tomb[i]),s); End; End; If tengely then Begin line(bfx,bfy,bfx,jay); line(bfx,jay,jax,jay); For i:=0 to elemszam do line(bfx+round(nx*(i+1)), jay-2,bfx+round(nx*(i+1)),jay+2); For i:=1 to max do line(bfx-2,jay-round(ny*i),bfx+2,jay-round(ny*i)); line(bfx,bfy,bfx-2,bfy+5); line(bfx,bfy,bfx+2,bfy+5); line(jax-5,jay-2,jax,jay); line(jax-5,jay+2,jax,jay); End; End; procedure darazs; begin i:=random(n); if d[i]=1 then begin d[i]:=2; a:=a-1; s[a]:=s[a]+1; end else begin d[i]:=1; a:=a+1; s[a]:=s[a]+1; end; end; Procedure SzimLepes; Begin darazs; szl:=szl+1; SetTextJustify(0,2); SetColor(0); OutTextXY(p_e+155,p_t+5,s_szl); Str(szl,s_szl); SetTextJustify(0,2); SetColor(3); OutTextXY(p_e+155,p_t+5,s_szl) End; Procedure SzimNev(szimulacio_nev:String); Var x,y:Integer; Begin szin:=Getcolor; {szim nv ablakkoordintk} n_e:=5; n_t:=5; n_v:=GetMaxX-5; n_a:=25; {szim nv ablak} SetfillStyle(1,1); Bar(n_e,n_t,n_v,n_a); {szim nv kiirsa} x:=Round(((n_v-n_e)/2)); y:=n_t+Round((n_a-n_t)/2); SetTextJustify(1,1); SetColor(15); OutTextXY(x,y,szimulacio_nev); SetColor(szin); End; Procedure Ablakok(szimter:Boolean; parameter:Boolean; grafikon:Boolean); Begin szin:=GetColor; setcolor(7); If szimter Then Begin {szimtr ablakkoordintk} szt_e:=5; szt_t:=35; szt_v:=405; szt_a:=225; {szimtr ablak} Rectangle(szt_e,szt_t,szt_v,szt_a); End; If grafikon Then Begin {grafikon ablakkoordintk} g_e:=5; g_t:=245; g_v:=GetMaxX-5; g_a:=GetMaxY-35; {grafikon ablak} Rectangle(g_e,g_t,g_v,g_a); {ge:bf, gt:bfy} {greafikonrajz} diagram(g_e,g_t,g_v,g_a,s,n,true,false,8); End; If parameter Then Begin {paramter ablakkoordintk} p_e:=415; p_t:=35; p_v:=GetMaxX-5; p_a:=105; {paramter ablak} Rectangle(p_e,p_t,p_v,p_a); {} SetTextJustify(0,2); OutTextXY(p_e+5,p_t+5,'Szimulcis lps: '); Str(szl,s_szl); SetColor(3); OutTextXY(p_e+155,p_t+5,s_szl) End; SetColor(szin); End; Procedure Menu; Var x,y,i :Integer; menum : TMenu; akt_mp: Integer; bill : Char; szeles : Integer; kilep:Boolean; Begin szin:=GetColor; akt_mp:=5; kilep:=False; Repeat {menu ablakkoordintk} m_t:=GetMaxY-25; m_a:=GetMaxY-5; szeles:=TextWidth(mpont[1])+20; menum[1].e:=5; menum[1].v:=menum[1].e+szeles; For i:=2 To Mdb Do Begin menum[i].e:=menum[i-1].v; szeles:=TextWidth(mpont[i])+20; menum[i].v:=menum[i].e+szeles; End; {menupontok kiirsa} For i:=1 To Mdb Do Begin If i=akt_mp Then Begin SetfillStyle(1,3); SetColor(1); End Else Begin SetfillStyle(1,1); SetColor(3); End; Bar(menum[i].e,m_t,menum[i].v,m_a); SetTextJustify(1,1); x:=menum[i].e+Round(((menum[i].v-menum[i].e)/2)); y:=m_t+Round((m_a-m_t)/2); OutTextXY(x,y,Mpont[i]); End; {Mozgs} Repeat bill:=ReadKey; Until bill in [Jobbra,Balra,Esc,Enter]; Case bill Of Jobbra : Begin If akt_mp>1 Then Begin akt_mp:=akt_mp-1; End Else Begin akt_mp:=7; End; End; Balra : Begin If akt_mp<7 Then Begin akt_mp:=akt_mp+1; End Else Begin akt_mp:=1; End; End; Enter : Begin Case akt_mp Of 1: Begin SzimLepes; End; 2: Begin SzimLepes; End; 3: Begin End; 4: Begin SzimLepes; End; 5: Begin End; 6: Begin End; 7: Begin kilep:=True; End; End; End; Esc : Begin kilep:=True; End; Fel : Begin End; Le : Begin End; End; Until (kilep); SetColor(szin); End; BEGIN Grafikusra; SzimNev('Szimulcis keretprogram'); Ablakok(true,true,true); Menu; Szovegesre; END.