|
GOSUB / RETURN Bir programda, programın ayrı yerlerinde aynı işlemi kullandığımızda bu işlemi her defasında programa eklemektense yapılan işlemi bir kere yazıp, programı istenildiğinde oraya yönlendirip işlem bittiğinde tekrar kaldığı yerden devam etmesi için bu komutu kullanırız. Tabi bu açıklama biraz, hatta biraz değil oldukça karmaşık oldu. Bu yüzden bu olayı örnekle açıklayalım. Diyelim ki bir satış ve stok programı yapıyoruz. Ve bu program da ta bi ki menülerden oluşuyor. Bu menüleri yaparken ekranda bir çerçeve içerisinde görünmesini istiyoruz. Ana menümüz ve alt menüler şöyle olsun:ANA MENÜ
STOK MENÜSÜ S ATIŞ MENÜSÜ
Şimdi bu üç menünün de aynı ebatlarda bir çerçeve içinde görünmesini istiyoruz. Normalde her menüyü yaparken önce ekrana bir çerçeve çizdirmemiz gerekir. Ama her üç menüde de aynı ebat ve özelliklerde çerçeve çizileceği, yani aynı işlem tekrarlanacağı için biz bu bölümü ayrı bir yerde bir defa hazırlıyoruz ve her menü için çerçeve çizileceğinde programı bu çerçeve çizdiren bölüme yollayıp işlem bittiğinde tekrar kaldığı yerden devam ettiriyoruz. Şimdi basit olarak yukarıdaki örneği görelim.10 CLS20 GOSUB 500 30 LOCATE 9,30:PRINT "A N A M E N Ü" 40 LOCATE 11,28:PRINT "1. STOK MENÜSÜ" 50 LOCATE 12,28:PRINT "2. SATIŞ MENÜSÜ" 60 LOCATE 13,28:PRINT "3. ÇIKIŞ"70 LOCATE 15,28:LINE INPUT "Seçiminiz .......:";X$80 IF X$="1" THEN 150 90 IF X$="2" THEN 300 100 IF X$="3" THEN END 110 GOTO 70 150 CLS 160 GOSUB 500 170 LOCATE 7,34:PRINT "STOK MENÜSÜ" 180 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ" 190 LOCATE 10,28:PRINT "2. DÜZELTME"200 LOCATE 11,28:PRINT "3. SİLME" 210 LOCATE 12,28:PRINT "4. EKRAN LİSTE"220 LOCATE 13,28:PRINT "5. YAZICI LİSTE"230 LOCATE 14,28:PRINT "6. ANA MENÜ"240 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$ 245 IF X$="1" THEN 1000 250 IF X$="2" THEN 1100 255 IF X$="3" THEN 1200 260 IF X$="4" THEN 1300 265 IF X$="5" THEN 1400 270 IF X$="6" THEN 10 275 GOTO 240 300 CLS 310 GOSUB 500 320 LOCATE 7,34:PRINT "SATIŞ MENÜSÜ" 330 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ"340 LOCATE 10,28:PRINT "2. DÜZELTME"350 LOCATE 11,28:PRINT "3. SİLME" 360 LOCATE 12,28:PRINT "4. EKRAN LİSTE"370 LOCATE 13,28:PRINT "5. YAZICI LİSTE"380 LOCATE 14,28:PRINT "6. ANA MENÜ"390 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$ 400 IF X$="1" THEN 2000 410 IF X$="2" THEN 2100 420 IF X$="3" THEN 2200 430 IF X$="4" THEN 2300 440 IF X$="5" THEN 2400 450 IF X$="6" THEN 10 460 GOTO 390 500 CLS 510 LOCATE 6,25:PRINT "Bu bölüme siz bu yazıları değil de ALT tuşu ile beraber 201, 205 ve 187 yazarak çift çizgi ile çerçeve çizeceksiniz." 520 LOCATE 7,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"530 LOCATE 8,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"540 LOCATE 9,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"550 LOCATE 10,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"560 LOCATE 11,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"570 LOCATE 12,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"580 LOCATE 13,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"590 LOCATE 14,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"600 LOCATE 15,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"610 LOCATE 16,25:PRINT "alt+200 YETERİ KADAR BOŞLUK VE alt+188"620 RETURN510 nolu satırdaki PRINT komutundan sonra tırnak içinde yazılan bölüme oradaki yazıları yazmayacaksınız. Onlar açıklama. Burada yapacağınız işlem şu. Tırnak işaretini açtıktan sonra bir parmağınızla klavyedeki Alt tuşunu basılı tutarken diğer elinizle klavyenin numerik bölümünden 201 yazıp Alt tuşunu bırakacaksınız. Bıraktığınız anda Çerçevenin sol üst köşesi çizilecektir. Aynı şekilde Alt tuşu basılı iken 205 yazıp Alt tuşunu bıraktığınız zaman yatay çift çizgi çizilir. Bu çizgiden 27 adet çiziniz. En sonunda da Alt tuşu ile beraber 187yazınız bu da çerçevenin sağ üst köşesidir.520 no lu satırda ise Alt tuşu ile 186 yazdığınızda dikey çift çizgi çizilir. 27 kez aralık çubuğuna basıp sonra yine Alt+186 yazın. Bu şekilde Alt tuşu ile beraber diğer çizgileri de üretebilirsiniz. Ayrıca 27 kez yatay çizgi çekmek yerine daha evvelki sayfalarda öğrendiğiniz STRING$ komutunu kullanarak tek bir komutla 27 çizgi çize bilirsiniz. Yani buna göre 510 no lu satırı şöyle de yazabiliriz:510 LOCATE 6,25:PRINT CHR$(201);:PRINT STRING$(27,205);:PRINT CHR$(187) Şimdi yukarıdaki programa bakarsak (tabi bu bir programın sadece menü kısmı) 10 nolu satırda ekran siliniyor. 20 nolu satırda ise bir GOSUB 500 komutu var ki bunun anlamı şudur. 500 no 'lu satıra git ve oradaki işlemleri yap. Ne zamana kadar; Ta ki RETURN komutunu görünceye kadar. Bu RETURN komutunun anlamı ise NEREDEN GELDİYSEN ORAYA DÖN VE BİR ALT SATIRDAN DEVAM ET. Dem ek ki program 20 no lu satırdan 500 no lu satıra geldiğine göre 620 no lu satırda RETURN komutunu görünce 20 no lu satıra geri dönerek bir alt satırdan yani 30 no lu satırdan çalışmaya devam edecek. Eğer 160 no lu GOSUB 500 komutu ile 500 no lu satıra gitmiş ise 620 no lu satıra gelip RETURN komutunu görünce 160 no lu satıra geri dönüp bir alt satırdan yani 170 no lu satırdan çalışmaya devam edecektir.
|