PROGRAMLAMA TEMELLERİ-DERS NOTLARI ALGORİTMA VE
Transkript
PROGRAMLAMA TEMELLERİ-DERS NOTLARI ALGORİTMA VE
PROGRAMLAMA TEMELLERİ-DERS NOTLARI ALGORİTMA VE PROGRAMLAMAYA GİRİŞ GİRİŞ Kabul etmeliyiz ki; bilgisayarların günlük yaşamımızda girmediği alan kalmadı. İletişim, ticaret, bankacılık, tıp, elektrik, elektronik gibi akılımıza gelen bir çok alanda önemini ortaya koymuştur. Dolayısıyla, bilgisayarlar çok çeşitli işlemleri veya problemleri çözme konusunda ,milisaniyelerle ifade edilebilen bir süre içinde sonuca ulaşabilmektedirler. Bilgisayarların, işlem yapabilme yada problem çözme becerileri,genel anlamda, yazılım (software) diye adlandırdığımız, ifadeler aracılığı ile kazandırılmaktadır. İfadeler topluluğunu program diye isimlendirebiliriz. Programlar ise, bilgisayar dili dediğimiz diller, makine ile insanoğlu arasındaki iletişimini sağlayan ve ne yapılması veya yapılmaması gerektiğini anlatan yoldur. Bilgisayar dilleri, alçak seviyeli ve yüksek seviyeli diller olmak üzere, iki başlık altında toplanmaktadır. Alçak seviyeli diller; daha çok makine dili dediğimiz diller olup bir kaç karakterli, iki tabanlı veya 16(hexadecimal) tabanlı sayı sistemine göre ifade edilen kodlardan oluşmaktadır. Birleştirici dili (Assambler), makine dili (machine language ) bunlara örnek olarak verilebilir. Yüksek seviyeli diller ise, bizler tarafından okunması daha kolay olan dilleridir ve Pascal, C, Qbasic, Cobol gibi dilleri, yüksek seviyeli dillere örnek olarak verebiliriz. Bu dillerden birini kullanmak suretiyle problem çözümlerini gerçekleştirebiliriz. Dolayısiyle, İlgili dil ortamında programlar yazılabilmektedir, yada yazılmış olan programlara müdahale edilebilmektedir. Ancak, bu programların yazılımı, sorunların çözümlenmesi, belli bir mantık sırasını içermektedir. Bu mantığın gelişimi, algoritma diye ifade ettiğimiz bir anlatımın ne kadar iyi kullanabildiğimize bağlıdır. ALGORİTMAYA GİRİŞ İnsanların günlük hayatlarında yaptığı her hareket, her olay, belli bir sıraya veya akışa göre yürütülmektedir. Örneğin; yemek pişirmek bile, belli bir sıra gerektirmektedir. Öncelikle bu yemeğin malzemesi alınır. Daha sonra yemek pişirilir ve sonunda servis yapılır. Başka bir örnek verecek olursak; size 10 sayısı ile 20 sayısının toplam sonucu sorulabilir. Burada ilk yapılacak işlem iki sayıyı alırız, bu sayıları beynimizle toplama işleminden geçirir ve daha sonra sonucu söyleriz. Dikkat edilecek olursa, bu iki örnek arasında konu bakımından farklılıklar olsa bile, işlem sırası bakımından hiçbir farkın olmadığını görürüz. Bu sıraları değiştirmek mümkün değildir. Bu sıranın ne olduğuna bakacak olursak 3 ana bölümden oluştuğunu görürüz. Bunlar; 1. Giriş Bölümü 2. İşlem Bölümü 3. Sonuç Bölümü Yukarıdaki iki farklı örneği karşılaştıracak olursak; yemek malzemesi alınması ve iki sayının toplama işlemi için bize verilmesi giriş bölümünü ifade etmektedir. Yemeğin pişirilmesi ve diğer taraftan sayıların beynimizle toplama işleminin gerçekleştirilmesi işlem bölümünü, yemeğin servise sunulması, ve sayıların toplam sonucunun söylenmesi bize sonuç bölümünü gösterir. Bu sıra asla değişmez. Bilgisayarlarda bu sırayı takip etmek için, yararlanacağımız en iyi araç Algoritmadır. Bu nedenle, yukarıda verilen toplama işlemi örneğini bilgisayar ortamına taşıyacak olursak; 1- Giriş bölümü: A ve B gibi iki sayının bize verilmiş olması gerekiyor. Dolayısıyla A ve B sayıları işlem için ya yazılımın içinden yada yazılımın dışından alınmaktadır. A ve B sayıları yazılım içinden R.ŞEN Sayfa 1 PROGRAMLAMA TEMELLERİ-DERS NOTLARI alınıyorsa “atama işlemi” yapılıyor denilir. Eğer A ve B sayıları yazılımın dışından alınıyorsa, A ve B sayıları ya “aynı veri satırından” yada “ayrı veri satırından” okutulmak şeklinde gerçekleşir. 2- İşlem bölümü: A ve B sayılarının toplama işlemi yapıldıktan sonra çıkan değerin belirlenen bir isim altında hafızada tutulması gerekir. Bu nedenle, toplama işlem sonucunun tutulacağı yere TOPLAM isminin verildiğini kabul edelim. 3- Sonuç bölümü için; işlem sonucunda elde edilen sonuç TOPLAM ismi ile tutulduğuna göre, bu değeri sonuçta TOPLAM ismi ile ilan edilmelidir . Bilgisayar ortamında gerçekleştirilen bu işlemi algoritma mantığına uygulayacak olursak; Giriş bölümü için; A ve B sayıları klavyeden okutulur. Aşağıdaki gibi yazılabilir. OKU A,B İşlem bölümü için; A ile B’yi topla TOPLAM’ da sakla . Aşağıdaki gibi yazılabilir. TOPLAM A + B Sonuç bölümü için; TOPLAM’ ın tuttuğu değeri ekrana veya yazıcıya Yazdırmak istersek aşağıdaki gibi yazılabilir. YAZ TOPLAM Yukarıda üç bölümde gerçekleştirdiğimiz adımları aşağıdaki gibi alt alta satırlar halinde yazarsak; OKU A , B TOPLAM A + B YAZ TOPLAM Şeklinde, üç satırlık komutlar topluluğunu düzenlemiş oluruz ki, böylelikle istenen tüm işlemleri gerçekleştiren bir algoritmayı meydana getirmiş oluruz. ALGORİTMA NEDİR ? Programlama mantığına göre algoritma; bir işlemi sonuçlandırmak, bir problemi mantıksal bir sıraya göre çözmek için, sembollerle veya kelimelerle anlatım şeklidir. Yapılan tarifi biraz açmaya çalışırsak; günlük hayatımızda karşılaşabileceğimiz işlemler veya problemler, yukarıda verilen örneklerde olduğu gibi;Giriş,İşlem ve Sonuç bölümleri olarak, üç ana bölümde toplanmaktaydı. Bir işlemi yürütebilmek, bir probleme en uygun çözüm yolları üretebilmek veya bilgisayar ortamında programcılar tarafından yazılan en iyi programlar, algoritma mantığının alınmasına bağlı olarak gerçekleştirilmektedir. Herhangi bir programlama dilinde yazılan bir programı belgelemek maksadıyla, programın okunabilir ve anlaşılabilir olması, doğru algoritma yazımına bağlıdır. Bu da yazılmış olan programların, daha sonraları devamlılığını sağlayacaktır. Daha önceleri yazılmış olan programları güncelleştirme gereği olur ise , o zamana ait bilgilerin taze kalmadığı ve olaylara bakış mantığı değişebileceği, hiçbir zaman unutulmamalıdır. Dolayısıyla, algoritma düzenlenmeden yazılan programlarda, sonradan çıkabilecek sorunları çözmek, zaman aşımı nedeniyle zorlaşacaktır. Algoritma mantığının doğru bir biçimde gelişebilmesi, algoritma özelliklerinin kesinlikle, doğru anlaşılmasına bağlıdır. R.ŞEN Sayfa 2 PROGRAMLAMA TEMELLERİ-DERS NOTLARI ALGORİTMANIN TEMEL ÖZELLİKLERİ Algoritmalarda, doğru çözüme ulaşabilmek için, uyulması gereken temel özellikler vardır. Bu temel özellikler sırasıyla ; 1. Kesinlik 2. Etkinlik 3. Sonluluk 4.Giriş/Çıkış olarak ifade edilirler. 1.Kesinlik: Algoritmadaki anlatım satırları kesin olmalıdır. Kesin olmayan anlatım satırları algoritmada bulunmamalıdır. Bir algoritmayı yazarken, her programcının programlama bilgisinin aynı olmadığını göz önüne alıp, algoritmadaki cümlelerimizi, kesin ifadelerle belirtmeliyiz. Özetle kesinlik, algoritmanın en önemli temel özelliğidir. Örnek: TOPLAM A + B SAY SAY + 1 ORTALAMA TOPLAM / SAY Yukarıda verilen ilk örnekte, A ile B’ nin değeri belli ise (Verilmek zorundadır), B değeri, A değerine eklenerek, TOPLAM’ a, A ile B’nin toplam değerleri aktarılacaktır. Ok’un gösterdiği yön, bize işlem sonucunun tutulacağı yeri göstermektedir ve bunu atama işlemi yapıldı diye ifade ediyoruz. İkinci örnekte; SAY değerine 1(bir) eklendiğini ve yeni değer olarak SAY’da tutulduğunu görüyoruz. Bu gibi işlemleri çoğunlukla, tekrar işlemlerinde, işlemin kaç adet tekrarlandığını bulabilmek için, tercih edilen bir yol olarak kullanılmaktadır. Son örnek satırında; öğrenci notları toplamını simgeleyen TOPLAM’ ın içeriği, notların kaç tane olduğunun tutulduğu SAY’ ın içeriğine oranlanarak, elde edilen değer ORTALAMA ismine atama işlemi yapılmak suretiyle saklanmaktadır. 2. Etkinlik: Bir algoritma etkin olmalıdır. Bir algoritmanın etkin olabilmesi, içinde tekrar anlatımların bulunmamasına bağlıdır. Aşağıdaki algoritmada PI ve R değerleri tanımlanmakta ve sayısal değerler atanmaktadır. Atanan değerlere göre alan hesaplanmaktadır. Tanımlar ve hesaplama işleminin bir kez yapıldığı bu algoritma ETKİN bir algoritma olmaktadır. PI 3,14 R5 Alan PI * R^2 Aşağıdaki algoritmada ise, önce PI ve R tanımlanarak değer atanmaktadır. Alan hesaplanmakta ve daha sonra aynı işlemler bir kez daha yapılmaktadır. Benzer işlemlerin iki kez tekrarlanması nedeniyle etkin bir algoritma olmamaktadır. PI 3,14 R5 Alan PI * R ** 2 PI 3,14 R7 Alan PI * R ** 2 R.ŞEN Sayfa 3 PROGRAMLAMA TEMELLERİ-DERS NOTLARI İçinde en az tekrar anlatımları bulunduran algoritmalar, en etkin algoritmalar olarak kabul edilir. Dolayısıyla, içinde gereksiz tekrarları bulunduran yazılımlar etkin olamazlar. Bu nedenle, içinde tekrar anlatımları barındıran, bir algoritma tasarlanıyorsa, tekrar anlatımların tamamı için önerilen yol, en az sayıda alt algoritma diye isimlendirdiğimiz anlatımlara yer verilmelidir. Bir başka deyişle; birbirinden farklı fakat aynı türdeki tekrar işlemlerinde, bir tek alt algoritma ile çözüm gerçekleşebilir. Örnek: Bir sınıfa ait öğrencilerin, sorumlu oldukları derslere ait, girdikleri sınavlardan alacakları puanların ortalamalarını bulan bir yazılımı, bir alt algoritma aracılığı ile gerçekleştirilebilir. Dolayısiyle, her bir öğrenci için ayrı ayrı değil de, bir tek alt algoritma düzenleyip, sonuçlandırmak mümkün olabilir. Benzer olarak; bir işletmenin pazarlama elemanlarının, günlük satış ortalamalarının hesaplanması istenebilir. Dikkat edilirse, yukarıdaki iki örnek, aynı türden olması nedeniyle, aynı yazılım içerisinde, görünüşte ayrı konular olmasına karşın, yukarıda sözü edilen iki ayrı konunun çözümü, tek bir alt algoritma yazılımında gerçekleşebilir. Sonuç olarak söylenebilir ki , bir algoritmanın etkinliği, gereksiz tekrar işlemlerinden kaçınmaya bağlıdır. 3. Sonluluk: Her algoritmanın bir bitiş noktası veya algoritmanın alt algoritması var ise,bu alt algoritmaların geri dönüş noktası olmalıdır. Bunun anlamı; bir yazılıma ait algoritmanın bittiğini kesinlikle belirtmek gerekir. Aynı algoritma içinde, zaman zaman farklı işlemleri gerçekleştirmek üzere, farklı noktalara geçici olarak, algoritmanın akış yönünü değiştirme gereği olabilir ki, bu yukarıda alt algoritma olarak ifade edildi. Alt algoritmaya nereden gelinmiş ise , geldiğimiz yere, geri dönüş noktası kesinlikle sağlanmalıdır. Not: Alt algoritmalara saptığımız noktalar , Ana algoritma dediğimiz algoritma üzerinden gerçekleşmektedir. Fakat, zaman zaman alt algoritma içinden de başka bir alt algoritmaya sapılabilir. Aşağıdaki örnekte olduğu gibi. Örnek: Pascal’a göre yukarıda anlatılanları şekillendirmek istersek: Algoritmanın işletimi Adım Sırası ANA PROGRAM 1. Adım Alt Algoritma BİR Alt Algoritma İKİ 4. Adım END ANAPROGRAM ALT PROGRAM BİR 2. Adım Alt Program İKİ R.ŞEN Sayfa 4 PROGRAMLAMA TEMELLERİ-DERS NOTLARI RETURN ALT PROGRAM İKİ 3. Adım RETURN Yukarıda verilen yapıyı, alt programlama mantığı anlatılırken tüm detayları ile birlikte açıklanacaktır. Çok kısa açıklamak gerekirse: Yukarıdaki yapıya göre yazılmış bir programın çalışması, programın ilk satırından başlayarak, programın sonunu gösteren END ifadesine doğru adım adım olacaktır. Fakat, program içinden öncelikle ALT PROGRAM BİR çağrılmak suretiyle programın yönü ALT PROGRAM BİR’ e yönlendirilir. ALT PROGRAM BİR’in çalışması bitirilmeden, ALT PROGRAM BİR’in içinden, ALT PROGRAM İKİ çalıştırılacak ki, programın yönü altprogram ikiye dönmüş olur. Daha sonra, ALT PROGRAM İKİ çalıştırılıp RETURN ifadesi ile karşılaşıldığında, programın çalışma yönü, ALTPROGRAM BİR’e yeniden geriye dönülmüş olacaktır ve sonra ALTPROGRAM BİR’ e ait RETURN ifadesiyle karşılaşıldığında, programın yönü ALT PROGRAM BİR’in çağrıldığı yere geri dönecektir. Son olarak, ana programda ikinci sırada yer alan ALTPROGRAM İKİ işletime alınacaktır. Bu noktada akış yönü ana programdan ALT PROGRAM İKİ’ye dönmüş olacak ve ALT PROGRAM İKİ ‘nin çalışması RETURN ifadesi ile son bularak, çalışma yönü tekrar ana programa dönerek END ifadesi ile programın tamamının çalışması bitirilmiş olacaktır. 4. Giriş–Çıkış: Algoritmanın son özelliği giriş/çıkış bilgileridir. Algoritma tasarlanırken, bilgi transferi algoritma içine doğru oluyorsa, giriş bilgisini ve bilgi transferi algoritma dışına doğru oluyorsa çıkış bilgisi olmaktadır . Bir Algoritmada, giriş bilgisi denildiğinde, kesinlikle giriş bilgisi olacaktır diye bir istem yoktur. Bunun anlamı; giriş bilgisi kullanıcı tarafından girilebilir veya algoritma içinde yaratılabilir yada giriş bilgisi hiç olmayabilir. Ancak, algoritmada çıkış bilgisi denildiğinde, kesinlikle olmalıdır. Bilginin girişi; klavye,bar kod okuyucu, mouse gibi giriş ünitesi diye kabul edilen düzenekler aracılığı ile sağlanmaktadır. Bilginin çıkışı ise; ekran veya yazıcılar aracılığı ile sağlanmaktadır. Giriş ve Çıkış işlemleri için örneklersek; algoritmada bir bilginin giriş işlemi için okunabilmesi; READ ifadesi kullanılarak, değişken diye isimlendirdiğimiz, veri isimleri aracılığı ile gerçekleşmektedir. Bu durum VERİLER konu başlığı altında,verileri tanımlama konusu içinde ayrıntılı bir şekilde anlatılacaktır. Örnek: READ Değişken(ler) ;Değişken veya değişkenler ile belirtilenlere değer oku. READ ifadesi ile birden fazla veri okutulacaksa, READ ifadesinden sonra verinin okutulacağı değişkenler arası virgüller ile ayrılır. Bununla beraber bir tek READ ifadesi ile birden fazla veri okutuluyorsa, bu durumu aynı veri satırından okutuluyor diye anlarız. Eğer, her bir veri için ayrı satırlarda olma koşulu ile birer veri okutuluyorsa, bu durumu ayrı veri satırından veri okutuluyor diye ifade ederiz. Örnek: READ A,B,C ;Aynı veri satırından A,B ve C’ ye değer okutuluyor. Aşağıdaki örneklerde, ayrı veri satırından veri okutuluyor. READ A READ B READ C R.ŞEN ;Veri satırından A’ ya değer oku. ;Veri satırından B’ ye değer oku. ;Veri satırından C’ ye değer oku. Sayfa 5 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Bir bilginin çıkış için ekrana veya yazıcıya yazdırılması; PRINT gerçekleştirilmektedir. ifadesi aracılığı ile Örnek: PRINT değişken(ler) ;Değişken veya değişkenler ile belirtilen bilgiyi yaz . ALGORİTMANIN YAZILIŞI Bir algoritmanın yazılabilmesi için, bazı işlemlerin önceden bilinmesine bağlıdır. Bu işlemler sırasıyla; 1. Değer atama işlemi 2. Aritmetiksel işlemler 3. İlişkisel işlemler 4. Mantıksal işlemler şeklinde gruplandırabiliriz. 1. Değer Atama işlemi: Algoritmada tanımlanan bir ifadeye, değer atama işlemi işareti ile gerçekleştirilir. Algoritmada atama işlemi, belirlenen ifadeye değer olarak geçirilirken, iki şekilde gerçekleştirilebilir. Bu da algoritma içinden değer alarak, yada algoritma dışından değer alarak olabilir. Örnek: Algoritma içinden yapılacak atama işleminde SAY diye isimlendirilmiş bir ifade tanımlandığı kabul edilsin. SAY 10 ; Böyle bir işlemde; tanımlanan SAY isimli ifadeye 10 sayısı atandı denilmektedir. Böylelikle, işlem sonucunda, SAY isimli değişkene 10 değeri geçirilmiş olmaktadır. Örnek: Eğer belirlenen bir ifadeye, algoritma dışından bir değer alınarak, atama işlemi gerçekleştirilmek isteniyorsa, SAY ve A isimli iki ifadenin tanımlandığı kabul edilirse; öncelikle A isimli ifadeye, aşağıdaki gibi değer okutulması gerekmektedir. OKU A SAYA ; A ifadesi için değer oku. ; A ifadesinin tuttuğu değeri, SAY ifadesine atanıyor. Yani, A’ nın tuttuğu değer SAY’ ın içeriğine geçiriliyor denilir. 2. Aritmetik işlemler: Algoritmada, aritmetik işlemlerin her birini ayrı ayrı kullanabildiğimiz gibi, verilen bir formülün icra görmesi işleminde de kullanabiliriz. Verilen bir formülün icra işlemi içinde, aritmetik işlemi yürüten sembollerin (bunlara operatör adı verilir.) tamamı bulunabilir. Böyle bir durumda, işlem öncelik sırası; R.ŞEN Sayfa 6 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Aritmetik öncelikli işlem sırası Anlamı Sembol 1. 2. 3. 4. 5. Üs alma işlemi Çarpma işlemi Bölme işlemi Toplama işlemi Çıkarma işlemi ^ * / + - Not: Aritmetik operatörlerinin tamamının bulunduğu bir formül içinde, ayrıca parantez ile ifade edilen aritmetik işlemler de bulunuyorsa, parantez içindeki işlemler öncelik sırası olarak yukarıda verilen sıra aynı şekilde uygulanır ve daha sonra parantez dışındaki işlemler yukarıda verilen sıraya göre gerçekleştirilir. 3. İlişkisel işlemler: İki farklı ifadenin karşılaştırılarak, bir karar işlevini yürütebilmek için kullanılan işlemcilerdir (Operatör). Bir başka deyişle, iki farklı ifadenin karşılaştırılması sonucunda yapılacak işlemin, seçilebilme işlevinin yürütülmesini sağlayan operatörlerdir. İlişkisel işlemcilerin aşağıda sembol ve anlamları verildiği gibidir. Sembol 1. > 2. < 3. = 4. >= 5. <= 6. ^= Anlamı Büyüktür Küçüktür Eşittir Büyük veya eşittir Küçük veya eşittir Eşit değil Örnek: A ve B gibi iki ayrı ifadenin varlığı kabul edilsin. Buna göre; A>B A<B A=B A >= B A <= B ; A ifadesi B ifadesinden büyüktür. ; A ifadesi B ifadesinden küçüktür. ; A ifadesi B ifadesine eşittir. ; A ifadesi B ifadesinden büyük veya eşittir. ; A ifadesi B ifadesinden küçük veya eşittir. Özellikle yukarıda verilen örnekleri bir algoritma içine veya bir algoritma mantığına dayalı yazılan bir program içine yerleştirilirse, karşılaştırmalara bağlı koşullarda, yeni bir akış yönü veya yeni bir işlem gerçekleşebilir. 4. Mantıksal işlemler: Mantıksal işlemler; AND,OR,NOT gibi işlemcilerle belirlenen koşul veya koşullara bağlı olarak ifadeler test edilirler. Test işlemleri, koşulların doğru yada yanlış oluşlarına göre bir sonuç vermektedir. AND (VE) işlemcisi: İki farklı ifade (veri veya bilgi), ayrı koşullarda karşılaştırılarak, koşulların doğruluğu araştırılır. Karşılaştırma sonucunda, her iki ifade için, her iki koşulun doğruluğuna bağlı olarak bir işlem yürütülür. R.ŞEN Sayfa 7 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Bir öğrenciye ait not ortalamasını tutan ORTNOT ve devamsızlığını tutan DEVAM isimli ifadenin varlığı kabul edilsin. Öğrencinin geçebilme koşulu, 60 puana eşit ve yukarısında olma koşulu ile birlikte, bir yarı yıla ait devamsızlığı haftada iki saatlik bir ders için, 10 saat olarak kabul ediliyorsa, dersten geçebilme koşuluna aşağıdaki gibi bir mantık kurulabilir. ORTNOT >=60 AND DEVAM <= 10 GEÇTİ Geçebilme koşuluna dikkat edilirse, ORTNOT ‘ un en az 60 puan olma koşuluna bağlanırken aynı zamanda, DEVAM ‘ ında en fazla 10 saat olma koşulu ile birlikte değerlendiriliyor olmasına dikkat edilmelidir. OR (VEYA) işlemcisi : İki farklı ifade (veri veya bilgi), ayrı koşullarda karşılaştırılarak, koşulların doğruluğu araştırılır.Karşılaştırma sonucunda, her iki ifade için, her iki koşuldan birinin gerçekleşme durumuna bağlı olarak bir işlem yürütülür. Örnek: AND işlemcisinde verilen örneği OR işlemcisine uygularsak; Öğrencinin kalma koşulunu değerlendirmemiz gerekecektir. ORTNOT < 60 OR DEVAM > 10 KALDI Yukarıdaki örnekte kalma koşulu olarak ORTNOT ‘nun 60 puandan küçük veya derse devamın DEVAM değişkeninın 10 saatten büyük olama koşullarından biri belirlemektedir. NOT(DEĞİL)işlemcisi:Verilen ifadenin ters koşuluna göre test işlemi yürütülür. Yukarıda yapılan algoritma ile ilgili bu tanımlamaların dışında, algoritmaların yazımı, kullanılan bir programlama diline göre yazılmaktadır. Fakat, algoritma dili, konuşma dilimize çok yakın dil olarak ifade edilir. Bununla beraber, çeşitli algoritma dillerinden bahsedilmektedir. Bizim anlatımlarımız, SPARKS algoritma diye isimlendirilen algoritmaya göre olacaktır. Algoritma yazımının yanı sıra, akış diyagramı (Flow Chart) olarak isimlendirdiğimiz çözüm yöntemi ile de algoritma yazımına destek verilebilmektedir. Akış diyagramları (Flow Chart), anlatımlarımıza alınmamakla birlikte kısaca tanımlamak gerekirse; herhangi bir dille program yazımını gerçekleştirebilmek için, kabul edilen çeşitli sembollerle grafiksel yada şekil olarak, programın yazım mantığının nasıl kurulacağını açıklamaktadır. Bazı programcılar, yazdıkları algoritmaların yanı sıra akış diyagramı (Flow Chart) dediğimiz çizimlere de yer verebilmektedirler. Böyle bir diyagramın istenen bir yapıya göre hazırlanabilmesinin temel olarak kullanılan sembollerin bilinmesine bağlıdır. Bunlar ; Başlama – Bitiş sembolü Okuma – Yazma sembolü: R.ŞEN Sayfa 8 PROGRAMLAMA TEMELLERİ-DERS NOTLARI İşlem sembolü: Karar sembolü: Alt Program (Fonksiyon) sembolü: Birleştirici sembolü – Sayfa içi: Sayfa dışı: Akış yönü sembolleri: Aşağı yön: Yukarı yön: Sağ yön: Sol yön: VERİLER Bilgisayar ortamında işlemlerin yürütülebilmesi veya problem çözümlerinin gerçekleşebilmesi, bilgisayarlara ne yapması gerektiğini söyleyen diller aracılığı ile gerçekleşmektedir. Bu nedenle, neyi, nasıl, ne şekilde işleyip, sonuçlandıracağımızı, önceden belirlenen ifadelere göre gerçekleştirilmektedir. VERİ NEDİR? Üzerinde işlem yapabildiğimiz her türlü ifade, veri diye isimlendirilir. VERİ ÇEŞİTLERİ Veriler, sayısal ve alfa sayısal olmak üzere iki ayrı grupta değerlendirilmektedir. Sayısal : Sayısal verileri; tam sayılar ve ondalık sayılar olmak üzere iki grupta ifade edilir. Sayısal verileri gruplarken, sayıların negatif ve pozitif olma özellikleri de düşünülerek gruplandırılmıştır. R.ŞEN Sayfa 9 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Tam sayı özelliği: İçinde nokta içermeyen 0(sıfır)sayısı dahil, 9(dokuz) sayısı dahil aradaki sayılardan oluşan tüm sayılara tam sayı denir. Örnek: 1, +1534, - 32768, 0, -1, 1567 gibi sayılar. Ondalık sayı özelliği: İçinde nokta içeren sayı türlerine ondalık sayı denir. Örnek: 12.987, -6.78, +23.5, -1.5 gibi sayılar. Alfa sayısal (Alfabetik): A – Z karakterleri dahil aradaki tüm karakterler ve 0 – 9 sayıların tamamı alfa sayısal (alfabetik) olarak kabul edilir. VERİLERİ TANIMLAMA Veri (bilgi), bilgisayar ortamında üzerinde işlem yürütülen ifadeler olarak bilinir. Veri üzerinde, herhangi bir işlemi yürütebilmek için ,veri girişi, dış ortamdan gerçekleştirildiğinde, bilgisayarda rasgele erişimli bellek (RAM) denilen ortamda tutulmaktadır. Burada sorulacak bir soru; acaba bellekte veri nasıl tutulacaktır? Klavyeden bir veri girildiğinde, doğrudan doğruya bellekte belirlenen bir alanda tutulacaktır. Bu nedenle, veri girişi gerçekleşmeden önce veri için, beleğin belli bir yerinin o veriye ayrılması için, ilgili yer, kullanıcı tarafından isimlendirilmelidir. Bir başka deyişle; belleğin hangi yerinde veri tutulursa tutulsun, ilgili yerin, verinin türüne ve özelliğine bağlı olarak, kullanıcı tarafından verilecek bir isimle bellekte bir yer belirlenip ,ayrılacaktır. Bu yer belirleme işleminden sonra veri girişi kullanıcı tarafından gerçekleşecektir. Kısaca, belleğe bir veri girişinin yapılabilmesi için, mutlaka verilecek bir isimle, bellekteki verinin yeri belirlenmelidir. Bilgisayar ortamında veriler üzerinde işlem yapılabilmesi için bellekte bir yer ayrılması ve ayrılan bu yerin de isimlendirilmesi gerektiğini ifade ettik. İsimlendirme yapılırken, algoritma veya bir program dili içinde verinin nasıl değerlendirileceğine bağlı olarak gerçekleştirilir. Bu nedenle, genel anlamda verileri iki grupta değerlendiriyoruz. Bunlar; 1. Sabitler 2. Değişkenler 1. Sabitler : Bir programın çalışması sırasında, program başlangıcından, program sona erinceye kadar değeri değişmeyen ifadelere sabit denir. Algoritmada sabitleri sayısal ve alfa sayısal olarak ikiye ayırıyoruz. Sayısal Sabitler: 0 – 9 dahil arasındaki sayılardan oluşan sayıların tamamı sayısal sabit olarak kabul edilir. Sayısal sabitler iki grupta değerlendirilir. Bunlar ; Tam Sayı Sabitleri : İçinde nokta içermeyen , pozitif ve negatif sayıların tamamına denilir. tam sayı sabitleri Örnek: 127 , -128 , -32768 , +32767 , 0 , 12345 gibi sayılar. Ondalık ( Gerçel ) Sayı sabitleri: İçinde nokta bulunan, pozitif ve negatif sayıların tamamına ondalık yada gerçel sayı sabitleri denilir. Bu sayıları da kendi içinde iki gruba ayrılmaktadırlar. Bunlar; R.ŞEN Sayfa 10 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Sabit Noktalı Kayan Noktalı Sabit Noktalı Ondalık ( Gerçel ) Sabit Sayılar: Sayı içindeki noktanın yeri değişmiyorsa, sabit noktalı gerçel (ondalık) sayılar denir. Örnek : 1.5 , - 89.67 , +0.05 , +127.87 gibi sayıları verebiliriz. Kayan Noktalı Ondalık ( Gerçel ) Sabit Sayılar : Eğer sayı içindeki noktanın yeri değişiyorsa bu tip sayılara kayan noktalı (gerçel) sabit sayılar denir. Örnek : 1.5 E-23, 9.6E+15 , +1.7D-10 gibi sayıları verebiliriz. Diğer taraftan, ondalık (gerçel) sabit sayılar ikiye ayrılırlar. Bunlar;Tek duyarlıklı ondalık (gerçel) sabit sayılar. Çift duyarlıklı ondalık (gerçel) sabit sayılar. Tek duyarlıklı ondalık (gerçel) sabit sayılar: Gerçel sayının, noktadan sonra en fazla 7 basamak yürütülebilen sayı tiplerine denir. Çift duyarlıklı ondalık (gerçel) sabit sayılar: Gerçel sayının, noktadan başlayarak 7 haneden fazla ve 17 haneye kadar gösterilen sayılara denir. Kayan noktalı sabitlerde E karakteri sayının tek duyarlıklı (Single precision) olduğunu, kayan noktalı sabitlerde D karakteri sayının çift duyarlıklı (Double precision) olduğunu göstermektedir. Alfasayısal (Alfabetik) sabitler: 0 – 9 sayıları ve aradaki sayılar. A–Z, a-z arasıdaki karakterler ve tüm özel karakterler alfa sayısal ( Alfabetik ) sabitler olarak isimlendirilirler. Alfabetik sabitler gösterilirken (‘ ‘ ) tek tırnak aralığında gösterilirler. Ancak, boşlukta bir karakter olarak kabul edilir ve ‘’ olarak gösterilir. 2. Değişkenler: Bir programın çalışması sırasında, program başlangıcından, program sona erinceye kadar değeri değişebilen ifadelere değişken denir. Bir Pascal programlama dilinde değişkenleri tanımlarken bilinmesi gereken kurallar vardır. Bunlar aşağıda açıklandığı gibidir. İsimlendirme Kuralları - Değişkenlere verilecek isim mutlaka bir harf ile başlamalıdır. Harf karakterinden sonra sayısal değerler verilebilir.Sayı karakterleri ve özel karakterler ile başlayan isimler geçerli isim kabul edilmez. Örnek: ?ad, !SAY , 2ISIM gibi tanımlar geçersizdir. - Değişken ismine ait karakterler arasında boşluk karakteri olamaz. Pascal dilinde boşluk yerine alt çizgi ( _ ) karakteri kullanılabilir. R.ŞEN Sayfa 11 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: ORT NT Boşluk karakteri olması nedeniyle geçersiz. ort_nt ; boşluk yerine alt çizgi olması nedeni ile Pascal dilinde geçerli bir tanımlamadır. -Değişken isminde türkçe karakter kullanılamaz. -Değişkenlere verilen isim karakterleri arasında , * , ! , ? , & , ; , ( , ), gibi özel işaretler kullanılamaz. -Programlama diline ait komutlar değişken ismi olarak kullanılamaz. -Değişkenler iki grupta değerlendirilir. Bunlar, sayısal ve alfa sayısal değişkenler olarak ifade edilirler. Sayısal değişkenler: 1,2,3,4,5,6,7,8,9 ve 0 sayıları dahil bu sayıları temsil eden ifadelere denir. Sayısal değişkenleri, tam sayı ve gerçel sayılar olarak iki grupta değerlendiriyoruz. Alfa sayısal (Alfabetik) değişkenler: Özel karakterler dahil tüm karakterler ve karakter dizileri temsil eden ifadelere denir. PASCAL programlama dili Sabit ve değişken tanımlamalarını biraz daha açmaya çalışırsak; sabit veya değişkenin ne olduğu ile ilgili ifadeyi mikroişlemciye bildirmekle, veri için bellekte ne kadar bir yer ayrılacağını belirtmiş oluruz. Bellekte, ne kadar yer ayrılacağını bildirme işlemine, verileri tiplendirme işlemi denilir. PASCAL programlama diline göre, veri tip isimlerini genel anlamda açıklamak gerekirse, sayısal veya alfasayısal olsun, bellek alanında, verinin ne özellikte olduğunu derleyiciye bildirmektedir.Bu bildirimi Pascal programlamada, tanımlama blokları ile yapmaktayız. Bunlar; CONST (Sabitleri tanımlama bloğu), LABEL (Program içinde sapılacak adresi ifade eden blok), TYPE (Yeni tip tanımlama yada karmaşık yapısal yapıları tanımlama bloğu), VAR (Değişkenleri tanımlama bloğu) Sayısal Tipler Pascal dilinde kullanılan sayısal tipler iki grupta değerlendirilir. Bunlar; Tam sayı tipleri: Tam sayı tipleri, işaretli ve işaretsiz olarak iki grupta toplanır. İşaretsiz Tam sayı tipleri: Byte ve Word tipler olarak bilinirler. Byte tip ile tanımlanan sayılar, bellekte 1 Byte büyüklüğünde yer kaplar ve 0 ile 255 dahil aradaki sayıları ifade eder. Word tipi ile tanımlanan sayılar, bellekte 2 Byte büyüklüğünde yer kaplar ve 0 ile 65535 sayıları dahil arasındaki sayıları ifade eder. İşaretli Tam sayı tipleri: Shortint, İnteger ve Longint olarak bilinirler. Shortint tip ile tanımlanan sayılar, 1 Byte büyüklüğünde ve –128 ile +127 arasındaki tam sayı değerlerini ifade eder. İnteger tipi ile tanımlanan sayılar bellekte 2 Byte büyüklüğünde yer kaplar ve –32768 ile +32767 sayıları dahil arasındaki tam sayılar ifade edilir. Longint tipi ile tanımlanan sayılar, bellekte 4 Byte büyüklüğünde yer kaplar ve –2147483648 ile +2147483647 sayıları dahil arasındaki tam sayıları ifade eder. Yukarıda işaretli ve işaretsiz tam sayılarla ilgili açıklamaları aşağıdaki gibi bir tabloda görmektesiniz. R.ŞEN Sayfa 12 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Aralık -128 .. +127 -32768 .. +32767 -2147483648 .. +2147483648 0 .. 255 0 .. 65535 Tip Shortint Integer Longint Byte Word Uzunluk 8 bit 16 bit 32 bit 8 bit 16 bit Yukarıdaki tabolada verilen tipler program yazılımında kullanılırken, uzunlukları düşünülerek kullanılmalıdır. Çünki, program yazılımında kullanılacak en büyük değer 1 byte’lık değer ise, tanımlanan aralık Longint tipi ile gerçekleşirse, bellekte fazladan yer kullanmış oluruz. Bu da, programın hızı bakımından, programın yoğunluğuna da bağlı olarak istenmeyen bir durumdur. Bunun için değerler tanımlanırken, veri uzunluğu gereğinden fazla olmamalıdır. Böylelikle belleği rahatlatmış oluruz. Diğer taraftan işaretli sayıların bellekte nasıl tutuldukları ile ilgili açıklama yapmak gerekirse;tam sayı olarak tanımlanan bir sayı en az 1 byte (8 bit) uzunluğunda olmak zorundadır. Bir Byte uzunlukta bir sayı işaretsiz ise 0 ile 255 ve aradaki herhangi bir değeri alacak demektir. Eğer işaretli bir sayı ise, sekiz bit (1 Byte) uzunluğundaki bir sayının ikli sayı sistemine göre düşünüldüğünde soldaki en sonuncu bit işaret biti olarak ayrılır. Bu durumda sayı aralığı –128 ile +127 olarak karşımıza çıkar. Aynı şekilde bellekte, iki byte’lık (16bit) bir sayı tanımlamasında normal olarak 16 bitlik bir sayının işaretsiz olma koşulu ile alabileceği değer aralığı 0 ile 65535 arasındaki değerlerdir. 2 Byte’lık işaretli sayılarda 16 bitlik bir sayının en sonuncu biti olan 15. bit işaret bitidir. Eğer işaret biti 1 değerini almışsa sayı negatif bir sayıdır ve kalan 15 bitlik kısım da sayının mutlak değerini içermektedir. Aşağıdaki 2 byte uzunluğun bit gösterimi incelenirse; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 yukarıda verilen ikilik düzendeki 16 basamaklı sayının 15. biti (16. basamağına karşılık geliyor, çünkü bit numaraları 0'dan başlıyor) şekilde görüldüğü gibi "1" ise sayı "-7" dir. Eğer 15. bit "0" ise sayı "7" olarak kabul ediliyor. Fakat işaretsiz sayılarda 15. bit işaret biti değil, bizzat sayının bir basamağıdır. Bu sayı işaretsiz olarak düşünüldüğünde 32775 oluyor. (32768 + 7) Bu yüzden işlemcinin verilen bir sayının işaretli olup olmadığını bilmesine imkan yok. Bu sebeple işlemci içerisinde işaretli sayılar için ayrı, işaretsiz sayılar için ayrı komut setleri geliştirilmişti. Bu da hem programlamayı zorlaştırıyor hem de maliyeti arttırıyordu. En sonunda ortaya dahice bir yöntem atıldı. Bu yönteme göre örneğin "-7" nin bit gösterimini bulabilmek için ilk önce aşağıdaki birinci şekilde olduğu gibi "7" nin bit yapısı çıkartılıyor, ardından ikinci şekilde olduğu gibi tüm bitlerin tersi alınıyor ve son olarak elde edilen sayıya 1 eklenerek son şekildeki durum elde ediliyordu. 15 0 15 1 15 1 14 0 14 1 14 1 13 0 13 1 13 1 12 0 12 1 12 1 11 0 11 1 11 1 10 0 10 1 10 1 9 0 9 1 9 1 8 0 8 1 8 1 7 0 7 1 7 1 6 0 6 1 6 1 5 0 5 1 5 1 4 0 4 1 4 1 3 0 3 1 3 1 2 1 2 0 2 0 1 1 1 0 1 0 0 1 0 0 0 1 Son şekildeki durum "-7" nin gösterilişi olarak kabul edildi. Peki bu neye yaradı? Bunun "-7" nin gösterilişi olduğunu bilmesek, eksi bir sayı olduğunu bilmesek bile toplama, çıkarma gibi işlemlere işaretsizmiş gibi soksak da sonuçlar doğru elde ediliyor. Bunu ispat etmek için bu sayıyı 7 ile toplayalım. Sonucun "0" olması gerektiği açıktır. (bu gösterimde de 15. bitin işaret biti olduğuna dikkat edin) R.ŞEN Sayfa 13 PROGRAMLAMA TEMELLERİ-DERS NOTLARI 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Sonuç sıfır çıkmadı ve en soldaki basamakta bir "1" var gibi gözüküyor. Fakat 16 bitlik sayılarla çalıştığımızdan bu son basamak kaydedilemez ve yok olur. Bu yüzden gerçek sonuç "0" çıkmaktadır. Daha emin olmak için -7 ile 17'yi toplayalım ve sonucun 10 olup olmadığını kontrol edelim. 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 Görüldüğü gibi 2'ler ve 8'ler basamağında 1 var. Öyleyse sonuç 8 + 2 = 10 olur. Gelelim daha önceki sorunumuza. Integer tipindeki bir değişkenin değeri için 32768 girdiğimizde neden -32768 oluyor? Bunun için ilk olarak 32768'in bit gösterimini yapalım. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Görüldüğü gibi sayı işaretli bir sayı olarak düşünüldüğünde negatif bir sayı. Çünkü işaret biti"1". Peki bu hangi negatif sayının gösterimi? Bunun için bir pozitif sayıyı negatif sayıya dönüştürürken yaptığımız işlemlerin tersini yapmalıyız. Bulacağımız sayı bize yukarıdaki sayının hangi sayının negatifi olduğunu gösterecek. Aşağıdaki ilk şekil bu sayıdan bir çıkarıldığında aldığı hal (negatif yaparken en son bir ekliyorduk!). Sonraki şekil ise ters alınmış hali. İlginç bir şekilde yine aynı sayıyı elde ettik. Bu ise işaretsiz olarak okunduğunda 32768 sayısı. Demekki elimizdeki ilk sayı -32768 imiş. Tekrar 32768'in negatif gösterimini bulma işlemini yerine getirerek bunu kontrol edebilirsiniz. 15 0 15 1 14 1 14 0 13 1 13 0 12 1 12 0 11 1 11 0 10 1 10 0 9 1 9 0 8 1 8 0 7 1 7 0 6 1 6 0 5 1 5 0 4 1 4 0 3 1 3 0 2 1 2 0 1 1 1 0 0 1 0 0 Bu yüzden pascalda Type (tip) sınıflarına dikkat etmek gerekir. Sabit Tanımlama: Tam sayı sabitlerin genel tanımlama formu aşağıda verilmektedir. Genel Yazılımı: R.ŞEN Sayfa 14 PROGRAMLAMA TEMELLERİ-DERS NOTLARI CONST Sabit_ismi = Sabit; Aşağıdaki örnek tanımlamalarda; sayısal, alfasayısal ve karakter tanımlamalara örnekler verilmektedir. Örnek: CONST Tam_sabit_ismi=670; Değişken Tanımlama: Tam sayı değişkenlerin genel tanımlama formu aşağıda verilmektedir. Genel Yazılımı: VAR Tam_sayi_değişken_ismi : Tip_ismi; Örnek: VAR Tamsayi_değişken_ismi : Integer; Gerçel_sayı_değişkeni : Real; Yukarıda verilen INTEGER ifadesi yerine yukarıdaki tabloda görülen diğer tanımlama tiplerinden herhangi biri de kullanılabilir. Gerçel sayı tipleri: Gerçel (Kesirli) sayılar Pascal da; Real, Single, Double, Extended ve Comp tiplerdir. Aşağıdaki tablo, bu tiplerin sayı aralıkları ile byte cinsinden uzunluklarını göstermektedir. Tip Real Single Double Extended Comp Aralık 2.9E-39 .. 1.7E+38 1.5E-45 .. 3.4E+38 5.0E-324 .. 1.7E+308 3.4E-4932 .. 1.1E+4932 -2^63-1 .. +2^63-1 Uzunluk 6 byte 4 byte 8 byte 10 byte 8 byte Gerçel Sabit Tanımlama: Gerçel sabitlerin genel tanımlama formunun genel yazılımı aşağıda verilmektedir. Genel Yazılımı: CONST Gerçel_Sabit_ismi=Gerçel_sayi Örnek: CONST Gerçel_sayi_sabit_ismi=67.40; Gerçel Değişken Tanımlama: R.ŞEN Sayfa 15 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Gerçel değişkenlerin genel tanımlama formunun genel yazılımı aşağıda verilmektedir. Genel Yazılımı: VAR Gerçel_değişken_ismi : Gerçel_sayi_tip_ismi; Örnek: VAR Gerçel_değişken_ismi:Real; Yukarıda verilen REAL ifadesi yerine yukarıdaki tabloda görülen diğer tanımlama tiplerinden herhangi biri de kullanılabilir. Bu tip sayıların kullanımında en çok rastlanılan hata olarak “Runtime Error 205: Floating point owerflow”. Yani taşma hatasıdır. Bunun yanı sıra, bilindiği gibi PC ( Personel Computer – Kişisel Bilgisayar) grubu bilgisayarların mikroişlemcileri 80x86 mikroişlemcisi temel alınarak, sonraki mikroişlemciler ile birlikte xx86 ailesi olarak adlandırılmışlardır. Bu çeşit bilgisayarların matematik yükünü hafifletmek için temelde 80x87 adlı ek bir matematik ailesi kullanılır. 80x87 ailesi ile pascal programlama dilinde kullanılan temel tipler olarak da Single, Double, Extended ve Comp tanımlanmıştır. Single veri tipi kısa gerçel sayıları ifade eder. Daha çok veri hacmi büyük fakat hassasiyet istemeyen hesaplamalarda kullanılır. Double ise uzun gerçel sayılar içindir. 19-20 basamaklı gerçel sayılar için Extended veri tipini kullanırız. Comp veri tipi ise çok uzun tam sayıları göstermek amacıyla kullanılır. NOT: 80x87 veri tipi kullanabilmek için {$N+} derleyici komutu verilmelidir. Boolean Tipler: Pascalda mantıksal sabit ve değişkenler Boolean ile ifade edilebilirler. İki temel mantıksal değeri vardır. True ( doğru ) ve False ( yanlış). False’ın değeri 0, True’nun değeri ise 1 ile ifade edilir ve bellekte 1 byte uzunluğunda yer kaplarlar. Genel formu aşağıda verildiği gibidir. Boolean tip tanımlaması TYPE tanımlama bloğunda yapılacaksa; Genel Yazılım: TYPE Boolean_tip_ismi=BOOLEAN; VAR Boolean_değişken_ismi: Boolean_tip_ismi; Boolean değişken tanımlaması VAR tanımlama bloğunda yapılacaksa; Genel Yazılım: VAR Boolean_değişken_ismi: BOOLEAN; Alfa sayısal (Alfabetik)Tipler PASCAL dilinde Char ve String tip isimleri ile tanımlanırlar. Char Tipler: R.ŞEN Sayfa 16 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascalda en yaygın olarak kullanılan veri tipi CHAR’dır. Kodu 0 ile 255 arasında değişen bir ASCII karakterini ifade eder. Bellekte bir byte büyüklüğünde yer işgal eder. Char tipi aritmetik işlemlerde kullanılmaz. Char tipler sabit ifade olarak yazılırken tek tırnak (‘ ‘) içinde yazılır. Yani başına ve sonuna yukarıdan kesme işareti konulur. Kesme işaretleri arasına bir şey konulmazsa null (Boş) karakteri atar. Sabit Tanımlama: Genel Yazılım: CONST Char_sabit_ismi=‘karakter’; Örnek: CONST Sabir_karakter=‘K’, Sabir_karakter= ‘G’ Sabir_karakter= ‘*’ Sabir_karakter= ‘2’ Sabir_karakter= ‘!’ ... gibi sabitler ifade edilebilir. Değişken Tanımlama: Char tipler ile değişkenlerin genel tanımlama formu aşağıda verildiği gibidir. Genel Yazılım: VAR Char_değişken_ismi : Tip_ismi; Örnek: VAR Karakter_değişken_ismi:CHAR; String tipler: 1 ile 255 karakter uzunluğundaki alfasayısal verilerin tanımlanmasında kullanılacak alfasayısal veri tipleridir. String veri tipleri sabit olarak veriliyor ise tek tırnak (‘ ‘) içinde ifade edilirler ve tek tırnak içinde verilen karakter adedi kadar bellekte yer kaplarlar. Bildirimlerdeki tırnaklar bu uzunluğa dahil değildir. Verilen sabit ifade içinde boşluk karakteri var ise, bellekte kapladığı alan uzunluğu içindedir. Sabit Tanımlama: Örnek: CONST Alfasyisal_sabit=‘Pascal Programlama dili’; {Sabit uzunluğu 23 karakterdir.} Alfasayisal_sabit=‘12345 sayıları’; {Sabit uzunluğu 14 karakterdir.} Bosluk_karakteri=‘’; {Sabit uzunluğu 0 karakterdir.} Değişken Tanımlama: String tipler ile değişkenlerin genel tanımlama formu aşağıda verildiği gibidir. Genel Yazılım: VAR String_değişken_ismi: STRING[Tam sayı değeri]; Örnek: R.ŞEN Sayfa 17 PROGRAMLAMA TEMELLERİ-DERS NOTLARI VAR Ad_soyad:STRING[30]; STRING bildirimin yanında köşeli parantez içinde verilen tam sayı değeri, stringin uzunluğunu ifade etmektedir. Eğer sayısal bir büyüklük verilmemişse, editörün kabul ettiği geçerli uzunluk 255 karakterdir. Yapısal Veri Tipleri: Buraya kadar anlatılan tip isimlerini temel veya standart tip isimleri olarak kabul etmekteyiz. Bunların dışında pascal derleyicisi tarafından tanımlı olmayan ve programcı tarafından TYPE tanım bloğunda tanımlanabilen özel veri tipleri vardır. Bu tiplere kullanıcı tanımlı veri tipleri adı verilmektedir. Bununla beraber, temel tip isimleri kullanılarakta özel tipte veriler yaratılabilir.Bunları gruplandırırsak; Basit tipler Dizi tipler Küme tipler Pointer tipler Record tipler Dosya tipler Nesne tipler olarak ifade edebiliriz. Basit Tipler: Basit Tipler, sayılabilir (enumeration ) özellikli çeşitli ifadelerin, sonlu ve doğrusal olarak oluşturulan kümelerin isimlendirildiği veri tipidir. Basit bir tipi tanımlarken, tipe ait değerler belli bir sırada belirtilirler. Bu tiplerin genel tanımlama formu aşağıda verildiği gibidir. Genel Yazılım: TYPE Basit_tip_ismi= (İsimler listesi); Kümeyi oluşturan isimler arasında, birer virgül (,) kullanılarak isimler birbirlerinden ayrılırlar. Tip tanımlanması gerçekleştirildikten sonra, Değişken tanım bloğunda değişken tanımlaması yapılırken tip ismi olarak kullanılabilir. Aşağıdaki örnekte gösterildiği gibi. Örnek: TYPE Hafta=(Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar); Kart=(Maça, Kupa, Karo, Sinek); Eleman=(İşçi, Usta, Teknisyen, Şef); Matematik_islemi=(Toplama, Çıkarma, Çarpma, Bölme); VAR Gunler:Hafta; Kagit:Array[1..4] of kart; Calisan:Eleman; İslem: Matematik_islemi; Yukarıda verilen örneklerde tip isminden sonra parantezler içinde verilen isimlerin ilki 0 (sıfır) sayısı ile temsil edilirler ve ilk isimden sonra verilen isimler sırası ile 1,2,3...n sayı değerine karşılık gelmektedirler. Aşağıdaki örnekleri inceleyelim. R.ŞEN Sayfa 18 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: TYPE Renk= (Yeşil, Kirmizi, Mavi, Beyaz, Siyah); Yukarıdaki örnekte Yeşil 0 değerini, siyah ise 4 değerini almaktadır. Diğer taftan, basit tiplerde belli bir aralık içinde tip tanımlaması yapılabilir. Aşağıda böyle bir örnek verilmiştir. Örnek: CONST x=50; y=100; {aşağıda tanımlanan Ortalama tip ismindeki kullanılan x ve y ifadelerinin değerleri.} TYPE Sayi=0..99; {Bir sayı aralığı için tip ismi tanımlanıyor.} Ortalama=(x-y)/2 .. (x+y)/2; {Bir ifade aralığı için tip ismi tanımlanıyor.} Dizi tipler: Aynı özelliğe sahip birden fazla değerin, bir ismin alt elemanları olarak tanımlandığı değişken tipleridir. Bu tiplere aynı zamanda tablo tipler de denir. Bu tipleri tanımlarken temel tiplerden yararlanılır. Genel Yazılımı : VAR Değişken_ismi : ARRAY [Alt_sınır .. üst_sınır] OF Temel_tip_ismi; Örnek : VAR Sayi_araligi : ARRAY[1..20] OF INTEGER; Yukarıdaki tanımlamayı aşağıdaki gibi TYPE tanım bloğu kullanarakta gerçekleştirebiliriz. Genel Yazılımı : TYPE Dizi_tip_ismi : ARRAY [Alt_sınır_değeri .. Üst_sınır_değeri] OF Temel_tip_ismi; VAR Değişken_ismi : Dizi_tip_ismi; Örnek : TYPE Sayi_araligi : ARRAY[1..20] OF INTEGER; VAR Say : Sayi_araligi; TYPE tanım bloğunda öncelikle dizi değişkende kullanılacak tip isminin tanımlanması gerçekleştirildi ve daha sonra VAR tanım bloğunda da tanımlanan tip ismi ile değişkenin tipi tanımlanmış oldu. R.ŞEN Sayfa 19 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Küme (SET) tipler: Birbiri ardısıra gelen aynı özellikteki birden fazla elemandan oluşan tiplerdir. Diğer bir deyişle, bir grubu oluşturan elemanlar birbirini izleyen dizisel değerlerden oluşmaktadır. Küme (Set) tipler, bir dizisel olmaları nedeni ile en küçük ve en büyük değerleri ve ara değerleri de (sayısal veya alfasayısal) yapısında bulundurmaktadır. Bu nedenle, küme (Set) tipler köşeli parantez ([ ]) içinde gösterilirken, küme elemanları ya birbiri ardısıra sıralanır ve her birinin arası virgül (,) ile ayrılırlar yada elemanlar arasında bir aralığı ifade etmek için, yan yana iki nokta (.. ) ile gösterilmektedir. Küme elemanları olarak değişkenler de kullanılabilir. Bir kümenin eleman sayısı maxsimum 256’ dır. Dolayısı ile 0 ile 255 arasında değerler değişmektedir. Aşağıda genel formu görülmektedir. Genel Yazılımı : TYPE Kume_tip_ismi = SET OF Temel_tip_ismi; VAR Değişken_ismi : Kume_tip_ismi; Veya VAR Değişken_ismi : SET OF Temel_tip_ismi; Örnek: TYPE Gunler = ( Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar); Alfabe = (‘A’ .. ‘Z’); VAR Haftanin_gunleri: SET OF Gunler; Harfler : SET OF alfabe; Renkler : SET OF (Siyah, Beyaz, Sarı, Kırmızı, Mavi, Yeşil); Karakter : SET OF CHAR =[‘A’ .. ‘Z’, ‘a’ .. ‘z’]; Sayilar : SET OF BYTE =[1,2,3,4 .. 20,40..100]; Pointer tipler: Değişkenlerin adreslerini tutabilmek için kullanılan tiplerdir. Pointer tipi ile tanımlanan değişkenler yalnızca temel tiplerle tanımlı değişkenlerin adreslerini tutma işlemini yürütürler. Dolayısı ile olarak tanımlı değişken tipler içerik olarak başka bir temel tipli değişkenin adresini içermektedir. Genel formu aşağıda görülmektedir. Genel Yazılımı : VAR Değişken_ismi : ^Temel_tip_ismi; Veya TYPE Pointer_tip_ismi= ^Temel_tip_ismi; VAR R.ŞEN Sayfa 20 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Değişken_ismi:Pointer_tip_ismi; Yada TYPE Pointer_tip_ismi= ^tip_ismi; Tip_ismi = Record Alt_alan_ismi : Temel_tip_ismi; ...... End; VAR Değişken_ismi:Pointer_tip_ismi; Örnek: TYPE Dizi = Array[1..10] of Integer; Eleman = ^Kayit; Kayit = Record Ad_soyad : String[20]; Sicil_no : Longint; End; VAR Birey : Eleman; Sayi_dizi : Dizi; Record tipler: Bir isim altında, birden fazla sayıda ve birden fazla özellikteki bilginin (veri) oluşturduğu bir yapıdır. Buna göre; yapı içinde yer alan her bir veri farklı tip ismi ile tanımlanabilir ve her bir veri oluşturulan bu yapının altalanlarıdır denilir. Record yapının tanımlanması TYPE tanım bloğu içinde gerçekleştirilir. Oluşturulan tip ismi VAR tanım bloğunda bir değişken tanımlaması için böylelikle kullanılabilir. Aşağıda böyle bir yapının genel formu verilmiştir. Genel Yazılımı : TYPE Record_tip_ismi=RECORD Alt_alan_isim1:Tip_ismi; Alt_alan_isim2:Tip_ismi; Alt_alan_isim3:Tip_ismi; .... Alt_alan_isimN:Tip_ismi; END; VAR Değişken_ismi: Record_tip_ismi; Yukarıda verilen Record_tip_ismi ile yapılan tanımlama özel tip olarak kabul edilmektedir. RECORD ifadesi ile tanımlanan yapının record yapıda olduğu bildirilmektedir. Alt_alan ifadesi ile çeşitli temel tiplerde verileri ifade etmektedir. Yapı içindeki alt alanaların bazıları aynı tipte iseler, aynı tanım cümlesi içinde aralarına virgül kullanmak koşulu ile tanımlanabilirler. Alt alanlarda kullanılan isimler ile tip isimleri arasında “:” kullanılmalıdır. Örnek: TYPE R.ŞEN Sayfa 21 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Kimlik=RECORD Ad_Soyad:String[30]; Baba_adi:String[20]; Kimlik_No:String[20]; D_tarihi:Word; D_yeri:String[20]; END; VAR Eleman: Kimlik; Yukarıdaki örnekte, VAR tanım bloğunda tanımlanan Eleman değişken isminin tipi Kimlik tip ismi ile tiplendirilmiş oldu. Bundan sonra, uygulama bloğunda RECORD yapının alt alanlarına Eleman değişeken ismi ile ulaşılabilir. Dosya tipler: Birden fazla sayıda ve özellikteki verilerin disk veya disket ortamında oluşturduğu veri grublarını dosya diye ifade etmekteyiz. Dosyayı bellek ortamında temsil eden tampon (buffer) sahaya verilen isme ise dosya değişkeni denilmektedir. Dosya değişkeninin tanımlanmasında kullanılan isim ise dosya tiplendirmesidir. Dosya tipler verilere ulaşım yönü ile aşağıdaki gösterilen genel formlar ile tanımlanabilirler. Genel Yazılımı : (Sıradan erişimli Dosyalar) VAR Dosya_değişken_ismi:TEXT; Veya VAR Dosya_değişken_ismi:TEXT[Tampon_saha_büyüklüğü]; Genel Yazılımı : (Rastgele erişimli Dosyalar) VAR Dosya_değişken_ismi:FILE OF Dosya_tipi; Genel Yazılımı : (Tiplenmemiş Dosyalar) VAR Dosya_değişken_ismi:FILE ; Nesne tipler: Nesneye yönelik programlamayı destekleyen tiplerdir. ALGORİTMANIN PROGRAMLAMAYA UYGULANMASI Anlatılan konularda, algoritmanın temel özelliklerinden bahsedildi. Algoritmanın programlama dillerine uygulanabilmesi için, programlama dillerinin özelliklerinin bilinmesi gerekiyor. Çünkü, herhangi bir dilde yazılmış program, algoritmanın o programlama dilindeki anlatımıdır. Takip edeceğimiz programlama dili, yapısal dillerinden biri olan PASCAL programlama dilidir. Yapısallık, R.ŞEN Sayfa 22 PROGRAMLAMA TEMELLERİ-DERS NOTLARI yazılan programların işletimi ilk uygulama satırından, en son programı durdurma satırına doğru, ilk adımdan bir sonraki adıma doğru çalıştırılır. Oluşan koşullara göre işlem seçimi veya programın akış yönünün belirlenmesi, yada program içinde bazı işlemlerin bir çok kez tekrarlanması gerekebilir. İşte, bu özellikleri içinde bulundurabilen programlama dillerini, yapısal programlama diller diye tanımlıyoruz. PROGRAM YAPISI Yukarıdaki açıklamalar doğrultusunda bir algoritma yada bir programda üç tip yapı özelliği bulunmaktadır. Bunlar; Sıralı İşlem, Seçim ve Tekrar yapıları olarak ifade edilirler. Sıralı işlem özelliği: Bir programın, birden fazla komuttan meydana geldiği düşünülürse,programın işletim denetimi, programdaki ilk komut işletiminden başlayarak en son programı durdurma komutu olan END komutunu işletinceye kadar, programda verildiği sırada çalıştırılması sağlanır. Seçme özelliği: Bir program içinde, bir veya birden fazla koşula bağlı olarak, bir işlem yapmak yada programın akış yönü değiştirilmek istenebilir. Bu gibi durumları program içinde gerçekleştirmemizi sağlayan, program komutlarından oluşan yapılar vardır. Bu yapılar arcılığı ile, belli bir koşula bağlı olarak, bir program içinde bir takım işlemleri yapabilme olanağına sahibiz. IF – THEN – ELSE komutu örnek olarak verilebilir. Tekrar özelliği : Belirlenen koşula bağlı olarak, bir işlemin veya işlemlerin tekrarlanması istenebilir. Bu özelliği sağlayan yapılardır. Programlamada bu özelliği gerçekleştiren komutlara, döngü komutları adı verilmektedir. Pascal Program Yapısı Pascal programlama dilinin yapısı, ana program ( main program ) ve program bloklarından ( program block ) oluşmuştur. Geliştirilen uygulamada programın hacim olarak büyümesi, programcıya kodlama ve derleme, kullanıcıya işletme ve hız, bilgisayara bellek yük olacağından, program kodunun parçalara bölünmesi ( unit, file vb. ) zorunlu hale gelmiştir. Bloklardan bahsedecek olursak; blokların herbiri BEGIN ve END sözcüklerinden meydana gelen alanlardır. Pascal programında uygulamanın yürütüldüğü alanda bir blok olup BEGIN ifadesi ile başlar ve END ifadesi ile sona erer. Asıl uygulamanın yürütüldüğü blok olması nedeni ile ana blok olarak ifade edilir. Program satırlarından bahsetmemiz gerekirse; satırın fiziksel uzunluğu 126 karakteri geçemez. Eğer geçmesi gerekiyorsa uygun bir yerden kesilip sonlandırılması ve bir alt satırdan devam edilmesi gerekmektedir. Program içinde yapacağımız işlemlerden sonra , bir alt satıra geçerken cümleyi sonlandırmak için “ ;” işareti kullanılmalıdır. Eğer bir satırdaki cümleyi “;” işareti ile sonlandırmazsak program derlendiğinde hata mesajı kaçınılmaz olur. Dikkat edeceğimiz husus ise; if ile başlayan cümlenin sonuna else ifadesi kullanıldığında, else ifadesinden önceki satırda “; “ kulanılmamalıdır. Dikkat edeceğimiz bir başka nokta; sadece ana programı bitirirken END ifadesinin sonuna nokta “ . “ koymalıyız. Diğer procedure, function, if vb... bloklarının bitireci olan END ifadelerinin sonuna ise noktalı virgül “ ; “ konmalıdır. R.ŞEN Sayfa 23 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal programının genel yapısı aşağıda gösterildiği gibidir. PROGRAM Program_ismi ; TANIM BLOKLARI {LABEL,CONST, TYPE, VAR} {Programın başlık kısmı seçimliktir.} {Global tanım blokları} PROCEDURE proc_program_ismi(parametre listesi); {Procedure Tanımlama} TANIM BLOKLARI {LABEL,CONST, TYPE, VAR} {Local tanımlamalar} BEGIN .............. END; {Procedure sonu} FUNCTION fonksiyon_ismi(parametre listesi); {Fonksiyon Tanımlama } TANIM BLOKLARI {LABEL,CONST, TYPE, VAR} {Local tanımlamalar} BEGIN .............. END; {Fonksiyon sonu} { Ana program başlangıcı} BEGIN .............. END. {Ana program sonu} Pascalda ayrıca bağımsız yapılar ( Unit ) geliştirmek mümkündür. Bu yapılar başka program ve birimler tarafından erişilmesi mümkün parçalardır. Fakat, bu birimlere ulaşmak için yapacağımız kod yazılımında, Uses bölümüne bu birimi tanıtmamız gerekmektedir. Bu birimleri yazabildiğimiz gibi, pascal yapısında hazır olan bazı birimlerde mevcuttur. Unit’in genel yapısından bahsedecek olursak; UNIT {Unit ismi}; INTERFACE {Kullanıma açık} IMPLEMENTATION {Erişilemeyen} {Birim Blokları} şeklindedir. Unit derlendikten sonra “.TPU” uzantılı bir dosya yaratılır. Dikkat edileceği gibi 3 ana bölümden oluşmaktadır. ALGORİTMANIN YAZILIŞI VE PROGRAMLAMAYA UYGULANMASI Önceki konularda, algoritmanın yazılabilmesi için, bazı tanımlamaların bilinmesi gereği üzerinde durulmuştu. Bunlardan biri de değer atama işlemidir. Bu nedenle programın yazılışında önceden tanımladığımız ve değişken diye isimlendirdiğimiz ifadeler bulunmaktadır. Bu ifadelerin bellekte bir R.ŞEN Sayfa 24 PROGRAMLAMA TEMELLERİ-DERS NOTLARI değer tutabileceğini biliyoruz. Değişkenin değer tutabilmesi için, değişkene bir değerin geçirilmesi gerekmektedir. Bu işleme, değer atama işlemi adı verilir. Değişkenlere Değer Atama İşlemi: Bir algoritmada değişkenlere değer atama işlemi işareti ile gerçekleştirdiği söylenmişti. Programlama dillerinde ise genellikle = (eşit) işareti ile yapılmaktadır. Fakat PASCAL programlamada ise “:=” işareti ile atama işlemi gerçekleştirilmektedir. Değişkenlere değer atama işlemi algoritma yada program içinden yapılabildiği gibi , algoritma yada programın dışından da yapılabilir. Değişkenlere, algoritma ve program içinde değer atama işlemi doğrudan değişkene atanacak değeri, atama işaretinin sağında gösterilerek olur. Örnek: Algoritmada SAY 0 UZUNLUK 300 Pascal SAY := 0 UZUNLUK := 300 Yukarıda önce algoritmaya göre, sonra da pascal programlama diline göre yapılan atama işlemi örneklerinde görüldüğü gibi, sırasıyla SAY ismi ile tanımlanan değişkene 0 (sıfır) değeri, ve UZUNLUK isimli değişkene ise 300 değeri atanmaktadır. Değişkenlere, algoritma veya program dışından değer atanacaksa, bu değerin okutulması gerekmektedir. Bu işlem için algoritmada READ (oku) ifadesi kullanılır. Pascal’da READ ve READLN ifadeleri kullanılır. Her türlü değerin yazdırılması işlemi ise algoritmada PRINT ifadesi ve pascal’ da ise WRITE ve WRITELN ifadeleri ile gerçekleşmektedir. Bu komutlarla ilgili örneklere, Giriş – Çıkış komutlarını işlerken yer verilecektir. Aşağıda algoritmada giriş-çıkış işlemlerinde kullanılan ifadelere örnekler verilmektedir. Örnek: READ A,B READ SAY READ UZUNLUK PRINT A,B PRINT SAY PRINT UZUNLUK gibi kullanılmaktadır. GİRİŞ ÇIKIŞ İŞLEMLERİ Veri satırından okuma veya çıkışa değer yazma işlemlerine Algoritmada ve Pascal dilinde giriş-çıkış komutları veya ifadeleri denilmektedir. R.ŞEN Sayfa 25 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Giriş-Çıkış işlemleri ve ilerleyen konulardaki işlemler yürütülürken önce algoritma ve sonra Pascal dili karşılıkları olan örneklemelere yer verilecektir. Bununla beraber, Giriş – Çıkış ifadeleri ile ilgili örneklerden önce, programlama dillerinde kullanılan ifadelerin genel yazılımlarına da yer verilecektir. READ ifadesi: Algoritma ve pascal dilinde veri satırından değer okumak için kullanılmaktadır. Genel Yazılımı: Algoritma READ değişken(ler) ;Değişkene veya değişkenlere veri satırından değer/değerler oku. Pascal READ (Değişken(ler)); veya READLN (Değişken(ler)); ;Değişken/değişkenlere veri satırından değer/değerler okur. Yazılım sonunda verilen değişken(ler) ifadesi; Bir tek değişken kullanılabilir veya birden fazla değişken kullanılabilir demektir. Eğer birden fazla değişken kullanılırsa, değişken isimler arasını ( , ) virgül işareti ile ayırmak gerekecektir. Bunun dışında, her bir değişken için ayrı veri satırı oluşturularak yazılım gerçekleştirilebilir. Diğer taraftan, alfa sayısal sabit karakter katarı da, veri girişi sırasında giriş ifadeleri ile algoritmada tek tırnak içinde, Pascal dilinde ise giriş ifadeleri formatında tanımlı değildir. Örnek: Algoritma Read A,B ;Aynı veri satırından A ve B ye değer okur. Read A ; Ayrı veri satırlarından A ve B ye değer okur. Read B Read ‘ İki sayı veriniz: ‘, A,B ; Alfa sayısal sabit katarı kullanıldı. Pascal BEGIN READ (A,B); { Aynı veri satırından A ve B ye değer okur.} READLN (A); { Ayrı veri satırlarından A ve B ye değer okur.} READLN (B); END. PRINT ifadesi: Algoritmada sonucu yazdırmak için kullanılan ifadedir. Pascal dilinde ise karşılığı WRITE ve WRITELN ifadeleridir. R.ŞEN Sayfa 26 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Genel Yazılımı: Algoritma PRINT Değişken(ler) ;Değişken/değişkenlerin içerikleri yazdırılıyor. Pascal WRITE (Değişken(ler)); ; Değişken/değişkenlerin içerikleri yazdırılıyor. Veya WRITELN (Değişken(ler)); Yukarıda verilen ifadeleri toplama işlemini yapan ve sonuçta toplama sonucunu ilan eden akış diyagramı, algoritma ve karşılığı Pascal dilinde aşağıdaki gibi yazılım içinden ve yazılım dışından değerler almak üzere örneklendirebiliriz. Örnek-1: A=20 ve B =50 olduğu kabul edliyor. A ve B sayılarının toplama işlemini gerçekleştiren ve sonuçta toplam sonucu ilan eden akış diyagramı, algoritma ve karşılığı Pascal programını yazınız. PRINT TOPLAM END Pascal VAR A,B,TOPLAM:INTEGER; BEGIN A:=20; B:=20; TOPLAM:=A+B; WRITELN(TOPLAM); END. Algoritma A20 B20 TOPLAM A+ B R.ŞEN Sayfa 27 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek-2: Aynı veri satırından iki sayı okutuluyor. Okutulan sayıların toplama işlemini gerçekleştirip sonucu veri satırına yazdıran Akış Diyagramı, Algoritma ve karşılığı Pascal programını yazınız. Akış Diyagramı Algoritma READ A , B TOPLAM A + B PRINT TOPLAM END Pascal VAR A,B,TOPLAM:INTEGER; BEGIN READLN(A,B); TOPLAM:= A + B; WRITELN (TOPLAM); END. Algoritma ve program yazılımlarında da öncelikle A ve B gibi iki değişken isme aynı veri satırından değerler okutulmaktadır. Takip eden satırda, A sayısına B sayısı eklenerek, TOPLAM isimli değişkene, toplam sonuç değeri atanıyor. Böylelikle A ve B sayılarının toplam sonucu TOPLAM isimli değişkende tutulmuş oluyor. Son satırda sonuç değer TOPLAM isimli değişken ile veri satırına yazdırılıyor. R.ŞEN Sayfa 28 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek-3: Ayrı veri satırından iki sayı okutulmaktadır. Okutulan sayıların toplama işlemini gerçekleştirip sonucu veri satırına yazdıran Akış Diyagramı, Algoritma ve karşılığı Pascal programını yazınız. Akış Diyagramı Algoritma READ A READ B TOPLAM A + B PRINT TOPLAM END Pascal VAR A,B,TOPLAM:INTEGER ; BEGIN READLN(A); READLN(B); TOPLAM:= A + B; WRITELN (TOPLAM); END. Algoritma ve program yazılımlarında da öncelikle A ve B gibi iki değişken isme ayrı veri satırından değerler okutulmaktadır. Takip eden satırda, A sayısına B sayısı eklenerek, TOPLAM isimli değişkene, toplam sonuç değeri atanıyor. Böylelikle A ve B sayılarının toplam sonucu TOPLAM isimli değişkende tutulmuş oluyor. Son satırda sonuç değer TOPLAM isimli değişken ile veri satırına yazdırılıyor. Örnek: Bir öğrencinin adı soyadı ve numarasını ,okuyup yazan bir ALGORİTMA ve PASCAL programı yazınız. Okuma ve yazma işlemleri anlamlı biçimde yapılacaktır. Algoritma PRINT ‘ Öğrencinin Ad Soyadını yazınız’ READ AD PRINT ‘Öğrenci numarasını yazınız’ READ NOSU PRINT ‘Öğrenci ismi:’,AD PRİNT ’Öğrenci numarası:’,NOSU END R.ŞEN Sayfa 29 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal VAR Ad:string; Nosu:Integer; BEGIN WRITE(‘Öğrencinin ad ve soyadını yazınız..:’); READLN(Ad); WRITE(‘Öğrencinin numarasını yazınız..:’); READLN(Nosu); WRITELN(Öğrencinin Ad soyadı..:’,Ad); WRITELN(Öğrencinin Numarası..:’,Nosu); END. Örnek: Üç ayrı veri satırından a, b, c sayılarını okuyan, okunanları tek veri satırında yazan bir algoritma ve pascal programı yazınız Algoritma READ A READ B READ C PRINT A,' ',B,' ',C END Pascal VAR A,B,C:İNTEGER; BEGİN READLN (A); READLN (B); READLN (C); WRITELN (A,' ', B,' ', C); END. Örnek: Bir veri satırından a, b, c sayılarını okuyan ,okunanları 3 ayrı veri satırında yazan bir algoritma ve pascal programı yazınız. Algoritma READ A,B,C PRINT A PRINT B PRINT C END R.ŞEN Sayfa 30 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal VAR A,B,C:INTEGER; BEGIN READLN (A,B,C); WRITELN(A); WRITELN(B); WRITELN(C); END. OPERATÖRLER Pascal programlama dilinde bir veri (data) , sayısal veya alfasayısal sabit yada değişken olabilir. Bu veriler üzerinde, bir takım semboller veya ifadeler aracılığı ile, bazı işlemler gerçekleştirilerek, sonuç olarak yeni veriler elde edilebilir. İşte, yeni verileri elde etmemize aracılık eden, sembollere veya ifadelere operatörler adını veriyoruz. Editörde tanımlanan bir veri (data) üzerinde gerçekleşebilen işlemler aşağıda ifade edilen gruplarda incelenebilir. 1. 2. 3. 4. Atama operatörü Matematiksel operatörler İlişkisel operatörler Mantıksal operatörler Atama Operatörü Pascalda bellekte tanımlanan bir tipteki isimlere değer geçirmek için kullanılan operatördür ve “ := “ sembolü ile gösterilirler . Operatör := Açıklama Atama Örnek A:=3; Atama işlem yürütülürken soldan sağa doğru gerçekleştirilir. Yukarıdaki tabloda verilen örneğe göre A ismi ile tanımlanan ifadeye 3 sayısal değeri geçirilmektedir. Bu nedenle A sayısalına 3 sayısı atandı denir. Matematiksel Operatörler Pascal programlama dilinde kullanılan aritmetik işlemcilerin aşağıda sembol, anlamları ve her birine karşılık gelen birer örnek verilerek listelenmiştir. Operatör + * / R.ŞEN Açıklama Toplama Çıkarma Çarpma Real sayı bölme işareti Örnek A:=b+c; A:=c-b; A:=b*c; A:=c/1,2; Sayfa 31 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Tam sayı bölme işareti ( int olacak) Kalan değer ( int olacak) div mod A:=b div 8 ; A mod b; Eğer, bir işlemde, ayrıca parantez ile ifade edilen aritmetik işlemler var ise, öncelik sırası parantez içindeki aritmetik işlemlere verilir. Kabul edelim ki, parantez içinde ve dışında işlemlerin tamamı bulunuyor. Bu durumda, önce parantez içi sonra parantez dışındaki işlemler aşağıda verilen sıraya göre yapılır. 12345- Üs alma Çarpma Bölme Toplama Çıkarma Uygulama Aşağıdaki ifadeleri sıraya koyup pascal satırı şeklinde yazınız. 12345- t=a+c+s d=afc g=a+b/a-b k=a+{b/c} *t k= {a/d} + cd Mantıksal Operatörler Pascal programlama dilinde mantıksal işlemciler, bir veya birden fazla ilişkiyi, genellikle belirlenen koşullara göre bir sonuca varıp, buna göre belirlenen bir işlemin yürütülmesini sağlayan işlemcilerdir. Bu işlemciler; AND (VE), OR (VEYA) ve NOT (DEĞİL) gibi işlemcilerdir. Bu işlemcilerin sembol ve anlamları aşağıya çıkarıldığı gibidir. Operatör AND OR NOT XOR Açıklama Mantıksal ve Mantıksal veya Mantıksal değil Mantıksal Veya değil Örnek if (a=5) and (b=2) then write (‘true’); if (a=3) or (b=5) then write(‘false’); if not (a>30) then write(‘büyük’); İf a=b xor a<>b then write(‘yaz’); Yukarıda verilen Pascal programlama diline ait operatörlerin işlemler sonucunda elde edilen sonuc değer her zaman iki tabanlı sayı sistemine göre değerlendirmekteyiz. Bu durum göz önüne alınarak aşağıda operatörlere ait verilen tablolar doğruluk tablosu olarak adlandırılırlar. Tablolar incelendiğinde giriş değerlerine karşılık sonucun ne olacağı ile ilgili kararlar verilebilir. NOT operatörü: a sonuç 0 1 1 0 Girişteki ifade operatör işleminden sonra tersi alınmış olur. R.ŞEN Sayfa 32 PROGRAMLAMA TEMELLERİ-DERS NOTLARI AND operatörü: Giriş değerlerinin tamamı veya herhangi biri sıfır yada olumsuz ise, sonuç sıfır yada olumsuz olmaktadır. Sonucun olumlu veya “1” seviyesinde olması için tüm giriş değerleri “1” seviyesinde yada olumlu olmalıdır. a 0 0 1 1 b 0 1 0 1 Sonuç 0 0 0 1 Örnek: Aşağıda AND işlemine ait örneği inceleyelim. Binary Sayı 10101101 11001010 AND ------------------10001000 Desimal Sayı 173 202 ---------136 Yukarıdaki örnekte, verilen iki adet binary sayısal büyüklüğüne AND işlemi uygulandığında, sekiz bitlik iki sayının 0. , 1. ,2. ,3, ........ ve sonuncu bit olan 7. bitleri kendi aralarında karşılaştırılarak, her iki değerin “1” (bir) olduğu durumda bir çıkış elde edildiği görülmektedir. Diğer durumlarda çıkış ifadesi “0” (sıfır) olmaktadır. OR operatörü Sonucun “1” seviyesinde veya olumlu olması için giriş değerlerinden birinin yada tamamının “1” seviyesinde olması yeterlidir. Sonucun sıfır olaması için tüm giriş değerleri sıfır olmalıdır. a 0 0 1 1 b 0 1 0 1 Sonuç 0 1 1 1 Örnek: Aşağıda OR işlemine ait örneği inceleyelim. Binary Sayı 10101101 11001010 OR ------------------11101111 Desimal Sayı 173 202 -------------239 Yukarıdaki örnekte, OR işlemine göre karşılaştırılan binary sayıların 0. bitten başlayarak en son 7.bitler kendi aralarında OR işlemine girecek şekilde karşılaştırma yapılır. Bu işlem sonucu çıkış değeri bir olması için,giriş değerlerinin biri veya her ikisi de bir olmalıdır. Karşılaştırılan değerlerin tamamı “0” (sıfır) ise çıkış değeri işlem sonucunda sıfır olmaktadır. R.ŞEN Sayfa 33 PROGRAMLAMA TEMELLERİ-DERS NOTLARI XOR operatörü Farklı giriş seviyelerinde sonuç “1” seviyesinde olmaktadır. Girişlerin aynı seviyede olmaları sonucun sıfır olmasına neden olur. a 0 0 1 1 Sonuç 0 1 1 0 b 0 1 0 1 Örnek: Aşağıda XOR işlemine ait örneği inceleyelim. Binary Sayı 10101101 11001010 XOR------------------01100111 Desimal Sayı 173 202 ---------103 Yukarıda verilen Exclusive OR işlemi gerçekleştirilirken, karşılaştırılan değerlerin farklı değerlerde bir çıkış elde edildiği görülmektedir. Aynı seviyedeki girişlerde çıkış seviyesinin “0” (sıfır) olduğu kabul edilir. Karşılaştırma Operatörleri Karşılaştırma operatörleri kontrol ifadeleri ile birlikte kullanılan sembollerdir. Aşağıda bu sembolleri,anlamlarını ve kaşılı olan örneklemeleri tabloda görülmektedir. Operatör = <> < > >= <= Açıklama Eşittir Eşit değil Küçüktür Büyüktür Büyük eşit Küçük eşit Örnek If A=5 THEN If A<>5 THEN If A<B THEN If A>B THEN If A>=B THEN If A<=B THEN Diğer Operatörler Bu operatörler ile ilgili açıklamalar verilecektir. ilgili konular geldikçe açıklanacak ve uygulamalara yer Operatör ^ @ $ Örnek A=c*s^; A:=@b; A:=$df; [] . R.ŞEN Açıklama Pointer operatörü Operatör adresi Hexadecimal operatörü Dizi elemanı operatörü Nokta operatörü Array [1..9] of integer; Table1.name:=’hakan’; Sayfa 34 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Şu ana kadar Pascal’ da kullanılan operatörler verildiğine göre, giriş çıkış işlemleri ile her türlü işlem gerçekleştirilebilir. Aşağıda verilen örnekleri inceleyiniz. Pascal Program Karakter Seti Ve İfadeleri Pascal programlama dilinde genel yapıyı daha önce görmüştük. Bu genel yapı dışına çıkmanın mümkün olmadığını biliyoruz. Pascalda genel yapı kurulurken, kullanmamız gereken komutlar, operatörler, kontrol komutları, döngüler ve dizinler vardır. Bu saydığımız ifadeleri de belirli kurallar doğrultusunda kullanmamız gerekmektedir. Burada ilk olarak pascal programlama dilinde kullanacağımız simgeleri aşağıdaki tabloda görebiliriz SİMGE a..z , A..Z 0..9 Boşluk # $ ‘ () (* *) (. .) * + + / , . . .. : := ; ; > >= < <= = @ [] ^ {} Kullanım Amacı İng. Alfabesi Rakamlar Elemanları ayırır ASCII karakterlerini tanımlar Onaltılık (hexa) sayıları tanımlar Katarları(string) sınırlar İfade ve listeleri ayırır. Açıklamalarda kullanılır. { Dizilerde kullanılır. [ Çarpma Toplama Katar ve kümeleri birleştirir Çıkarma İşaret değiştirme Küme kesişim Bölme Liste elemanları ayırma Niteleme ayıracı Gerçel sayılar için kesir noktası Dizi boyutlarını bildirir. Tanıtıcıları tanımlar Atama işareti Cümleleri ayırır Bildirimleri sonlandırır Büyük işareti Büyük yada eşit işareti Küçük işareti Küçük yada eşit işareti Eşittir Tanıtıcı adresini getirir Dizi indisleri için Pointer (Gösterge) işareti Açıklama satırı için Pascal programlama dilinde yukarıdaki simgeleri daha farklı bir amaç için kullanamayız. Bunun yanısıra birde pascal programlama dilinde kullanılmak için ayrılmış bazı sözcükler vardır. Bu sözcükler, program başlığı veya değişken ismi gibi kullanılamazlar. AND ARRAY R.ŞEN GOTO IF PROGRAM RECORD Sayfa 35 PROGRAMLAMA TEMELLERİ-DERS NOTLARI ASM BEGIN CASE CONST CONSTRUCTOR DESTRUCTOR DIV DO DOWNTO ELSE END FILE FOR FUNCTION EXPORTS IMPLEMENTATION IN INHERITED INLINE INTERFACE LABEL LIBRARY MOD NIL NOT OBJECT OF OR PACKED PROCEDURE REPEAT ET SHL SHR STRING THEN TO TYPE UNIT UNTIL USES VAR WHILE WITH XOR Pascal programlama dilinde yeniden tanımlanabilen sözcüklerde bulunmaktadır. Bunları aşağıdaki tabloda görmektesiniz. ABSOLUTE ASSEMBLER EXPORT EXTERNAL FAR FORWARD INDEX INTERRUPT NAME NEAR PRIVATE PUBLIC RESIDENT VIRTUAL KONTROL İFADELERİ Belli bir koşula bağlı olarak, programın akış yönünü değiştirmek isteyebiliriz. Başka bir deyişle, programın işletimi sırasında, belli bir noktadan farklı bir noktaya, çeşitli işlemler için programın işleyiş yönünü değiştirebiliriz. Yada program içinde çeşitli seçim işlemleri gerçekleştirilebilir. Bu seçim işlemleri Algoritma ve Pascal programlama dilinde if-then, if-then-else ve case ifadeleri aracılığı ile gerçekleştirilmektedir. IF-THEN Komutu IF-THEN ifadesinin Algoritma ve Pascal da genel kullanım kalıbı; Algoritma Genel Yazılımı: If Koşul Then İfade(ler) EndIf R.ŞEN Sayfa 36 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal Genel Yazılımı: IF Koşul THEN İfade veya Blok(lar); Koşul işlemi gerçekleşmişse if cümlesinde verilen Then ifadesinden sonraki komut veya Blok(lar) uygulamaya sokulur. Koşul gerçekleşmemişse bir sonraki komut satırına geçilir. Örnek: Veri satırından okutulan a sayısının bir basamaklı sayı olma durumunda veri satırına yazdıran akış diyagramı, algoritma ve pascal programını yazınız. Akış Diyagramı Algoritma Read a If a<10 Then Print a EndIf End Pascal VAR A:Byte; BEGIN Readln(A); If A<10 Then Wrıteln(A); END. R.ŞEN Sayfa 37 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Aynı veri satırından okutulan A ve B gibi iki sayının, 50’den büyük olması durumunda, sayıları yazdıran akış diyagramı, algoritma ve pascal programını yazınız. Akış Diyagramı Algoritma Read a,b If a>50 AND b>50 Then Print a,b EndIf End Pascal Var a,b:Byte; Begin Read(a,b); If (a>50)and (b>50) Then Wrıteln(a,’ ‘,b); End. Örnek: Aynı veri satırından okutulan iki sayıdan birisinin 50’den büyük olması durumunda “Sayılardan biri 50’den büyük.” sözünü yazdıran algoritma. Algoritma Read a,b If a > 50 OR b > 50 Then Print “Sayılardan biri 50’den büyük.” EndIf End Pascal VAR A,B:BYTE; BEGIN READ (A,B); IF A>50 OR B>50 THEN WRITELN(‘Sayılardan biri 50’den büyük.‘); END. R.ŞEN Sayfa 38 PROGRAMLAMA TEMELLERİ-DERS NOTLARI IF-THEN-ELSE İfadesi Koşulun gerçekleşmesi veya gerçekleşmemesi durumunda ayrı ayrı kontroller gerçekleştirmek istiyorsak If-Then-Else ifadesi kullanılır. Bu ifadenin genel kullanım kalıbı aşağıda verildiği gibidir. Sembol Algoritma Genel yazılışı: If Koşul Then İfade(ler) Else İfade(ler) EndIf Pascal Genel yazılışı: IF Koşul THEN İfade veya Blok(lar) ELSE İfade veya Blok(lar); Koşul gerçekleştiğinde Then ifadesinden sonraki ifade(ler) işletime alınır. Koşul gerçekleşmediğinde Else ifadesinden sonraki ifade(ler) işletime alınır. Örnek: Aynı veri satırından okutulan a ve b değerlerinden büyük ve küçük olanı yazdıran bir algoritma ve pascal programını yazınız. R.ŞEN Sayfa 39 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Algoritma Read a,b If a > b Then Print ‘a sayısı büyüktür.’ Else Print ‘b sayısı büyüktür.’ EndIf End Pascal VAR A,B:INTEGER; BEGIN READ(A,B); IF A > B THEN WRITELN(‘A sayısı büyüktür.’) ELSE WRITELN(‘B sayısı büyüktür.’); END. Örnek: Veri satırında okutulan sayının 5 olup olmadığını bulan algoritmayı yazınız. Sayı için a değişkeni kullanılmıştır. Algoritma Read a If a = 5 Then Print ‘Okutulan sayı 5 dir.’ Else Print ‘Okutulan sayı 5 değildir.’ EndIf End Uygulama: Yukarıda algoritması verilen programın akış diyagramını çiziniz ve pascal karşılığını yazınız. Örnek: Okutulan iki sayının da 50’den büyük olması durumunda “Sayılar 50’den büyük.” diğer durumda “50’den büyük sayı yok.” sözlerini yazdıran algoritma. Algoritma Read a,b If a > 50 AND b > 50 Then Print ‘Sayılar 50’den büyük.’ Else Print ‘50’den büyük sayı yok.’ EndIf End Uygulama: Yukarıda verilen algoritmanın akış diyagramını oluşturunuz ve karşılığı pascal programını yazınız. R.ŞEN Sayfa 40 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Algoritma ve Pascal programında if-then-else formuna örnek olarak birden fazla ifade kontrol edecek olursak, aşağıdaki gibi bir yazılım gerçekleştirilebilir. Algoritma Bilinen_sayı1234 Read tahmin If Bilinen_sayı=tahmin Then Print 'TAHMİN EDİLEN DOĞRU' Print 'TAHMİN EDİLEN SAYI' Print Bilinen_sayı Else Print 'TAHMİN EDİLEN YANLIŞ' Print 'VERDİĞİNİZ SAYI' Print tahmin Endif End. Pascal VAR Tahmin,bilinen_sayi:Integer; BEGIN Bilinen_sayı:=1234 Readln (tahmin); If Bilinen_sayı=tahmin Then Begin Writeln (‘TAHMİN EDİLEN DOĞRU’); Writeln(‘TAHMİN EDİLEN SAYI’,Bilinen_sayi); End; Else Begin Writeln(‘TAHMİN EDİLEN YANLIŞ’); Writeln(‘VERDİĞİNİZ SAYI’, Bilinen_sayi); End; End. R.ŞEN Sayfa 41 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek : Aynı veri satırından a,b,c gibi üç adet sayı okutulmaktadır. Sayılar içinden en küçük sayıyı bulup sonuçta küçük olan sayıyı ilan eden akış diyagramı, algoritma ve karşılığı pascal programını gerçekelştiriniz. Algoritma Read a,b,c if a<b and a<c Then Print ‘a sayısı en küçük sayıdır’ Else if b<a and b<c then Print ‘b sayısı en küçük sayıdır’ Else Print ‘c sayısı en küçük sayıdır’ Endif Endif End Pascal VAR A,B,C:INTEGER; BEGIN Readln( a,b,c); if (a<b) and (a<c) Then Writeln(‘a sayısı en küçük sayıdır’) Else if (b<a) and (b<c) then Writeln(‘b sayısı en küçük sayıdır’) Else Writeln(‘c sayısı en küçük sayıdır’); End. Yukarıda gerçekleştirilen örnek çözüm if-then-else formuna uygun olarak gerçekleştirilmiştir. R.ŞEN Sayfa 42 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Sayaç Kullanarak Döngü Oluşturma Sayaç, başlangıç değeri sıfır olarak tanımlanan bir değişkenin, her işlemden sonra, 1 arttırılması ile sağlanan bir ifadedir. İşleme devam edilebilmesi için GOTO komutu kullanılır. Gönderme (goto) Komutu Goto ifadesi, algoritma ve programlama dillerinde akış yönünü değiştirmek için kullanılan bir komuttur. Yapısal programlamanın yapısını bozması nedeniyle tercih edilmez. Bu nedenle karar cümlelerine bağlı olarak kullanılmaktadır. Genel Yazılımı: GOTO Adres_alanı Uygulanması durumunda algoritma veya pascal programında belirtilen adres sahasına program akış yönünü döndürerek, gösterilen adres sahasından sonra gelen ilk komut uygulamaya koyulur. Aşağıda 1 den 9 sayısı dahil aradaki bir tam sayıları If-then ifadesi kullanarak yazdıran algoritma ve test adımlarını inceleyelim. Aşağıdaki algoritmada sayaç olarak Say değişkeni kullanılmakta ve Say değişkenine başlangıç olarak sıfır sayısı atanmaktadır. Algoritma Say0 Adres: Print Say SaySay+1 If Say<10 Then GOTO Adres EndIf End Yukarıdaki algoritmada; 1. adımda: Say değişkeni yazdırılmakta, 2. adımda: Say değişkeni yazdırılmakta, 3. adımda: Say değişkeni yazılmakta, 4. adımda: Say değişkeni yazılmakta, 5. adımda: Say değişkeni yazılmakta, 6. adımda: Say değişkeni yazılmakta, 7. adımda: Say değişkeni yazılmakta, 8. adımda: Say değişkeni yazılmakta, R.ŞEN Pascal LABEL Adres; VAR Say:byte; BEGIN Say:=0; Adres: Writeln(Say); Say:=Say+1; If Say<10 Then GOTO Adres; END. 1 değerini almakta, 1<10 sorgusu doğru olduğundan, 1 sayısı 2 değerini almakta, 2<10 sorgusu doğru olduğundan 2 sayısı 3 değerini almakta, 3<10 sorgusu doğru olduğundan 3 sayısı 4 değerini almakta, 4<10 sorgusu doğru olduğundan 4 sayısı 5 değerini almakta, 5<10 sorgusu doğru olduğundan 5 sayısı 6 değerini almakta, 6<10 sorgusu doğru olduğundan 6 sayısı 7 değerini almakta, 7<10 sorgusu doğru olduğundan 7 sayısı 8 değerini almakta, 8<10 sorgusu doğru olduğundan 8 sayısı Sayfa 43 PROGRAMLAMA TEMELLERİ-DERS NOTLARI 9. adımda: Say değişkeni 9 değerini almakta, 9<10 sorgusu doğru olduğundan 9 sayısı yazılmakta, 10. adımda: Say değişkeni 10 değerini almakta, 10<10 sorgusu yanlış olduğundan 10 sayısı yazılmayacak ve sonlanacaktır. Görüldüğü gibi bir basamaklı tam sayıları say isimli sayac aracılığı ile üretip ayrı veri satırlarına yazdırmış olduk. Yukarıdaki programın test işlemini yapacak olursak; Yukarıda algoritması ve karşılığı pascal programı gerçekleştirilen örneğin akış diyagramını aşağıdaki gibi düzendüzenlenebilir. Akış Diyagramı R.ŞEN Sayfa 44 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Bir basamaklı sayıların toplama işlemini gerçekleştirip sonuçta ilan eden akış diyagramı, algoritma ve karşılığı pascal programını yazınız. Beş adım için test ediniz. Akış Diyagramı Algoritma top0 say0 Loop: saysay+1 toptop+say If say<10 Then Goto Loop Endıf Print top End Pascal Var Say,top:Integer; Begin Top:=0; Say:=0; loop: say:=say+1; top:=top+say; if say<10 Then goto loop; Writeln(top); End. R.ŞEN Sayfa 45 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: 100’e kadar olan sayıların tek sayılarını toplayan ve sonuçta ilan eden akış diyagramı, algoritma ve karşılığı pascal programını yazınız. Akış Diyagramı Algoritma top0 say1 Loop: toptop+say saysay+2 If say<100 Then Goto Loop Endıf Print top End Pascal Var Say,top:Integer; Begin Top:=0; Say:=1; loop: top:=top+say; say:=say+2; if say<100 Then goto loop; Writeln(top); End. Uygulama: Yukarıda verilen problemin 10 adım için test işlemini gerçekleştiriniz. En Büyük ve En Küçük Bulma İşlemleri Bu tür işlemlerde iki yol izlenir. I. Yol : İlk okunan değer En büyük ya da En küçük olarak kabul edilir. II. Yol : En büyük veya en küçük için başlangıç değerleri atanır. En büyük için, başlangıç değeri kabul edilen en küçük bir değer, En küçük için, başlangıç değeri kabul edilen en büyük bir değer olmalıdır. R.ŞEN Sayfa 46 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek : Ayrı veri satırından 10 adet not okutuluyor. En büyük not’u bulan ve sonuçta veri satırına yazan algoritma ve karşılığı pascal programı yazınız. 1.Yola göre çözüm: Algoritma Read nt Enb nt Say 1 Adres: Read nt If nt > enb Then Enb nt Endif Say say + 1 If say < 10 Then Goto Adres Endif Print enb End Pascal VAR Nt, enb, say:Integer; BEGIN Readln(nt); enb = nt; say = 1; Adres: Readln (nt); if nt>enb Then Begin enb :=nt; say = say + 1; End; if say < 3 Then GOTO Adres; Writeln (‘En Büyük sayı..:’, enb); End. Uygulama: Yukarıda gerçekleştirilen algoritma ve pascal program karşılığı akış diyagramını ve 3 adım için test işlemini gerçekleştiriniz. 2.Yola göre çözüm: Algoritma enbnt-9 Say0 Adres: Read nt If enbnt<nt Then Enbnt nt Endif Saysay + 1 If say<10 Then Goto Adres R.ŞEN Sayfa 47 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Endif Print enbnt End Pascal VAR Nt, enbnt, say:Integer; BEGIN Enbnt:=-9; Say:=0; Adres: Readln(nt); if enbnt<nt Then enbnt:=nt; say:=say+1; if say<10 Then GOTO Adres; Writeln(‘En Büyük sayı..:’, enb); End. Uygulama: Yukarıda gerçekleştirilen algoritma ve pascal program karşılığı akış diyagramını ve 3 adım için test işlemini gerçekleştiriniz. Örnek : Bir veri satırından 3 adet not okutuluyor. En büyük ilk notu bulan ve yazan bir algoritma yazınız ve 3 veri satırı için test ediniz. Algoritma Read not1,not2, not3 If not1 >= not2 and not1 >= not3 Then Enb not1 Else If not2 >= not3 and not2 > not1 Then Enb not2 Else Enb not3 Endif Endif Print enb End Uygulama: Yukarıda verilen algoritmaya göre Akış diyagramı, Pascal programını ve üç adım için test işlemini gerçekleştiriniz. Mantıksal işlemciler kullanılarak, IF uygulamalarına ilişkin aşağıdaki örnek çözümü inceleyelim. Örnek: Öğrencinin bir derse ait not ve bir döneme ait devamsızlığı ayrı veri satırlarından giriliyor. Geçme koşulu; devamsızlığı 3 haftadan az ve derse ait geçme puanı en az 60 puan olacak şekilde kabul ediliyor. Buna göre öğrencinin GEÇTİ veya KALDI ifadesini ekrana yazan algoritmayı ve Pascal programını yazınız. En az 3 veri satırı için test ediniz. R.ŞEN Sayfa 48 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Algoritma READ NT READ DEVAM IF NT>=60 AND DEVAM<3 THEN PRINT 'GEÇTİ' ELSE PRINT 'KALDI' ENDIF END Pascal Var Nt,Devam:Integer; Begin Write(‘Notu veriniz..:’); Readln(nt); Writeln(‘Notu veriniz..:’); Readln(devam); If nt>=60 AND devamsız<3 Then Writeln(‘GEÇTİ’) Else Writeln(‘ KALDI’); End. If ifadesi, birden fazla birbirine bağlı karşılaştırma işlemlerinde de sorgulamanın yürütülebilmesi için kullanılabilir. Böyle bir durumda, If ifadesi, iç içe olacak şekilde düzenlenirler. Dikkat edilmesi gereken nokta, algoritma da her IF ifadesinde kullanılan ELSE ifadesi, iç içe oluşturulan yapılarda,THEN ifadesinden hemen sonra kullanılmalıdır. Aşağıda böyle bir yapının genel yazılımı gösterilmektedir. Genel Yazılımı IF Koşul THEN İfade(ler) ELSE IF Koşul THEN İfade(ler) ELSE IF Koşul THEN İfade(ler) ELSE ..... ...... ENDIF ENDIF ENDIF Örnek : Algoritma Bilinen_sayı1234 Read tahmin R.ŞEN Sayfa 49 PROGRAMLAMA TEMELLERİ-DERS NOTLARI If Bilinen_sayı=tahmin Then Print 'TAHMİN EDİLEN DOĞRU' Print 'TAHMİN EDİLEN SAYI' Print Bilinen_sayı Else If Bilinen_sayı<Tahmin Then Print 'YANLIŞ VE SAYINIZ BÜYÜK' Else Print 'YANLIŞ VE SAYINIZ KÜÇÜK' Endif Endif End Pascal Var Tahmin, bilinen_sayi:Integer; Begin bilinen_sayi:=1234; Write(‘Tahmininizi giriniz..:’); Readln(tahmin); if bilinen_sayi=tahmin Then Begin Writeln('TAHMİN EDİLEN DOĞRU'); Writeln(‘ARADIĞINIZ SAYISI=’,bilinen_sayi); End else if bilinen_sayi<tahmin Then Writeln('YANLIŞ VE SAYINIZ BÜYÜK') else Writeln ('YANLIŞ VE SAYINIZ KÜÇÜK.'); End. Böyle bir yapı oluşturulurken bir birine bağlı, iç içe çalıştırılacak IF yapılarının sayıları arttıkça, dikkat edilmez ise hata yapma olasılığı yüksektir. Bu nedenle, benzer yapıya algoritmada karşılık gelen Case ve Pascal programlamada Case- of ifadeleri ile birden fazla koşula göre, seçim işlemi gerçekleştirilebilir. CASE ifadesi Algoritma da kullanılan CASE ifadesinin genel yazılımı aşağıda gösterilmektedir. CASE ifadesinde, birden fazla koşuldan bir tanesi seçilip işleme koyulur. Eğer koşulların herhangi biri gerçekleşmemiş ise ELSE ifadesinden sonraki ifade veya ifadeler işletime alınır ve CASE ifadesinden ENDCASE ile çıkılır. Algoritmada Genel Yazılımı CASE (isim) Koşul1 : İfade(ler) Koşul2 : İfade(ler) Koşul3 : İfade(ler) ................ KoşulN : İfade(ler) Else : İfade(ler) ENDCASE R.ŞEN Sayfa 50 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal Pascal’ da CASE-OF ifadesi olarak bilinir. Bir değişken isminin alacağı değere bağlı olarak, OF ifadesinden sonra gelen sabit alanlardan hangisine denk ise, o alandan sonraki ifade veya blok(lar) işletime alınır. Eğer alt alanlardan birine değişken değeri denk gelmemişse, ELSE ifadesinden sonraki ifade veya blok(lar) işletime alınır. CASE-OF END; ifadesi ile sonlandırılır. Genel Yazılımı: Case Değişken Of Sabit_Alan1: İfade veya Blok(lar); Sabit_Alan2: İfade veya Blok(lar); Sabit_Alan3: İfade veya Blok(lar); ................ Sabit_AlanN: İfade veya Blok(lar); Else İfade veya Blok(lar); End; Örnek : Veri satırından okutulan 1,2,3,4 sayılarından hangisi olduğunu yazan bir algoritma ve pascal programı yazınız. Algoritmada Read say Case(say) say=1: Print say say=2: Print say say=3: Print say say=4: Print say Else:Print ‘Sayılardan hiçbiri’ EndCase End Pascal Var Say:Byte; Begin Readln(say); Case say Of 1:Writeln(say); 2:Writeln(say); 3:Writeln(say); 4:Writeln(say); Else Writeln('Sayılardan Hiçbiri değil'); End; End. Yukarıda verilen Case-Of ifadesindeki sapılacak alanlar sayısal değerler olarak görülmektedir. Bu alanlar karakter olarak veya sayısal aralık yada karakter aralık olrakta verilebilir. Aşağıdaki örneklerde bu durumlar görülmektedir. R.ŞEN Sayfa 51 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal Var Sayi_araligi:Byte; Begin Readln (say); Case Sayi_araligi Of 1..10:Writeln('Sayı 1 ile 10 aralığındadır.'); 11..20:Writeln('Sayı 11 ile 20 aralığındadır.'); 21..30:Writeln('Sayı 21 ile 30 aralığındadır.'); 31..40:Writeln('Sayı 31 ile 40 aralığındadır.'); Writeln('Sayılar Hiçbir aralığa girmiyor'); End; End. Else Pascal Var Karakter_araligi:Char; Begin Readln (say); Case Karakter_araligi Of ‘1’..’9’:Writeln(‘1 ile 9 karakter aralığındadır.’); ‘A’..’Z’:Writeln(‘büyük karakter A ile Z aralığındadır.’); ‘a’..’z’:Writeln(‘Küçük karakter a ile z aralığında.’); Else Writeln (‘Hiçbir aralığa girmiyor’); End; End. Problem : Ayrı veri satırından okutulan sayıya göre; 0 (sıfır) ise çift sayıları, 1 (bir) ise tek sayıları 0– 100 aralığında toplayan ve toplam sonucu tekler toplamı ve çiftler toplamı olarak yazan algoritmayı ve pascal programını düzenleyiniz. Örnek : Ayrı veri satırından olmak üzere iki sayı okutuluyor.dört işlemden birinin seçimine göre dört işlemden birini gerçekleştirip yazan algoritma ve pascal programını yazınız. Algoritma Read A Read B Toplam 0 Fark 0 Çarpım 0 Bolme 0 Read sec Case sec=1: ToplamA + B sec=2: FarkA - B sec=3: ÇarpımA * B sec=4: Bölme A / B Else: Print ‘Yanlış seçim’ EndCase End R.ŞEN Sayfa 52 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal Var a,b,sec,toplam,fark,carpım:Integer; bolum:Real; Begin Toplam:=0; Fark:=0; Carpım:=0; Bolum:=0; write(‘A sayısını veriniz...:’); Readln(a); write(‘B sayısını veriniz...:’); Readln(b); write(‘Seçiminiz..<1-2-3-4>.:2); Readln(sec); Case sec Of 1: Begin toplam=a + b; Writeln(‘Sayılar Toplamı=’,toplam); End; 2: Begin fark=a - b; Writeln(‘Sayılar Toplamı=’,toplam); End; 3: Begin carpım=a * b; Writeln(‘Sayılar Toplamı=’,toplam); End; 4: Begin bolum=a / b; Writeln(‘Sayılar Toplamı=’,toplam); End; Else Writeln(‘...Yanlış Şeçim....’); End; End. Bir önceki örneğin seçim alanlarını karakter olarak aşağıdaki gibi düzenleyebiliriz Pascal Var a,b,sec,toplam,fark,carpım:Integer; bolum:Real; Begin Toplam:=0; Fark:=0; Carpım:=0; Bolum:=0; write(‘A sayısını veriniz...:’); Readln(a); write(‘B sayısını veriniz...:’); Readln(b); write(‘Seçiminiz..< + , - , * , / >); Readln(sec); Case sec Of R.ŞEN Sayfa 53 PROGRAMLAMA TEMELLERİ-DERS NOTLARI ‘+’: Begin toplam=a + b; Writeln(‘Sayılar Toplamı=’,toplam); End; ‘-‘: Begin fark=a - b; Writeln(‘Sayılar Toplamı=’,toplam); End; ‘*’: Begin carpım=a * b; Writeln(‘Sayılar Toplamı=’,toplam); End; ‘/’: Begin bolum=a / b; Writeln(‘Sayılar Toplamı=’,toplam); End; Else Writeln(‘...Yanlış Şeçim....’); End; End. Problem : 40 kişilik bir sınıfa ait öğrencilerin her biri bir veri satırından olmak üzere cinsiyetleri (E ve K olacak şekilde) ve boyları okutularak, kaçının kız ve kaçının erkek, sınıftaki öğrencilerin kaçının boylarının erkek ise 180 cm’nin ve kız ise 170 cm’nin üzerinde olduğunu bulan algoritmayı ve pascal programını yazınız. Problem: Ayrı veri satırından cinsiyetleri ve yaşları okutulan erkek ve bayanların 25 yaşından küçük olanlarının cinsiyetlerine göre bayanların ve erkeklerin ayrı ayrı toplamlarını bulan ve sonucu ekrana yazan algoritmayı ve pascal programını düzenleyiniz. En az 5 veri için test ediniz. Yazılan algoritmayı pascal programında Case ifadesine göre yazılacaktır. R.ŞEN Sayfa 54 PROGRAMLAMA TEMELLERİ-DERS NOTLARI DÖNGÜLER Yazılımın bir bölümünde, bazı işlemlerin veya ifadelerin yürütülebilmesi için, birden fazla tekrarlanma gereği duyulur. Bu işlemleri gerçekleştiren ifadelere döngü ifadeleri adı verilir. Tekrar işlemlerinin, ne kadar yapılacağı veya ne zaman sonlandırılacağı kontrolu, döngü komutları ile oluşturulur. Döngü komutları, yapı ve çalışma özellikleri bakımından, takip eden satırlarda örneklerle açıklanmıştır. LOOP İfadesi LOOP, sonsuz döngü tanımlama ifadesidir. Sonsuz döngü içerisinden döngünün özelliğinden dolayı çıkma imkanı bulunmamaktadır. Aşağıda algoritmadaki genel yazılımı gösterilmektedir. Algoritma LOOP İfade(ler) ENDLOOP LOOP döngüsü kullanarak, öğrenciye ait Numarayı ve Notu veri satırından okuyan bir algoritma örneğini yazarsak; Algoritma Loop Read no,not EndLoop End Yukarıdaki gibi bir döngü algoritmada yazılabilir, fakat böyle bir döngüden çıkabilme imkanı yoktur. Sonsuz döngüden çıkmak, döngünün kırılması anlamına gelir. Programlama dillerinde algoritmada olduğu gibi blok ve döngülerin kırılması için kullanılan ifadeler vardır ve bu ifadelere gönderme komutları olarakta isimlendirilebilirler. Döngü ve Blokların Kırılması Döngülerin işleyişlerini etkileyen gösterebiliriz. komutlar Goto, Exit, Halt, Break, Continue gibi ifadeleri GOTO ifadesi GOTO ifadesi daha önce anlatılan kontrol komutları içinde gönderme komutu olarak anlatılmıştı. LOOP sonsuz döngüsünden çıkış komutu olarakta kullanılmaktadır. Örnek : Aşağıdaki örnekte verilen algoritma, sonsuz döngü mantığında not okumaktadır. Notun 70 olarak okunması durumunda A adresine gidilmekte ve not yazılarak algoritma sona ermektedir. Notlardan birinin 70 olmaması durumunda algoritma sonsuz döngüde kalır. R.ŞEN Sayfa 55 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Algoritma Loop Read not If not = 70 Then GOTO Adres EndIf EndLoop Adres: Print not End Uygulama: Yukarıda verilen algoritma kaç adet not okuduğunu bulup, 100 puan girildikten sonra döngü dışına çıkılarak, kaç adet not girildiğini yazan bir algoritmayı ve pascal programını yazınız. exıt ifadesi Algoritmada EXIT ifadesi, herhangi bir durumda en yakın döngüden çıkmak için kullanılan bir ifadedir. Koşul sağlandığında döngü dışına çıkılır. Aşağıda genel yazılımı verilmiştir. Genel Yazılımı Loop İfade(ler) If Koşul Then EXIT LOOP İfade(ler) EndLoop Aşağıdaki algoritmada olduğu gibi, iç içe iki döngü varsa, algoritmadaki ‘EXIT A ‘ ifadesi, ‘A’ isimli adres ile döngüden çıkmak için kullanılır. Algoritmada, iç içe (Nested) kullanılan LOOP döngülerinde EXİT ifadesinin kullanımı görülmektedir. Algoritma Loop İfade(ler) Loop İfade(ler) If Koşul Then EXIT A EndIf İfade(ler) EndLoop İfade(ler) EndLoop A: Örnek: Aşağıdaki örnek algoritmada verilen, sonsuz döngü mantığında Nt isimli değişkene not okutulmaktadır. Notun 70 olarak okunması durumunda Loop sonsuz döngüsünden çıkılmakta ve not değeri yazdırılarak algoritma sona ermektedir. Notlardan birinin 70 olmaması durumunda algoritma sonsuz döngüde kalır. Algoritma Loop Read not If not = 70 Then EXIT EndIf R.ŞEN Sayfa 56 PROGRAMLAMA TEMELLERİ-DERS NOTLARI EndLoop Print not End Uygulama: LOOP sonsuz döngüsü mantığında not okuyan ve notun 100 olarak okunması durumunda, Loop sonsuz döngüsünden EXIT ifadesi ile çıkan, döngüden çıkılıncaya kadar okunan notların ortalamasını bulan ve yazan bir algoritma yazınız. Algoritmada LOOP sonsuz döngü ifadesinde şu ana kadar, yardımcı komutlar aracılığı ile döngü dışına çıkabildiğini gördük. LOOP sonsuz döngüsünden bundan başka, döngü içinden belli koşullara bağlı olarak, kontrolümüz altında döngüden çıkabilme özelliği de bulunmaktadır. Böyle bir özelliği Algoritmada; LOOP/UNTIL, WHILE ve FOR gibi ifadeler ile, Pascal programlama dili karşılığında pascal özellikleri de düşünülerek REPEAT/UNTIL, DO-WHILE, WHILE/DO ve FOR ifadeleri kullanılabilir. Konu edilen döngüleri uygularken, en önemli nokta; döngü içine girildiğinde, belirlenen koşul ya döngü başlangıcında işletilerek, yada döngü sonunda işletilerek kontrolü sağlanır. Aşağıdaki açıklamalarda bu ifadelerin algoritma ve Pascal programındaki genel yazılımları ve örnek uygulamalarla anlatılmaya çalışılmıştır. LOOP - UNTIL ifadesi LOOP UNTIL ifadesinin çalışma mantığı; Koşul gerçekleşinceye kadar ifade veya ifadeler uygulamaya alınırlar. Koşul gerçekleştiğinde döngü sona erer. Algoritma Genel yazılışı: LOOP İfade(ler) UNTIL Koşul ENDLOOP Örnek: 1'den 100'e kadar sayıların toplamını LOOP UNTIL deyimi kullanarak bulan ve yazan bir algoritma yazınız ve bu algoritmayı ilk 3 sayı için test ediniz. Algoritma Say 0 Top 0 LOOP Say Say + 1 Top Top + Say UNTIL Say = 100 ENDLOOP Print ‘ İlk ‘ , Say, ‘ Sayının Toplamı = ‘ , Top End R.ŞEN Sayfa 57 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek : 100 veri satırından 100 adet not okuyan ve not toplamını bulan ve yazan bir algoritmayı, LOOP – UNTIL ifadesini kullanarak yazınız. Algoritma Top 0 Say 0 LOOP Read Not Top Top Say Say UNTIL Say = 100 Print Top End + Not + 1 ENDLOOP Örnek : 100 veri satırından 100 adet not okuyan ve 60’ dan büyük olan notların ortalamasını bulan bir algoritmayı LOOP – UNTIL ifadesi kullanarak yazınız. Algoritma Top 0 Say60 0 Say 0 LOOP Read Not If Not > 60 Then Top Top + Not Say60 Say60 + 1 Endif Say Say + 1 UNTIL Say = 100 ENDLOOP If Say60 <> 0 Then Ort = Top / Say60 Endif Print Top End R.ŞEN Sayfa 58 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: 100 veri satırından 100 adet not okuyan ve not toplamını bulan ve yazan bir algoritmayı, LOOP UNTIL deyimi kullanarak yazınız. Algoritma top0 say 0 LOOP read not top top + not say say + 1 UNTIL say =100 ENDLOOP Print top End Örnek: 100 veri satırından 100 adet not okuyan ve 50 den büyük notların ortalamasını bulan bir agoritmayi, LOOP UNTIL deyimi kullanarak yazınız. Algoritma top 0 say50 0 say 0 Loop read not If not > 50 Then top top + not say50 say50 + 1 Endif say say + 1 Until say =100 EndLoop If say50 <> 0 then ort = top / say50 Endif Print top End Örnek: 1 den 100 e kadar çift sayıların toplamını bulan ve yazan algoritmayı LOOP-UNTIL döngüsü ile yazınız. R.ŞEN Sayfa 59 PROGRAMLAMA TEMELLERİ-DERS NOTLARI REPEAT – UNTİL ifadesi Pascalda Repeat-Until ifadesinin çalışma mantığı; Repeat ile Until ifadeleri arasında kalan tüm satırlar Unil satırında verilen koşul gerçekleşinceye kadar işletime alınırlar. Koşul gerçekleştiğinde tekrar işlemi sona erer. Pascal Genel yazılımı : REPEAT İfade(ler) veya Blok(lar); UNTIL Koşul; Örnek: 100 e kadar tek sayıların toplamını bulan ve yazan Pascal programını Repeat-Until komutu kullanarak gerçekleştiriniz. Repeat-Until ifadesinin bir diğer özelliği; döngünün kaç kez işleyeceğine dair bilginin önceden zorunlu olmayışıdır. Örneğin ;For-do ifadesinde göreceğimiz gibi değer öncelikle alınması nedeni ile boş bir döngü yaratamayız. Fakat Repeat-Untilde değer ifadesi sonda karşılaştırıldığı için döngü en az bir kez döner. Bir tuşa basılmayı Pascalda beklemek için Repeat Until KeyPressed; şeklinde bir ifade satırı yazılabilir. Burada amaç en az bir karakter üreten tuşlara basılmasını sağlamaktır. R.ŞEN Sayfa 60 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Bir veri satırında başlangıç ve bitiş değerleri bulunmaktadır. 3 veri satırı olduğuna göre başlangıç ve bitiş değerleri arasındaki sayıların toplamını bulan ve yazan pascal programı düzenleyiniz. Repeat-Until ifadesi kullanarak gerçekleştiriniz. Pascal Label Adres; Var bas,bit,say,top:Integer; BEGIN REPEAT Adres: Writeln('başlangıç ve bitiş sayılarını giriniz:'); Readln(bas,bit); say:=say+1; REPEAT if (bit-bas)>1 then Begin bas:=bas+1; top:=top+bas; End else Begin writeln('hata'); goto Adres; End; UNTIL bas=(bit-1); writeln('toplam:',top); UNTIL say>=3; END. Örnek: Bir veri satırında matematik, fizik,kimya notları bulunmaktadır.pekçok veri satırı olduğuna göre matematik not ortalamasını bulan,fizik dersinden >50 not alan öğrenci sayısını bulan, kimya notu 70 ile 100 arasında olan örencilerin tüm bilgilerini yazdıran, döngü sonunda diğer bulunanları yazdıran bir pascal programı yazınız. Pascal VAR attop,matsay,fizsay,mat,fiz,kim,matort:integer; BEGIN matort:=0; Repeat Writeln('MATEMATİK,FİZİK VE KİMYA NOTLARINI GİRİNİZ:'); Readln(mat,fiz,kim); if (mat=-1) and (fiz=-1) and (kim=-1) then Break; matsay:=matsay+1; mattop:=mattop+mat; if fiz>50 then fizsay:=fizsay+1; if (kim<100) and (kim>70) then Begin R.ŞEN Sayfa 61 PROGRAMLAMA TEMELLERİ-DERS NOTLARI writeln('kimya notu 70 ile 100 arasında olan öğrencinin tüm notları;',kim); writeln('matematik notu:',mat,' ','kimya notu:','kim','fizik notu:',fiz); End; Until (mat=-1) and (fiz=-1) and (kim=-1); if matsay<>0 then Begin matort:=mattop div matsay; End; writeln('matematik notlarının ortalaması :',matort); writeln('fizik notu 50’den büyük olan öğrenci sayısı:',fizsay); end. While ifadesi Döngü kontrolu, ifadenin başlangıcında, WHILE ifadesi ile birlikte gerçekleştirilir. Komut işletime alındığında, belirlenen koşul sağlandığı sürece, döngü devam etmekte, koşul ortadan kalktığında da döngü dışına çıkılmaktadır. Aşağıda while ifadesinin genel yazılımı algoritmaya ve Pascal programına göre verilmiştir. Akış diyagram sembolü Algoritma Genel Yazılımı: WHILE Koşul DO İfade(ler) ENDWHILE Pascal Genel Yazılımı: WHILE Koşul DO İfade veya Blok(lar); R.ŞEN Sayfa 62 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek : 100’ e kadar olan sayıların toplamını alıp sonucta ilan eden bir akış diyagramını, algoritmasını ve karşılığı pascal programını while ifadesi kullanarak gerçekleştiriniz. Test işlemini gerçekleştiriniz Akış diyagramı Yukarıdaki Akış Diyagramı, Algoritma ve Pascal örneklerinde döngü başlangıcı için; say değişken değerinin başlangıç değerine “0” (sıfır) atanmaktadır. say<100 koşulu devam ettiği sürece,Say isimli değişkenin içeriği toplam isimli değişken içeriğine eklenecek yeni değer olarak toplam isimli değişkene atanacak ve say isimli değişken içeriği 1(Bir) artacaktır. say<100 koşulu ortadan kalktığında toplam isimli değişkenin içeriği veri satırına yazdırılacaktır. R.ŞEN Sayfa 63 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Ayrı veri satırından 10 adet sayı okutulmaktadır. Okutulan sayıların toplama işlemini gerçekleştirip, toplam sonucu ilan eden Akış Diyagramını, Algoritmayı ve karşılığı Pascal programını while ifadesi kullanarak gerçekleştiriniz. Beş adım için test işlemini yapınız. Akış Diyagramı Algoritma Pascal Yukarıda verilen örnekte döngü başlangıcı için; say değişken değerinin başlangıç değerine “0” (sıfır) atanmaktadır. say<10 koşulu devam ettiği sürece,deger isimli değişkene tam sayı türünde sayı,veri satırından okutulacaktır. Veri satırından okutulan sayıların toplam değeri toplam isimli değişkende tutulacaktır. Veri satırından 10 adet sayı girildikten sonra verilen koşul ortadan kaltığı için while-do kontrolü sona erecektir. Toplam sonucu ekrana writeln ifadesi ile yazdırılacaktır. Örnek: Bir veri satırından a ve b değerleri giriliyor; a=b ise 'sayılar eşit', a>b>0 ise 1’den a ‘ya kadar 1’er artan sayıları b>a>0 ise b den 1’e kadar 1’er azalan sayıları yazan bir pascal programı yazınız. NOT: a>0 ve b>0 olmaması durumunda yeni kayıt okutunuz. Pascal LABEL Adres; VAR a,b,say:integer; BEGIN Adres: Writeln('a ve b sayilarini giriniz') ; Readln(a,b); while a<>-1 do Begin R.ŞEN Sayfa 64 PROGRAMLAMA TEMELLERİ-DERS NOTLARI if (a<0) and (b<0) then goto Adres; if a=b then writeln('sayilar esit'); if (a>b) and (a>0) and (b>0) Then Repeat say:=say+1; writeln(say); Until(say=a); if( b>a) and (b>0) and (a>0) then Repeat b:=b-1;Writeln(b); Until(b=1); Writeln('a ve b sayilarini giriniz') ; Readln(a,b); End; end. Örnek: Ayrı veri satırından 0 sayısı girilinceye kadar sayılar okutulmaktadır. Veri satırından okutulan sayıların kaç adet olduğunu bulan ve sonuçta ilan eden akış diyagramını, algoritmayı ve karşılığı pascal programını yazınız. Akış Diyagramı Algoritma Pascal VAR Say,sayi:integer; BEGIN Say:=0; Write(‘Sayi giriniz=’); Readln(sayi); While sayi<>0 Do BEGIN Say:=say+1; Write(‘Sayi giriniz=’); Readln(sayi); End; Writeln(‘Veri satırından‘,say,’adet sayı kutuldu.’); END. Uygulama: Yukarıda verilen örneğin 3 adım için test işlemini gerçekleştiriniz. R.ŞEN Sayfa 65 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Veri satırından sıfır girilinceye kadar bilgisayar dersine ait başarı puanlarını okuyan ve okunan puanların ortalamasını bulan algoritmayı ve Pascal programını yazınız. Algoritma Top 0 Say 1 Ortalama 0 Read Bnot While(Bnot ^= 0) Top Top + Bnot Read Bnot Say Say + 1 If Bnot = 0 Then Ortalama Top / Say EndWhile Print ‘Okutulan’, Say, ‘ Notun Ortalaması =’, Ortalama EndIf End En Büyük ve En Küçük Bulma İşlemleri Bu tür işlemlerde iki yol izlenir. I. Yol : İlk okunan değer En büyük ya da En küçük olarak kabul edilir. II. Yol : En büyük veya en küçük için başlangıç değerleri atanır. En büyük için, başlangıç değeri kabul edilen en küçük bir değer, En küçük için, başlangıç değeri kabul edilen en büyük bir değer olmalıdır. Örnek : Ayrı veri satırından sıfır sayısı girilinceye kadar,başarı puanları okutuluyor. En büyük başarı puanını bulan ve sonuçta yazan bir algoritmayı birinci yolu kullanarak yazınız ve algoritmayı üç veri satırı için test ediniz. I . Yol : Algoritma Read not Enbnot While not ^= 0 Do If enb< not Then Enbnot EndIf Read not EndWhile Print enb End R.ŞEN Sayfa 66 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Uygulama : Yukarıda algoritması düzenlenmiş yazılımın Pascal programını yazınız. Örnek : Aynı veri satırından 1 adet olmak üzere, pek çok not okutuluyor. En büyük notu bulan ve yazan bir algoritmayı ikinci yolu kullanarak yazınız ve algoritmayı üç veri satırı için test ediniz. Algoritma Enb -999999 Read not While not ^= 0 Do If not > enb Then Enb not EndIf Read not EndWhile Print enb End Uygulama : Yukarıda yazılan algoritmanın akış diyagramını ve karşılığı Pascal programını yazınız. R.ŞEN Sayfa 67 PROGRAMLAMA TEMELLERİ-DERS NOTLARI for ifadesi Problem çözümünde tekrar eden işlemleri gerçekleştirmenin daha kolay bir yoluda for ifadesini kullanmaktır.Bu tip döngülerde, for satırında verilen değişkene, belirlenen bir aralıkta, değişkene atanacak ilk değerden başlayarak,belirlenen artışlarla en son değer atanıncaya kadar, for kontrolündeki işlem yada işlemler (ifade yada ifadeler) işletilir. Aşağıda Akış Diyagram sembolü, algoritma ve pascal programındaki genel ifadesi verilmiştir. Akış Diyagram Sembolü Yukarıdaki diyagramda döngü başlangıcında verilen isim döngüde kullanılan değişken ismidir. Bu değişken ismi ile döngü yapısı kontrol edilmektedir. İlk ; döngüdeki değişken ismine atanacak ilk değerdir. Son; değişken ismine atanacak son değerdir. Artış; döngüdeki değişken ismine atanacak değerlerin hangi aralıkta olacağını belirtir. Artış miktarının belirtilmediği durumda artış miktarı 1 (bir) kabul edilir. Döngüler iki yönde değerlendirilirler. Bunlar; 1. Artan yönlü 2. Azalan yönlü “Artan Yönlü dögüler”in başlangıç değeri, bitiş değerinden küçüktür. Bu nedenle artan yönlü döngülerde atanacak ilk değerin, atanacak son değerden küçük olmasına dikkat edilmelidir. “Azalan Yönlü Döngüler”in başlangıç değeri, bitiş değerinden büyüktür. Bu nedenle azalan yönlü döngülerde atanacak ilk değerin, atanacak son değerden büyük olmasına dikkat edilmelidir. Algoritma Genel Yazılımı: For Değişken İlkdeğer TO Sondeğer By Artış İfade(ler) EndFor Do Algoritmada For cümlesinde değişkene atanan ilk değerden başlayarak, en son değere doğru artış miktarı kadar arttırılarak atanan her bir değer için For ile EndFor aralığı uygulamaya koyulur. En son değer için For ile EndFor aralığı uygulamaya koyulduktan sonra For uygulaması sona erer. For ‘dan sonra işletilecek satır var ise, uygulamaya o satırdan devam edilir. Pascal Genel Yazılımı: For Değişken:=İlkdeğer TO/Downto Sondeğer Do İfade veya Blok(lar); R.ŞEN Sayfa 68 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal’da For cümlesinde Değişkene atanan ilk değerden başlayarak, en son değere doğru aradaki değerler veya karakterler arttırılarak her bir değer için DO ifadesinden sonraki ifade veya Blok(lar) uygulamaya koyulur. En son değer için FOR’ un kontrol ettiği ifade veya Blok(lar) uygulamaya koyulduktan sonra For uygulaması sona erer. For ‘ dan sonra işletilecek satır var ise uygulamaya o satırdan devam edilir. For cümlesindeki TO artiş yönünü, DOWNTO eksiltme yönünü göstermektedir. Örnek : X gibi bir değişkenin tanımlandığı düşünülsün ve bu değişkeni for cümlesinde kullanıp,X değerinin aldığı her bir değeri pascal programında ekrana yazdıralım. Aşağıdaki programı inceleyiniz. VAR X:Integer; BEGIN For X:=1 TO 20 DO Writeln(‘X’in değeri=’,X); END. Yukarıdaki örnekte tanımlanan x gibi bir değişkenin, for cümlesi içinde alacağı ilk değer olarak x’ e 1 (bir) sayısı atanıyor ve writeln ifadesi X=1 için çalıştırılarak, ekrana X’in içeriği olarak 1 (bir) değerini basar. X’ in değeri bir artarak, X’ e yeni değer olarak atanır ve x’ in içeriği 2 olur. X= 2 için writeln ifadesi ile X’in içeriği 2 olarak ekrana basılır. Bu durum, X<20 olduğu sürece devam eder. X=20 olduğunda for işlemi sona erer. Örnek : 100’ e kadar olan sayıların toplamını alan bir akış diyagramını, algoritmayı ve karşılığı pascal programını for ifadesi kullanarak gerçekleştiriniz. Akış Diyagramı R.ŞEN Sayfa 69 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: 100’ e kadar olan çift sayıların toplamını FOR ifadesi kullanarak bulan bir algoritma yazınız. Algoritma Top0 For say0 to 100 By 2 Do TopTop+say EndFor Print‘1 den 100e kadar olan çift sayıların toplamı =’, Top End Uygulama: Yukarıda algoritması verilen yazılımın Akış Diyagramını ve karşılığı Pascal programı yazınız. Üç adım için test ediniz. Örnek: Aşağıdaki Pascal program örneğini inceleyiniz ve yorumlayınız. Programın algoritmasını yazınız. VAR X,Y: Integer; BEGIN X:=5; For Y:=X To 20 Do write(Y); Writeln(Y); END. Örnek: Her biri ayrı veri satırından olmak üzere 10 adet sayı okutuluyor. En küçük sayıyı bulan ve sonuçta veri satırına yazan bir akış diyagramını, algoritmayı ve karşılığı pascal programını FOR ifadesi kullanarak gerçekleştiriniz. Üç adım için test ediniz. Akış Diyagramı R.ŞEN Sayfa 70 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Örnek: Ayrı veri satırından olmak üzere 10 adet sayı okutuluyor. Okutulan sayıların en küçüğünü ve en küçük sayının kaçıncı sırada girildiğini bulan ve sonuçta en küçük sayıyı ve sırasını ayrı veri satırlarına yazan algoritmayı ve karşılığı pascal programını FOR ifadesi kullanarak gerçekleştiriniz. Üç adım için test ediniz. Algoritma enk9999 for i1 to 10 do read sayı if enk>sayı then enksayı sırai endif endFor Print enk Print sıra End Pascal Var Enk,sayi,sira,i:integer; Begin Enk:=9999; For i:=1 to 10 do Begin Write(i,‘. sayiyi giriniz=’); Readln(sayi); İf enk>sayi then Begin Enk:=sayi; Sira:=i; End; End; Writeln(‘en kucuk sayi=’,enk); Writeln(‘en kucuk sayi ‘,sira,’. sirada girildi); End. Uygulama: Yukarıdaki örneğin akış diyagramını ve test işlemini gerçekleştiriniz. Örnek: Ayrı veri satırından olmak üzere 10 adet sayı okutuluyor. Okutulan sayıların en küçüğünü, en küçük sayıdan tekrarlanan var ise kaç adet olduğunu bulan ve sonuçta en küçük sayıyı ve kaç adet tekrarlandığını ayrı veri satırlarına yazan algoritmayı ve karşılığı pascal programını FOR ifadesi kullanarak gerçekleştiriniz. Algoritma enk9999 for i1 to 10 do read sayı if enk>sayı then enksayı say0 endif if enk=sayı then R.ŞEN Sayfa 71 PROGRAMLAMA TEMELLERİ-DERS NOTLARI saysayı+1 endif endFor Print enk Print say End Pascal Var Enk,sayi,say,i:integer; Begin Enk:=9999; For i:=1 to 10 do Begin Write(i,‘. sayiyi giriniz=’); Readln(sayi); İf enk>sayi then Begin Enk:=sayi; Say:=0; End; İf enk=sayi then Say:=say+1; End; Writeln(‘en kucuk sayi=’,enk); Writeln(‘en kucuk sayidan ‘,say,’ adet tekrarlandı’); End. Uygulama: Yukarıdaki örneğin akış diyagramını ve test işlemini gerçekleştiriniz. Örnek: Ayrı veri satırından olmak üzere 10 adet sayı okutuluyor. Okutulan sayıların en küçüğünü, en küçük sayıdan tekrarlanan var ise kaç adet olduğunu, en küçük ilk ve son sayı kaçıncı sırada girildiğini bulan ve sonuçta en küçük sayıyı, kaç adet tekrarlandığını, ilk en küçük ve son en küçük sayı kaçıncı sırada girildiğini bulan ve sonuçta ayrı veri satırlarına yazan algoritmayı ve karşılığı pascal programını FOR ifadesi kullanarak gerçekleştiriniz. Algoritma enk9999 for i1 to 10 do read sayı if enk>sayı then enksayı ilki say0 endif if enk=sayı then saysayı+1 soni endif endFor Print enk Print say Print ilk Print son End R.ŞEN Sayfa 72 PROGRAMLAMA TEMELLERİ-DERS NOTLARI Pascal Var Enk,sayi,say,ilk,son,i:integer; Begin Enk:=9999; For i:=1 to 10 do Begin Write(i,‘. sayiyi giriniz=’); Readln(sayi); İf enk>sayi then Begin Enk:=sayi; İlk:=i Say:=0; End; İf enk=sayi then begin Say:=say+1; Son:=i; End; Writeln(‘en kucuk sayi=’,enk); Writeln(‘en kucuk sayidan ‘,say,’ adet tekrarlandı’); Writeln(‘ilk en kucuk sayi ‘,ilk,’. Sırada girildi’); Writeln(‘son en kucuk sayi ‘,son,’. Sırada girildi’); End. Uygulama: Yukarıdaki örneğin akış diyagramını ve test işlemini gerçekleştiriniz. Örnek :Bir veri satırından matematik ve fizik notu okutuluyor. Matematikten ve fizikten en küçük notu alan öğrencilerin sayısını bulan ve bulunanları yazdıran bir algoritma yazınız. 5 adım için test ediniz. Algoritma Msay0 fsay0 menk 101 fenk 101 Read mat,fiz While mat ^= menk OR fiz^=fenk Do Read mat,fiz If menk>mat then menk mat msay msay+1 Endif If mat = menk then msay msay+1 Endif If fenk>fiz then fenk fiz fsay fsay+1 endif If fiz=fenk then fsay fsay+1 Endif EndWhile Print menk, msay,fenk,fsay End R.ŞEN Sayfa 73
Benzer belgeler
23 3- Turbo Pascal Programlamada Giriş – Çıkış İşlemleri 3.1 Turbo
malzemesi alınır. Daha sonra yemek pişirilir ve sonunda servis yapılır. Başka bir örnek verecek
olursak; size 10 sayısı ile 20 sayısının toplam sonucu sorulabilir. Burada ilk yapılacak işlem iki sa...