Bu sayfadaki yazılar
Sayfanın metni
Sayfa 61
SAYAC- 0 WHILE SAYAC 10 PRINT “MERHABA” SAYAC- WEND PRINT “SON”
Bu program bir önceki programla aynı işi yapıyor, ama ikincisi programcının olayı çok daha kolay görebilmesine olanak veriyor. Bu programda da başlangıçtaki sayaç sıfırlanıyor (initialize ediliyor). Ardından WHILE komutu geliyor. Bu komutu şöyle açıklamak mümkün: “SAYAC 10'dan küçük olduğu müddetçe, WEND'e kadarki bütün komutları yerine getir.” Yani pratikte WHILE ve WEND, döngünün başını ve sonunu işaretleyen parantezi oluşturuyorlar. Döngünün içinde bu iki komut arasında her akış sayacı 1 artıyor. SAYAC nihayet 10'a eşit olduğunda, WHILE'ın ardından gelen koşul geçerli olmuyor ve program WEND'in ardından gelen komutla devam ediyor. WHILE-WEND kombinasyonunun varlığının amacı, yalnızca bir döngünün komutlarının belirli bir sayıda yinelenmesini sağlamak değil elbette. Programcı, bu kombinasyonu, henüz döngünün kaç kez işlemesi gerektiğini bilmediği durumlarda kullanır. Döngünün sona ermesi belirli bir olayın gerçekleşmesine bağlıdır. Örnek:
INPUT SAYI S-— SAYI WHİLE S WEND SAYI-S PRINT S PRINT “SON”
-1
Bu program virgülden sonra hanesi olmayan bir sayı verir. INPUT komutu klavyeden bir giriş bekler. Bu komutun verilmesiyle ekranda bir kursor belirir. Şimdi, (RETURN) tuşuna basıldığında sayının adının bulunduğu bellek alanına yerleşecek olan herhangi bir değer klavyeden girilebilir. Sayı, S'ye geçici olarak yerleşir. Program, virgülden önce bir sıfır kalana kadar S'den 1 değerini eksiltir. Bu durumda S'de yalnızca sayının virgülden sonraki kısmı kalır. Bu, sayıdan çıkarılır ve sonuç ekrana yazılır. WHILE döngü akışlarının adedi bu sayıya bağlıdır. Peki, programın yerine getirmesi gereken döngü sayısının önceden bilinebildiği durumlarda ne olacak? Bu durum için de tabii hemen her programda bulunabilen özel bir yapı söz konusu. BASIC dilinde bu görevi FOR... NEXT döngüsü yerine getirir. Ama burada bu döngünün açıklamasına pek girmek istemiyoruz. Virgülden sonraki hanelerin ortadan kaldırılması çoğunlukla gerekli olmaktadır. Varsayalım ki, büyükçe bir programın üç yerinde bir değerin yalnızca virgülden önceki hanelerinin basılması gerekiyor olsun. Bu durumda son örneğin satırlarının bu programın içinde üç kez yinelenmesi gerekecek. Bu da oldukça gereksiz bir yer kaybına neden oluyor. Sorunu daha basit biçimde çözebilmek için BASIC ve diğer birçok programlama dilinde prosedür adı verilen bir yöntemden yararlanılabiliyor. Örnek:
PROC VIRGULDENSONRASIZ
(SAYI) STATIC S- SAYI WHILES - 1 WEND SAYI - SAYI — S PRINT S END PROC
Her iki örnekte de aslında aynı program adımları sözkonusu. Ama ilk ve son satırlar bu komutlardan özel bir durum yaratıyorlar: Bir prosedür. Prosedürler genellikle büyük programların sonlarında bulunurlar. Eğer bir programın belirli üç yerinde bir sayının yalnızca virgülden önceki kısımlarının verilmesi gerekiyorsa,
Başla
PRINT “MERHABA”
SAYAC- 1
IFSAYAC 10
PRİNT “SON”
Sayacı sıfıra getir
Sayacı bir artır
Sona erdir
Akış diyagramı ve BASIC'e çevirisi
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 60
Programın başı/sonu
Veri işleme (operation)
Program dallanması (tercih)
Akış yönü
Akış diyagramlarının yapılmasında kullanılan önemli semboller
Bu komut tür, birbirini katı bir şekilde takip eden komutları yerine getiren bilgisayar programlarıyla gerçekleştirilemez. Bu nedenle programlarda dallanma (... eğer, öyleyse ...) ve tekrarlanan faaliyetler (... olana kadar) olanağı vardır. Her iki komut türü (dallanma ve tekrar) için de önemli olan, BASIC'te GOTO komutuyla gerçekleştirilen program atlamalarıdır. Bu konuya ilişkin olarak bir örnek program görelim:
START PRINT “MERHABA” GOTO START PRINT “SON”
Bu programı başlattığınızda ekranda “MERHABA” sözcüklerinden oluşan sonsuz satırlar zinciri görünecektir. Programın başlaması bir öncekinin aynısıdır. Birinci satır herhangi bir etki yaratmaz. Bu satır yalnızca programın içinde önemli bir yeri belirten bir program işaretidir (İngilizce'de Label). İkinci satır ekrana “MERHABA” ifadesini yazar. Ardından GOTO'nun anlamı “git”'tir. Bu komutun görevi, daha önce gördüğümüz alışılmış mekanizmanın, yani bir komutun ardından mutlaka bir sonrakinin yerine getirilmesinin, kesintiye uğratılmasıdır. GOTO START'tan sonra hemen ardından gelen PRINT “SON” değil, ilk “START”ı takip eden komut yerine getiriliyor. Yani pratikte program baştan başlamış oluyor. Programın son komutu olan PRINT “SON” bir türlü yerine getirilemiyor, çünkü program daha önce START'a geri dönüyor. Bu programın normal bir sonu yoktur. Bu tür programlara sonsuz döngü adı verilir. Bu programı AMIGA BASIC'le girmişseniz, RUN menüsündeki STOP komutunu kullanmanız gerekecektir. Geriye doğru atlayış içeren programların sonsuz döngü oluşturma eğilimleri oldukça yüksektir.
Programcı durum tercihi yardımıyla bir sonsuz döngünün normal düzenli bir döngüye dönüşmesini sağlayabilir. Düzgün bir döngünün en basit biçimi, belirli sabit bir sayıda dönüşü gerçekleştiren ve ardından sona eren sayı döngüsüdür. Bunu sağlamak için örnek programımızda küçük bir değişiklik yapmak yeterli:
SAYAC- O START PRINT “MERHABA”
SAYAC- SAYAC*41I IF SAYAC 10 THEN GOTO START PRINT “SON”
Bu program, ekranda yalnızca on kez “MERHABA” yazacak ve SON ifadesiyle sona erecektir. Eskisindekine göre farklı davranmasının nedeni, sondan bir evvelki satırda bulunan durum tercihidir (koşul). Bu satırın sonundaki atlama komutu yalnızca eğer (İngilizcesi: IF) SAYAC değişkenindeki değer 10'dan küçükse yerine getirilecektir. Bu değişken programın başında sıfırlanır. Bilgisayar dördüncü satırda değişkenin değerini 1 artırır. Yani program akışı içinde IF komutuna ilk kez erişildiğinde değişkenin değeri 1'dir. Bu değer 10'dan küçüktür ve bu nedenle başlangıca geri atlama gerçekleşir. IF komutuna ikinci kez erişildiğinde, SAYAC'ın değeri 2'dir. Bu da 10'dan küçük olduğundan, yine başa dönülür. Bu oyun, SAYAC'ın 10 değerini almasına kadar devam eder. Bu durumda IF komutuna erişildiğinde, “SAYAC 10” koşulu artık yerine getirilmemekte olduğundan, GOTO komutu göz ardı edilmektedir. Şimdi program bir sonraki (yani son) komutu yerine getirecek ve sona erecektir.
Akış Diyagramları
Size örnek programımızın işlevini dökümü yardımıyla kolayca açıkladık. Daha büyük programları açıklamak ise pek bu kadar kolay olmayabilir. Program akış diyagramı (şeması) adı verilen bir tür grafik çizim, programlara genel bakışı kolaylaştırabilir. Profesyonel programcılar, kapsamlı ya da karmaşık projelerde öncelikle bir akış planı yapar ve bunu istenen bilgisayar diline daha sonra uygularlar. Akış diyagramları dilinden bağımsızdır.
Bu yolla problemin çözümüne yönelik mantık akışı, program tekniğine ilişkin gerçekleştirme sorunlarına dalınmadan bulunabilir.
IF komutu yardımıyla bir program döngüsü oluşturduk. Bu komut başka amaçlar için de kullanılır. Önceleri programcılar döngüleri oluşturabilmek için, IF komutunu daima bir atlama komutuyla birlikte kullanmak zorundaydılar. Modern programlama dillerinin çoğunda döngü oluşturmak için daha şık bir çözüm var artık: WHILE komutu.