program JdemeNaPivo; { Pojdte do virtualni hospody! } const lok=60; cena=12; type druhy=(svetle,cerne,rezane); specvel=(male,pullitr,tuplak); stupne=(desitka,jedenactka,dvanactka); Pivo=object druh:druhy; objem:specvel; stupen:stupne; mnozstvi:word; pena,dno:boolean; pocetpiv:byte; { 'integer' piv asi nevypijete? } constructor Uvar; procedure Objednej;virtual; procedure Natoc;virtual; procedure Vypij(lok:byte);virtual; function JestePivo:boolean;virtual; procedure Zaplat;virtual; end; constructor Pivo.Uvar; begin pocetpiv:=0; end; { ok, ted mame k dispozici pivo a muzem zacit pit... } procedure Pivo.Objednej; var d,o,s :char; { prichazi vas virtualni cisnik... } begin writeln(' Co si date?'); write(' Nabizime svetle(s), cerne(c) i rezane(r)... '); readln(d); case d of 'c': druh:=cerne; 'r': druh:=rezane else druh:=svetle; end; write(' pullitr(p), male(m), tuplaky(t)..... '); readln(o); case o of 'm': begin objem:=male; mnozstvi:=300; end; 't': begin objem:=tuplak; mnozstvi:=1000; end; else begin objem:=pullitr; mnozstvi:=500; end; end; write(' desitku(d), jedenactku(j), dvanactku(v)? '); readln(s); case s of 'j': stupen:=jedenactka; 'v': stupen:=dvanactka; else stupen:=desitka; end; writeln(' Dobre, hned to prinesu...'); end; procedure Pivo.Natoc; { do akce se zapojuje vas virtualni hospodsky... } begin inc(pocetpiv); pena:=true; writeln; { a nese se pivo... } writeln(' Uz se to nese...'); writeln(' (@@@)'); writeln(' (@@@@@)_'); writeln(' | 0 0 | |'); writeln(' | 0 0 |_|'); writeln(' |_____|'); writeln; end; procedure Pivo.Vypij; begin dno:=false; repeat mnozstvi:=mnozstvi-lok; if (mnozstvi-lok)<=0 then dno:=true; until dno; writeln(' Aah, to byla zizen!'); { vypili jste pivo... } writeln(' _'); writeln(' | | |'); writeln(' | |_|'); writeln(' |_____|'); writeln; if lok < 50 then { kdyz to pivo jen tak ucucavate } begin writeln(' Pijes moc pomalu, pada ti pena.'); writeln; pena:=false; end; end; function Pivo.JestePivo; { mate chut na dalsi? } var jeste:char; begin write(' Jeste pivo? (a/n) '); readln(jeste); if jeste='n' then JestePivo:=false else JestePivo:=true; end; procedure Pivo.Zaplat; var plat:integer; { co kdybyste pozvali celou hospodu ;-) } i:byte; begin plat:=pocetpiv*cena; writeln; { tak spocitame ty carky } for i:=1 to pocetpiv do write(' |'); writeln; for i:=1 to pocetpiv do write('-|'); writeln('-'); writeln(' A bude to ',plat,' korun.'); end; var Pivko:Pivo; begin { jsme "v hospode" } Pivko.Uvar; Pivko.Objednej; repeat Pivko.Natoc; Pivko.Vypij(lok); until not Pivko.JestePivo; Pivko.Zaplat; end. { Tento program nema ani tolik fungovat, jako spis vnest } { trochu humoru do objektove orientovaneho programovani. } { Pivu a OOP zdar! } { Programovala Petra Talandova, 2003 }