160 likes | 317 Views
واحد Crt. تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86. مروری بر مطالب. برای کنترل ورودی و خروجی با دستورات زیر آشنا شدید: readln, read, writeln, write برای کنترل بیشتر بر روی صفحه نمایش و کلید از واحد Crt استفاده می کنیم.
E N D
واحد Crt تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
مروری بر مطالب • برای کنترل ورودی و خروجی با دستورات زیر آشنا شدید: • readln, read, writeln, write • برای کنترل بیشتر بر روی صفحه نمایش و کلید از واحد Crt استفاده می کنیم.
ضرورت دستورات دیگر • برنامه ای بنویسید که در خروجی 1 چاپ می کند تا زمانی که کاربر حرف ”E“ را وارد کرد. var ch:char; Begin While true do Begin write(1); read(ch); if (ch=‘e’) or (ch=‘E’) then exit; end End.
ضرورت دستورات دیگر (ادامه) • اشکالات برنامه • پس از ایجاد هر خروجی ، از کاربر ورودی می گیرد • کاربر در هر ورودی لازم است، کلید enter را وارد نماید تا کنترل از خروجی به ورودی باز گردد. • دستور read(ch) تا #13 دریافت نکند اجرایش تمام نمی شود.
ضرورت دستورات دیگر (ادامه) • دستورات مورد نیاز • دستوری که بتواند به ما نشان دهد آیا کلیدی وارد شده است یا خیر ! • دستور keypressed تابعی است که در هر فراخوانی بررسی می کند آیا کلیدی وارد شده است یا خیر (آیا در بافر صفحه کلید کاراکتری برای خواندن وجود دارد یا خیر). • در صورتی که کلید زده شده بود، مقدار آن را به ما بازگرداند • دستور readkey دریافت کاراکترهای ذخیره شده در بافر صفحه کلید امکان پذیر می کند
ضرورت دستورات دیگر (ادامه) • برنامه ای بنویسید که در خروجی 1 چاپ می کند تا زمانی که کاربر حرف ”E“ را وارد کرد. var ch:char; Begin while true do begin while not keypressed do write(1); ch:=readkey; if (ch=‘e’) or (ch=‘E’) then exit; end; End.
دستورات کنترلی و ورودی از صفحه کلید • Function Keypressed : Boolean • Function Readkey:char • Returns a character or an extended scan code! • ,,, • The character is not echoed to the screen
مثال : برنامه بنویسید که با دریافت جهت های حرکت کاراکترهای جهت را چاپ کند uses crt; type dir = (up,down,left,right); const chars : Array[1..4] of char = (#24,#25,#27,#26); var ch : char; direct : dir; begin while true do begin while not keypressed do; {begin write('*':2); delay(100); end;} ch:=readkey; if ch='e' then exit else if ch=#0 then begin ch:=readkey; case ch of 'H' : direct := up ; 'P' : direct := down ; 'M' : direct := right ; 'K' : direct := left ; End ; write(chars[ord(direct)+1]:2); end; end; end.
واحد • هنگامی که رویه یا تابعی را می نویسید، می توانید در برنامه های مختلف از آن استفاده کنید به شرط آنکه کد رویه و یا تابع را در برنامه جدید کپی کنید. • می توانید رویه ها و تابع ها را در کنار هم در یک واحد قرار دهید و سپس با استفاده از آن واحد، از امکانات آن استفاده نمایید. • با استفاده از دستورname_unit uses ، استفاده از امکانات یک واحد به نام name_unit را بیان می کنید.
Linker Loader compiler Pr.pas Pr.obj Pr.exe Crt.tpu واحد (ادامه) • نحوه استفاده اجرای برنامه Linker compiler Pr.pas Pr.obj Pr.exe
واحد (ادامه) • کلیه واحدهایی که در کتابخانه اصلی توربو پاسکال قرار دارند (مانند Printer، Crt، Dos و غیره) روی فایلی تحت عنوان turbo.tpl ذخیره می شوند. • برای استفاده از crt از turbo.tpl ای روی homepage درس است استفاده نمایید. • توربو پاسکال برای کد ماشین واحد داده شده ابتدا درون شاخه جاری را جستجو می کند. در صورتی که فایل پیدا نشد، توربو پاسکال در شاخه ای که برای unitdirectories تخصیص یافته جستجو می کند. (این شاخه در زیر منوی Directories… از منوی Option قرار دارد)
دیگر دستورات واحد Crt (ادامه) • (ثوابت) رنگ های تعریف شده در پاسکال
مثال: برنامه ای بنویسید که به پنجره های رنگی به صورت تصادفی ایجاد کند تا زمانی که کلیدی زده شود uses crt; Var x1,y1,x2,y2,h,w,c :integer; begin while not keypressed do begin x1 := random(79)+1; y1 := random(24)+1; w :=80-x1; h :=25-y1; if (h>0) and (w>0) then begin x2:=x1+random(w-1)+1; y2:=y1+random(h-1)+1; window(x1,y1,x2,y2); c :=random(6)+1; textbackground(c); clrscr;; end; end; end
پیاده سازی حرکت کرم Begin EOG := true ; LEVEL:=1 ; EOG := true ; While EOG do Begin INIT_Wall(Level); INIT_foods ; INIT_putworm; If Game then LEVEL:=LEVEL+1 else EOG := false; End ;
پیاده سازی حرکت کرم (ادامه) Function Game:boolean; Var … Begin gameover:= false; while not gameover do begin Move(get_dir); if food[wx,wy] >0 then grow(food[wx,wy]); else ... end; Game := gameover; End.