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şlemlere 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. Kullanı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(Karakter) 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)“^” veya " ** " Ü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 veya 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.
f) "%" Mod Alma Operatörü:
Mod alma; bir sayının başka bir sayıya bölümünden
kalan sayıdır.
Örneğin; 6%3=0 iken
5%3=2 sonucunu verir.
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(AND) ( && ) “Ve” operatörü, iki veya daha fazla koşulun tümünün doğru olduğu durumlarda “doğru” sonucunu veren
operatördür. Günlük hayattaki kullanımıyla aynıdır.
Örneğin makarna yapmak için su, tuz ve makarna gerekir. Bunlardan herhangi biri olmadan makarna yapıla
maz.
• VEYA(OR) ( || ) “Veya” operatöründe, iki veya daha fazla koşuldan en az birinin doğru olması durumunda sonuç “doğru”
olur. Bu da günlük hayatta kullandığımız gibidir.
Örneğin bir havuzu boşaltmak için kırmızı, yeşil ve mavi renkte üç farklı musluğumuz olsun. Havuzun boşal
ması için kırmızı musluğu veya yeşil musluğu veya mavi musluğu açmamız yeterli olacaktır. Dilersek iki ya da üç
musluğu aynı anda açarak da havuzu boşaltabiliriz.
• DEĞİL(NOT) “Değil” operatörü ise mantıksal bir durumu tersine çevirir. Sonucu “doğru” olan bir mantıksal sınamayı
“yanlış”a, sonucu “yanlış” olan bir mantıksal sınamayı ise “doğru”ya çevirir. Günlük hayattaki olumsuzluk ifadelerine
karşılık gelir.
Örneğin annelerimiz meyve alırken pazarcıya “Sağlamlarından ver.” diyebilir. “Çürüklerinden verme.” deseler
de pazarcı yine aynı şeyi anlayacaktır. Çünkü bir meyve ya çürük ya da sağlam olur. İkinci ifadede kullanılan olum
suzluk ekinin koşulu tersine çevirdiğine dikkat ediniz.
Sonuç Rakam olarak Bilgisayar Dilinde
Doğru Yanlış 1 0 True (1) False (0)
Ör: ( 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ış)
İşlem Önceliği
Aritmetik işlemler yapılırken kullanılan operatörlerde öncelik sıralaması vardır.
Bu sıralama;
Parantez ( )
Üs alma **
Çarpma - Bölme *, /
Toplama - Çıkarma +,- şeklindedir.
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.
Kullanım şekli:
EĞER (koşul) İSE koşuldan dönen değer doğru ise burada belirtilen işlemleri gerçekleştir
DEĞİL İSE dönen değer yanlış ise burada belirtilen işlemleri gerçekleştir
Burada DEĞİL İSE kısmında başka bir koşul ifadesi kullanılmaz .
EĞER (koşul) İSE kısmındaki koşuldan yanlış değeri geri dönerse buradaki işlemler gerçekleştirilmez ve DEĞİL İSE kısmındaki işlemler başka bir koşula bakılmadan gerçekleştirilir.
EĞER (koşul) İSE kısmındaki koşuldan doğru değeri geri dönerse burada belirtilen işlemler gerçekleştirilir ve bu durumda DEĞİL İSE kısmındaki işlemler gerçekleştirilmez.
ÖR: Klavyeden girilen iki sayıdan büyük olanını bulup ekrana yazan programın algoritmasını yazın
1. BAŞLA
2. OKU: A, B [klavyeden artarda okunan iki değer sırası ile A ve B değişkenlerinde saklanır]
3. EĞER A>B İSE YAZ: A DEĞİL İSE YAZ: B [A > B ifadesi doğru sonucunu döndürürse ekrana A değişkenindeki değer yazılır. Doğru sonucunu döndürmez ise ekrana B değişkenindeki değer yazılır]
4. BİTİR
ÖR2: Klavyeden girilen iki sayının büyük olanından küçük olanını çıkarıp bulunan sonucu ekrana yazan programın algoritmasını yazın
1. BAŞLA
2. OKU: A, B [klavyeden artarda okunan iki değer sırası ile A ve B değişkenlerinde saklanır]
3. EĞER A >BİSESONUC=A-B DEĞİL İSE SONUC = B- A [A > Bifadesi doğru sonucunu döndürürse A– B işleminin sonucu hesaplanır ve bulunan değer SONUC adlı değişkende saklanır. Doğru sonucunu döndürmez ise B- A işleminin sonucu hesaplanır ve bulunan değer SONUC adlı değişkende saklanır]
4. YAZ: SONUC
5. BİTİR
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.
***** Değişken: Her seferinde
farklı değerler alabilen
ifadelerdir.
*****Sabit: Değeri değişmeyen ifadelerdir.
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
Algoritma, belirli bir mantığı olan, farklı düşünebilmeyi ve
problem çözmeyi öğretmek için tasarlanan bir yoldur. Başka bir
ifadeyle bir problemi çözmeye giden yolun basit, net ve belirli bir
sıraya göre tasarlanmış hâlidir.
Algoritmalar;
Açık ve net olmalıdır.
Kullanılacak olan girdiler iyi tanımlanmış olmalıdır.
Çıktılar açık ve anlaşılır olmalıdır.
Algoritmalar hızlı olmalıdır.
Sonlu ve uygulanabilir olmalıdır
Bu çizelgeleri geliştirdikten sonraki adım, yapılacak işlemleri bilgisayarın anladığı dilde yazabilmektir. 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.
Her algoritma üç kontrol yapısıyla
oluşturulabilir.
Bunlar:
a- Sıralı
b- Mantıksal(Seçmeli)
c- Yinelemeli(Döngüsel)
a) Sıralı Yapıdaki Algoritmalar
Sıralı adımların veya satırların yazıldıkları sırada
yürütülmeleri.
Örnek : İki sayının toplamı
1- Başla
2- Birinci sayıyı gir (A olsun)
3- İkinci sayıyı gir (B olsun)
4- Toplam=A+B
5- Sonucu(Toplam) göster
6- Bitir
Bir algoritmada;
• Her adım mutlaka belirleyici olmalıdır. Hiçbir şey şansa bağlı olmamalıdır.
• Belirli bir sayıda adım sonunda algoritma sonlanmalıdır.
• Algoritmalar karşılaşılabilecek tüm ihtimalleri ele alabilecek şekilde genel olmalıdır
b) Seçmeli Yapıdaki Algoritmalar
*Durumun sonucuna bağlı olarak iki farklı
seçenek tanımlar
*Durum bir ifadedir (expression)
değerlendirildiği zaman, Doğru (True) veya
yanlış (False) sonuç verir
Algoritma içinde karşılaştırma yapma veya karar vermeyi gerektiren durumlar için kullanılır.
ÖR: Suyun sıcaklığına göre maddenin katı, sıvı veya gaz olma durumunu gösteren algoritmayı hazırlayınız.
Adım 1- Başla
Adım 2- Oku sicaklik
Adım 3- Eğer sicaklik<=0 ise “katı” yaz
Adım 4- Eğer sicaklik>0 ve sicaklik<100 ise “sıvı” yaz
Adım 5- Eğer sicaklik >=100 ise “gaz” yaz
Adım 6- Bitir
c) Yinelemeli Yapıdaki Algoritmalar
Algoritma içinde tekrar eden işlemler(döngü) için kullanılır
ÖR: Klavyeden girilen yaş değeri 18’den büyük ve eşitse “Reşittir”, aksi hâlde “Reşit değildir” yazan algoritmayı hazırlayınız. (siz yapınız)
****Sayaç: Bir işlemin belli bir sayıda artması veya azalması şeklindeki sayma işlemlerinde kullanılan değişkendir.
Örnek 6: Ekrana 5 defa “merhaba” yazdıran algoritmayı yazınız.
Adım 1- Başla
Adım 2- sayac=0
Adım 3- yaz “merhaba”
Adım 4- sayac=sayac+1
Adım 5- Eğer sayac<5 ise git Adım 3
Adım 6- Bitir
***Durum sağlandığı sürece bir yada daha fazla
satırın tekrarlanarak yürütülmesi
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