Académique Documents
Professionnel Documents
Culture Documents
1.BÖLÜM
PROGRAMLAMA ve TEMEL
KAVRAMLAR
GİRİŞ
Program, bilgisayara ne yapması gerektiğini söyleyen bir grup komuta (kod topluluğuna) verilen
isimdir. Bu komutları veren kişiye programcı, komutların bütününe ise programlama dili denir.
İnsan ya da programcı ( konuşma dili biliyor) ile bilgisayar ( makine dili biliyor) arasındaki
iletişim nasıl gerçekleşir? Bu sorunun çözümünü birbirinin konuşma dilini bilmeyen iki yabancı
devlet adamının bir araya gelip görüşmesine benzetebiliriz. Bu görüşmede ancak tercüman veya
çevirmenler aracılığı ile gerçekleşmektedir. Benzer şekilde bilgisayar üreticileri, aynı sorunu
insanın konuşma dilini bilgisayarın makine diline çevirecek, bir nevi tercümanlık yapacak
“derleyici veya yorumlayıcı programlar” geliştirerek çözmektedirler. Aşağıdaki şekilden de
anlaşılacağı üzere insanın algılamasına yakın diller üst seviyeli diller, makineye yakın diller ise alt
seviyeli diller olarak adlandırılmaktadır.
NOT: İkili sayı (BInary digiT-BIT) formatındaki gösterime makine dili denir. Mantıksal
olarak “1” var, “0” yok anlamındadır. Sayısal sistemler ikili mantığa göre çalışırlar.
1
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Kaynak kodun makine koduna (amaç programa) çevrilmesi ve çalıştırılması işlemi üç farklı
yaklaşımla gerçekleştirilebilir
Derleyici (Compiler)
Programlama dili ile yazılmış bir programı makine dili ile yazılmış amaç veya hedef programa
çevirirler. Yüksek seviyeli bir dil ile yazılanlarda kurallarına ters düşen hata kontrollerini
oluşturduktan sonra komut ve bilgilerin makine tarafından tanınarak işlemlerin yapılmasını
sonuçların tekrar yüksek seviyeli program diline anlaşılır duruma çevrilmesini sağlarlar. Fortran,
C, C ++, C#, Pascal, Delphi gibi diller derleyici kullanırlar.
Sözel analiz sırasında kaynak kodunu oluşturan kelimeler incelenir ve bu kelimelerin makine
dilinde karşılıkları bulunup bulunmadığı kontrol edilir. Gramer analizi, kaynak kodun yazıldığı
programlama dilinin kendi gramer kuralları içinde doğru yazılıp yazılmadığını kontrol eder. Kod
Üretimi aşamasında tanınan komutlara karşılık gelen makine dili komutları üretilir. Bu adımlar
paralel olarak gerçekleştirilir ve kaynak kod, amaç koda çevrilmiş olur. Çevirme işlemi adımları
aşağıdaki blok şemada görülmektedir.
Yorumlayıcı (Interpreter)
Program kodlarının ilk satırından son satırına kadar satır satır belirtilmiş komut ve işlemleri
inceleyerek kaynak programın hatalarının düzeltilmesine imkân veren ve çalıştıran
programdır. Herhangi bir komut satırının çevrilmesinde ya da çalıştırılmasında bir hatayla
karşılaştığında çalışmayı durdurur ve hatalı satırı programcıya bildirir. Basic, PHP, Perl, Lisp
gibi diller yorumlayıcı kullanırlar.
2
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Derleyici programın tamamını kontrol eder bir satırında hata varsa program
satırları bittikten sonra hatayı gösterir. Yani kaynak kodu bir defa
çevirir. Yorumlayıcı ise programın bir yerinde hata varsa çalışırken hatalı
satıra geldiğinde durur ve hata mesajı verir. Hata düzeldikten sonra tekrar
birinci satırdan itibaren kodu çevirir.
NOT: Hem derleyici hem de yorumlayıcı tekniği birlikte de kullanılabilir. Bu tip çalışmada
kaynak kodu sanal bir bilgisayarın makine koduna (bytecode) çevrilir ve daha sonra bu sanal
bilgisayarı gerçekleyen bir program yardımıyla yorumlanarak çalıştırılır. Örneğin Java dilinde
yazılmış bir kaynak kodu önce Java derleyicisinden geçirilerek Java Sanal makinesinin (Java
Virtual Machine- JVM) makine koduna dönüştürülür; sonrada bu sanal makineyi gerçekleyen bir
Java çalışma ortamı ( Java Runtime Environment – JRE ) yardımıyla çalıştırılır. Bu işlemin nasıl
yapıldığı aşağıda grafiksel olarak gösterilmiştir.
Bağlama (Linking)
Günümüzde yazılan birçok program genellikle programlama dili içerisinde bulunan
kütüphane fonksiyonlarına ve yordamlara bağlantı içerdiğinden kaynak programdan üretilen
amaç program kodu bilgisayarda çalıştırılmaya hazır olması için bu amaç program (object
code) bağlama (linking) işlemine tabi tutulur. Bu işlem sonucu eksik parçaların program kodu
içerisine eklenmesi ile artık yazılan program çalışmaya hazır hale gelmiş olur.
3
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
PROGRAM FONKSİYONLARI
Genel olarak bir program üç kısımdan ibarettir. Bilgi girişi, işlem ve hesaplamalar, çıkış.
Programın çıkışında ne elde edeceğimizi bilmemiz gerekir ki programın doğru sonuç üretip
üretmediğini test edebilelim. Çıkış işleminde çıkışın içeriği ve çıkış formatı önemlidir. Çıkış
içeriği elde edilen veya edilecek bilgidir. Çıkış formatı ise çıkış içeriğinin gösteriliş biçimidir.
4
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Programa bilgi girişi yapıldıktan sonra, girdilerden çıktıların alınması gerekli işlem ve
hesaplamaların yapılmasına bağlıdır. Bu işlemlerin neler olacağı problemin çözüm analizi
yapılırken belirlenir.
Örneğin bir dikdörtgenin alanını hesaplayan programı yazalım. Dikdörtgenin alanının kısa kenar
ile uzun kenarın çarpımına eşit olduğunu biliyoruz. Bu programın yazım aşaması;
Ekranda görülecek ifade ve değerler ile bunların gösterim biçimini planladığımız yerdir.
Programın;
Visual Basic dilinde kodlaması Program fonksiyonları
a=inputbox (“dikdörtgenin kısa kenarı”) Bilgi girişi
b=inputbox(“dikdörtgenin uzun kenarı”) Bilgi girişi
Alan=a*b İşlem ve hesaplama
Print (“Dikdörtgenin Alanı=”), Alan Çıkış
PROGRAMIN KODLANMASI
Algoritması hazırlanan program, herhangi bir programlama dili ile kodlanır. Bu kodlama
sürecinde kullanılan programlama dilinin yazım kurallarına tam olarak uyulması gerekir.
Kodlama genellikle bir editör program (notepad veya benzeri) kullanılarak yapılır ve bu editör
çıktısına kaynak kod denir.
PROGRAMIN TEST EDİLMESİ
Yazılan program test edilmek üzere çalıştırılır varsa yazım hataları düzeltilip program tekrar
çalıştırılır. Yazım hatası vermeden çalışan fakat istenilen sonuçları üretmeyen programdaki
hataları düzeltmek için algoritma tekrardan gözden geçirilerek aynı adımlar tekrar edilir. Bu tip
hatalara mantık hatası denir ve bulunması için test verileri kullanılır ya da program adım adım
çalıştırılır.
PROGRAM DOKÜMANTASYONU
Dokümantasyon, programı kullanacak kişiler için bir “kullanıcı el kitabı” formatında hazırlanır.
Problemin tanımı, çözüm yöntemi, girdi/çıktı tanımı, çözüm algoritması, sonraki çalışmalar için
5
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
öneriler, kaynak program listesi, uygulama koşulları, örnek girdi/çıktısı ve kullanım amaçları
ayrıntılı olarak yer alır.
Bir programcı komutları farklı programlama dilleri kullanarak yazabilir. Günümüzde yüzlerce
programlama dili mevcuttur. Bu dilleri Şekil 1. de gösterildiği gibi insanın algılamasına veya
makineye yakın olmasına göre 3 gruba ayırabiliriz;
ASSEMBLY: Assembly programlama dili, çoğu zaman özel alanlarda geliştirilen yazılımlarda
kullanılan alt düzel bir Yazılım dili olarak tanımlanır. Bu dilin komutları, bilgisayarın doğrudan
islettiği makine dili komutlarının birebir karşılığıdır. Bu nedenle bu dil için makine dili de
denilebilir. Her ne kadar uzman programcıların özel alanlarda kullandığı bir dil olarak tanımlansa
da, programcılar istedikleri takdirde her türlü uygulamayı bu dil ile geliştirebilirler ya da
kullandıkları üst düzey dilaltından çağırabilecekleri procedurler yazabilirler. Assembly diliyle
yazılmış bir program assembler derleyicisi ile makine diline çevrilir.
BASIC (Beginner’s All Purpose Symbolic Instruction Code) : Bu dil 1964 yılında Jhon
Kemeny ile Thomos Kurtz tarafından Darthmouth College Üniversitesinde geliştirilmiştir. Eğitim
amaçlı bir programlama dilidir. Mikrobilgisayarlar için ilk Basic uyarlamasını Microsoft’un
kurucuları olan Paul Allen ile Bill Gates yazmıştır. BasicA, GWBasic, QBasic, Commodore Basic
V2, Turbo Basic gibi değişik sürümleri çıkmıştır.
C : 1970’lerin başında Ken Thompson ve Dennis Ritchie tarafından UNIX İşletim Sistemi
için geliştirilmiş bir programlama dilidir. C, günümüzde neredeyse tüm işletim sistemlerinde
kullanılan, dünyanın en çok kullanılan sistem programlama dilidir. Ancak, uygulama programları
yazmak için de çok sık kullanılır. C ++ da, C den türemiş bir dildir.
6
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
C++ : Nesneye yönelik bir programlama dilidir. 1980'lerin başında Bjarne Stroustrup
tarafından geliştirilen C dilinin birçok temel özelliğini destekleyen ve nesne yönelimli
programlamaya olanak sağlayan, sınıflar sayesinde yeni veri türlerinin oluşturulduğu çok yaygın
olarak kullanılan programlama dilidir. C++ (si-plas-plas okunur) genel amaçlı bir programlama
dilidir. İlk olarak C de bulunmayan sınıf kavramı eklendiği için C With Classes olarak
adlandırılmış, daha sonra C'deki herhangi bir sayısal değişkenin değerini bir arttırmaya yarayan ve
özellikle döngü yapılarında çok sık kullanılan 'i++' ifadesine benzer biçimde C++ olarak
adlandırılmıştır.
FORTRAN(Formula Translater): 1954'de IBM tarafından üretilen IBM 704 için ilk
sürümü John Backus ve ekibi tarafından geliştirilmiştir. Fortran ilk yüksek düzey programlama
dili olmasa da 1950'deki yüksek programlama dilleri derlenmeden, bir çevirici (interpreter)
yardımıyla çalıştırılıyordu. Bu da makine koduyla yazılan programlardan en az 10 kat daha yavaş
çalışmalarına sebep oluyordu. İşte bu noktada Backus ve ekibi hem yüksek programlama dilleri
gibi kolay yazılabilen hem de makine kodunda yazılmış gibi hızlı çalışan bir programlama dili
sözüyle Fortran 'ı tanıttılar. Her ne kadar ilk derlenebilir yüksek düzey dilin Fortran olup
olmadığı hala tartışma konusu olsa da, Fortran geniş kitleler tarafından kullanılmış ilk yüksek
düzey derlenebilir dildir. İlk Fortran sürümü Fortran 0 'dır. Fortran II, III,IV,77,90 ve 95 gibi
farklı sürümleri bulunmaktadır. Matematiksel, Bilimsel İşlemlerde kullanılmak üzere
tasarlanmıştır.
.NET, HTML sayfaları oluşturmak için ASP.NET, Internet sunucularının herhangi bir istemciye
işlev sunması için. NET Web Services adlı yeni bir yol sağlar. ADO. NET’i kullanarak
veritabanı işlemlerine iyi bir destek sağlar.
7
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Visual Studio .NET , .NET platformu için geliştirilmiş uygulama geliştirme platformudur. En
büyük özelliklerinden birisi IDE (Integrated Development Environment) dediğimiz ortak bir
uygulama geliştirme platformu sunmasıdır. İster C# ile uygulama geliştirin ister VB.NET ile
kullanacağınız en etkin ve ortak uygulama geliştirme platformlarından biridir.
1) İçerisinde sayıları sakladığımız değişkenlere sayısal veya nümerik değişken adını veriyoruz
2) İçinde sayı haricindeki bilgileri (isim, soy isim, adres, vb.) sakladığımız değişkenlere de alfa
sayısal, alfa nümerik, text veya string değişkenler diyoruz.
NOT: Bilgilerin geçici olarak tutulduğu yere Bellek denir. Değişkenlerde bellekte tutulur.
8
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
NOT: Bellek ve bilgi depolama birimlerinin genişliğini ölçmek için kullandığımız temel
birim bit ve byte’dır. Bugün bilgi işlemdeki temel ölçü birimi byte olarak geçmektedir. { 1
byte= 8 bit, 1 Kilobyte= 1024 byte dır. }
NOT: Eşitliğin sağ tarafındaki ifadenin sonucu sol taraftaki değişkene aktarılır.
NOT: İlk eşit işareti 1557 Yılında Londra kentinde Oxford’lu Robert Recard’ın The
Whetstone of Witte” adlı cebir kitabında eşit kavramı (=) işareti ile simgelendiği ve hatta
kendisine:” Neden başka bir işaret değil de bunu seçtiniz?” sorusuna: “ bir birine paralel iki
çizgiden daha eşit şey düşünemezdim.” yanıtını verdiği yazılıdır.
Örnek 1.1. Aşağıdaki programın akışı (çalışması) sırasındaki değişkenlerin alacağı değerler
yandaki tabloda verilmiştir.
9
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Değişkenlerin Tanımlanması
Bir değişken kullanılmadan önce tanımlanır. Bu tanımlama programlama dillerine göre farklılık
gösterse bile mantık aynıdır. Her değişken belirli bir veri tipine sahip olmalıdır (integer, long,
string gibi) Bu veri tipi, değişkenin bellekte kaplayacağı alanı ve sakladığı bilginin büyüklüğünü
belirtir.
Visual Basic dilinde değişkenlerin tanımlanması Dim (Boyut Aç) komutu ile program kodunun
başında yapılır.
Yapısı: Dim Değişken_adı As tip [ Örnek; Dim x as integer, y as string gibi ]
Tip; Değişkenin alabileceği veri türünü tanımlar. [integer, byte, long ,string,currency gibi ]
Değişken tanımlanmaz veya tanımlanırken tip belirtilmezse, VB o değişkeni Variant veri tipinde
algılar. Variant bir değişken herhangi bir tip veriyi içerebilir. Variant tipli değişken kullanmanın
iki kötü yanı olabilir:
Yapısı: Veri Tipi Değişken_adı [ Örnek; int x,y ; char veri gibi ]
Veri Tipleri
NOT: String Türü Değişkenler “+” veya “&” işlem operatörleri ile birbirlerine eklenebilirler.
10
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
SABİTLER
Program içerisinde değeri değişmeyen ifadelere sabit denir.(∏ sayısı, 2.5, gibi) . Sabit değerler
sayısal ve string olmak üzere ikiye ayrılırlar. İki tırnak (“ ”) işareti arasında yazılan her türlü bilgi
string sabittir. Sabitler özellikle bilinen değerlerin kullanımını sağlar. Kodlamayı ve kodun
okunabilirliğini kolaylaştırırlar.
NOT: Visual Basic dilinde sabit ifadeler program kodunun başında Const deyimi ile
tanımlanırlar. { Const pi=3.14 }
MESAJLAR
Kullanıcı ile iletişim kurmak için kullanılır. Mesajlar kullanıcıyı yönlendirmek amacıyla
kullanılırlar.
NOT: “Bir sayı giriniz” gibi kullanıcıyı program çalışırken yönlendiren ifadelere mesajlar denir.
OPERATÖRLER
İşlem yapmamızı sağlayan işaretlerdir. Genellikle, aritmetiksel { +, -, *, /, … } mantıksal { And,
Or, Not…} ve karşılaştırma { < , > , =, …}operatörleri isimleri altında sınıflandırılırlar ve her
program dillerinde farklı şekillerde gösterilebilirler.
ARİTMETİKSEL OPERATÖRLER
Çıkartma - X-Y X – Y
Çarpma * (XY),(X.Y),(X*Y) X* Y
Bölme / X/Y ve X X / Y
Y
11
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Birleştirme
Negatif - —Y —Y
KARŞILAŞTIRMA OPERATÖRLERİ
Verilerin birbiriyle karşılaştırılmasında kullanılır. Sonuç doğru ise 1 ya da TRUE, yanlış ise 0 ya
da FALSE değerini alır.
Eşittir = A = B A = B A = = B
MANTIKSAL OPERATÖRLER
AND Operatörü; Lojik ifadelerin her ikisinin de doğru olması halinde TRUE
sonucunu aksi takdirde FALSE sonucunu üretir.
OR Operatörü; Lojik ifadelerden herhangi birinin doğru olması halinde TRUE
sonucunu aksi takdirde FALSE sonucunu üretir.
XOR Operatörü; Lojik ifadelerden her ikisinin de aynı olması halinde FALSE aksi
takdirde TRUE sonucunu üretir.
12
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
NOT Operatörü; Lojik ifadenin değilini (tersini) alır. İfade doğru ise FALSE, yanlış
ise TRUE sonucunu üretir.
EQV Operatörü; Lojik ifadelerden her ikisinin de aynı olması halinde TRUE aksi
takdirde FALSE sonucunu üretir
1 1 0 0 1 1 0 1
1 0 0 1 0 1 1 0
0 1 1 0 0 1 1 0
0 0 1 1 0 0 0 1
Örnek 1.2. A=5, B=4 olarak verildiğinde Y= ( A < 5 ) OR ( B >= A ) AND ( A=5 ) ifadesinin
tersi ne olur?
Çözüm:
Y = ( A>=5 ) AND ( B < A ) OR ( A< >5 ) = True AND True OR False Y = 1 AND 1 OR 0 = 1
OR 0 = 1 = TRUE
Örnek 1.3.
NOT A=1 AND B<>C OR (D=2 AND ADI=”AHMET”) ifadesinin sonucunu A=7, B=5, C=2,
D=3 ve ADI=”AHMET” değerleri için bulunuz.
Çözüm:
13
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Çözüm:
2 Parantez içi ( … )
4 Üs Alma ^, **
6 Kalan Mod
14
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Örnek 1.5.
Örnek 1.6.
y = 3.42 + 6 / 2 – 7
y = 3*16+ 6 / 2 – 7
y = 48 + 6/2 – 7
y = 48 + 3 – 7
y = 51 – 7
y = 44
NOT: Örnek 1.7. de İşlem önceliği, ilk önce üs alma, daha sonra çarpma(solda olduğu için),
bölme, toplama ve çıkarma şeklindedir.
15
“Algoritma Geliştirme ve Veri Yapıları”, Bülent Çobanoğlu
Örnek 1.8.
m= - 5 – 8 Mod 4 + 7 * (4+ 2)
m= - 5 – 8 Mod 4 + 7 * 6
m= - 5 – 8 Mod 4 + 42
m= - 5 – 0 + 42
m= - 5 + 42
m= 37
16