5 Kasım 2014 Çarşamba

Algoritma Nedir?

Algoritma

İnsanlar her zaman düşünür ve problem çözerler. Birçok problem, az ya da hiç
düşünülmeden çözülebilir.

Her gün evden çıkarken ne giyilmelidir?
Bunun için muhtemelen pencereden dışarıya bakılır.
Hava yağmurlu ise mevsim gereklerine göre giyinmenin yanı sıra dışarıya çıkarken bir de
şemsiye alınması gerekir. Hava güneşli ve sıcak ise o takdirde daha ince giyinilerek dışarıya
çıkılır.
Böylece problemin çözümü kendiliğinden oluşturulan bir kararla sağlanır.
Yukarıdaki basit örnekte yapılan iş, önce problemin belirlenmesi ve sonra problemin
tanımından yola çıkarak çözüm için değişik alternatiflerin değerlendirilmesidir.
Bilgisayar programlaması sırasında izlenebilecek birçok yol ve yöntem vardır. Bilgisayar
programcısının probleme ilişkin çözümü ortaya çıkarabilmesi için problem çözümü ile ilgili
bilgileri bilmesi gerekir. Bilgisayar programlamasında genel olarak belirli kalıp ve kurallara
uyulur. Bir bilgisayar yazılımının olusturulması sırasında asağıda sıralanan ana adımlara
uyulur.

1-Problemin tanımı
2-Çözüm yönteminin belirlenmesi
3-Programın kodlanması
4-Programın çalışır duruma getirilmesi
5-Belgeleme ve güncelleştirme

Problemin tanımı:
Problemin normal yazı diliyle tanımlanması işlemlerini
kapsamaktadır. Problem çözümüne ilişkin iyi bir program yapabilmek için, problemin iyi bir
şekilde tanımlanması gerekir.

Çözüm Yönteminin Belirlenmesi: Bu adımda çözümün genel yaklaşımı, temel
giriş/çıkışlar belirlenir.

Programın kodlanması: Program ayrıntılı olarak tanımlanıp çözüm yolları açıkca
belirtildikten sonra program kodlama calışmalarına başlanabilir.

Programın çalışır Hale Getirilmesi: Programın kodlanması sırasında yapılan imla hataları,
kodlama ve mantık hatalarının giderilmesi işlemlerini kapsar. İyi bir bilgisayar programının
doğruluğundan emin olmak için defalarca test edilmiş olması gerekmektedir.

Belgeleme ve güncellestirme: Oluşturulan bir yazılımı, sadece o yazılımı geliştiren
kişilerin kullanabilmesi gibi bir kısıtlamanın önüne geçmek için ayrıntılı referanslar
hazırlanmalı ve programla ilgili bilgiler verilmelidir.
Bir yazılımda, o yazılımı kullanan kişi veya kuruluşların yeni gereksinimleri ve değişen
koşullar nedeniyle değişiklikler yapılması gerekli olabilir. İyi bir programda bulunması gereken özellikler arasında güncelleşebilme ön sıralarda yer almaktadır.


Nedir bu bilgisayar programcılığı?

Evet birçok kişi bilgisayar programcılarının ne ile uğrastığını bilir fakat nasıl uğrasıp neler yaptığını pek bilmez. Önce bilgisayar dünyasında sıkca kullanılan bir kelimeden bahsedelim “yazılım”. Yazılım (software) kelimesi bilgisayar programlama dilleriyle oluşturulan dökümanları, dosyaları ifade eder. Yani bilgisayarınızda işletilmek, calıştırılmak üzere tasarlanmış dosyalar yazılım kapsamına girer. Yazılım programlama dilleri ile tasarlanır ve yazılır. Programlama dilleri, bilgisayarınızın donanımını (ekran kartı,ses kartı,modem...) sizin en rahat biçimde kullanabileceğiniz düzeye getirmeye calışır. Yani bilgisayarın o soğuk 1100110 gibi rakamlarını sizin zevkle kullandığınız programlara, işletim sistemlerine çevirir.
Örneğin kullanılmakta olan işletim sistemi onbinlerce sayfadan, milyonlarca bilgisayar kodunun bir araya gelmesinden oluşur. İşin tüm zorluğu, o kodların arasında dolaşan, hata mesajlarını günlerce o kodları gözden geçirerek arayan, sandalye tepesinde saatlerce aynı ekrana bakarak ilginç görüntüler sergileyen programcıların üzerindedir. Bilgisayar programcıları işini zevkle yapan ve işini bir hobi edinmiş insanlardan oluşur. Aksi halde yoğun konsantrasyon ve sabır isteyen bu işi yapmak aşırı zorlaşır. Programlama dilleri kendi aralarında sınıflara ayrılmışlardır. İnsanın en zor öğrenebileceği, anlayabileceği yani 1100110 gibi makina kodlarına yakın diller en alt seviyeli programlama dilleri, insanın en kolay anlayıp kullanabileceği ve insan diline yakın özellikler gosteren diller ise en yuksek seviyeli programlama dilleridir.

1- Çok yüksek seviyeli diller: VisualBasic, Acces, Foxpro vb.
2- Yüksek seviyeli diller: Pascal,Basic,Fortran vb.
3- Orta seviyeli diller: C,C++,ADA vb.
4- Düşük seviyeli diller: Assembly.
5- Makina dilleri: Bilgisayarın çalısma dilleri 1 ve 0’lardan olusur.

Bu dillerin kullanıldığı alanlara ornek verirsek;

1- Bilim ve Muhendislikte: Pascal,C,C++,Fortran vb.
2- Veritabanı Programcılığında: Dbase,Acces,Foxpro,Sql vb.
3- Yapay Zeka Kullanımında: Prolog,Lisp vb.
4- Sistem Programcılığında: C,C++ ve sembolik makina dilleri.


Bir bilgisayar programı nasıl yazılır?

Bir yazılım değişik dillerle oluşturulabilir fakat izlenen yöntemler genelde birbirine benzer. Örneğin Algoritma, elimizdeki sorunun çözümüne gidebilmek için tasarlanan yollar, yöntemlerdir.
Bilgisayar programlama dilleri de programcılıkta bunun gibi yöntemler kullanarak çözüme gider. Algoritmanın uzunluğu kullanılan programlama dilinin seviyesi ve problemin karmasıklığı ile doğru orantılıdır. Yapılan algoritma ve tasarımdan sonra yazılım aşamasına gelinir ve bu aşamada yapılacak programın kullanım ömrü, programın kullanım düzeyi ve hangi amaçla kullanılacağı gibi soruların cevaplarına bakılarak programlama dili seçilir. Dil secimi bazı kriterlere göre yapılmaktadır, orneğin kısa surmesi ve görsel tasarım içermesi, veritabanı iletişimi yoğun kullanılması gereken bir program yapmamız gerekiyor olsun. Bu durumda Assembly dili ile yola çıktığımızda bahsedilen proje birkaç kişilik deneyimli bir programcı grubu ile birkaç yıl alır. C ile iki programcı aynı işi üç dört ayda VisualBasic veya Delphi ile bir programcı bahsedilen işi bir iki aya yakın bir sürede yapabilir. Başka bir açıdan örnek verirsek bir ekran kartı programlamamız gerekiyor ve bu kartın driver’ını ( surucusunu ) biz yazacağız. Bu durumda bu işi VisualBasic veya Delphi ile yapmamız imkansızdır, kullanmamız gereken diller öncelikle Assembly ve C/C++ olmalıdır. Evet, programlama dillerinin kendi alanları vardır ve her dil kendi alanında kullanıldığı sürece başarılı ve etkili kullanılmış olur. Buraya kadar anlatılanı özetlersek:
Bir bilgisayar programı yazmak için belli aşamalar vardır ve bu aşamalar geçildiğinde
kodlamaya başlanabilir.


Bunlar:
1- Analiz
2- Algoritma
3- Dil Secimi
4- Kodlama


Analiz ile gerçekleştirilmek istenen proje tasarlanır ve parametreleri araştırılır. Algoritma ile adımlar tayin edilir. Dil seçimi ile en uygun programlama dili seçilir. Ve kodlamaya başlanır.





Problem Çözme ve Algoritmalar

1- Problem Çözme:
Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayrılmalıdır.

2- Algoritmalar: Kısaca algoritma belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir. Geniş anlamda ise algoritma, verilen herhangi bir sorunun çözümüne ulaşmak için uygulanması
gerekli adımların hiç bir yoruma yer vermeksizin açık, düzenli ve sıralı bir şekilde söz ve yazı
ile ifadesidir. Algoritmayı oluşturan adımlar özellikle basit ve açık olarak sıralandırılmalıdır.
M.S. 9.yy da İranlı Musaoğlu Horzumlu Mehmet (Alharezmi adını araplar takmıştır) problemlerin çözümü
için genel kurallar oluşturdu. Algoritma Alharezmi’nin Latince okunuşudur.
Her algoritma asağıdaki kriterleri sağlamalıdır.
Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
Çıktı: En azından bir değer üretilmeli.
Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .

PROGRAM YAZMA SÜRECİ
· Problemin farkına varmak,
· Problemi analiz etmek,
· Çözüm yolları düşünmek,
· İyi çözüm yolları seçip algoritma oluşturmak,
· Akış diyagramı çizmek,
· Uygun bir dilde kodlamak,
· Programı test etmek,
· Programı dağıtmak.


Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.
Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:
1- Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.
2- Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış
biçimlerinin nasıl olacağına kadar).
3- Problemin çözümünü veren algoritmayı yaz.
4- Algoritmayı bir programla dili ile yaz.
5- Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.

Algoritmik çözüm yöntemlerine ilk örneği günlük yaşantımızdan verelim.

Örnek: Örneğimiz bir insanin evden çıkıp işe giderken izleyeceği yolu ve işyerine girişinde
ilk yapacaklarını adım adım tanımlamaktadır.

Çözüm:
Evden dışarıya çık
Otobüs durağına yürü
Durakta gideceğin yöndeki otobusü bekle
Otobusün geldiğinde otobüse bin
Biletini bilet kumbarasına at
İneceğin yere yakınlaştığında arkaya yürü
İneceğini belirten ikaz lambasına bas
Otobüs durunca in
İşyerine doğru yuru
İş yeri giriş kapısından içeriye gir.

Yukarıdaki örnekte görüldüğü gibi, evden işe gidişte yapılabilecek işlemler adım adım sırasıyla,
kısa ve açık olarak tanımlanmaya calışılmıştır. Yukarıdaki algoritma kişinin otobusü kaçırma
olasılığı düşünülmeden oluşturulmuştur. Kişi durağa geldiğinde bineceği otobusu kaçırmış ise
algoritmamız asağıdaki sekilde değiştirilebilir.

Çözüm:
Evden dışarıya çık Otobüs durağına yürü
Otobusün saati geçmiş?
Durakta gideceğin yöndeki bir sonraki otobüsü bekle
Otobüsün geldiğinde otobüse bin
Biletini bilet kumbarasına at
İneceğin yere yakınlaştığında arkaya yürü
İneceğini belirten ikaz lambasına bas
Otobüs durunca in
İşyerine doğru yuru
İş yeri giriş kapısından içeriye gir.

