Algoritma ve Programlama PDF
Document Details
Uploaded by Deleted User
Tags
Summary
Bu belge, koşul deyimleri, döngüler ve fonksiyonlar gibi temel programlama kavramlarına genel bir bakış sunmaktadır. Ayrıca, algoritma tasarımları ve uygulamalarına da değinilmektedir.
Full Transcript
KOŞUL VE YİNELEME DEYİMLERİ KOŞUL VE YİNELEME DEYİMLERİ Program akışını kontrol etmek için deyimlere ihtiyaç vardır. Bu kısımda birçok programlama dilinde yer bulan karşılaştırma ve yineleme deyimlerine yer vereceğiz. IF Deyimi Program içerisinde karşılaştırma yapılması gerektiği du...
KOŞUL VE YİNELEME DEYİMLERİ KOŞUL VE YİNELEME DEYİMLERİ Program akışını kontrol etmek için deyimlere ihtiyaç vardır. Bu kısımda birçok programlama dilinde yer bulan karşılaştırma ve yineleme deyimlerine yer vereceğiz. IF Deyimi Program içerisinde karşılaştırma yapılması gerektiği durumlarda koşul deyimler kullanılır. Yaygın olarak kullanılan koşul deyimlerinden birisi de if deyimidr. En sade şekliyle if deyimi, if sözcüğünün yanına yazılmış parantez içindeki bir ifade ve sonrasında gelen deyimden oluşur. İfadenin alabileceği iki değer mevcuttur: doğru veya yanlış. Eğer ki bu iki durum için de program da bir akış planlanıyorsa, bu durumda if deyimine else sözcüğü de eklenir. If deyiminin genel kullanım yapısı resimde verilmiştir. IF Deyimi Programda if deyimi icra edildiğinde işlemler şu sırada ilerler: if sözcüğünün yanındaki parantez içindeki ifade hesaplanır. Hesaplama sonrasında doğru veya yanlış olmak üzere bi mantıksal sonuç çıkar. Eğer sonuç doğruysa deyim1 icra edilir ve deyim2 icra edilmeden program akışına devam eder. Eğer sonuç yanlışsa deyim1 icra edilmeden doğrudan deyim2 icra edilir ve program akışına devam eder. If deyimine ait akış şeması resimde verilmektedir. IF-ELSE Deyimi If deyimini daha iyi anlayabilmek için örneklere bakalım ve adım adım çözümlerini inceleyelim. Örnek 1: Verilen bir sayının tek mi çift mi olduğunu ekrana yazdıran kod parçasını yazalım. Burada ilk önce sayının 2 ile bölünmesinden kalan değer kalan işleci yardımı ile hesaplanıyor ve 0’a eşit olup olmadığı control ediliyor. Eğer eşitse ilk deyim işleme alınıyor. Yan ekrana “Verilen sayı çifttir.” yazılıyor, eğer eşit değilse ekrana “Verlen sayı tektir.” yazılıyor. If deyiminde yer alan ifadeler else if yardımıyla artırılarak daha detaylı koşullandırma yapmak mümkündür. Örnek 2: Metrekare cinsinden alan bilgisi verilen bir odanın büyük, orta ve küçük olarak sınıflandırılmasını yapalım. Bu örnekte ilk olarak if değerinin yanındaki ifade değerlendirilir. Hesaplama sonucunda doğru değer elde edilirse ekrana “Küçük boyutlu oda” yazılır. IF-ELSE IF Deyimi Yanlış değer elde edilirse ilk else if değerinin yanındaki ifade hesaplanır. Doğru değer elde edilirse ekrana “Orta boyutlu oda” yazılır. Yanlış değer elde edilirse sonraki else if değerinin yanındaki ifade hesaplanır. Doğru değer elde edilirse “Büyük boyutlu oda” yazılır. SWITCH Deyimi Birçok if – else yapısının kullanılmasını gerektirecek kadar fazla seçenek mevcutsa ve tüm kararlar aynı seçim değerine göre belirleniyorsa, bu durumlarda switch deyimini kullanmak iyi bir seçenek olabilir. If deyimi ile üretleblecek karar sayısı doğru ve yanlış olmak üzere iki tanedir. Fakat switch deyimi ile istenilen sayıda karar üretmek mümkündür. SWITCH Deyimi Derleyici işlem sırası şu şekildedir: İlk önce switch sözcüğünün yanındaki parantez içindeki ifade hesaplanır. Bu hesaplama sonucunda sayısal bir değer üretilmesi beklenir. Bulunan sayısal değer hangi case sözcüğünün yanındaki seçenek ile aynı değerde ise o satıra gidilir ve buradaki deyim işlenir. Eğer iki seçeneklerden hiçbiri hesaplanan ifade değeri ile aynı değilse o zaman default satırına gidilir ve buradaki deyim işlenir. Satır sonlarında bulunan break sözcüğü, program akışının diğer case ifadelerine geçmemesini sağlar. Örnek 1: Telefon bankacılığında sıklıkla karşılaştığımız seçim rutinini küçük bir kod parçası ile gerçeklemeye çalışalım. Verilen örnekte tus değişkeni seçim yapılmasını sağlayan telefon düğmesini temsil etmektedir. SWITCH Deyimi Müşteri belirtilen tuşlardan hangisine basarsa program o işleme ait bilgiyi ekrana yazdıracak. Örneğin, müşteri 2 nolu tuşa bastığında program ekrana “Şifre değişimi” yazacak ve duracak. Eğer listede olmayan bir tuşa basarsa, bu kez ekrana “Tekrar dinle” yazılacak. FOR Deyimi Programımızın bir bölümünün sabit bir sayıda yinelenmesini istediğimizde for deyimini kullanırız. For deyimi for anahtar sözcüğü ile başlar. Anahtar sözcükten sonra içinde üç farklı deyimin yer aldığı parantezler gelir. FOR Deyimi Burada ifade1, döngü değişkenine ilk değer ataması yapılması amacıyla kullanılır. Sadece 1 kez çalıştırılır. İfade 2 mantıksal bir degree sahiptir. Doğru değere sahip olduğu sürece döngü devam eder. Her yinelemede işlem görür. İfade 3 döngü değişkeninin değerinin artırılması veya azaltılması amacı ile kullanılır. Her yinelemede işlem görür. FOR Deyimi Örneğin reimde verilen kod parçasında: Döngü değişkeni i dir. Parantez içindeki ilk ifadede i değişkenine 0 değeri atanmıştır. Noktalı virgülden sonra ikinci ifade başlar ve bu ifadede i değişkeninin değeri 10’dan küçükse deyim işlenir ve ekrana “Merhaba” Ardından son ifade olan i değişkenini 1 artırma işlenir ve ikinci ifadeye gidilir. Bu döngü i değerinin 10’dan küçük olmadığı duruma kadar devam eder. WHILE Deyimi Bir kod parçasının ne kadar tekrarlanacağını döngüye girene kadar bilmiyorsak while deyimini kullanırız. While sözcüğünün yanındaki parantez içinde yer alan ifade doğru olduğu sürece deyim işlenmeye devam eder. WHILE Deyimi Örnek1: Resimde verilen kod parçasında kareleri 30’dan küçük sayılar ekrana yazdırılıyor. WHILE Deyimi Döngüye girmeden önce sayi ve karesi değişkenlerine değer ataması yapılıyor. While deyiminde yer alan ifade karesi değişkeninin 30’dan küçük olduğu durumlarda doğru değer döndürür ve program akışı döngüde kalır. Döngü içindeki ilk deyim o anki sayi değişkeninin değerini ekrana yazdırır. Sonraki deyim sayi değişkeninin değerini 1 artırır. Son olarak karesi değişkeninin değer ataması yapılır ve while ifadesine tekrar gidilir. Bu işlem while ifadesinin değeri yanlış olana kadar devam eder. Bu örnekte sayi değişkeninin değeri 6 olduğunda döngü sonlanacaktır. Program sonlandığında elde edilecek çıktı resimdeki şekilde olacaktır DO – WHILE Deyimi For ve while döngülerinde ifadenin doğruluğu döngünün başında hesaplanıyordu. Bu durumda ifade yanlışsa döngüye girilmeden program akışına devam ediyordu. Fakat bazı durumlarda ifadenin değerine bakılmaksızın döngünün en az bir kez çalıştırılması istenir. İşte böyle bir durumda do – while deyimini kullanmak doğru olacaktır. Öyle ki döngü do anahtar sözcüğü ile başlar ve while anahtar sözcüğüne kadar devam eder. While sözcüğünün yanında bulunan ifade değeri doğru olduğu sürece döngü devam eder. Resimde do – while deyiminin genel kullanım yapısı verilmiştir. DO – WHILE Deyimi Örnek 1: Başlangıçta değeri 5 olarak verilen A değişkeninin değerini 10’a kadar birer birer artıran ve A’nın aldığı değerleri ekrana yazdıran program parçasını inceleyelim. Burada ilk olarak A değişkenine 5 değerinin ataması yapılır. Sonrasında A’nın mevcut değeri ekrana bastırılır ve sonrasında 1 artırılır. Son olarak while sözcüğüne gelindiğinde, parantez içinde verilen ifade hesaplanır ve doğru değer verirse başa dönülüp işlemler tekrarlanır. Eğer yanlış değer elde edilirse döngüden çıkılır. Örnek 1 için verilen kod parçasının çalıştırılması sonucu resimde verilen ekran görüntüsü elde edilir. Diziler, Göstericiler ve Dizgiler DİZİLER C Programlamada diziler, aynı tipte olan birbirleri ile ilişkili verilerin veya değişkenlerin belli bir indis sırasına göre tek bir değişken adı altında bir arada tutulmasını sağlayan yapılardır. Kodlama ihtiyacına göre, program kodunun çalıştırılmasından itibaren işlem yapılacak veri listesinin belli bir sıraya göre düzenli bir şekilde hafızada tutulmasını ve erişilmesini sağlar-lar. Bu bölümde dizilerle ilgili genel tanımlamalar ve işlemler öncelikle tek boyutlu diziler üzerinde açıklanacak olup, ardından çok boyutlu dizi yapılarından da bahsedilecektir. Dizi Tanımlama Veri değişken türlerini tanımlarken, tam sayı tipinde dört farklı değişkene ihtiyaç olduğunda, “int k1, k2, k3, k4,k5 ;” şeklinde tanımlama yapılabiliyordu. Ancak bu değişkenlerin hepsi aynı türde ve özellikle de bu değişkenler sırasıyla belli bir algoritmaya göre hesaplamaya tabi tutulacak ise, int k; şeklinde bir dizi tanımlanması daha kullanışlı bir çözüm sunmaktadır. Çünkü program kodlarımızda, ne kadar çok değişken olursa, kod blokları içerisinde kontrol edilmesi de bir o kadar zor olacaktır. Bu örnekte yalnızca 5 farklı değişken için bir dizi oluşturulmuş olmasına rağmen, değişken sayısının çok fazla olup. (örneğin 1000), elle tek tek tanımlanması imkânsız olan durumlarda dizilerin kullanımının önemi ortaya çıkmaktadır. Böylece yinelemeler ve daha sonraki bölümde anlatılacak olan fonksiyonlarla birlikte daha kolay ve düzenli bir veri kullanımına olanak sağladığı görülecektir. Yukarıda tanımlanan k dizisinin elemanlarının hafızadaki dizilim sırası, şeklinde kabul edilirse, dizinin elemanları k=78, k=11, k=20, k65, k= -30 şeklinde olacaktır. Dizi Tanımlama Dizi tanımlanırken genel ifade, tip dizi_adı[ BOYUT] ; şeklindedir. tip ifadesi int, char, float, double vb. değişken türlerinden herhangi birisi olabilir. Köşeli parantez [ ] ifadesi içerisinde belirtilen, BOYUT ise dizi içerisinde saklanacak, işlem yapılacak olan toplam veri sayısı olup, tanımlanan dizinin genel kapasitesini-boyutunu ifade eder. Buna göre, int k ifadesi, tam sayı türünde 5 elemanlı k adında bir dizi tanımlar. Dizi Tanımlama Dizilerde dikkat edilmesi gereken önemli bir nokta, BOYUT kadar elemana sahip bir dizinin ilk elemanının indisi 0 (sıfır) ile başlamasından dolayı, dizinin son elemanının indis değeri sayısal olarak BOYUT-1 olmaktadır. int k; örneğimizde, ilk eleman k olmakla birlikte, elemanlar k, k, k şeklinde devam ederek sonuncu, yani dördüncü eleman ise k nolu dizi elemanı olacaktır. Dizinin içinde yar alan elemanların her biri ayrı bir değişken olarak kabul edilmesinden dolayı, değişkenler için geçerli, daha önceki bölümlerde belirtilen değişken tanımlama kuralları dizinin elemanları için de geçerlidir. Dizilere Değer Atama Bir dizi int k; şeklinde yalnızca isim ve kapasite olarak tanımlandığında, hafızada yalnızca ona ait bir yer tahsis edilmiş olur. Ancak dizi elemanlarına bir değer ataması yapılmaz. Bu nedenle dizinin kapasitesine göre içindeki verilerin sıfırlanması veya atanacak değeri belirlemek amacıyla ilave olarak kodlamaya gereksinim duyulmaktadır. Daha sonraki satırlarda hataya sebep olmaması açısından, genellikle, dizi tanımlanmasının hemen ardından değer sıfırlama ya da yeni değer atama işlemini mutlaka yapmak gerekir. Dizi tanımlama, for döngüsü ile diziye ilk değer atama Program Çıktısı Örnek program kodlarındaki satırların bitiminden sonra işaretleri arasında yer alan metinler derleyici tarafından program satırı olarak dikkate alınmaz ve derlenmez. Bu işaretler arasına yazılan metinler ilgili satırı açıklamak amacıyla yazılmıştır. Örnekde, 5 elemana sahip k dizisinin ilk olarak int k; şeklinde tanımlanmasından hemen sonra, değer atama öncesinde, sayısal olarak hangi değerlere sahip olduğu aşağıdaki, for ( i = 0; i < 5; i++ ) { printf (“ k[%d] = %d\n “, i, k[i ] ); } satırları yardımıyla ekrana yazdırılmaktadır. Bu amaçla daha önce anlatılan for döngü-yinelemesi kullanılmıştır. Böylece for yinelemesinde kullanılan i indis değeri yardımıyla, k dizisinin 0. indisinden 4. indisine kadar tüm elemanlarına erişilebilmektedir. printf komutu yardımıyla da her elemanın ekrana yazdırma işlemi gerçekleştirilmektedir. for yinelemesinde i değeri her seferde i++ ile 1 arttırılmaktadır. Yineleme süresince toplamda 5 defa printf satırı aktif olmaktadır. k [%d] içinde kullanılan i sayaç değerine karşılık gelen %d değerleri mutlaka tam sayı olmalıdır. Kodun devamında ise; for ( i = 0; i < 5; i++ ) { k[ i ] = 0; } yinelemesi ile de k dizisinin elemanlarının her biri sıra ile sıfırlanmaktadır. Kodun bu bölümünde, yalnızca değer ataması yapılmakta olup ekrana yazdırma işlemi bulunmamaktadır. Son bölümde yer alan for yinelemesi; for ( i = 0; i < 5; i++ ) { printf(“k[%d] = %d\n”, i, k[i]); } bölümü ile, ilk bölümdeki for yinelemesinde yapılan işlemin aynısı gerçekleştirilerek, sıfırlama işlemi sonrasında k dizisinin içeriği tekrar ekrana yazdırılmaktadır. Örnekdeki kod satırları derleyici ile derlenerek çalıştırıldığında, program kodunun devamında verilen program çıktısında yer alan satırlar ekrana yazdırılacaktır. Kod içerisinde her for yinelemesi öncesinde kullanılan printf fonksiyonu ile hangi işlemin gerçekleştirilmekte olduğu ekrana yazdırılmaktadır. Bu program çıktısı incelendiğinde, dizilerin elemanlarına ilk değer atanmasının önemiyle ilgili dikkat çekici bir detay yer almaktadır. Çünkü içeriğine hâkim olunmayan dizi elemanlarını kullanarak işlem yapmak kodun yanlış ve beklenmeyen sonuçlar vermesine sebep olacaktır. Örneğin program çıktısından da anlaşılacağı üzere, tanımlanan ve ilk değer atanmadan önce, k dizisinin bazı elemanları (k ve k) tesadüfen 0 değerine sahip olarak gözükse de, diğer değerler, beklenmeyen, oldukça farklı sayısal değerlere sahiptir. Bu nedenle tanımlanan bir dizi, kodun devamında daha sonra başka bir hesaplamada kullanılacak ise, bu kullanım öncesi, dizinin elemanlarının ilk anda sıfırlanması büyük önem kazanmaktadır. Örnekde yer alan 3 farklı for yinelemelerinin her biri birbirinden bağımsız olmakla birlikte, her biri tek satırlık işlemlere sahip olmasından dolayı aslında { } süslü parantezlere gerek bulunmamasına rağmen karışıklık oluşturmaması açısından { } ler kullanılmıştır. for yinelemelerinin her birinde indis değeri i olarak kullanılmasında bir sakınca bulunmamaktadır. Çünkü her for yinelemesi kendi içerisinde 0’dan 4’e kadar saymakta, sonraki for yinelemesine geçildiğinde, i sayaç değeri tekrar 0 dan başladığından bir karışıklığa sebep olmamaktadır. Dizilerin indislerinin kullanımı ile ilgili olarak, k[i] dizi ifadesindeki dizinin kaçıncı elemanı olduğunu gösteren i indis değeri, kod içerisindeki kullanımında, yalnızca sayısal değer olmak zorunda değildir. Kod içerisinde değişik sembolik ifade yapıları şeklinde de kullanılabilir. Dizi tanımlama, sıfırlama, for döngüsü ile değer atama Program Çıktısı İlk örnekdeki program kodunda, dizi elemanlarını ekrana yazdırırken ve sıfırlarken yineleme ifadesinde indis değeri 0 (sıfır), dan başlatılarak kullanılmıştır. İkinci örnekde ise, I değeri 1(bir) den başlatılmış olmasına rağmen dizi elemanının içeriğine ulaşılırken i-1 şeklinde indis ayarlaması yapılarak doğru indis değerleri ile dizinin elemanlarına ulaşılmıştır. İkşnci örnekde kod detaylı olarak incelendiğinde, öncelikle k dizisi tanımlaması sonrası ilk örnekdeki koda benzer olarak dizi elemanları, for ( i = 1; i