Problem Çözme ve Algoritmalar
1. Programlama Nedir?
Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir?

Bu düşünme şekli matematiğin, mühendisliğin ve doğa bilimlerinin bazı özelliklerini birleştirmektedir. Bilgisayar bilimcileri genel
olarak matematiksel sembolleri, işlemleri ve formülleri kullanır, mühendisler gibi tasarım yaparak farklı
sistemler oluşturur ve bilim insanları gibi deney yaparak teknoloji desteği ile çözüm üretir.
Bir bilgisayar bilimcisi için en önemli
beceri problem çözme becerisidir. Problem çözme; problemleri formüle edebil
me, farklı ve yaratıcı çözüm yolları önerebilme, çözümü kesin ve doğru biçimde
ifade edebilme becerisidir. Programlamayı öğrenme sürecinde yalnızca problem çözme becerisi yeterli değildir çünkü
programlama aynı zamanda bir düşün
me biçimidir. Bir insan makine değildir,
o yüzden o şekilde düşünmeye zorlanamaz. Ancak, bilgiyi işleme süreçleri var
dır ve verileri yorumlama, dönüştürme
ve sunma gibi farklı süreçlerin yaratıcı
düşünme ile desteklenmesi çok önemli
dir. Programlama, hem problem çözme
becerisi hem de bilgi işlemsel düşünme
becerisine sahip olmayı gerektirir.
Bilgi işlemsel düşünme; bilgisayar biliminin kavramlarından yararlanarak problem çözme, sistem
tasarlama ve insan davranışlarını anlama olarak tanımlanabilir. Bilgi işlemsel düşünme sayesinde siz öğrenciler bilgisayarlar ile
çözümlerini otomatik hâle getirip problemleri daha etkili çözebilecek ve düşünmenin sınırlarını genişletebileceksiniz. Dahası, bilgisayar biliminin kavramlarını ve ilkelerini öğrendiğiniz zaman gittikçe
değişen teknolojik hayata ve iş yaşamına daha iyi hazırlanabileceksiniz. Bilgisayarın bilgi işleme süreci
ile benzerlik gösteren düşünme yaklaşımıyla, değişen araçlar ve uygulamalardan etkilenmeden, yaşam
boyu öğrenen bireyler olabileceksiniz
2. Program Nedir?
Program, yapılacak bir işlemi ya da hesaplamayı gerçekleştirmek için birbirini izleyen komut ya da
yönergelerden oluşan yapıdır. İşlemler matematiksel ya da mantıksak olabilir. Örneğin bir formülün
sonucunun hesaplanması ya da bir doküman içerisinde belirli bir metnin aranması gibi. Ayrıntılar programlama dillerine göre farklılaşsa bile belirli komutlar her dilde yer alır.
Girdi: Klavyeden, dosyadan veya başka
bir aygıttan veri almadır.
Çıktı: Ekranda veriyi görüntüleme veya
veriyi dosyaya veya başka bir aygıta göndermedir.
Matematik: Toplama, çarpma gibi bazı
temel matematiksel işlemleri gerçekleştirmedir.
Koşullu yürütme: Belirli durumları sınamak ve komutları uygun bir sıraya göre
çalıştırmaktır.
Tekrarlama: Bazı eylemleri genellikle
ufak tefek değişikliklerle yineleme işlemidir.
Programların çoğu, ne kadar basit ya da
karmaşık olursa olsun temel olarak bu işlem
lere dayalı olarak çalışır. Bu nedenle programlama, büyük ve karmaşık bir görevi bu
temel komutlarla gerçekleştirebilecek kadar basit biçimde küçük alt görevlere bölme olarak tanımlana
bilir
3. Hata Ayıklama Nedir?
Programlama, karmaşık bir süreçtir ve programcılar programlamada hata (bug) yapabilirler. Programlama hatalarını bulma ve düzeltme işlemine hata ayıklama (debugging) denilir. Bir programda üç
tür hata oluşabilir: söz dizimsel hatalar, çalışma zamanı hataları ve anlam bilimsel hatalar.
1. Söz dizimsel hatalar
Söz dizimi, programın yapısı ve bu yapı hakkındaki kurallar demektir. Örneğin Türkçede bir cümle
büyük harfle başlamalı ve uygun bir noktalama işaretiyle sona ermelidir. Bu kurallara uymayan cümlelere “Söz dizimi hatası içermektedir.” diyebiliriz. Programlama dilleri için söz dizimi, yoruma açık
olmayacak şekilde kesin ve net ifadeler içermelidir. Aksi takdirde program, söz dizimi hatası verir ve
programın doğru çalışmasını bekleyemeyiz.
2. Çalışma zamanı hataları
Bu hatalar ancak program çalıştırıldıktan sonra ortaya çıkar. Hesaplanması mümkün olmayan işlemler (sıfıra bölünme) ya da hiç gerçekleşmeyecek koşulların (5<3) yürütülmesi gibi durumlarda ortaya
çıkar.
3. Anlam bilimsel hatalar
Bu durumda program, genellikle hata vermeden çalışır ancak çoğu zaman beklenen sonucu üretmez.
Bu yüzden programı satır satır çalıştırarak, farklı adımlardaki çıktıları gözlemleyerek nerede mantık ha
tası yapıldığını bularak program doğru biçimde çalışana kadar bu hataları ayıklamak gerekir. Program
lamayı öğrenirken kazanılacak önemli becerilerden biri de hata ayıklamadır. Yorucu olmasına rağmen,
programlamada bilişsel yoğunluk gerektiren ilginç bir süreçtir. Hata ayıklama deneysel bir yaklaşımdır.
Neyin hatalı gittiğine dair bir fikir oluştuğunda programı değiştirerek tekrar çalıştırırız. Böylece programlamaya yeni bir boyut daha kazandırmış oluruz. Programlama, program doğru biçimde çalışana
kadar aşamalı olarak hata ayıklama sürecidir.
4.Problem Çözme Teknikleri
Programlama sürecinde problemin çözümüne yönelik yol ve yaklaşımları belirlemek gerekir ama öncelikle genel kural ve teknikleri bilmek yararlıdır. Bazı genel kurallar neredeyse tüm
problemler için kullanılabilir. Bu nedenle, bu kuralları içselleştirir ve düşünme sürecinizin bir parçası
hâline getirebilirseniz herhangi bir problemi çözmeye çalışırken mutlaka bir fikriniz olur
1. Her Zaman Bir Planınız Olsun
Belirsiz bir durumu yaşamak yerine her
zaman bir planınız olmalıdır. Bu, en önemli
kuraldır. Belki oluşturduğunuz çözüm planı
ilk denemelerde sonuç vermeyecek ama her
seferinde sizi çözüme biraz daha yaklaştıracak
ipuçları elde etmenizi sağlayacaktır. Denediğiniz yaklaşım ne olursa olsun (doğru ya da
yanlış), fikir üretmemekten ve deneme yapmamaktan her zaman daha iyidir. Planlama
yapmak aynı zamanda hedef belirlemek ve
bu hedefe ulaşmak anlamına gelir. Planınız
olmazsa tek bir hedefiniz olur; o da problemi
çözmektir. Bu durumda problemi çözene kadar herhangi bir başarı kaydetmiş olmazsınız. Dahası sadece nihai hedefe ulaşmaya çalışmak, her başarısızlıkta moralin bozulmasına neden olabilir. Ama küçük hedeflerden bile oluşan bir plan yaparsanız
çözüme yönelik adımlar attığınızı ve zamanı etkili biçimde kullandığınızı göreceksiniz. Her bir adımda
kendinize güveniniz artacak ve çözüme bir adım daha yaklaşmış olacaksınız.
2. Problemi Tekrar İfade Edin
Problemi tekrar ifade etmek, göremediğimiz bir
ayrıntıyı görmemizi ya da problemi daha kolay çözmek adına bir ipucu yakalamamızı sağlayabilir. Hatta
bazen probleme ilişkin bir yanlış anlamanın ortaya çıkmasına ya da hedefin daha iyi anlaşılmasına ne
den olur. Problemi farklı biçimlerde sunmak çözüm sürecine ışık tutmasa bile bazen yalnızca problemi
doğru anlayıp anlamadığımızı bile teyit etmek açısından önemlidir. Ayrıca tekrar ifade ederek problemi
küçük alt parçalara ayırmak gibi yaygın işlemleri de kolaylaştırmış olabiliriz.
3. Problemi Küçük Parçalara Ayırın
Verilen problemi adımlara ya da bölümlere
ayırmak, çözümü kolaylaştırır. Bir problemi
iki bölüme ayırdığımız düşünüldüğünde, her
bir parçanın çözümünün tümünü çözmeye
göre yarı yarıya kolaylaştığını düşünebiliriz.
Bu durum için sıralama örneğini ele alalım.
Elinizde 100 kişisel dosya olduğunu ve bu
dosyaların alfabetik sıraya göre dizilmesi ge
rektiğini düşünelim. Önce bir dosya alıp son
ra her aldığınızı doğru yere yerleştirerek 100
adımda bu işlemi bitirebilirsiniz. Peki ya biri sizin için 100 dosyayı A-F, G-M, N-Ş ve T-Z olacak biçimde 25 adetten oluşan 4 gruba ayırsaydı işlemi
daha kolay yapmaz mıydık? Her seferinde tek tek harf sırasını kontrol etme işlemi, dosya sayısı çoğal
dıkça zorlaştığından sayıca küçük bir grupla çalışmak işlemi hızlandıracaktır. Bu nedenle bir problemi
çözülebilir küçük parçalara bölmek, çözüm işlemini kolaylaştırır ve hızlandırır.
4. Önce Bildiklerinizden Yola Çıkın
Programlama yaparken öncelikle bildiklerimiz ile başlamalı ve sonra yeni çözümler arayışına girmeliyiz. Problemi küçük parçalara bölerek çözebildiğiniz parçadan başlayınız. Bu parçaları çözerken diğer
parçalarla ilgili olarak aklınıza yeni fikirler geldiğini ve aynı zamanda kendinize olan güvenin arttığını
göreceksiniz. Programlama süreci boyunca çoğu zaman çok iyi olduğunuz konular, zorlandığınız konular ve henüz öğrenmediğiniz konular olacaktır. Bir problemin mevcut becerilerinizle çözülüp çözülemeyeceğine karar vermek için problemi çok iyi incelemeniz gerekir. Böylece bilgi dağarcığınızda olmayan
ama çözüm için gerekli olan işlemlerin farkına varabilirsiniz.
5. Problemi Basitleştirin
Çözmekte zorlandığınız bir problemle karşılaşırsanız problemin kapsamını daraltmayı deneyebilir
siniz. Bunun için koşulları azaltmayı ya da çözebileceğiniz biçime dönüştürmeyi, değişkenleri azaltmayı
ya da problemin kapsama alanını küçültmeyi düşünebilirsiniz. Temel amacınız problemi basitçe ifade
etmeye çalışmak olmalıdır. Çözüm için denediğiniz yaklaşımlar, size gerçek çözüm için yol gösterecek
tir. Problemi basitleştirmek size aslında problemdeki zorluğun neden kaynaklandığını da gösterecektir.
6. Benzerlikleri Arayın
Burada ele aldığımız benzerlik kavramı, çözülmesi istenen problemle önceden çözülen problem arasındaki olası örtüşme ya da yeni çözüme ilham verme olarak tanımlanabilir. Benzerlik, farklı biçimlerde
karşımıza çıkabilir. Bazen problemler aynı, değişkenler ya da veriler farklıdır. Bazen problemin belirli
bir bölümü başka bir problemle benzerlik gösterebilir. Problem çözme sürecinde hızınızı ve becerinizi
arttıracak en önemli yaklaşım, benzerliklerin farkına varmaktır ancak bu, aynı zamanda kazanılması
en zor beceridir. Buradaki zorluk, benzerliklerin farkına varacak kadar problem çözmek ve deneyim kazanmak gereğinden ortaya çıkmaktadır. Bu nedenle programlamaya yeni başlayanlar için bir problemi
çözerken hazır yazılmış bir kodu bulmak ve onu güncelleyerek problemi çözmeye çalışmak son derece yanlıştır. Bir çözümü kendiniz üretmezseniz
tamamen anlayamaz ve içselleştiremezsiniz.
Ayrıca çalışan her bir program, problemin çözümü olduğu kadar, daha sonraki problemle
ri çözmek için kazandığınız deneyimlerdir.
Şu anda ne kadar yazılmış kodlar kullanarak
problemleri çözerseniz gelecekte de sürekli bu
yaklaşımı kullanacaksınız demektir.
7. Deneme Yapın
Bazen bir problemi çözmenin en kolay
yolu denemek ve sonuçlarını gözlemlemektir. Bu, tahmin etmekten çok farklıdır. Bir çözümü tahminen
öngörmek ile kodu yazarak denemek ve sonuçlarını incelemek çok farklı sonuçlar verir. Böylece problemi çözebilmek için gereken ipuçlarını elde
edebilirsiniz. Denemek, ara yüz tasarlarken,
çizim yaparken ya da kütüphaneleri kulla
nırken yararlı bir yaklaşımdır. Diğer yandan
hata ayıklama süreci de bir tür deneysel yaklaşımdır. Bir problemin çıktılarına bakarak
sorunun nereden kaynaklandığını anlayabilir
ve problemi çözebiliriz. Bu nedenle program
da önemli noktalara gözlemek amacıyla değer
verebiliriz. Değerlerin değişimini gözleyerek
çözüme daha hızlı ulaşabiliriz.
8. Asla Vazgeçmeyin
Asla vazgeçmemek, kişisel bir özelliktir. Kararlılık, güven ve istek kaybolduğu zaman açık düşünemezsiniz, işlemler olması gerektiğinden uzun sürer ve gittikçe zorlaşır. Hatta öfke ve kızgınlığa bile dönüşebilir. Ekrandaki program kodu çalışma
dığı zaman programcı koda değil, kendisine
ve aslında problemin kaynağına, yani kendi
aklına kızmaktadır. Bu noktada moralimizin
bozulmasına izin vererek aslında başarısız
olmak için bir bahane üretmiş oluruz. Bu
duygudan kurtulmak, programcı tarafından
verilecek bir karardır. Böyle durumlarda en
etkili çözüm ara vermektir. Problemden tamamen uzaklaşarak geçirilecek vakit sonrasında çok daha verimli çalışmak olasıdır.
Problem Çözme Adımları
5.Problem Türleri
Problemlerin her zaman sıradan çözümleri olmaz. Kek yapmak ya da araba kullanmak gibi problemleri çözmek için bir dizi eylem gerekir. Adım adım yönergelere dayalı olan bu çözümlere “algoritmik çözümler” denir. En iyi yolu seçtikten sonra sonuca, ilgili adımları izleyerek ulaşılır. Bu adımlardan
oluşan yapıya “algoritma” denir. En lezzetli ekmeği seçmek ya da işleri büyütmek için yatırım yapmak
gibi problemlerin ise açık ve net ifade edilen yanıtları yoktur. Bu çözümler bilgi ve deneyim gerektirir,
bir dizi deneme ve yanılma sürecinden oluşur. Doğrudan işlem adımları ile ulaşılamayan sonuçlara
“keşfe dayalı çözümler” denir.
Problemi çözen kişi her iki türdeki problem için problem çözmenin 6 adımını kullanabilir. Ancak
keşifsel çözümler için son adım çok doğru sonuç vermeyebilir. Bazı problemler ise her iki türdeki çözümün de kullanılmasını gerektirir.
6. Bilgisayarlar ile Problem Çözme
Bu ders kapsamında “çözüm” demek problem çözme sürecinin 5. adımında yer alan işlem adımları
ya da yönergeler anlamına gelmektedir. “Sonuç” demek, çıktı ya da tamamlanmış bilgisayar destekli
yanıt demektir. “Program” ise herhangi bir bilgisayar dilinde kodlanmış, çözümü oluşturan işlem adım
larının tamamını ifade etmektedir.
Bilgisayarlar, zor ve zaman alıcı olabilen algoritmik çözümler ile ilgilenmek üzere tasarlanmıştır.
İnsanlar, keşifsel çözümleri bulma konusunda daha iyidirler ancak bilgisayarların çözebildiği ileri düzey hesaplama ve karmaşık problemleri çözme konusunda bilgisayarların hızlarına ulaşamazlar. Bilgi
sayarlar, üst düzey matematik problemlerini kolayca çözebilir ancak konuşmak ya da top atmak gibi
davranışları yapamaz. Bu işlemlerin zorluğu programlama sürecindedir. Bu tür işlemleri bilgisayarların
anlayacağı bir dizi adım şekline nasıl dönüştürebiliriz?
Keşifsel problem türleri ile ilgilenen bilgisayar dalına “yapay zekâ” adı verilmektedir. Yapay zekâ uygulamaları, bilgisayarla
ra mevcut bilgileri kullanarak yeni bilgiler
inşa etmesini sağlamaktadır. Böylece bilgisayarın problem çözme becerileri insanların yeteneklerine daha çok benzemektedir.
Yapay zekâ özellikle robotik uygulamaları
ile son yıllarda popüler bir çalışma alanı
olmuştur. Bilgisayarlar insanlar gibi düşünmeye başlayana kadar daha çok algoritmik problemlerin çözüm süreçlerinde
kullanılacaktır. Bu nedenle bu derste ağırlıklı olarak algoritmik çözümler üzerinde
durulacaktır.
7. Problem Çözme Kavramları
Günlük hayatta karşılaştığımız problemler çok çeşitli olmasına rağmen bilgisayar ile çözebildiğimiz
yalnızca 3 tür vardır:
1. Hesaplamalı–matematiksel işlem ve süreçler içeren problemler,
2. Mantıksal–ilişkisel süreçler içeren problemler,
3. Tekrarlayan–matematiksel ya da mantıksal bir dizi işlemin yinelenme sürecini içeren problemler.
Bu bölümde, bilgisayara ilişkin temel kavramlar ve belirtilen türdeki problemleri çözmek için kullanılan ifade ve eşitlikler anlatılmaktadır. “Sabit” ve “değişken” önemli iki kavramdır. Programcı işlenmemiş hâlde veriyi alır, işlenmiş hâle yani bilgiye dönüştürür. Bunlar eşitlik ve ifadelerin yapı taşlarıdır.
Programcı, problemi çözebilmek için gereken sabit ve değişkenleri, uygun “veri türü”nde, örneğin sayısal
olarak tanımlar.
Diğer önemli kavramlar ise operatör ve fonksiyonlardır. “Operatör”, sabit ve değişkenler arasındaki
ilişkileri gösteren, eşitlik ve ifadelerde kullanılan işaret ve sembolleri ifade eder. Operatörlerin belirli bir
hiyerarşik yapı içerisinde kullanılması gerekir. Operatörler sabit ve değişkenlerle birlikte kullanıldığında
“eşitlik” ve “ifade” olarak adlandırılan yapılar oluşur. Eşitlik ve ifadeler ise çözüm sürecinin yapı taşları
olan işlemlerdir. “Fonksiyonlar” bir dizi işlem seti olarak tanımlanabilir. Tüm bu kavramları anlama
dan bilgisayarlar ile problem çözmek olası değildir.
8. Veri Türleri
Çevremizdeki kavram
ve nesneleri farklı şekiller
de anlamlandırmak için
farklı veri türleri kullanırız.
Çözümler üretebilmek için
bilgisayarlar “veri”ye gerek
sinim duyar. Ham veriler,
bilgisayar tarafından “girdi”
olarak algılanır ve program
aracılığı ile işlenir. Kulla
nıcıya geri dönen değer, iş
lenmiş veridir; “çıktı” ya da
“bilgi” olarak adlandırılır. Bilgisayara hangi veri türüyle çalışıyor olduğu mutlaka belirtilmelidir. Bir
programda farklı veri türleriyle işlem yapılabilir. Örneğin tam sayılar, kesirli sayılar, karakterler, simge
ler, metinler ve mantıksal değerler, veri türlerini oluşturur.
1. Sayısal Veri
Sayısal veriler tüm sayı tiplerini içerir. Sayısal veri, hesaplama işlemlerinde kullanılabilen tek veri
türüdür. Pozitif ya da negatif tam sayılar ve reel sayılar kullanılabilir. Sayısal veriler; açılar, uzaklık,
nüfus, ücret, yarıçap gibi hesaplama sürecinde gerekli değerler için tanımlanır. Banka hesap numarası
ya da posta kodu gibi sayısal ama hesaplama için kullanılmayan veriler de vardır. Bu tür veriler sayısal
olarak tanımlanmaz. Her bir veri türünün bir veri seti vardır. Sayısal veri için tanımlanmış veri seti 0-9
arasındaki sayılar ve “+” ile “–” işaretlerini kapsar. Örneğin 66578 ve -2356 tam sayı örnekleridir. Reel
sayılar, tüm reel ve ondalık sayıları kapsar. Örneğin -56.23, 8695.235 ya da 0.005 reel sayı için örneklerdir. Sayıların alabileceği en küçük ve en büyük değerler kullanılan bilgisayar ve programlama diline
göre değişebilir.
2. Alfanümerik/Karakter Veri
Karakter veri seti; tüm tek haneli sayılar (“0”.. “9”), harfler (“a”..“z”, “A”..“Z”) ve özel karakterleri
(“#”, “&”, “*”, ..) kapsar. Bu veri setinden oluşturulan değer, tırnak içinde belirtilir. Büyük ve küçük
harf duyarlıdır yani “a” ile “A” farklı algılanır. ASCII (American Standard Codefor Information
Interchange) olarak adlandırılan karakter seti 256 karakterden oluşur. Karakterler sadece sayıdan
oluşsa bile hesaplama işlemlerinde kullanılamaz. Birden fazla karakter bir araya getirilirse bilgisayar,
bu yapıyı “dizi” olarak adlandırır. Karakter ve dizi verileri karşılaştırılabilir ve alfabetik sıraya göre
sıralanabilir. Bilgisayar her karaktere bir numara verir ve işlemi bu şekilde gerçekleştirir çünkü bil
gisayarlar sayısal işlem yapabilen cihazlardır. Veriler birbirleri ile karşılaştırılır ve azalan ya da artan
şekilde sıralanır. Örneğin Muz ile Elma karşılaştırıldığında M harfi E harfinden daha büyük bir
sayıya sahip olduğu için Muz dizisinin değeri daha büyüktür. Elif ile Esra karşılaştırıldığında ise Esra
daha büyük değer alır çünkü s harfi l harfinden daha sonra gelir. Büyük harflerin küçük harflerden
daha düşük sayısal değerleri vardır.

Karakterler ve diziler + operatörü kullanarak birbirine bağlanabilir. Birleştirme olarak adlandırılan
bu işlem, iki karakter parçasını yan yana getirir. Örneğin “6”+“6” = “66” olur. Genellikle matematiksel
işlem gerektirmeyen verilerin, dizi şeklinde tanımlanması önerilir
3. Mantıksal Veri
Mantıksal veri, veri setinde yalnızca iki kelime barındırır: doğru ve yanlış. Bu veri evet ya da hayır
şeklindeki karar verme süreçlerinde kullanılır. Örneğin elde edilen değer, beklenen değer mi, evli mi,
arabası var mı, öğrenci lise mezunu mu gibi sonucu kesin doğru ya da yanlış olan durumlarda mantıksal
veri tanımlaması yapılır. Bu kelimeler ayrılmış özel kelimelerdir ve dizi olarak algılanmaz.

Veri Türleri İçin Kurallar
1. Tanımladığınız veri genellikle sayısal, karakter, dizi ya da mantıksal olmalıdır.
2. Programcı programlama sürecinde verinin adını ve türünü belirtir. Bilgisayar çalışmaya başladığında verinin adı ile türünü eşleştirir.
3. Veri türleri karışık kullanılamaz. Örneğin sayısal olarak tanımlanmış bir veri, dizi olarak algıla
namaz. Bu durumda bilgisayar, beklediği veri türü ile karşılamaz ve hata verir.
4. Her bir veri türü kendisi için tanımlı veri setini kullanır.
5. Matematiksel işlemlerde kullanılacak tüm veriler sayısal olarak, diğerleri karakter ya da dizi olarak tanımlanmalıdır.
6. Programcılar kendi tanımladıkları veri türlerini de oluşturabilirler. Kullanıcı-tanımlı olarak adlandırılan bu veri türleri, bugünün tarihi, hedef, varılacak süre gibi hem dizi hem de sayısal veriler
içeren yapılar oluşturulabilir.
9. Bilgisayar Veriyi Nasıl Saklar?
Bilgisayar veriyi hafızada saklar. Her bir değişken için hafızada belirli bir alan ayrılır ve bu alan her
seferinde tek bir değer saklayabilir. Kullanıcı, var olan değer yerine yeni bir değer atadığında eski değer
silinir. Hafızada bu konumlar geçicidir. Programın çalışması bittiğinde ya da bilgisayar kapatıldığında
bu veriler silinir. Verilerin daha sonra tekrar kullanılması gerekiyorsa sabit disk gibi kalıcı bir konu
ma kaydedilmeleri gerekir. Bu şekilde kaydedilen verilere “dosya” adı verilir. Temel anlamda program
dosyaları ve veri dosyaları olmak üzere iki dosya türü vardır. Program dosyaları, bilgisayarın yapması
istenen komutları ve işlemleri içerir. Veri dosyaları ise programlar çalışırken gereken verileri kapsar
10. Sabit ve Değişkenler
Bilgisayarlar problemleri çözmek için süreç boyunca sabit ve değişken olarak adlandırılan verileri
kullanır. “Sabit” olarak tanımlanan veriler problemin çözüm süreci boyunca asla değişmeyen değer
lerdir. Sabit değerler sayısal, karakter ya da özel semboller olabilir. Bu durumda bu değere bilgisayarın
hafızasında bir yer ayrılır ve bir isim verilir. Program çalıştığı sürece bu değer kendisine verilen isim ile
çağrılır ve değeri asla değiştirilemez. Örneğin, pi değeri değişmeyen bir değer olacağı için sabit olarak
tanımlanmalıdır

Bu durumun tam tersi şekilde bir “değişken” tanımlandığında değeri, program çalıştığı sürece deği
şebilir (Şekil 1.8). Değişkenlere taşıdığı değerleri ifade eden isimler verilir, bu şekilde belirleyici özellik
leri de oluşur. Programcılar çözüm sürecinde ihtiyaç duyulan her bir değişkene ayrı bir isim vermelidir.
Böylece bilgisayar bu ismi, ilgili değeri hafızada bulmak için kullanır. Değişken, farklı veri türlerinde
olabilir ancak ismi, içerdiği değer ile tutarlı olmalıdır. Örneğin fiyat isimli bir değişenin içerisinde 50
değeri atanmış olabilir, program çalıştığı süre içerisinde bu değer değişebilir ancak değişkenin ismi
hiçbir zaman değişmez.
Değişkenlere isim verirken ve bunları kullanırken dikkat edilmesi gereken kurallar şunlardır:
1. Değişkene içerdiği değer ile tutarlı isimler veriniz.
2. Değişkenlere isim verirken boşluk kullanmayınız.
3. Değişkenlere isim verirken bir karakter ile başlayınız.
4. Matematiksel semboller kullanmamaya dikkat ediniz.
Değişken isimleri konusunda aşağıdaki noktalara dikkat edilmelidir.-
Bazı platformlar desteklemediği için Türkçe karakter kullanımı tavsiye edilmez.
-
Programlama dillerinde kullanılan komut isimleri değişken olarak kullanılamaz. Çok bilinenleri;
if, for, while, else, do, int, vb.
- Değişken isimlendirmelerinde boşluk karakteri yerine alt çizgi ( _ ) karakteri kullanılabilir
ancak değişken isimlendirmede genellikle küçük harfle başlanır ve ikinci bir kelime yazılacaksa
ilk kelimenin hemen ardından büyük harfle devam edilir. Buna “Camel Karakter” kullanımı
denir. Örnek: tcKimlikNo
-
Özel karakterler değişken isimlerinde kullanılamaz (*,/, -,+, #,%,&,(,=,?,$,[,{ gibi…)
11. Fonksiyonlar
Fonksiyonlar, belirli işlemleri yürüten ve sonuçları döndüren bir işlem kümesidir. Genellikle bilgi
sayar dilinde oluşturulur. Fonksiyonlar, bir çözüm sürecinin belirli parçaları olarak kullanılır. Problem
çözme sürecinde tekrarlanan işlemler için kullanılır ve böylece programcının, hem problemi daha hızlı
çözmesini hem de programın daha anlaşılır olmasını sağlar. Her programlama dili, içerisinde kendine
özgü fonksiyonlar barındırır. Bu fonksiyonlar kütüphanesi, programlama dili bilgisayara göre değişiklik
gösterir. Ayrıca pek çok programlama dili, programcıların kendi fonksiyonlarını yazmalarına da olanak
verir. Fonksiyon kütüphaneleri, pek çok program diline eklenebilir.
Fonksiyonlar, kendilerine verilen isim ve ayraç içerisinde gönderilen veri ile tanımlanır.
Fonksiyon İsmi (Veri)
Fonksiyon kapsamında elde edilen sonuç, fonksiyonun ismi ile döndürülür. Fonksiyonlara veri gön
derilir. Fonksiyona gönderilen verilere “parametre” denir. Fonksiyonlar parametreleri değiştirmez ama
işlemlerde kullanır. Örneğin karekök fonksiyonunu ele alalım. Sqrt(N), gönderilen N değeri için kare
kök değeri hesaplamaktadır. Sqrt fonksiyonun ismi, N işlem yapılacak veri yani parametredir. Paramet
reler yay ayraç içinde yazılır. Programcı olarak kullandığınız dilin kütüphanesinde hangi fonksiyonların
olduğunu araştırmanız işlerinizi kolaylaştıracaktır.
Fonksiyonlar gruplara ayrılır:
1. Matematiksel Fonksiyonlar: Matematiksel işlemler için kullanılır.
2. Dizi Fonksiyonlar: Dizi ve karakterlerle ilgili işlemleri gerçekleştirmek için kullanılır.
3. Dönüştürme Fonksiyonları: Veriyi bir türden diğerine dönüştürmek için kullanılır.
4. İstatistiksel Fonksiyonlar: Maksimum değer, ortalama gibi değerleri hesaplamak için kullanılır.
5. Yardımcı Fonksiyonlar: Program dışındaki verilere erişerek işlem yapmak için kullanılır.
Bu fonksiyonlara bazı örnekler Tablo 1’de görülmektedir.

12. Operatörler
Bilgisayara, verileri nasıl işleyeceğini belirtmek gerekir. Bu işlem için operatörler kullanılır. “Operatörler” verileri, ifade ve eşitlikler ile birleştirir. Bu yazım, aynı zamanda operatörler bilgisayara ne tür bir
işlem (matematiksel, mantıksal vb.) olduğuna dair bilgi verir. “İşlemci” ve “sonuç”, operatörlere ilişkin
iki kavramdır. İşlemci, verileri bağlayan ve işleme alan yapı; sonuç ise yapılan işlemin yanıtıdır. Örnek
vermek gerekirse 6 + 5 ifadesinde yer alan “+” operatör, 6 ve 5 işlemci, 11 ise sonuçtur. İşlemciler sabit
ya da değişken olabilir.
Operatörler; matematiksel, mantıksal ve ilişkisel operatörler olarak sınıflandırılabilir. Operatör türlerine ilişkin örnekler Tablo 2’de yer almaktadır.

a) “+” Toplama operatörü: Matematikteki bildiğimiz toplama işlemidir. Normalde iki operand arasında toplama yapar (işleme katılan operandlar sayısal türden iseler)
*3+5 =8,
x=4 => x+1= 5 gibi…
!İşleme katılan operandlar alfasayısal (sayısal olmayan, yazı türünden) tipli değerler ise “+” operatörü birleştirme işlemi yapar.
*“Ali” + “Veli” = “AliVeli” gibi…
b)“-“ Çıkartma operatörü: Matematikteki bildiğimiz çıkartma işlemidir İki operand arasında çıkartma yapar.
*5-3 = 2, x=4 => x-1 =3
c)“*“ Çarpma operatörü: Matematikteki bildiğimiz çarpma işlemidir İki sayı arasında çarpma yapar.
*5*3 = 15,
z=2 => z*3 = 6
!Bilgisayar dünyasında kullanılan programların çoğunda; (Programlama Dilleri, Hesap Makinesi, Excel vb.) çarpma işlemi matematikteki gibi “.” veya “x” ile ifade edilmemektedir. Onların yerine “*” kullanılmaktadır.
d)“/“ Bölme operatörü: Matematikteki bildiğimiz bölme işlemidir İki sayı arasında bölme yapar.
*12/3 = 4, x=4 => 12/x = 3
!Bölme işleminde dikkat etmemiz gereken nokta, ikinci sayının bir şekilde “0 (Sıfır)” olmaması gerektiğidir. Çünkü “sayı/0” ifadesi anlamsız bir sonuç üreteceğinden programımız da kararsız duruma düşebilir.
e)“^” Üs operatörü: Üs alma işlemidir. Taban bu operatörün soluna yazılırken üs ise sağ tarafına yazılır.
*2^3 = 8
!Bir programcının 2’nin kuvvetlerini ezbere bilmesi gerekmez fakat bir süre sonra
“2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768…” diyerek seri bir
şekilde sayabildiğinizi göreceksiniz. Bu da bilgisayar mimarisinin 2’lik sayılar üzerine
kurulmuş ve dolayısıyla da bu sayılara sıkça işimizin düşüyor olmasından kaynaklanmaktadır.
Karşılaştırma(İlişkisel) Operatörleri :
**İlişkisel operatörlerle yapılan işlemlerin sonucunda ortaya mantıksal değer olarak Doğru (True) ya da Yanlış (False) çıkar.
•Eşittir ==
•Eşit değildir (farklıdır) != (ya da <>)
•Büyüktür >
•Küçüktür <
•Büyük eşittir >=
•Küçük eşittir <=
Bu operatörler kullanılarak değişkenler ya da sabit değerler arasında yapılan karşılaştırmalar doğru ya da yanlış şeklinde bir sonuç döndürür Örneğin 5 > 8 ifadesi yanlış sonucunu döndürür 3 <= 6 ifadesi doğru sonucunu döndürür.
Mantıksal Operatörler
• Programlarda, birden fazla karşılaştırma ifadesi bir anda kullanılmak istenebilir. Bu gibi durumlarda mantıksal ifadeler kullanılması zorunludur.
• VE ( && )
• VEYA ( || )
Sonuç Rakam olarak Bilgisayar Dilinde
Doğru Yanlış 1 0 True (1) False (0)
Örneğin ( 5>6 &&2<=7)ifadesini incelersek && →VE anlamına gelir
5>6 →Bu ifadeden yanlış sonucu döner 2<=7 →Bu ifadeden doğru sonucu döner Sonuç olarak bu ifade (yanlış VE doğru) ya da ( 0 VE 1) halini alır. Doğruluk tablosuna göre bu ifadeden 0 (yanlış) sonucu döner
Örneğin A=5, B=18 olsun
(A != B &&B>5) → 1(doğru)
(5 == A||B<15) → 1(doğru)
(4 > 6||B!=18||A>3) → 1(doğru)
(A == 5&&B>=18&&5%2==1) → 1(doğru)
(B < 20&&A<6&&2%2==1) → 0(yanlış)
(A == B||B<5) → 0(yanlış)
Karar Yapıları
Karşılaştırma operatörü içeren ifadeler ile birlikte kullanılırlar
• Karşılaştırma operatörü içeren ifade koşul olarak adlandırılır.
EĞER (koşul) İSE koşul doğru ise burada belirtilen işlemleri gerçekleştir.
DEĞİL İSE koşuldan dönen değer yanlış ise burada belirtilen işlemleri gerçekleştir
13. İfade ve Eşitlikler
Şu ana kadar gördüğümüz tüm bileşenler, ifade ya da eşitlik biçiminde kullanılmadığı sürece bir
anlam ifade etmez. Çözülmeye çalışılan problem vergi ya da maaş hesaplama, değerleri sıralama, en
büyük değeri bulma gibi farklı işlemlerden oluşabilir. Bir “ifade” operatörleri kullanarak veriyi işler.
Uzunluk * Genişlik
“Eşitlik” ise ifadenin sonucunu saklar.
Alan=Uzunluk * Genişlik
Bu durumda uzunluk ve genişlik değerlerinin çarpım sonucu hafızada ‘‘alan’’ olarak ayrılan yerde
korunur. İfadelerde eşit operatörü kullanılmaz. İfadeler eşitlik ve yönergelerin yalnızca bir bölümünü
oluşturur. Bu yüzden sonuçlar o an kullanılır ancak korunmaz. Oysaki eşitlik ifadelerinde mutlaka so
nuç korunur. Bu yüzden eşitliklere “atama ifadeleri(ifadeler)” de denir. Örnek ifade ve eşitlikler Tablo
4’te incelenebilir.