Her iki örnekte görüldüğü gibi sorunu çözüme götürebilmek için gerekli olan adımlar sıralı ve
açık bir biçimde belirlenmiştir. Algoritmanın herhangi bir adımındaki küçük bir yanlışlık doğru
çözüme ulaşmayı engelleyebilir. Bu nedenle algoritma hazırlandıktan sonra dikkatle incelenmeli
ve varsa adımlardaki yanlışlıklar düzeltilmelidir.



Akış Diyagramları

Geliştirilecek olan yazılımın genel yapısının şematik gösterimine akiş diyagramı adi verilir.
Akiş diyagramları, yazılımı oluşturacak program parçalarını ve bu parçaların birbirleri ile olan
ilişkilerini belirler. Bir bilgisayar programının oluşturulmasında akiş diyagramlarının
hazırlanması, algoritma oluşturma aşamasından sonra gelmektedir. Bilgisayar programının
oluşturulması sırasında algoritma aşaması atlanarak, doğrudan akiş diyagramlarının
hazırlanmasına başlanabilir. Programlama tekniğinde önemli ölçüde yol almış kişiler bu
aşamayı da atlayarak direkt olarak programın yazımına geçebilirler.
Akiş diyagramlarının algoritmadan farkı, adımların simgeler şeklinde kutular içinde
yazılmış olması ve adımlar arasındaki ilişkilerin (iş akışı) oklar ile gösterilmesidir.


Örneğin 3 ve 5 sayısının toplamını ekrana yazdıran bir programcık oluşturalım;


ad1 programı başlat
ad2 değişken tanımla (T=0)
ad3 T=3+5
ad4 ekrana yaz(t)
ad5 programı bitir

16 Nisan 2014 Çarşamba

Ders 1 - C++ Giriş

Bugün C++ dersimizin ilk makalesini yayınlayacağız. C++'tan bahsetmedik. Zaten C++'ı öğrenmek için buradasınız ne olduğunu bilmek için değil.

İlk C++ dersimiz "Hello World;

/*......*/  : Bu kod yorum satırıdır. Çift satırlı yazılar yazabiliriz. Hangi satırın ne anlama geldiğini yazabilirsiniz. Derleyici bunları görmezden gelir. Bir nevi kodlar için not defteridir.
// : Tek satırlı yorum komutu.
#include <iostream> : Ön işlemci emir kodlarıdır. Bu komutla kodunuza kütüphane ekleyebilirsiniz.
int main() {} : Her C++ programı main fonksiyonunu bulundurmak zorundadır. Ana fonksiyondur. Kodun çalıştırılmaya başlandığı noktadır.
std::cout : Ekrana yazı yazdırmaya olanak sağlayan fonksiyondur.
return 0; : Şimdilik bilmeniz gereken tek görevi fonksiyonu bitirmektir. (Fonksiyonlar bölümünde üzerinde daha detaylı durulacaktır. 

Kodu derlediğinizde karşımıza HelloWorlddersimiz yazısı çıkacaktır. Pek heyecan vermesede böylelikle ilk programımızı yazmış olduk. 

İlk dersimiz bu kadar. Bu dersimiz size çok zor gelebilir ama ilerleyen bölümlerde bu işin halbuki ne kadar kolay olduğunu anlayacaksınız.




6 Nisan 2014 Pazar

Neden bazı yerlerde C# kullanılmaz?

Bunun en önemli nedeni C#'ın yorumlanan bir dil olmasıdır. Yorumlanan dil olmasıdır. 
Peki nedir bu yorumlanan dil?
Yorumlanan dil her hangi bir framework üzerinde çalışmak demektir. Örneğin; C#'ta yazdığınız bir programın o bilgisayarda çalışması için ".Net" frameworkunun o bilgisayarda olması gerekmektedir. Örnek Diller;

  • Java = Java Virtual Machine
  • Python = Python Virtual Machine 
  • Ruby = RVM
Gibi.

C#' C/C++'tan ayıran özellikler nelerdir?

  • C ve C++ makine diline C#'tan daha yakındır. 
  • C/C++ dilleri "Derlenen" dillerdir.
  • C# C/C++ dilleri ile yazılmıştır. 

C# ile neler yapıl(a)maz?
Örneğin C# ile işletim sistemi yazılamaz. Çünkü; C# derleyicisi olan .NET'e ihtiyaç duyar. .Net zaten hali hazırda bir işletim sistemine kurulu olması gerekmektedir.

  • C#'ta bir bios programı yazamassınız. 
  • Driver yazamassınız.
  • Donanım işlerine kesinlikle karışamassınız.


Sonuç
C# elbetteki küçümsenecek bir dil değil ama şu anda C/C++ kafa tutacak bir potansiyele sahip olmadığını biliyoruz. Sistem ve donanımla ilgili bir projeniz varsa kesinlikle uzak durmanız gereken bir dil C#.

Pascal Programlama Dili

PROGRAMIN EVRELERİ

Bir bilgisayar programının çalışır duruma gelebilmesi için şu evrelerden geçmesi gereklidir:
  1. Kaynak Programın Yazılması: Bilgisayara yaptırılacak işleri ifade eden komutlar, herhangi bir programlama dilinde metin (text) olarak yazılır. Buna kaynak program denir. Pascal dilinde yazılmış kaynak programların adına .PAS uzantısı eklenir.
  2. Kaynak Programın Derlenmesi: Kaynak programın makina diline çevrilmesidir. Bu işi derleyici yapar. Derlenen kaynak programın adına .OBJ uzantısı eklenir.
  3. Programların Birleştirilmesi (Link): Bazan bir program, daha önce derlenmiş başka programlarla birleştirilir. Bu işi birleştirici (linker) yapar. Linker, istenen birleştirme işini yapar ve program adına .EXEuzantısını ekler. .EXE uzantılı dosyalar, makina diline çevrilmiş, gerekli birleştirme işlemleri yapılmış ve çalışabilir duruma gelmiş dosyalardır. Bu dosyaları çalıştırmak için, adlarını yazmak yeterlidir.
Farklı bilgisayarların Pascal derleyicileri birbirlerinden farklı olduğu gibi, aynı marka ve modelde çalışan farklı Pascal derleyicileri de vardır. Standart Pascal'da, kaynak programda kullanılan deyimler, her derleyici için aynıdır. Donanımın gelişmesine paralel olarak, yazılım şirketleri birbirlerinden farklı Pascal derleyicileri hazırladılar. Bu derleyiciler, genel olarak standart Pascal'ın sözdizimi yapısını esas alırlar, ama aralarında bazı farklar olur. Dolayısıyla, hangi Pascal derleyicisi kullanılacaksa, kaynak programın ona göre yazılması gerekir.
Derleyiciler, piyasadan satın alınabilir. Ayrıca, İnternet'ten indirilebilecek bazı ücretsiz derleyiciler de vardır. Bu kitaptaki örnekler, Borland'ın Turbo Pascal For Windows (TPW) derleyicisine uyacak biçimde yazılmıştır. Başka bir derleyici kullanıyorsanız, derleyicinizin kılavuzuna bakarak, programda muhtemelen gerekebilecek ufak değişiklikleri yapabilirsiniz.
TP Kullanıyorsanız Yapacağınız İşler
Borland yazılım şirketinin hazırlamış olduğu Turbo Pascal adlı bütünleşik yazılımların farklı sürümleri (version) vardır. Bu sürümlerin hemen hepsi kaynak programı yazmaya yarayan bir editör (kelime işlemci), bir derleyici(compiler), bir düzeltici (debugger) ve bir birleştirici (linker) yazılımını içeren bütünleşik birer yazılımdır.
Ayrıca, bir ana menü yardımıyla program kaydetme, program arayıp açma, program adını değiştirme, program koşturma gibi işletim sistemiyle ilgili birçok işlevi de yaparlar. Daha sonra, başka yazılım şirketleri de benzer işleri yapan bütünleşik yazılımları piyasaya çıkarmışlardır.
Kaynak programların adında .PAS uzantısı olur. TPW editörü de dahil olmak üzere, bütünleşik derleyicilerin çoğu, kaynak program kaydedilirken, programın adına .PAS uzantısını kendiliğinden ekler. Başka bir editör kullanıyorsanız, kaynak programı kaydederken, adının sonuna .PAS uzantısını yazmalısınız. Bu uzantı, kaydedilen dosyanın bir Pascal kaynak programı olduğunu belirtir. Kaynak program derlenince, makina diline çevrilen programın adı, .OBJ uzantısını alır. Bu işi Pascal derleyicisi yapar.
Linker, object programı yürütülebilir program haline getirir. İsteniyorsa, daha önce derlenmiş başka programlarla birleştirir. Yürütülebilir (executable) programın adı .EXE uzantısını alır. Bu işi linker yapar. Turbo Pascal'ın yaptığı bu işler, başka şirketlerin hazırladığı bütünleşik derleyiciler tarafından da yapılır. Dolayısıyla, elinizde bir Pascal derleyicisi varsa, program yazımında yapacağınız basit değişikliklerle, onu kullanabilirsiniz.
Bütünleşik Bir Yazılım Kullanmıyorsanız Yapacağınız İşler
  1. Bir EDITOR (kelime işlemci) yükle.
  2. EDITOR ile kaynak programı yaz.
  3. Yazdığın kaynak programı kaydet (flopy disket, sabit disk, teyp v.b.).
  4. Kaynak programı yazdığın dile uygun DERLEYİCİ (Compiler)'yi yükle. Gelen iletilere uyarak, derleyeceğin pascal programını ve onun bulunduğu yeri, derleyiciye bildir.
  5. Geçiş evreleri tamamlanınca, derleyici kaynak programı makina diline çevirmiş olur. Çevrilen biçim kendiliğinden kaydedilir. Değişik makinalarda ve değişik derleyicilerde bunlara değişik adlar verilir. Genelde, derleyicinin yarattığı bu kodlara OBJECT kütük denilir.
  6. LINKER'i yükle. OBJECT kütüğü bulacağı adresi yaz. LINKER object kütüğünde olmayan gerekli fonksiyonlar için LIBRARY'ye bakar; bulunca onları birleştirir. Birleşik biçim için makina kodunu yaratır ve kaydeder
  7. .
  8. LINKER birbirlerinden ayrı olarak yazılmış kaynak programlardan yaratılan OBJECT kütükleri de birleştirerek tek bir program haline getirebilir.
  9. Bu birleşme işinin nasıl yapılacağı makinaya, derleyiciye ve linkere bağlı olarak farklılıklar gösterir. Kullanıcı bu süreçler için ilgili kılavuzlara bakmalıdır.
  10. DOS işletim sistemi altında çalışan derleyici ve linkerler ile yaratılan makina kodları EXE uzantısını alırlar (DOS İşletim Sistemi, EXE uzantılı dosyaları COM uzantılı dosyalara dönüştürebilir. Ama bu şimdiki konumuzun dışındadır).
  11. Linker'in yarattığı bu son birleşik kodlar yürütülebilir biçime getirilmiş programlardır. Bu programları işletmek için adlarını yazıp ENTER tuşuna basmak yeterlidir.
  12. DEBUGGER: Derleyicinin kaynak programda gördüğü yanlışları düzeltmeye yarayan programdır.
Son yıllarda yazılan bazı bütünleşik (entegre) programlarda yukarıda sıralanan evreler kısmen ya da tamamen kendiliğinden yapılmaktadır. Birçoğunda kendi EDİTÖR'ü vardır. Ana menüden kullanıcının istediği seçenekler yapılır. Örneğin TURBO PASCAL, TURBO C, Zortech C++ gibi entegre programlar bunlara örnektir. Bu derslerde, bunlardan birisi olan TPW (Turbo Pascal for Windows adlı bütünleşik yazılımı kullanacağız.

Pascal ile Programlamaya Giriş

PASCAL Programlama Dili, 17.yüzyılda yaşamış olan ünlü matematikçi Blaise Pascal'a adanmıştır.
Pascal Derleyicisi, 1971 yılında, Zürih Üniversitesi matematik profesörlerinden Niklaus Wirth tarafından yazılmıştır. Öz olarak, ALGOL (Algoritmic Language) dilinin niteliklerini taşır. Başlangıçta, Bilgisayar Programlama işini kolay öğretme amacını güden eğitim amaçlı bir dil olarak ortaya çıkmıştır. Ama, daha sonraları, hızla yayılmış ve geniş uygulama alanları bulan genel amaçlı bir programlama dili olmuştur.
Pascal Dili, yapısaldır. Bu derslerde bu yapıyı öğreneceğiz. Şimdilik, kısa bir açıklama ile yetinelim. Her programın bir başlığı, bir yürütme bölümü vardır. Gerekiyorsa, programın kullanacağı başka programları çağıran çağrı bölümü ve kullanacağı nesnelerin tanıtıldığı bir bildirge bölümü eklenir. Dersin ilerleyen bölümlerinde açıklanacak olan bu yapısallık niteliği, 1960'lı yıllarda bilgisayara egemen olan FORTRAN ve COBOL dillerine göre üstün bir nitelik getirmiştir. Bu nitelik, PASCAL ile program yazmayı çok kolaylaştırmıştır.
Her dilde olduğu gibi, kendisine özgü bir yapısı yanında, PASCAL deyimlerinin özel bir sözdizimi vardır. İngilizce sözcüklerden oluşan sözdizimi, konuşma dilinden alındığı için öğrenilmesi kolaydır. Bu derste, Pascal'ın yapısını, deyimlerini ve deyimlerin sözdizimini çok basitten başlayarak adım adım öğreneceğiz.

Kaynak Program

Bir kaynak program, bilgisayara istenen işleri yaptırmak için, bir programlama dilinde yazılmış sıralı komutların bütünüdür. Buna neden kaynak program dediğimiz, biraz sonra daha iyi anlaşılacaktır. Ancak, bir karışıklık olmayacağı zaman, kaynak program demek yerine, kısaca, program diyeceğiz.

Bir Pascal Programının Yapısı
BaşlıkProgram Belirtke(Çağrılı dosyaların listesi);
Birim Çağırmauses Çağrılı_birimin_adı;
Bildirge Bölümü
label
Akışın sapacağı satırların listesi
const
Sabitlerin Listesi
type
Veri Türü Tanımları
var
Değişkenlerin Listesi
procedure
Procedure'lerin Tanımı
function
Fonksiyonların Tanımı
Yürütme Bölümü
BEGIN
Deyimler;
END.

Program İçinde Açıklamalar
PASCAL programında derleyicinin işlemeyeceği ama programcının görmesinde yarar görülen açıklama ya da uyarılar { } parantezleri arasına yazılır. Bu parantezler klavyede yoksa, onların yerine (/* */) simgeleri kullanılabilir.
Belirtke (Identifier)
PASCAL'da kullanıcının tanımladığı her nesnenin (sabit, değişken, fonksiyon, procedure, unit ve program) bir adı bir kimliği vardır. Bu adlar programda kullanılan nesnelerin birbirlerinden ayrılmalarını sağlar.
Her nesneye bir ad verilir. Bu ada belirtke (identifier) denilir. Belirtke bir karakter dizisidir.
Adlandırma, genellikle, kullanılan işletim sistemine bağlıdır. DOS İşletim Sisteminde, PASCAL'ın belirtkeleri, İngiliz alfabesindeki bir harfle başlar, sonrakiler harf veya rakam olabilir. Ç,ç,z,ğ,İ,ı,Ö,ö,œ,ş,Ü,ü harfleri kullanılamaz. Belirtke tek bir sözcükten oluşur, sözcük yazılırken karakterler arasında boşluk bırakılamaz. Büyük harf-küçük harf ayrımı yoktur.
Unix, NT vb. işletim sistemlerinde belirtke uzunluğu 32 karaktere ulaşabilir. DOS'ta ise 8 karakterle sınırlıdır.
Örnekler
BelirtkeGeçerliliğiGeçersizlik Nedeni
VergiGeçerli
AS94Geçerli
KuVVetGeçerli
ÇarpımGeçersizÇ ve ı kullanılamaz
Gelir GiderGeçersizBoşluk kullanılamaz
Hey!Geçersiz! harf değil
99MuhasebeGeçersizRakamla başlayamaz

Program başlığı
Bir Pascal kaynak Programı Program anahtar sözcüğü ile başlar. Yürütme bölümündeki END 'in sonuna konulan (.) nokta ile biter.
Program başlığı, derleyiciye, programın başladığı yeri, yürütme bölümünün sonundaki END 'in sonuna konulan (.) nokta ise, programın bittiği yeri bildirir.
Dolayısıyla, her Pascal Kaynak Programına bir başlık koyarız. Sözdizimi şöyledir:
 Program Belirtke(Input, Output);
Burada Program anahtar bir sözcüktür. Belirtke ise, programa verilen bir ad bir kimlik'tir. (Input, Output) ise, Pascal'ın ilk sürümlerinde Giriş/Çıkış işlemlerini yapan iki yazılımdır. Örneğin,
 Program Merhaba(Input, Output);
Ancak, çağdaş derleyicilerde, Giriş/Çıkış işlemleri çok çeşitlenmiştir ve artık belli bir kanaldan (channel) veri alma ya da belli bir kanala veri gönderme işlemi olarak yorumlanmalıdır. Dolayısıyla, ilk sürümlerdeGiriş/Çıkış işlemlerini yapan (Input, Output) yazılımları yerine, bir çok yeni derleyicide, başka yazılımlar konulmuştur. Örneğin, TPW derleyicisinde bu işi yapan wincrt adlı bir birim (unit) dir. Kaynak programa bu birimin çağrılması gerekir. Bunun söz dizimi şöyledir:
 Program Merhaba;
 uses wincrt;
DOS işletim sisteminde Pascal Kaynak Programlarının adlandırılması şöyledir:
 
 | | | | | | | | | .pas 
Buradan anlaşıldığı gibi, en çok 8 karakter uzunluğunda ad, onu izleyen bir (.) nokta ve onu izleyen PAS uzantısı olmalıdır. Tabii, DOS işletiminde .PAS uzantısı zorunlu değildir; ama derleyicinin Pascal Kaynak Programlarını tanıyıp diğerlerinden ayırt edebilmesi için yararlıdır:


Bildirge

Bildirim Zorunludur
Bir Pascal Kaynak Programı, şu nesneleri kullanabilir:
Label (etiket), const (sabit), type (tip, veri-türü), var (değişken), procedure (yordam) ve function (fonksiyon).
Pascal nesnelerinin ( label, const, type, var, procedure ve function) hepsi bir programda yer almayabilir. Ancak programda kullanılacak her nesnenin bildirge bölümünde tanımlanması gerekir.
PASCAL Kaynak Programı'nda tanımlanmayan bir etiket, sabit, tip, değişken, prosedür veya fonksiyonu derleyici tanımaz.
Bildirge bölümünde yer alan procedure ve fonksiyonlar diğer dillerdeki alt programlar 'ın işlevini görür. Unit, procedure ve fonksiyonların yapıları da bir PASCAL programının yapısına benzer. Herbirisinin birbaşlığı, varsa çağrılı dosyalar, bildirge bölümü ve yürütme bölümü vardır. PASCAL da bu yapı benzerliği, program yazmayı çok kolaylaştırır.
Bildirimin Geçerlilik Alanı
Bildirge bölümünde tanımlanan nesnelerin (label, const, type, var, procedure, fınction) her birisine ana bellekte birer yer ayrılır. Bu yerlere o nesnelerin adresi denilir. Ayrılan yer, o nesnenin sığacağı büyüklüktedir.
Bir nesneye ayrılan yer, o nesnenin tanımlandığı blok (program, procedure, function) içinde geçerlidir. İç-içe bloklar tanımlandığında, içteki blok dış bloktaki nesneleri tanır; ama dıştaki blok iç bloklarda tanımlanan nesneleri göremez. Bunun ne anlama geldiğini ileride örneklerle açıklayacağız.
Burada label, const, var bildirimlerinin nasıl yapıldığını örneklerle göstereceğiz. Type, procedure, function bildirimlerini ise, dersin ilerleyen bölümlerinde ele alacağız.
Label Bildirimi
Label (etiket), kaynak programda referans edilmesi istenen satırlara numara veya ad verme olayıdır.
GOTO deyimi, BASIC COBOL, FORTRAN vb. dillerde, program akışının sapacağı satırları belirlemek için, kaçınılmaz olarak kullanılır. Program akışının sapacağı satırları belirtmek için o satırlara birer numara veya ad verilir. Bunlara label (etiket) diyoruz. GOTO deyimi PASCAL'da da kullanılabilir. Ancak, PASCAL gibi yapısal dillerde GOTO deyiminin kullanılması arzu edilmez ve gerekli de değildir. Örnek olarak, ileride label'in ve GOTO deyiminin kullanıldığı programlar yazacağız.
Yürütme Bölümü
Bildirge Bölümünden sonra gelen
 BEGIN
  Deyimler;
 END.
 
bölümü, programın yürütme bölümüdür. Programı koşturan deyimlerin hepsi burada yer alır.

Kaynak Programın yürütme bölümündeki END 'den sonra konulan (.) noktanın, programın sona erdiğini bildirdiğini söylemiştik. Procedure ve function 'un Yürütme Bölümlerinin sonundaki END de procedure veya function'un sona erdiğini bildirir; ama nokta (.) yerine noktalı virgül (;) konulur.

Girdi/Çıktı (Input/Output)

Bir bilgisayar programına bir iş yaptırmak için gerekli bilgilerin (veri) girilmesi ve bilgisayarda işlenen verilerin geri alınması gerekir. Bu iki işleme, sırasıyla, Girdi/Çıktı (Input/Output) işlemleri denilir.
Bilgisayar programı için gerekli olan veriler, istenirse kaynak programın içine konulabilir. Ama, çok sayıda veri kullanılacaksa, bu yöntem hiç uygun değildir. Çünkü kaynak programı gereksiz yere çok büyütür. Dahası, verilerdeki her değişim kaynak programın değiştirilmesini gerektirir.
Bu nedenlerle, programın kullanacağı verileri, program koşarken gerektiği yerde bilgisayara girmek en uygun ve en kolay yoldur.
Pascal, işleyeceği verileri, herhangi bir giriş biriminden alabilir. Genellikle, giriş işlemi için veriler ya klavyeden girilir ya da daha önce kaydedilmiş bir dosyadan okunur. Eğer, bilgisayarınız bir ağa bağlı ise, ağ üstündeki başka bir bilgisayardan da veri alabilir.
Bilgisayarda işlenen verilerin istenildiği biçim ve sırada geri dönmesi gerekir. Aksi halde, programın ne yaptığını bilemeyiz.
Pascal, işlediği verileri, herhangi bir çıkış birimine gönderebilir. Çıkış birimi ekran, yazıcı, dosya, ses aygıtı, ağ ile bağlı başka bir bilgisayar vb olabilir.
Pascal'a veri giriş ve çıkışını yapan iki fonksiyon vardır:
Read( )
Giriş işlemlerini yapar.
Write( )
Çıkış işlemlerini yapar.
Bu fonksiyonlar, Pascal'da çok hünerli iki fonksiyondur. Her türlü giriş çıkış işlemlerini istenilen biçim ve sırada yapabilirler. Bu hünerlerini nasıl kullanacağımızı adım adım öğreneceğiz.
Aksi söylenmediği sürece, girişler standart giriş biriminden olur. Bizim kullanacağımız sistemde standart giriş birimi klavyedir.
 read(x);
 readln(x);
deyimlerinin her ikisi de, standart giriş biriminden x değerini okur ve ana bellekte x için ayrılan adrese yerleştirir. Aralarındaki tek fark, ikinci deyimin x değerini okuduktan sonra yeni satıra geçmesidir. Böylece, üst satırda okunmamış veri kalsa bile, bundan sonraki okumalar yeni satırdan yapılır. Veri girişi klavye yerine dosyadan yapıldığında bu ayrım çok önemli olur.
Bazan birden çok değişkene bir tek read ya da readln fonksiyonu ile değer verebiliriz.

Write( ) Fonksiyonu

Write( ) ve WriteLn( ) fonksiyonları, Pascal'da bütün çıkış işlemlerini yaparlar. Bunlar ekrana, yazıcıya, dosyaya, ses aygıtlarına, başka bilgisayar vb çıkış birimlerine yapılacak çıkışlardır.
Aksi söylenmediği sürece, çıkışlar standart çıkış birimi 'ne gider. Bizim kullanacağımız sistemde standart çıkış birimi ekrandır.
Ayrıca, çıkışın biçimlenmesi de Write( ) fonksiyonunun görevidir.
Metin (Text) Çıkışı
Pascal'da bir karakteri (harf, rakam, simge) ya da bir metni (text), kesme işaretleri (' ') arasına alırız. Örneğin,
 
 WriteLn('A');
deyiminin çıktısı
 
 A
 
dır.
 
 WriteLn('Ankara başkenttir.');
deyiminin çıktısı ise şöyledir:
 
  Ankara başkenttir.
 
Write( ) ve WriteLn( ) fonksiyonları arasındaki tek fark, birincisi çıktıyı yapınca, imleç, çıktının bittiği yerde durur; yeni satıra geçmez. Oysa, ikincisi, çıktıyı yapınca, imleç, yeni satıra geçer. Böylece, üst satırda boşluk kalsa bile, bundan sonraki veriler yeni satıra yazılır. Veri çıkışı ekran yerine yazıcıya ya da bir dosyaya yapıldığında bu ayrım gene geçerlidir.

Şimdi bunların nasıl olduğunu örnekler üzerinde göstereceğiz. Örneğin,
 Write('İstanbul büyük bir kenttir.');
 Write('Ankara başkenttir.');
deyimlerinin çıktısı
 İstanbul büyük bir kenttir.Ankara başkenttir.
biçiminde aynı satıra yerleşir. Çünkü, ilk Write( ) fonksiyonu işlevini tamamlayınca, imleç satırbaşı yapmaz, çıktının bittiği yerde durur. İkinci Write( ) fonksiyonunun çıktısı, imlecin bulunduğu bu yerden başlar.
Öte yandan,
 WriteLn('İstanbul büyük bir kenttir.');
 WriteLn('Ankara başkenttir.');
deyimlerinin çıktısı
 İstanbul büyük bir kenttir.
 Ankara başkenttir.
biçiminde ardışık iki satıra yerleşir. Çünkü, ilk WriteLn( ) fonksiyonu işlevini tamamlayınca, imleç çıktının bittiği yerde durmaz, satırbaşı yapar. Dolayısıyla, ikinci WriteLn( ) fonksiyonunun çıktısı, imlecin bulunduğu yeni satırdan başlar.
Sayısal Veri Çıkışları
x sayısal bir değişken ya da bir sayı ise
TPW derleyicisi, özel bir biçim istenmezse, integer sayıları olduğu gibi yazar.Örneğin, x integer türünden bir değişken olarak tanımlanmış ve 5643 değeri atanmış olsun. Bu durumda,
 Write(5643);
 Write(x);
deyimleri aynı işi yaparlar ve ekranda imlecin bulunduğu yere 5643 sayısını yazarlar. Çıktılar arasında kendiliğinden boşluk oluşmayacağı için, bu iki deyimin çıktıları ekranda ardışık olarak yazılacak, dolayısıyla
 56435643
biçiminde görünecektir. Burada, program istenen işi doğru yapmıştır; ama çıktılar gözümüzün algılayabileceği biçime sokulmadığı için yanıltıcıdır. Bu tür göz aldanmalarından sakınmak için, çıktıları ekranda ya da kağıtta istediğimiz yere istediğimiz biçimde yazdırabiliriz. Örneğin, yukarıdaki iki çıktıyı birbirinden ayırmak için, birincisini 6 haneye sağa yanaşık olarak, ikincisini 10 haneye sağa yanaşık olarak yazdırmak isteyelim. Şu deyimleri kullanırız:
 Write(5643:6);
 Write(x:10);
Bu deyimlerin çıktısı şöyle olacaktır:
 | | |5|6|4|3| | | | | | |5|6|4|3|   
Buradan anlaşıldığı gibi, sabit ya da değişken bir x değerini, imlecin bulunduğu yerden başlayarak n hanelik (kolon) bir yere sağa yanaşık olarak yazdırmak için,
 Write(x:n);
deyimini kullanıyoruz. Sabit ya da değişken_değeri olan verimiz harf, metin, integer ya da real olabilir.

Bazan birden çok değişkeni bir tek Write ya da WriteLn fonksiyonu ile yazabiliriz. Örneğin, yukarıdaki iki deyimin yaptığı işi tek bir deyimle de yapabiliriz:
 Write(5643:6 , x:10);
Görüldüğü gibi, birden çok veriyi (sabit ya da değişken_değeri) yazdırmak için veriler arasına (,) virgül koymak yetecektir. Tabii, istersek, gene her bir veriye istediğimiz kadar hane (kolon) ayırabiliriz.
Aksi istenmezse, Pascal real türden verileri 16 haneye bilimsel biçimle yazar. Örneğin,
 Write(23.4768);
deyiminin çıktısı
 2.3476800000E+01
biçimindedir. Bu sayı 2.34768 x 1001 ye eşittir. Dolayısıyla, E+01 gösterimi 1001 anlamındadır.
Real verilerin kaç haneye yazılacağını ve kesirli kısmının kaç hane olacağını belirleyebiliriz. Örneğin, 23.4768 real sayısını 18 haneye iki ondalık kesirli ve sağa yanaşık olarak yazdırmak istersek,
 WriteLn(23.4768:18:2);
deyimini yazarız. Bunun çıktısı şöyle olur:

 | | | | | | | | | | | | | |23.48
Buradan görüldüğü gibi, real sayı iki ondalık basamaklı olarak görüntülenirken 23.4768 sayısı 23.48 sayısına yuvarlamıştır. Atılan ondalık kesrin ilk rakamı 5 ya da 5 den büyükse bir üst rakama yuvarlanır. 5 den küçükse bir küçük rakama yuvarlanır.
Ancak, bu yuvarlama yalnızca çıktıda oluşur. Ana bellekte sözkonusu değişkene ayrılan adreste real sayı 4 byte olarak korunur. Dolayısıyla, başka işlemlere girdiğinde, real sayı duyarlığını kaybetmez.
Write fonksiyonu, bir işlemin sonucunu da yazabilir. Örneğin, (25.75 / 5) * 3 işleminin sonucunu 8 haneye 2 ondalık basamaklı olarak çıktıya göndermek istersek,
 WriteLn( (25.75 / 5) * 3 : 8 : 2 );
deyimini yazmak yetecektir. Bu deyimin çıktısı,
 | | | |15.45 
 
olacaktır.

Özet

Write( ) fonksiyonu karakter, metin, integer, real, boolean türden verilerin ya da verilerle yapılabilen işlemlerin çıktısını tek tek yapabileceği gibi bunların istenen sıra ve biçimdeki bir dizisini de ekrana, yazıcıya ya da dosyaya yazabilir. Veriler sabit değerler olabileceği gibi, bir değişken değeri de olabilir. Değişken olduğunda, değişkenin adını yazmak yeterlidir. Karakter ya da metin sabitler (' ') kesmesi içine alınmalıdır.

Sözdizimi şöyledir:
 Write(parametre [:n[:m]], parametre [:n[:m]],...);
Burada [] içindekiler çıktıyı biçimlendirmek içindir; istenirse kullanılır.

Örnekler


Aşağıdaki program üç satırlık bir metin yazar.
Program Biçem_01
Program Format_01;
uses wincrt;

BEGIN
 WriteLn('İyi biçim programın anlaşılmasını kolaylaştırır.');
 WriteLn('Kötü biçim programın anlaşılmasını zorlaştırır.');
 WriteLn('Kaynak programınız anlaşılır biçimde olsun.')
END.

Aşağıdaki programı yazıp koşturunuz. İkinci satırdaki verinin metin olduğuna dikkat ediniz.
Program Biçem_02
Program Format_02;
uses wincrt;

BEGIN
 WriteLn('TAMSAYI ÇIKTILARININ BİÇİMLENMESİ');
 WriteLn('123456789012345678901234567890');
 WriteLn(123);
 WriteLn(12345);
 WriteLn(1234567);
 WriteLn(123:8);
 WriteLn(123:6);
 WriteLn(123:1);
 WriteLn(-123);
 WriteLn(-123:2);
 WriteLn(0);
 WriteLn(67, 84, 35, 98,86);
 WriteLn(123:-5)
END.

Aşağıdaki program, 123 ve 456 sayılarını birinci satırda integer olarak, ikinci satırda real olarak algılayacaktır. Programı yazıp koşturunuz ve çıktılar arasındaki farkı görünüz.
Program Biçem_03
Program Format_03;
uses wincrt;

BEGIN
 WriteLn(123,456);
 WriteLn(123.0,456.0)
END.

Aşağıdaki program, bilimsel biçimiyle girilen real sayıları istenen biçimde çıkarmaktadır. Son satırdaki Maxint, derleyicinin kabul ettiği en büyük tamsayıyı verecektir. Bu tamsayı sisteme bağlı olarak değişebilir. PC lerde 65532 olan bu sayı, büyük sistemlerde çok daha büyük değerdedir. Programı yazıp koşturunuz ve çıktılar arasındaki farkı görünüz.
Program Biçem_04
Program Format_04;
uses wincrt;

BEGIN
 WriteLn(11.234E2:10:2);
 WriteLn(-456.4E-3:10:5);
 WriteLn(-456.4E-3:10:3);
 WriteLn(6.345E2:10:2, 2.3145E2:10:2);
 WriteLn('Maxint = ', maxint);
END.

Aşağıdaki program, bir işlemin sonucunun çıktıya gönderilebileceğini göstermektedir. Programı yazıp koşturunuz ve çıktılar arasındaki farkı görünüz.
Program Biçem_05
Program Format_05;
uses wincrt;

var
   a,b :real ;
    
BEGIN
 WriteLn('Lütfen iki gerçel sayı giriniz.  > ');
 Readln(a,b);
 writeln(a:3 ,'*',b:3, '  = ',  a*b:15:3 );
 writeln(a:3 ,'+',b:3, '  = ',  a+b:15:3);
 writeln('Aritmetik ortalama = ', ((a+b)/2):  15:3);
 writeLn('ABCDEF':36);
END.

Aşağıdaki program, sabitler ve değişkenlerle yapılan işlemlerin sonucunun çıktıya gönderilebileceğini göstermektedir. Programı yazıp koşturunuz ve çıktılar arasındaki farkı görünüz.
Program Biçem_06
Program Format_06;
uses wincrt;
const
 a = 3;
 b = -5;
var
 x,y : integer;
 r,s : real;
 c  : char;

BEGIN
 x := 9*a;
 y := 2*b;
 r := x/y;
 s := (x+y)/3;
 c := 'T';
 writeln(a,b:8);
 writeln(a,b:8,x:8,y:8,s:6,'   ',c);
 writeln(15+5,' = ',20,'  is  ', 15+5=20);
 writeln('17 < 4  is  ', 17<4);
END.

Standart Pascal'da basit bir kaynak program şöyledir:
Program 01.01
 Program Merhaba(input,output);
 BEGIN
  WriteLn('Merhaba Pascal.');
 END.
Bu kaynak programda yalnızca başlık ve yürütme bölümü vardır. Kaynak program derlenip yürütülürse, ekrana
 Merhaba Pascal.
metni (text) ni yazar. Bu metin programın çıktısıdır. Bu çıktıyı yapan WriteLn fonksiyonudur.

Buradan görüldüğü gibi, bir Pascal Kaynak Programında başlık,
 Program 
 
sözcüğü ile başlar; program_adı onu izler. Örnekte Merhaba programın adıdır. Standart Pascal'da program adından sonra ( ) parantezi içine, programın çağırdığı dosyaların adları yazılır.
Yukarıdaki örnekte yazılı olan (input, output) Standart Pascal'da Giriş/Çıkış işlemlerini yapan fonksiyonlardır.
Programın yürütme bölümü
 BEGIN
  WriteLn('Merhaba Pascal.');
 END.
bölümüdür. Programın bitiş yeri, yürütme bölümünün sonudur. Programın bitiş yeri END' in sonuna konulan (.) nokta ile belirlenir. Bu noktayı koymak zorunludur. Çünkü, Pascal, programın bittiğini bu noktayı görünce anlayacaktır.
Taşınabilirlik
Bir programın taşınabilir olması demek, kaynak programın her donanım ve her derleyicide çalışabilir olması demektir.
Bu nedenle, program yazarken programın taşınabilir olması istenir. Bunun olabilmesi için, her derleyicinin aynı deyimlere sahip olması gerekir.
Ne varki, her programlama dili, donanımın gelişimine paralel olarak gelişir; yeni deyimler, yeni fonksiyonlar ve prosedürler eklenir. Bütün bunlar, program yazmayı kolaylaştırıcı araçlardır.
Ancak, farklı şirketlerin farklı donanımlar için geliştirdikleri yeni deyimler, kaçınılmaz olarak birbirlerinden farklı olur; dolayısıyla bir dilde genelliği ve standardı bozar.
Standardı korumak için ulusal ya da uluslararası bazı kuruluşların ciddi çabaları olmakla beraber, gelişimin doğal sonucu olarak, derleyiciler arasında farklılıklar oluşmaktadır.
Bu nedenle, program yazarken iki şeye dikkat edilmelidir.
  1. Kullanılacak derleyiciye uyum sağlamak,
  2. Mümkün olduğu kadar standart deyimleri kullanmak.
Girdi/Çıktı işlemleri için Standart Pascal'ın getirdiği yöntemler genelliği koruyamamıştır. Donanımın gelişimine paralel olarak, farklı şirketler farklı yöntemler geliştirmişlerdir.
Yeni derleyicilerin çoğunda, Girdi/Çıktı işlemleri başka programlara devredilmiştir. Örneğin, bu derste kullanılan, TURBO PASCAL FOR WINDOWS (TPW) derleyicisinde, ekrana yapılacak çıktılar wincrtadlı birim (unit) tarafından yapılmaktadır. Dolayısıyla, TPW derleyicisi için, yukarıdaki programı şöyle yazmak gerekir:
Program 01.02
 Program Merhaba;
 uses wincrt;
 BEGIN
  Writeln('Merhaba Pascal.');
 END.
TPW derleyicisinin ekrana çıktı gönderebilmesi için, mutlaka
 
 uses wincrt;
 
deyiminin kaynak programa konulması gerekir. Başka derleyicilerde, Giriş/Çıkış işlemlerini yapan programlar farklı olabilir. İkinci satır, kullanılan derleyiciye göre düzenlenmelidir. Her derleyicinin kılavuzu'na ya da Yardım Sayfası'na bakılmalıdır. Örneğin, DOS altında çalışan Turbo Pascal'da ekrana yapılan çıktılar crt programı (unit) tarafından yapılır. Dolayısıyla o derleyici için
 uses  crt; 
yazılmalıdır..

Hemen hemen her PASCAL derleyicisinde kendiliğinden açılan üç dosya vardır:
Input
Giriş işlemlerini yapar.
Output
Çıkış işlemlerini yapar.
Error
Derleme ya da koşturma sırasında oluşan hataları bildirir.
Bu üç program derleyici tarafından kendiliğinden açıldığı için, programcı kaynak programda bunlarla ilgili bir iş yapmak zorunda değildir.
Şimdi yukarıdaki programı biraz etkileşimli biçime dönüştürelim.
Program 01.03
 Program Merhaba(input,output);
 uses wincrt;
 Var
  kim : string;
 BEGIN
  WriteLn('Adınız nedir ? ');
  ReadLn(kim);
  WriteLn('Merhaba', kim , ' !' )
 END.
Bu programın bildirge bölümünde, Var anahtar sözcüğü altında kim adlı bir değişken tanımlanmaktadır. Yürütme bölümü, BEGIN ... END. arasındaki deyimlerden oluşmaktadır. Yürütme bölümünde, birinciWriteLn fonksiyonu ekrana Adınız nedir ? mesajını yazar. Kullanıcının bu mesaja yanıt olarak klavyeden gireceği adı (metin), ReadLn fonksiyonu okur ve o yanıtı kim adlı değişkene atar. Üçüncü ve sonuncu satırdakki WriteLn deyimi, adı girilen kişiye Merhaba demektedir.
Deyim
Programa dikkatle bakarsak, her satırda bilgisayara bir iş yaptırıldığı ve bu işleri yaptıran ifadelerin sonunda (;) noktalı virgül olduğunu görürüz. Bilgisayara bir iş yaptıran ifadelere deyim diyeceğiz. Dilbilgisindeki anlamından farklı olarak, burada "deyim"komut yerine geçmektedir. Çoğunlukla, bilgisayara bir emir veren ifadeler tek bir sözcük değil, sözcüklerden ve başka simgelerden oluşan bir ifadedir. Bu nedenle, komut yerine deyim sözcüğünü kullanacağız. Örneğin,
 kim : string;
bir deyimdir ve kim adlı string türünden bir değişken tanımlar. Benzer olarak, yürütme bölümündeki
 ReadLn(kim);
ifadesi de bir deyimdir. Bu deyim, kullanıcının klavyeden gireceği metni kim adlı değişkene atar ve bunu programın işlemesi süresince ana bellekte tutar.
Yukarıdaki programlarda, her deyim ayrı bir satıra yazılmıştır. Böyle olması, yalnızca kaynak programı okuyup algılamayı, gerektiğinde üstünde değişiklik yapmayı kolaylaştırmak içindir. Çünkü, Pascal'da deyimler biribirlerinden (;) ile ayırt edilir. Farklı satırlar deyimleri ayırmaz.
Ayrıca, Pascal'da büyük-küçük harf ayrımı yoktur. Programdaki bütün ifadeleri isterseniz büyük harflerle, isterseniz küçük harflerle, isterseniz karma biçimde yazabilirsiniz. Ancak, derleyici açısından farketmeyen bu durum, programı okuyanlar için fark edecektir. Programınızın kolay okunup anlaşılması ve gerektiğinde üstünde düzeltmelerin zahmetsizce yapılabilmesi için, alışılmış görsel kalıplara uymanız tavsiye edilir. Bu kalıpları, ders boyunca yazılan programlarda göreceksiniz.
Özetlersek, PASCAL programında belli bir işlevi olan her ifade bir deyimdir. Başlık bir deyimdir, bir label'in, bir sabitin,bir değişkenin bildirimi bir deyimdir. Bir işlem yaptıran her komut bir deyimdir. PASCAL'da deyimler noktalı virgül ile birbirlerinden ayrılır. Satırların veya boşlukların ayırıcı niteliği yoktur. Deyimlerin nasıl yazıldığını örneklerde göreceksiniz.
Uyarı:
Bazı programlama dilleri küçük-büyük harf ayrımı yapar. Örneğin C, Unix, PHP, Java,.. vb diller büyük-küçük harf ayrımına duyarlıdır.

Sabitler ve Değişkenler

Genel amaçlı programlama dillerinin hemen hepsi, verileri işlemek için, matematikte olduğu gibi sabit ve değişken kavramlarını kullanır.
Sabitler ve değişkenler kaynak programın bildirge bölümünde tanımlanır. Herbirine ayrı bir ad verilir. Program derlenip yürütülmeye başlanınca, tanımlanan bu adlara, ana bellekte birer yer ayrılır. Sabitlere ve değişkenlere atanan değerler bu adreslerde kullanılmaya hazır tutulur.
Bir program işlediği sürece değişmeyen verilerin tutulduğu öğelere sabit, program işlerken değeri değişebilen verilerin tutulduğu öğelere de değişken diyeceğiz.
Sabit Bildirimi
 Const
  Pi = 3.14159;
deyimi Pi adında değeri 3.14159 olan bir sabit tanımlar, 3.14159 sabitine ana bellekte bir yer (adres) ayrılır ve program boyunca bu adreste 3.14159 sayısı yer alır. Program içinde 3.14159 sabitinin, kullanıldığı her yerde 3.14159 sayısı kullanılmış olur.
Değişken Bildirimi
Programda kullanılacak her değişkenin önceden derleyiciye tanıtılması gerekir. Bu iş bildirge bölümünde var başlığı altında yapılır. Sözdizimi şöyledir:
 var 
  değişken- adı : veri-türü;
Örneğin,
 var
  Yaricap  : real;
  Cevre     : real;
bildirimi real türden Yaricap ve Cevre adlarıyla iki değişken tanımlar. Bu bildirim ana bellekte 4 byte uzunluğunda bir yer (adres) ayırır. Bu yer program boyunca korunur. Değişkene yapılan bir atama, onun adresine yazılır.
Değişkenlere nasıl değer atandığını biraz sonra göreceğiz. Ancak, onları daha iyi kavrayabilmek için, Pascal'ın kullandığı veri türlerini incelememiz yararlı olacaktır.

Veri Türleri

Sabit ya da değişken olarak bilgisayara girilen verilerin işlenebilmesi için, ana bellekte kendilerine ayrılan yerlerde program ( ya da alt program) boyunca tutulmaları gerekir. Sabitler ve değişkenler, harf, metin, tamsayı, kesirli sayı ve benzeri nesnelerdir. Bunların ikili sayıtlama sistemindeki ifadeleri farklı uzunlukta olacaklardır. Dolayısıyla, ana bellekte bunların kapsayacağı yerler (adresler) farklı büyüklükte olacaktır.
Her veri türüne tam ona yetecek kadar yer ayırabilmek için, bilgisayar programlama dilleri verileri türlerine ayırır. Değişken tanımlanırken türü belirtilir; böylece, ana bellekte ona yetecek kadar yer ayrılır.
Bir değişkenin ya da fonksiyonun alabileceği değerler kümesine veri türü denilir.
Yüksek düzeyli programlama dillerinin hemen hepsi, verileri belirli sınıflara ayırır. Başka bir deyişle, bir verinin bilgisayara girilebilmesi ve işlenebilmesi için belli bir sınıfa ait olması gerekir. Veri türlerinin sınıflandırılmasında, yazık ki, henüz evrensel bir uzlaşma yoktur. Farklı diller farklı sınıflandırmalar yaptığı gibi, aynı dilin farklı firmalar tarafından yaratılan derleyicileri de veri türlerini farklı sınıflara ayırmaktadır. Hatta, bir firmanın bir dile ait derleyicisinin farklı sürümleri bile farklı sınıflandırmalar yapmaktadır.
Veri türleri belirlenirken şu ilkelere uyulur:
  • Veri türü belirli bir kümedir. Matematiksel anlamıyla, bir değişkenin alabileceği değerler kümesidir. Başka bir deyişle, bir fonksiyonun tanım ya da değer bölgesidir. Dolayısıyla, değişkenler, işlemler, prosedürler ve fonksiyonlar tanımlanırken hangi veri kümesi üzerinde değer alacakları belirlenir.
  • Bir sabit, değişken ya da fonksiyon bir ve yalnızca bir sınıfa ait değerleri alabilir.
  • Her operatör belli türden verilere uygulanır ve belli türden sonuçlar verir.
Standart PASCAL dilinde veriler, scalar veri türleri ve yapısal veri türleri olmak üzere ikiye ayrılır. Bunların alt sınıfları için evrensel uzlaşma yoktur. Okura bir görüş vermek için, Turbo Pascal derleyicisinin yaptığı sınıflandırma örnek alınacaktır.

Scalar Veri Türleri

PASCAL dilinde scalar veri türleri ilkel (primitive) veriler, numaralanmış (sıralanmış, enumerated) veriler ve alt bölgeler (subrange) olmak üzere üçe ayrılır.

İlkel (Standart) Veriler

Dört tane ilkel veri türü vardır : integer, real, char, boolean.
Çağdaş PASCAL derleyicileri bu ilkel veri türlerini kendi içlerinde alt sınıflara ayırarak programcının gerekseyebileceği veri türlerini kullanıma sunmuşlardır.

Ordinal Veri Türleri

Integer, char, boolean, enumerated, subrange türleridir.
Bu kümeler matemetiksel anlamda iyi sıralıdır. Dolayısıyla, kümeye ait her öğenin bir sıra numarası vardır. Dolayısıyla herhangi iki öğe mukayese edilebilir. Kümenin bir ilki ve bir sonuncu öğesi vardır. Öteki öğelerin herbirisinin önündeki öğe (öncülü) ve sonundaki öğe (ardılı) belirlenebilir. Her ordinal küme üzerinde bu işleri yapan üç fonksiyon vardır:
Ord( )
x öğesi ordinal bir kümeye ait ise Ord(x) fonksiyonu x 'in sıra sayısını, yani küme içindeki sıralamaya göre kaçıncı öğe olduğunu verir.
Pred( )
x öğesi ordinal bir kümeye ait ise Pred(x) fonksiyonu, küme içindeki sıralamaya göre, x öğesinden önce gelen öğeyi (öncülü) verir.
Succ( )
x öğesi ordinal bir kümeye ait ise Succ(x) fonksiyonu, küme içindeki sıralamaya göre, x öğesinden sonra gelen öğeyi (ardılı) verir.
Ordinal veri kümeleri üzerinde aşağıdaki bağıntılar tanımlıdır:

Bağıntının AdıSimgesiAçıklama
Eşitx=yx öğesi y öğesine eşittir
Eşit değil (Farklı)x <> yx öğesi y ye eşit değildir (farklıdır)
Önce (küçük)x < yx öğesi y den öncedir (küçüktür)
Sonra (büyük)x > yx öğesi y den sonradır (büyüktür)
Küçük ya da eşitx <= yx öğesi y den öncedir ya da y ye eşittir
Büyük ya da eşitx >= yx öğesi y den sonradır ya da y ye e

Integer (tamsayı) Veri Türü

Tamsayıların alttan ve üstten sınırlanmış bir alt kümesidir. Sınırlar makinaya ve derleyiciye bağlı olarak değişir. PC ler için, genellikle, 2 byte uzunlukta bir adrese sığan tamsayılardır. Dolayısıyla -32768 ile +32767 arasındaki tamsayılardır. Örneğin 47, -326 sayıları integer türündendir. Öntanımlı (predefined) maxint fonksiyonu bir sisteme girilebilecek en büyük tamsayıyı belirtir.
Integer kümesi üzerinde +, -, *, div, mod ve / (toplama, çıkarma, çarpma, tamsayı bölme, modulo ve kesirli bölme) işlemleri tanımlıdır. Bunlardan ilk beş işlemin sonucu integer türden; sonuncu / işleminin sonucu ise real türden olur. Aritmetik işlemler ve bunlar arasındaki öncelik sırası ileride görülecektir.
Ordinal bir küme olduğundan, Integer veri kümesi üzerinde, yukarıda açıklanan

= , <> , < , > , <= , >= bağıntıları tanımlıdır.

Derleyiciler, makinaya da bağlı olarak integer türünü kendi içinde alt sınıflara ayırırlar. Örneğin, Turbo Pascal 5.0 derleyicisi integer türünü şu sınıflara ayırır:
TürDeğerlerBiçem
shortint-128 ... 127işaretli 8 bit
integer-32768 ... +32767işaretli 16 bit
longint-2147483648 ... 2 147 483 647işaretli 32 bit
byte0 ... 255işaretsiz 8 bit
word0 ... 65535işaretsiz 16 bit
Ord, pred ve succ fonksiyonları integer üzerinde aşağıdaki örneklerde gösterildiği gibi değer alırlar:
ord(0) = 0ord(1) = 1ord(567) = 567
Pred(1) = 0pred(768) = 767
Succ(0) = 1succ(45) = 46
Aşağıdaki boolean ifadeler doğrudur:
0 < 15 < 675 > -453
23 <> 5278 <= 8112 = 12

Char Veri Türü

Büyük ve küçük harfler, noktalama simgeleri, rakamlar ve diğer simgeler char türüne girer. Char türünün tam listesi için Ek 1 'e bakınız.
Ordinal bir küme olduğundan, Char veri kümesi üzerinde, yukarıda açıklanan

= , <> , < , > , <= , >= bağıntıları tanımlıdır.

Ord, pred ve succ fonksiyonları char kümesi üzerinde aşağıdaki örneklerde gösterildiği gibi değer alırlar:
ord('A') = 65ord('B') = 66ord('a') = 97
Pred('B') = 'A'pred('Z') = 'Y'pred('t') = 's'
Succ('A') = 'B'succ('M') = 'N'succ('x') = 'y'

Aşağıdaki boolean ifadeler doğrudur:
'A' < 'B''E' < 'K''r' > 'd'
'E' <> 'e''L' <= 'R''M' = 'M'

Boolean (mantıksal) Veri türü

True (Doğru) ve False (Yanlış) değerlerinden oluşan kümedir. Boolean veriler diğer veriler gibi girilemez (input işlemi yapılamaz), ama çıktısı olur (output işlemi yapılabilir). Not (Değil)Or (veya)And (ve)operatörleri ile kurulan mantıksal deyimler boolean değerler (true, false) alırlar.
Aşağıdaki özelikler vardır:
false < true
ord(false) = 0ord(true) = 1
succ(false) = truepred(true) = false
Buna göre,
  = , <> , < , > , <= , >=
 
bağıntılarıyla oluşturulan mantıksal deyimler de Boolean değerler (true, false) alırlar.


Enumerated Veri Türü

(Programcının Tanımladığı Sıralanmış Kümeler)

Programcı dilediği öğeleri içeren bir kümeyi sıralanmış (numaralanmış, enumerated, ordinal) veri türü olarak belirleyebilir. Bunun için parantez içine öğelerin adlarını sırayla yazar; birbirlerinden virgülle ayırır. Örneğin,

 type
   gunler = (PT, SA, CA, PE, CU, CT, PA) ;
bildirimi günler adıyla sıralanmış bir veri türü tanımlar. Parantez içindeki adlar veri kümesinin öğeleridir. Öğelerin yazılış sırası küme üzerindeki sıralamayı belirler. Bu küme üzerinde Ord, pred ve succfonksiyonları şu değerleri alır:
ord(PT) = 0ord(SA) = 1ord(CA) = 2ord(PE) = 3
ord(CU) = 4ord(CT) = 5ord(PA) = 6

pred(PT) = falsesucc(PT) = SA
pred(SA) = PTsucc(SA) = CA
pred(CA) = SAsucc(CA) = PE
pred(PE) = CAsucc(PE) = CU
pred(CU) = PEsucc(CU) = CT
pred(CT) = CUsucc(CT) = PA
pred(PA) = CTsucc(PA) = false
Programcının tanımladığı enumerated veri türleri de ordinal türdür. Dolayısıyla, yukarıda açıkladığımız sıralama bağıntıları enumerated veri türü üzerinde de tanımlıdır; Bu bağıntılarla kurulan deyimlerin sonucuboolean değerler olacaktır. Örneğin,
PT = SAboolean bir bağıntıdır ve değeri False olur.
PT < SAboolean bir bağıntıdır ve değeri True olur.
CA < CTboolean bir bağıntıdır ve değeri True olur.
CU < SAboolean bir bağıntıdır ve değeri False olur.
PT <> SAboolean bir bağıntıdır ve değeri True olur.
PE <= SAboolean bir bağıntıdır ve değeri False olur.

Subrange (alt bölge) Veri Türü

Standart olarak varolan veya programcının daha önce tanımladığı sıralanmış bir veri kümesinin bir alt aralığı veri türü olarak seçilebilir.
Örnekler
subrangeİçeriği
var
Sırano : 1..9;1,2,3,4,5,6,7,8,9
Notlar :'A'..'F';'A','B','C','D','E','F'
Mesai : PT..CUPT,SA,CA,PE,CU

Real Veri Türü

Rasyonel sayıların bir alt kümesidir. "Real" sözcüğünün matematiksel anlamının aksine, kesirli sayıların sınırlanmış bir alt kümesidir.
Sınırlar makinaya ve derleyiciye bağlı olarak değişir. PC ler için, genellikle, 4 byte uzunlukta bir adrese sığan kesirli sayılardır. Dolayısıyla -1.5x10-45 ile +3.4x1038 arasındaki kesirli sayılardır. Örneğin 32.8, -0.7943, 967.352 sayıları real türündendir. Sayının tam kısmı ile ondalık kısmı (.) ile birbirinden ayrılır. Ondalık noktasının solunda ve sağında enaz birer hane yer almalıdır. Kesirli sayılar ondalık gösterim yanında üstel biçimleriyle de yazılabilir. Örneğin, 25e2 simgesi 25 x 102 = 2500 yerine geçer.
PASCAL derleyicileri real türü farklı alt sınıflara ayırabilirler. Örneğin Turbo Pascal 5.0 aşağıdaki türleri tanımlamaktadır:

TürDeğerlerByteGeçerli Hane
real2.9x10-39 ... 1.7x1038611-12
single1.5xx10-45 ... 3.4x103847-8
double5.0x10-324 ... 1.7x10308815-16
extended3.4x10-4932 ... 1.1x1049321019-20
comp-263+1 ... 263-1819-20

Uyarı

Comp türü belirtilen aralıktaki tam sayı değerlerini alır. Bu değerler -9.2x1018 ... 9.2x1018 arasında değişir.
Real veri türü üzerinde +, -, *, / işlemleri tanımlıdır. Ama div ve mod işlemleri tanımsızdır.
Ayrıca, matematiksel işlemlerin yapılabilmesi için, real veri türü üzerinde
 =,<>, <, >, <= , >= 
 
sıralama bağıntıları da tanımlıdır.

Ancak, ordinal bir veri kümesi olmadığından, ord, pred ve succ fonksiyonları real veri kümesi üzerinde tanımlı değildir.

Yapısal Veri Türleri

Yapısal veri türleri, programcının tanımladığı veri türleridir. PASCAL dilinde beş tane yapısal veri türü vardır: array, record, set, file, pointer. Bunları ileride ayrıntılı olarak ele alacağız.

Aritmetik Deyimler

Sayı kümeleri üzerinde tanımlı olan ve sonucu bir sayı olan Pascal deyimlerine Aritmetik Deyimler denilir.
Aritmetik deyimler +, -, *, /, div ve mod işlemleri (operatörleri) ve ileride göreceğimiz matematiksel fonksiyonlar ile kurulur. Integer ve real veri kümeleri üzerinde tanımlı bu işlemlerin özelikleri aşağıdaki tablolarda özetlenmiştir.

Integer kümesi Üzerinde Aritmetik İşlemler
İşlemTanım KümesiDeğer KümesiAçıklama
m + nintegerintegerToplama
m - nintegerintegerÇıkarma
m * nintegerintegerÇarpma
m div nintegerintegerTamsayı Bölme
m mod nintegerintegerModulus
m / nintegerrealKesirli Bölme


Real Kümesi Üzerinde Aritmetik İşlemler
İşlemTanım KümesiDeğer KümesiAçıklama
x + yrealrealToplama
x - yrealrealÇıkarma
x * yrealrealÇarpma
x / yrealrealKesirli Bölme
Tablolardan görüldüğü gibi, integer (tamsayılar) veri kümesi üzerinde
  +, - , * , div , mod , /  
  
işlemleri tanımlıdır. İlk beş işlemin sonucu integer, altıncı (kesirli bölme) işleminin sonucu ise real türdendir. Çünkü bir tamsayının başka bir tamsayıya bölümü tamsayı olmayabilir. Bu nedenle, derleyici, kesirli bölme işleminde integer sayıları da real (kesirli) sayı olarak alır (ondalık kısmı 0 sayar).
Bölme işleminin sonucunun tamsayı olması isteniyorsa, / işlemi yerine div işlemi kullanılmalıdır. div işlemi, bölümün ondalık kısmını atarak tamsayıya yuvarlar, bölümün tam kısmını verir. Dolayısıyla, yaklaşık bir değerdir.
Örnekler:
Kesirli ve tamsayı bölme işlemleri, aynı işlemler için aşağıda gösterilen farklı sonuçları verir:
24 div 3 = 827 div 4 = 6
24/3 = 8.027 / 4 =6.75

Benzer olarak, real (kesirli sayılar) veri kümesi üzerinde +, - , * , / işlemleri tanımlıdır; ama div ve mod işlemlerinin real veri kümesi üzerinde tanımsız olduğunu biliyoruz.
Örnekler:
24 div 3 = 8Geçerli İşlem24.0 div 3Geçersiz İşlem
24 div 3.0Geçersiz İşlem
24.0 div 3.0Geçersiz İşlem
24.3 div 3Geçersiz İşlem
27/3 = 9.0Geçerli İşlem27.3 mod 3Geçersiz İşlem
27.0 / 3 = 9.0Geçerli İşlem27.0 mod 3Geçersiz İşlem
27.3 /3 = 9.1Geçerli İşlem27.3 mod 3Geçersiz İşlem


Örnekler

Aşağıdaki program +, -, *, /, div ve mod işlemlerinin yapılışını göstermektedir. Programı satır satır inceleyiniz. Her satırdaki deyimin yaptığı işi açıklayınız.
Aşağıdaki program, önce kullanıcıdan iki tamsayı istemekte ve sonra bu sayılarla aritmetik işlemleri yapmaktadır. Her seferinde farklı tamsayılar girerek, çıktıların + , - , * , div , mod işlemleri için integer (tamsayı) olduğunu, / işlemi için ise real (kesirli) olduğunu görünüz.
Program Aritmetik_01;
uses wincrt;

var
   m,n  : integer;

BEGIN
WriteLn('Lütfen iki tamsayı giriniz :  > ' );
ReadLn(m,n);
WriteLn('m= ',m, 'n = ',n,);
WriteLn('m+n =', m+n);
WriteLn('m-n =', m-n);
WriteLn('m*n =', m*n);
WriteLn('m div n =', m div n);
WriteLn('m mod n =', m mod n);
WriteLn('m/n =', m/n);
END.

Programın bildirge bölümünde tanımlanan integer türünden m, n değişkenleri yerine real (kesirli) sayılar girmeyi deneyiniz. Derleyicinin tepkisini görünüz.
Aşağıdaki program, real veri türü üzerindeki aritmetik işlemleri göstermektedir.
Program, önce kullanıcıdan iki real sayı istemekte ve sonra bu sayılarla aritmetik işlemler yapmaktadır.
Her seferinde farklı kesirli sayılar girerek, çıktıların + , - , * ve / işlemleri için real (kesirli sayı) olduğunu görünüz.
Program Aritmetik_02;
uses wincrt;

var
   x,y  : real;

BEGIN
WriteLn('Lütfen iki real sayı giriniz :  > ' );
ReadLn(x,y);
WriteLn('x= ',x, 'y = ',y,);
WriteLn('x+y =', x+y);
WriteLn('x-y =', x-y);
WriteLn('x*y =', x*y);
WriteLn('x/y =', x/y);
END.

Programın bildirge bölümünde tanımlanan real türden x , y değişkenleri yerine tamsayılar girmeyi deneyiniz. Derleyicinin tepkisini gördünüz mü? Derleyici, girdiğiniz tamsayıları real sayı olarak kabul edecektir. Örneğin x yerine 5 girdiyseniz, derleyici bunu x= 5.0 real sayısı olarak kabul edecektir.

Yanlış veri girildiğinde, derleyicinin bu iki programda farklı davranmasını açıklayabilir misiniz?
İnteger Türün Real Türe Dönüşmesi
Pascal, bir aritmetik işlemde integer ve real türlerin karışımı varsa, bütün sayıları real türe dönüştürür ve sonucu real olarak verir. Gerekli olduğu zaman, bu işlem doğrudan derleyici tarafından yapılır; programcının bir işlem yapması gerekmez.
Örneğin, x , y real, n integer olmak üzere
 
(x+y) * (7 div n)
aritmetik deyimini düşünelim. x+y toplamı real türdendir. 7 div n işlemi ise integer sonuç verir.
PASCAL derleyicisi, parantezlerin değerlerini çarpmadan önce onları aynı türe dönüştürür. Çarpanlardan birisi real ise, çarpımdan önce, işleme giren çarpanların hepsini real türe dönüşür, sonra çarpma işlemini yapar. Sonuç real türdendir...
Bu durumda, integer türlerin real türe dönüşümü otomatiktir. Yani +, -, *, / operatörleri biri integer, biri real sayı olan iki sayıya uygulanıyorsa, hepsi real türe otomatik olarak dönüşür.
Real türden integer türe dönüşüm
Bazen kesirli sayılar yerine tamsayıların kullanılması gerekebilir. Bu durumlarda, derleyici real türden integer türüne dönüşümü otomatik olarak yapmaz. Programda istenen dönüşümün belirtilmesi gerekir. Bu iş, aşağıdaki yöntemlerden biriyle yapılabilir.
Kesir Kısmını Atma
Trunc( ) fonksiyonu bir real sayının kesir kısmını atar, kalan tamsayı değeri verir. Örneğin,
 trunc(54.345) = 54
 
olur. Trunc fonksiyonu integer değer verdiği için,
 trunc(54.345) div 5 = 10
 
ifadesi geçerli bir Pascal deyimidir ve ifade doğrudur.
Kesirli Sayıyı Tamsayıya Yuvarlama
Round( ) fonksiyonu bir real sayıyı en yakın integer türe dönüştürür. Örneğin,
Round(23.47) = 23, Round(23.52) = 24
olur. Kesirli sayılar yuvarlanırken ondalık kısmı yarımdan küçükse atılır, kesirli sayının tam kısmı alınır. Ondalık kısım yarım ya da yarımdan büyükse, kesirli sayı bir sonraki tamsayıya yükseltilir. Divişlemi ve Round( ) fonksiyonu integer değer verdiklerinden, aşağıdaki aritmetik deyimler geçerlidir.
x ile y real ve p ile q integer olsunlar :
 
 round(x/y) div 7 
 round(x*y) div trunc(p/q) 
 
ifadeleri geçerlidir.

Değişkene Değer Atama

Bir değişkene değer verme işlemine atama diyeceğiz.
Var başlığı altında bildirimi yapılan bir değişkene bildirim sırasında ilk değer verilebileceği gibi, yürütme bölümünde de istenen değer(ler) atanabilir. Değer atanmamış değişken kullanılamaz. Atama için söz dizimi aşağıdakilerden birisi gibi olabilir:
  1.  Değişken_adı : = değer;
    
    Burada, sağ yandaki ifade, değişkenin ait olduğu veri türünden bir öğe olmalıdır. Örneğin, x integer türden bir değişken ise,
     x := 527;
     
    deyimi x değişkenine 527 değerini atar.
  2.  Değişken_adı : = deyim;
    
    Burada da, sağ yandaki deyim, sonucu, değişkenin ait olduğu veri türünden bir öğe olan bir deyimdir. Örneğin, Yaricap real türden bir değişken ise,
     Yaricap := 3.2;
     Yaricap := 6.4 / 2; 
     Yaricap := Cevre / (2 * Pi);
    
    atamaları geçerlidir ve her üçü de aynı işi yapar. Tabii, sonuncu atamanın geçerli olabilmesi için, Cevre ve Pi değişkenlerine (sökonusu çember için) önceden değer atanmış olmalıdır.
Bildirge bölümünde bildirimi yapılan bir değişkene ana bellekte bir yer ayrılır. Buna değişkenin adresi denilir. Bilgisayarın denetim birimi ve derleyici, her değişkenin adresini bilir.
Atama işlemi, değişkenin adresine bir değerin yazılması işlemidir.
Bir değişkene ayrılan yer, tam o değişkene yetecek büyüklüktedir. Örneğin, char türü bir değişkene 1 byte, integer türü bir değişkene 2 byte, real tür bir değişkene ise 4 byte uzunlukta bir yer ayrılır.
Yürütme bölümünde bir değişkenin değeri her an değiştirilebilir. Örneğin,
 Yaricap : = 5.3;
ataması yapılınca, yarıçap'a ayrılan adrese önceden yazılmış olan 3.2 değeri silinir, onun yerine 5.3 girer. Silinen değer bir daha elde edilemez.
Genel olarak,
 değişken_adı := atanan_değer;
 

atama deyiminde, := simgesinin sağındaki değer, soldaki değişkenin değeri olur.
Özet: Değişkene Değer Atama Yöntemleri
  1.  x := 527; 
    
    atamasında olduğu gibi, sağ yana değişkenin türünden sabit bir değer yazılabilir.
  2. x ile y aynı türden iki değişken olmak ve y ye daha önce bir değer atanmış olmak koşuluyla,
     x := y;
     
    ataması yapılabilir. Bu atamada x değişkeninin değeri y nin değerine eşit olur.
  3. Sağ yan hesaplanabilir bir deyim olabilir:
     x := (12 * 5) div 4;
     
Uyarı:
Genel olarak,
 x := y;
 
atama deyiminde, atanan y değerinin türü x değişkeninin türüyle aynı olmalıdır. Bunun bir istisnası şudur: Eğer x değişkeni real türden, y değeri integer türden ise, PASCAL derleyicisi y değerini otomatik olarak real türe dönüştürür.

Bunun tersi geçersizdir. Eğer x değişkeni integer türünden, y değeri real türden olursa, derleyici hata mesajı verecektir.
Böyle bir atama yapmak gerekiyorsa yukarıda söylenen yöntemlerden birisiyle y değeri integer türe dönüştürülmelidir.

Örnekler

x real değişken, y ile z real sayılar; n integer değişken, m integer sayı olsun.

Atama DeyimiGeçerli mi?
x := y + z;Geçerli
x := m div 5;Geçerli
n := Trunc(x*y);Geçerli
n := Round(x/y);Geçerli
n := x + y;Geçersiz
n := m/3;Geçersiz

3 Mart 2014 Pazartesi

C++ Gücünü Nerden Alıyor?

Şüphesizki C++ şu anda günümüzde en çok kullanılan programlama dillerinden biri. Onlarca yıl geçmesine rağmen popülerliğinden ödün vermeyen C++ acaba bunu neye borçlu bu makalemizde bunu tartışacağız;

Elbetteki bilgisayar tarihinde iki dil çığır açmıştır. Bunlar "Assembly" ve "C" dir. Bilgisayarlar ilk çıktıkları zamanlarda sadece (01010010101) yani "Makine Dili" Dediğimiz kodlardan anlıyordu. Kodları böyle yazmak son derece zahmetli ve zor bir işti. Sonrasında Assembly çıktı. O zamanın teknolojisine göre Assembly çok basitti. Kullanımıda rahattı. Ama hâla birşeyler zor gidiyordu. Sonra zamanla başka diller çıkmaya başladı ama bunların en dikkat çekicisi olan C idi. C diğer dillere göre oldukça sade, kolay ve en önemlisi basitti. İnsanların aradığı şey buydu zaten "Doğallık". İnsanlar doğal olan şeyleri severdi. C zamanla popülerleşmeye başladı. C ile işletim sistemi çekirdekleri yazıldı. Programlar, oyun motorları, Serverler, BIOS'lar ve şuanda halen yaygın ve aktif olarak kullanılmaktaydı. Tüm bilgisayar camiası C'den payını almak istiyordu. Takvimler 1983'ü gösteriyordu. Bell Labaratuvarı bilim adamları ki başlarında Bjarne Stroustrup olan bir grup yeni bir dil piyasaya sürdüler. Bu dilin adı "C With Classes (Sınıflarla C)" idi. Başında "C" olduğu için herkes bu dili araştırmaya ve önemsemeye başladı. Yani kaba bir tabirle C++, C'nin şöhretinden faydalandı. Yeterli popülerliğini alan C With Classes (Sınıflarla C) ismini C++ olarak değiştirdi. Aslında C'nin şöhretinden yararlanan sadece C++ değildi. Objective-C vardı elbette. Ama C++ gibi popüler olamadı malesef. Sonrasında C++'a katılan yazılımcılar git gide arttı büyük bir topluluk haline geldiler. Kimi yazılım geliştiriyor, kimi Framework kimi ise C++ için modüller geliştirmeye çalışıyordu. Sonrasında C++ şuanki halini aldı.

23 Şubat 2014 Pazar

Python nedir?

Python logo.gif


Python, Guido Van Rossum adlı Hollandalı bir programcı tarafından yazılmış bir programlama dilidir. Geliştirilmesine 1990 yılında başlanan Python; C ve C++ gibi programlama dillerine kıyasla;
  1. daha kolay öğrenilir,
  2. program geliştirme sürecini kısaltır,
  3. bu programlama dillerinin aksine ayrı bir derleyici programa ihtiyaç duymaz,
  4. hem daha okunaklıdır, hem de daha temiz bir sözdizimine sahiptir.
Python’un bu ve buna benzer özellikleri sayesinde dünya çapında ün sahibi büyük kuruluşlar (Google, Yahoo! ve Dropbox gibi) bünyelerinde her zaman Python programcılarına ihtiyaç duyuyor. Mesela pek çok büyük şirketin Python bilen programcılara iş olanağı sunduğunu, Python’un baş geliştiricisi Guido Van Rossum’un 2005 ile 2012 yılları arasında Google’da çalıştığını, 2012 yılının sonlarına doğru ise Dropbox şirketine geçtiğini söylersek, bu programlama dilinin önemi ve geçerliliği herhalde daha belirgin bir şekilde ortaya çıkacaktır.
Bu arada, her ne kadar Python programlama dili ile ilgili çoğu görsel malzemenin üzerinde bir yılan resmi görsek de, Python kelimesi aslında çoğu kişinin zannettiği gibi piton yılanı anlamına gelmiyor. Python Programlama Dili, ismini Guido Van Rossum’un çok sevdiği, Monty Python adlı altı kişilik bir İngiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden alıyor.

Hangi Dili Seçmeliyim?

Her programlamaya başlayanların içinde bu kuşku vardır. Bazen bir dile tam başlarken geri döneriz. Bazende bu dilin yeterince güçlü olmadığını düşünürüz. Sizde'de bu kuşku varsa bu yazımızı dikkatle okuyun. Şimdi dersimize başlıyoruz;

Programlama dilini neden öğrenmek istediğinizi belirleyin;
Hemen hemen her programlama dili istediğinizi karşılayacak kapasitededir. Ama yapacağınız basit bir kelime oyununu  Assembly ile yazsanız bu bir aptallık olur. Şimdi hedefinize göre hangi dillerin size yarayacağını listeliyeceğim;

Masaüstü Programları yazmak: C/C++, C#, Python, Java
Web üzerinde çalışmak: C#(Asp.net), Python, Php
Oyun yazmak: C/C++
Yukarıdaki listedeki her şeyi C++ yada Java ile de yapabilirdiniz. Ama neden bu iş için biçilmiş kaftan programlama dili kullanmayasınız ki.

Dillerin Özellikleri;
C/C++
C/C++ çok güçlü iki dildir. Hemen hemen tüm dillerin temelini oluştururlar. Şu an için genellikle Oyun sektöründe kullanılmaktadır. Öğrenilmesi zordur. Sitemizde dersleri yayınlanacaktır. Orta seviyeli dillerdir.

C#
C#, Java'ya çok benzerdir. Bir dünya kütüphanesi vardır. Yüksek seviyeli bir dildir. Microsoft tarafından geliştirilmektedir. C/C++'a göre yavaştır. Asp.net ile web uygulamaları da geliştirilebilir. Pek yakında dersleri sitemizde yayınlanacaktır. Yeni nesil bir dildir.

Python
Geliştirilmesine 1991 yılında başlanan Python yeni nesil bir dildir. Adının Piton yılanından geldiği düşünülse de bu doğru değildir. Sözdizimi sade ve temizdir. Bu yüzden öğrenilmesi son derece kolaydır.  Dinamik ve güçlü bir dildir. Google, Nasa, Youtube gibi sitelerin Python'u kullanması da ne kadar güçlü olduğunun kanıtıdır. Yakında dersleri sitemizde yayınlanacaktır. Gelecekte C++'ın yerini alması bekleniyor.

Java
Kaliteli, güzel bir dildir. Genellikle gömülü ve telekominasyon işlerinde kullanılır. . Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur.

Sonuç olarak;
Siz sadece bir dil kullanarak istediğiniz her şeyi yapabilirsiniz. Ama bunun için biçilmiş kaftan diller varsa bu sadece bir aptallık olur. Python ile yazacağınız bir muhasebe programını atıyorum 5 satırda yazarken C/C++'da bu sayı 500'e kadar çıkabilir. Sonuç olarak Python'u öneriyoruz. Platform bağımsızlığı, kolay kullanımı, temiz söz dizimi ve sayamadığımız daha çok şey. Onu özel kılıyor. Ve en önemlisi çok güçlü bir dil. Zaten bir dili öğrenirseniz diğer diller sizlere kolay gelecektir. Nede olsa beynin kotası yok.