Bu operatörler bir değişkene , bir sabit eşitlemek için kullanılır.
Örnek:
X =3 Burada x değişkenine 3 değerini atadık. 3 burada değişkenin içindeki veridir.
3=X Bu yanlış bir ifadedir. Çünkü veriye bir değişken atayamayız.
Genel yapı aşağıdaki gibidir. Bazen operatörler birleşik atama işlemlerinde de kullanılır.
değişken = değişken [operatör] ifade; şeklinde ise, daha kısa bir biçimde
değişken [operatör]= ifade; olarak yazılabilir.
= Atama
+= Ekleyerek atama
-= Eksilterek atama
*= Çarparak atama
/= Bölerek atama
%= Bölüp kalanı atama
++ Bir arttırma
-- Bir azaltma
Not: Değişkenlere değer ataması yaparken = operatörü kullanılır.
Örnek: x=3
Not: Bir değere iki veya daha fazla değişken atayabiliriz.
Örnek: >>>a=b=c=4
a,b ve c değişkenlerinin hepsine birden 4 değeri atandı.
>>>print(a*b+c)
4*4+4 20
Not: Bir değişkene defalarca farklı değerler atayabiliriz.
Örnek:
>>>x = 10
>>>x = 20
>>>x = 30
Değişkenin en son değeri
>>>print(x) // Değişkenin en son değeri geçerlidir.
30
Çoklu atama:
Örnek:
>>> x, y, z = 4,3,2
x değişkenine 4, y değişkenine 3, z değişkenine ise 2 değeri atandı.
>>> print(x*y-z)
4*3-2
10
Değişken Takası:
Örnek:
>>> x,y,z=4,3,2
>>> x,y,z=y,z,x
x artık y, y artık z, z artık x oldu.
>>> print(z**y*x)
4**2*3
48
Değişken İptali:
Değişken iptali için komut penceresini kapatıp açabiliriz ya da del komutunu kullanabiliriz.
Örnek:
>>>a=2
>>>print(a) 2
>>>del a
//a değişkeni artık yok yani iptal edildi.
>>>print(a)
a değişkenini iptal ettiğimiz için kod hata verir.
14.İşlem Önceliği
Matematiksel, mantıksal ve ilişkisel operatörlerin bir hiyerarşisi yani öncelikleri vardır. İşlemler, bu
sıralamaya göre yapılmaz ise sonuç, beklendiği gibi çıkmayabilir. En içteki ayraçtan en dıştakine doğru
işlem yapılmalı, ayraç içerisinde ise işlem önceliklerine dikkat edilmelidir. İşlem öncelikleri Tablo 3’te
görülmektedir.
Örnek değişkenlere ilişkin işlem sonuçları için aşağıdaki tabloyu inceleyiniz.
PROBLEM ÇÖZME
YAKLAŞIMLARI
Bilgisayar ile Nasıl İletişim Kurulur?
Bilgisayarlar ancak donanımları, yazılımları
ve onları kullanan kişiler kadar iyidir. Yapılacak
işlem için mevcut donanımın yeterli olduğunu
varsayarsak bir bilgisayarın etkililiği onu kullanan programcının yetkinliğine bağlıdır. Bilgisayara bir dizi işlem aracılığı ile ne yapması gerektiği söylenmelidir. Bu işlemler bir programlama
dili aracılığı ile kodlandığında bir program hâline
gelir.
Bilgisayarların çok iyi çözdüğü problemler, algoritmik yapıda olanlardır yani adım adım işlemlerden oluşan yapılardır. Bu işlemler bilgisayarın
anlayabileceği biçimde ifade edilir ve bilgisayar
bu satırları sıra ile çalıştırır.
Bilgisayarlar bizim konuştuğumuz dili bilemediğinden onlarla anlaşmamız için bizim
onların konuştuğu dili öğrenmemiz gerekir.
Bilgisayarın işletim sistemi, dili ve uygulamalarına ilişkin kurallara “söz dizimi” denir. Bir hata oluşursa buna “yazılım hatası”; hatayı bulup
düzenleme işlemine ise “hata ayıklama” denir. Yazılım hataları bazen söz dizimi hatalarından ba
zen de mantık hatalarından kaynaklanabilir. Bu hatalar problem çözme sürecinde bulunarak düzeltilir.
Programın hatasız çalışması ve doğru sonucu üretebilmesi için tüm hataların düzeltilmiş olması gerekir.
Çözümün Düzenlenmesi
Problem çözme sürecini destekleyen bazı düzenleme araçları vardır. “Bunlar;
1. Problem Analiz Çizelgesi,
2. Etkileşim Çizelgesi,
3. GSÇ (Girdi Süreç Çıktı) Çizelgesi,
4. Algoritmalar,
5. Akış Şemaları”dır.
Bu araçları kullanmak; çözüme daha hızlı ulaşmak, en etkili programı yazmak, anlaşılır olmak ve
süreci kolaylaştırmak için önemlidir.
1. Problemin Analiz Çizelgesi
Çözümü düzenlemek için önce programın beklentilerini analiz etmek gerekir. Bunun için en iyi yol,
problemi dört aşamada ele almaktır:
1.
Eldeki veri
2. Beklenen sonuç
3.
Problemin çözüm süreci
4. Çözüm seçenekleri
Tablo5: Problem Analiz Çizelgesi
Bir örnek problem için problem analiz çizelgesinin nasıl olduğuna bir göz atalım:
2. Etkileşim Çizelgesi Geliştirme
Çözüme ulaşma yolunda ikinci adım, çözüm sürecini modüllere ayırmak ve süreçteki modüllerin
birbiri ile etkileşimini görmek için modülleri birleştirmektir. Yönetsel etkileşim çizelgesi hazırlanırken
yukarıdan aşağıya yaklaşım kullanılır. Tüm modülleri kontrol eden bir ana kontrol mekanizması dâhi
linde süreç yukarıdan aşağıya doğru işler.
Çoğu programda kontrol modülünden sonra ilk değerler ataması, sonra okuma, hesaplama, ekrana yazdırma, çıktı alma vb. gibi işlemler gerçekleştirilir. Kontrol modülü bu süreci kontrol eder. Örneğin brüt maaş hesaplama problemi için etkileşim çizelgesi aşağıdaki gibi olabilir.
3. GSÇ Çizelgesi
GSÇ (girdi-süreç-çıktı) çizelgesi problem analiz çizelgesindeki bilgiyi detaylandırır ve düzenler. GSÇ
çizelgesi dört bölümden oluşur: girdi, süreç, modül referansı ve çıktı (Tablo 6).
Geçme/Durumunu tespit etmek için GSÇ çizelgesi aşağıdaki gibidir.
4. Algoritmalar
Bu çizelgeleri geliştirdikten sonraki adım, yapılacak işlemleri bilgisayarın anladığı dilde yazabil
mektir. Bu yönergeler “algoritma” olarak adlandırılır. “Sözde kod” algoritmaya çok benzer bir dildir ve
bazen algoritma yerine kullanılabilir. Algoritmayı oluşturmak, bilgisayarda problem çözme sürecinin
en zor bölümüdür. Modüller etkileşim çizelgesinden ve süreç GSÇ çizelgesinden alınır. Algoritmadaki
işlem sayısı, programcının problemi çözme yoluna bağlıdır.
5. Akış Şemaları
Problem çözme sürecimiz, bilgisayarın iletişim kurma yöntemi ile şekillenir. Algoritma, bilgisayara
hangi işlemi hangi sırada yapması gerektiğini söyleyen yönergeler bütünüdür. Akış şeması ise algoritmanın görsel gösterimidir. Programcı, oluşturulan algoritmadan grafiksel gösterimler oluşturur. Akış
şeması, program geliştirmeye başlamadan önceki son adımdır. Akış şemasında hatalar rahatlıkla görülüp düzeltilebilir. Akış şemalarını oluşturmak için kullanılan evrensel simgeler ve bu her bir simgenin
anlamı vardır
Algoritma Yönergeleri ve Akış Şeması Sembolleri
Akış şeması, bir problem çözümünün başlangıcından bitişine kadar olan süreci gösterir. Akış şeması
içerisindeki her bir simge, algoritmadaki bir işlemi ifade eder. Genellikle işlemler tek yönlü olmasına
rağmen karar kutularından iki farklı ok çıkar. Bir karar simgesinden çıkan ok, bazı işlemlerin tekrarlanmasını sağlayabilir; böylece bir “döngü” oluşur.
Akış şemalarını oluştururken dikkat edilmesi gereken bazı noktalar şunlardır:
1. Yönergeler, simgelerin içine yazılmalıdır.
2. Hatırlatıcı bilgiler simgenin yanına yazılabilir. Böylece akış şeması ek açıklamalı bir şemaya dönüşür.
3. Bir akış şeması her zaman sayfanın başından başlar ve sonuna doğru gider. Eğer bir sayfaya sığmazsa bir ya da daha fazla bağlantı simgesi kullanılarak diğer sayfaya geçilebilir.
4. Akış şemasını çizmek için uygun yazılımlar kullanılırsa daha standart bir görünüm elde edilir.
5. Simgeler, içeriğindeki yazının rahatça okunabileceği kadar büyük yapılmalıdır
Haricî ve Dâhilî Dokümantasyon
İyi programcılar, kodları başkaları tarafından rahatça anlaşılabilsin diye satırlar arasına açıklamalar
yazarlar. Bu açıklamalar, diğer programcılar açısından büyük önem taşır çünkü kod üzerinde değişiklik
yapılabilmesi için her bir satırın ya da fonksiyonun işlevinin anlaşılması gerekir. Bu şekilde, yazılıma ait
“dâhilî dokümantasyon” oluşturulmuş olunur. Kod satırları haricinde yazılımın kullanımına ve teknik
gereksinimlere ait bilgilerden oluşan “haricî dokümantasyon” hazırlanır. Bu bilgiler, diğer kullanıcılar
tarafından ortaya çıkan problemleri çözmek için kullanılır.
Çözümün Programlanması/Kodlanması
Akış şeması ve algoritmalar tamamlandıktan sonra istenilen bir programlama dili kullanılarak programın yazılması işlemine geçilir ki bu işleme “programlama” ya da “kodlama” adı verilir. Kodlama
sonucunda programın ne kadar hatasız çalıştığı, algoritmanın etkililiğine bağlıdır.
Yukarıda iki yazılı ve iki performans puanı almış bir öğrencinin puan ortalamasını hesaplayarak,
dersten geçip geçmediğini belirleyen akış şeması yer almaktadır. Siz de benzer bir problemi çözüme
kavuşturacak basamakları akış şemasıyla oluşturmayı deneyiniz
Hiç yorum yok:
Yorum Gönder