Professional Documents
Culture Documents
C#
C# 2.1. ALGORİTMA NEDİR?
Bir problemin(sorunun) çözümü için ihtiyaç duyulan tüm işlemlerin (adımların) mantıksal olarak sıralı
bir şekilde ifade edilmesi algoritma olarak tanımlanır.
Algoritma programlamanın temel mantığını oluşturmaktadır.
Herhangi bir işin yapılabilmesi için işlemlerin adım adım sıralanarak bir akış belirlenmesi o işin
algoritmasını oluşturur.
Algoritma oluşturulurken işlem adımları maddeler halinde sıralanabilir ya da sembollerle gösterilebilir.
Günlük hayat uygulamalarında algoritmalara rastlamak mümkündür.
Örnek: Çayın demlenmesi ve servis edilmesi,
2
C# 2.1. ALGORİTMA NEDİR?
3
C# 2.1. ALGORİTMA NEDİR?
veya
5
C# 2.1. ALGORİTMA NEDİR?
Algoritma oluşturma kuralları oldukça esnektir. Ancak algoritma oluşturmanın temel 5 adımı
vardır. Bunlar:
Başla Satırı
Veri Giriş İşlemleri
İşlemlerin Yapılması
Sonuçların Yazdırılması (çıkış işlemleri)
Bitir Satırı
Bir önceki örnek incelendiğinde her bir satırın algoritmanın temel 5 adımına karşılık geldiği
görülür:
6
C# 2.1. ALGORİTMA NEDİR?
Örnek: Dışarıdan alınan bir sayının önce karesini sonra da 5 fazlasını bulan algoritmanın
oluşturulması:
› Algoritmanın temel 5 adımından biri olan işlemler kısmı 2 adımda bitirilmiştir. (3. ve 4. Adım)
› Soru incelendiğinde “Dışarıdan alınan bir sayı” ifadesi dikkati çekmektedir Bir program
yazarken veri girişlerinin yapılması muhtemeldir.
› Veri girişleri farklı platformlardan yapılabilir. Örneğin bilgisayarınızda ki bir dosyadan, ağ
üzerinden ya da klavyeden.
7
C# 2.2. ALGORİTMALARDA KULLANILAN TANIMLAR
2.2.1.Değişken
Bir programın her çalıştırılmasında farklı değerler alabilen bellek alanlarının programda temsil edilmesi
değişkenler ile mümkündür.
Değişkenler doğrudan dışarıdan alınan bir sayısal, alfa sayısal (metinsel) ya da farklı veri tiplerinde
olabilir.
Bilgisayarların bellek bölgelerindeki verilere ise “değer” denir.
8
C# 2.2. ALGORİTMALARDA KULLANILAN TANIMLAR
2.2.2. Aktarma
Aktarma işlemi değişkenlere değer gönderilmesidir. Bu işlem “=” operatörü ile gerçekleştirilir.
Örnek Kullanım:
“=” operatörünün sağ tarafındaki değer sol taraftaki değişkene aktarılır. Değişken bu değeri
bellek bölgesinde tutar.
Örnek Kullanım:
“=” operatörünün sağ tarafında işlem var ise önce işlem gerçekleştirilir. Bulunan sonuç aktarma
operatörünün sol tarafındaki değişkene aktarılır. İşlem sonunda X değişkenin de 8 değeri
bulunur.
Genel bir ifade ile “=” (aktarma) operatörü sağ tarafındaki ifadeyi sol tarafındaki değişkene
aktarır. Burada ifade ile kastedilen doğrudan sayısal ya da alfa sayısal bir değer olabileceği gibi,
matematiksel bir işlem sonucu da olabilir.
9
C# 2.2. ALGORİTMALARDA KULLANILAN TANIMLAR
2.2.3. Sayaç
Aktarma operatörünün özelliğinden faydalanarak sayaç yapılabilir. Programda bazı işlemler belirli sayıda
olabilir ya da bazı durumlarda sayım yapılması gerekebilir. Bu gibi durumlarda sayaç kullanılır.
Örneğin klavyeden kaç tane sayı girildiğinin tespiti için sayaç kullanılabilir. Sayaç ifadesi aşağıdaki gibi
yazılabilir.
Aktarma operatörünün sağ tarafındaki işlem öncelikli olarak yapılır. Bu durum da “say” değişkenin önceki
değerine “1” eklenerek “say” değişkeninin yeni değeri elde edilir.
Başlangıçta “ say’’ değişkeninin değerini sıfır kabul edelim ve işlemi 5 kez çalıştıralım.
Çalıştırma say Eski Değeri İşlem(say=say+1) say Yeni Değeri
1. 0 0+1 1
2. 1 1+1 2
3. 2 2+1 3
4. 3 3+1 4
10 5. 4 4+1 5
C# 2.3. ALGORİTMA YAZIM KURALLARI
Algoritma yazarken sıkı kuralların olmadığından bahsedildi fakat algoritmalarda matematiksel ifadeler kullanmak
anlaşılabilirliği arttırmaktadır.
Sayıların dışarından alınarak değişkene aktarılması için “Sayı Oku” ifadesi, sonuçları yazdırmak için “Yaz” ifadesi
kullanılabilir.
Daha önce verilen örnek bu yöntemle tekrar yazıldığında aşağıdaki gibi bir algoritma oluşur:
Algoritmanın Çalıştırılması
Algoritmanın 3 kez çalıştırıldığını düşünelim. Her defasında A değişkeni için farklı değerler
girilsin Değişkene verilen her bir değer için hesaplanan sonuç ekrana yazılmaktadır. Örnek olarak
sırasıyla 3, -2 ve 0 değerleri girildiğinde bulunan S değerleri aşağıdaki tabloda gösterilmiştir.
(Tamamen rastgele seçilmiş değerlerdir.)
3 3^2+5 14
2 (-2)^2+5 9
0 0^2+5 5
12
C# 2.4. ALGORİTMALARDA KULLANILAN OPERATÖRLER
Mod Mod Alma Operatörün solundaki sayıyı sağındaki sayıya böler ve kalan kaç ise onu Kalan = 5 mod 3
verir.
Üs alma işlemini gerçekleştirir. Operatörün solundaki sayının sağındaki
^ Üs Alma sayı kadar kuvvetini alır. Sonuç =5^4
13
C# 2.4. ALGORİTMALARDA KULLANILAN OPERATÖRLER
Matematiksel işlemlerde işlem önceliklerine dikkat edilmelidir. Öncelikler aşağıda belirtilmiştir:
1. Parantez İçleri
2. Üs Alma
3. Çarpma, Bölme İşlemleri
4. Mod Alma İşlemi
5. Toplama, Çıkarma İşlemleri
Matematiksel yazım ile programlama dillerindeki yazım farklılık gösterebilmektedir. Matematiksel ifadeler ve
programlama dilindeki karşılıkları tabloda gösterilmektedir:
14
C# 2.4. ALGORİTMALARDA KULLANILAN OPERATÖRLER
Çalışma Sorusu:
Aşağıdaki matematiksel ifadelerin programlama dili karşılıklarını yazınız.
15
C# 2.4.2. Karşılaştırma Operatörleri
Program yazarken birden fazla değeri karşılaştırmak gerekebilir.
Karşılaştırma sonucuna göre program içerisinde farklı dallanmalar yapılabilir. Örneğin 2 sayıdan
hangisinin büyük olduğunu tespit edebilmek için sayıların karşılaştırılmasının yapılması gerekebilir.
Karşılaştırma işlemi için kullanılan operatörler karşılaştırma operatörleri olarak adlandırılır.
Karşılaştırma operatörlerine ilişkin bilgiler aşağıdaki tabloda sunulmuştur.
= Eşitlik İki ifade eşit olduğunda koşul sağlanır. Eğer a=3 ise
Operatörün solundaki ifade sağındaki ifadeden küçük ise koşul
< Küçük doğrudur. Eğer a<5 ise
Operatörün solundaki ifade sağındaki ifadeden büyük ise koşul
> Büyük doğrudur. Eğer a>5 ise|
Operatörün solundaki ifade sağındaki ifadeden küçük veya eşit ise
<= Küçük Eşit koşul doğrudur. Eğer a<=12 ise
Operatörün solundaki ifade sağındaki ifadeden büyük veya eşit ise
>= Büyük Eşit koşul doğrudur. Eğer a>=2 ise
<> Eşit Değil İki ifadenin birbirine eşit olmadığında koşul sağlanır. Eğer a < > 3 ise
16
C# 2.4.2. Karşılaştırma Operatörleri
Algoritma:
1. Başla //Başla
2. Sayı Oku, not //Dışarıdan alınması gereken not bilgisi “not” değişkenine ak
tarıldı.
3. Eğer not<50 ise Yaz, "KALDINIZ " //Şarta bağlı olarak “KALDINIZ” ifadesi ekrana yazdırıldı .
4. Eğer not>=50 ise Yaz, "GEÇTİNİZ " //Şarta bağlı olarak “KALDINIZ” ifadesi ekrana yazdırıldı.
5. Bitir //Bitir
Dikkat edilecek olursa Yaz ifadesinden sonra ki KALDINIZ ve GEÇTİNİZ ifadeleri tırnak
içerisindedir. Çünkü bu ifadeler alfa sayısal (metin) ifadelerdir ve doğrudan ekrana
17 yazdırılacaklardır.
C# 2.4.2. Karşılaştırma Operatörleri
18
C# 2.4.3. Mantıksal İşlem Operatörleri
› Karşılaştırma işlemleri bazı durumlarda birkaç koşul ile gerçekleştirilebilir. Bu gibi durumlarda
karşılaştırma işlemleri arasında mantıksal ifadelerden faydalanılır.
VEYA Mantıksal ifadenin doğru olabilmesi için koşullardan birinin a<10 veya b>20
doğru olması yeterlidir.
Mantıksal ifadedeki koşulun sağlanmaması istendiğinde
DEĞİL değil (a=10)
kullanılır.
‘’VE’’Kullanımı:
Mantıksal ifade “ve” olduğu için koşulların ikisinin de doğru olması gerekir. Koşullar doğru ise
ekrana “Koşul Doğru” yazılır.
19
C# 2.4.3. Mantıksal İşlem Operatörleri
‘’VEYA’’Kullanımı:
Algoritma
1. Başla //Başla
2. Sayı Oku, not, dev //Not ve devamsızlık bilgileri sırasıyla “not” ve “dev” değişkenlerine alındı
3. Eğer (not<50) VEYA (dev>=10) ise Yaz, "KALDINIZ" //Şarta bağlı olarak “KALDINIZ’’ ekrana yazdırıldı
4. Eğer (not>=50) VE (dev<10) ise Yaz, "GEÇTİNİZ" //Şarta bağlı olarak “GEÇTİNİZ’’ ekrana yazdırıldı
5. Bitir //Bitir
Öğrencinin dersten kalma durumu “not bilgisinin 50 den az olması” ya da “devamsızlık 10 ve üzeri
olması” koşuluna bağlıdır. Yani bu koşullardan sadece birinin doğru olması yeterlidir. Mantıksal
ifadelerden “veya” 3. Adım için uygundur.
Öğrencinin dersi başarması ise “notun 50 ve üzeri olması” ve “devamsızlığının 10 dan az olması”
koşullarına bağlıdır. Yani bu iki koşul birden gerçekleşmelidir. Dolayısıyla “Ve” ifadesi kullanılmalıdır.
21
C# 2.4.3. Mantıksal İşlem Operatörleri
Algoritmanın Çalıştırılması
24
C# 2.4.3. Mantıksal İşlem Operatörleri
25
C# 2.5. ALGORİTMA ÖRNEKLERİ
Algoritma:
1. Başla //Başla
2. Sayı Oku, I //Akım değerini klavyeden oku. Değişken ismi I
3. Sayı Oku, R //Direnç değerini klavyeden oku. Değişken ismi R
4. V=I*R //Gerilim değerini hesaplayarak ilgili değişkene (V) aktar
5. Yaz, V //Ekrana yazdır
6. Bitir //Bitir
26
C# 2.5. ALGORİTMA ÖRNEKLERİ
Algoritmanın Çalıştırılması
Farklı akım ve direnç değerlerine göre algoritmanın çalıştırılması tabloda gösterilmiştir. Algoritma
3 kez çalıştırılmıştır.
Çalıştırma Okunan I Değeri Okunan R Değeri İşlem (l*R) V Değeri Ekran Çıktısı
1. Kez 5 3 5x3 15 15
2. Kez 2 4 2x4 8 8
3. Kez 1 5 7x5 35 35
27
C# 2.5. ALGORİTMA ÖRNEKLERİ
Algoritma
1. Başla //Başla
2. Sayı Oku, C //Celcius değerini oku
3. F=(9/5)*C+32 //Fahrenheit değerini hesapla
4. Yaz, F //Fahrenheit değerini ekrana yaz
5. Bitir //Bitir
Açıklama;
Üçgenin alanı matematiksel olarak; Taban*Yükseklik/2’dir.
Algoritma
1. Başla
2. Sayı Oku, taban, h
3. A =taban*h/2
4. Yaz, A
28 5. Bitir
C# 2.5. ALGORİTMA ÖRNEKLERİ
Örnek: Adı soyadı klavyeden alınan kişiye “Merhaba” mesajı veren algoritmanın oluşturulması,
Açıklama;
Algoritma da kullanılan değişkenler metinsel olduğu için 3. Adımda “+” operatörü toplama
değil birleştirme işlemini gerçekleştirmektedir.
Birleştirme işlemi için programlama dillerinde farklı operatörler kullanılabilir. C#
Programlama dilinde “+” operatörü metinsel ifadeler de birleştirme operatörü olarak kullanılır.
Algoritma
1. Başla
2. Metin Oku, adSoyad
3. Yaz, "Merhaba " + adSoyad
4. Bitir
29
C# 2.5. ALGORİTMA ÖRNEKLERİ
Algoritma örneklerinde programlama mantığının anlaşılmasını kolaylaştırmak için dışarıdan okunan tüm
değerlerin doğru girildiği kabul edilmiştir.
Örneğin Ohm kanunun çözüldüğü örnekte akım ve direnç değerleri negatif olamaz. Bu gibi hatalı girişlerin
önlenmeleri gerekir.
Buraya kadar çözülen örnek algoritmalar doğrusal olarak akmaktadır. Bundan sonraki örnekler de ise karar
alma yapıları kullanılacaktır.
Burada öncelik farklı örnekler ile programlama mantığının oluşturulmasıdır. Hatalı veri girişi gibi
30 istenmeyen durumlara karşı gerekli önlemler programlama konusunda gelişim gösterdikçe kolaylıkla
C# 2.5. ALGORİTMA ÖRNEKLERİ
Örnek: Klavyeden girilen 2 sayıdan büyük olanı bulup ekrana yazdıran algoritma,
Açıklama;
İki sayıdan hangisinin büyük olduğunu bulabilmek için karşılaştırma operatörleri
kullanılmalıdır. (“>” , “<”) Karar yapıları “Eğer” ifadesinin kullanılmasını
gerektirir.
ÖNEMLİ: Karar yapılarında tüm olasılıkların düşünülmesi gerekir. Bu soruda oluşturulacak
algoritmada üç farklı olasılık dikkate alınmalıdır. Klavyeden girilecek 2 sayının birbirlerine göre
büyük olma durumları ve eşit olma durumu 3 farklı olasılığı ortaya çıkarmaktadır.
Algoritma
1. Başla
2. Sayı Oku, S1,S2
3. Eğer S1>S2 ise yaz "1. Sayı Büyüktür."
4. Eğer S1<S2 ise yaz "2. Sayı Büyüktür.”
5. Eğer S1=S2 ise yaz "Sayılar Eşittir."
6. Bitir
31
C# 2.5. ALGORİTMA ÖRNEKLERİ
› Örnek: Klavyeden girilen sayının tek mi çift mi olduğunu bulan algoritmanın oluşturulması
› Açıklama;
Bir sayının tek mi çift mi olduğuna matematiksel olarak ifade edilmesi gerekir.
Sayının tek ya da çift olma durumu 2 rakamına tam bölünüp bölünmediğine bağlıdır.
Bu noktada hatırlanması gereken matematiksel operatör “mod” operatörüdür.
Algoritma
1. Başla
2. Sayı Oku, sayı
3. Eğer sayı mod 2=0 ise "Sayı Çifttir”
4. Eğer sayı mod 2=1 ise "Sayı Tektir”
5. Bitir
32
C# 2.5. ALGORİTMA ÖRNEKLERİ
› İşlemin kaç kez tekrar edeceği sayaç yapısı kullanarak sağlanabilir. Sayaç değişkeni 100 den küçük
olduğu sürece klavyeden sayı almaya devam edilecek ve girilen sayı toplam değişkenine
eklenecektir, “toplam” değişkeninin başlangıç değeri “0” olarak belirlenmiştir.
33 › 100. Sayı girildiğinde sayaç değişkeni 100 olacak ve 5. Adımdaki koşul sağlanmadığından
C# 2.5. ALGORİTMA ÖRNEKLERİ
› Örnek: Vize, Final notlarına göre bütünleme notunun istenmesi ve öğrencinin başarı
durumunun değerlendirilmesi (vize notunun % 30, Final Notunun %70 i geçme notu ise 50);
› Açıklama;
Öğrencinin vize ve final notlarına göre ortalamayı hesaplayalım. Öğrenci başarısız ise
bütünleme notunu isteyelim. Bütünleme notu 50 nin altındaysa “Kaldınız” değilse “Geçtiniz”
ifadesini ekrana yazdıralım.
› Algoritma
1. Başla
2. Sayı Oku, vize, final
3. Ortalama = vize * 0,3 + final * 0,7
4. Eğer Ortalama>=50 ise Git 8. Adım
5. Sayı Oku, bütünleme
6. Eğer bütünleme>50 ise Git 8. Adım
7. Yaz, "Kaldınız" Git 9. Adım
8. Yaz "Geçtiniz"
35 9. Bitir
C# 2.5. ALGORİTMA ÖRNEKLERİ
› Örnek: Klavyeden girilen 20 sayıdan kaçının negatif, kaçının pozitif olduğunu bulan algoritma;
› Açıklama;
Klavyeden girilecek sayılar bir döngü yardımıyla alınabilir. Sayının negatif ya da pozitif olma
durumu “0” dan küçük ya da büyük olması durumuna bağlıdır. Negatif sayıları saymak için
negatifSay, pozitif sayılan saymak için pozitifSay değişkenleri kullanılmıştır.
› Algoritma
36
C# 2.5. ALGORİTMA ÖRNEKLERİ
37
C# 2.5. ALGORİTMA ÖRNEKLERİ
› Tabloda görüldüğü üzere 7 sayısı sadece 1 e ve kendisine tam bölünüyor. Dolayısıyla asal bir
sayıdır.
38
C# 2.5. ALGORİTMA ÖRNEKLERİ
› Tüm sayılar kendisine ve bire tam bölünür. Asal sayıların başka tam bölenleri yoktur.
Dolayısıyla algoritma kurulurken sayıyı 2 den başlayarak kendisinin bir eksiğine kadar tüm
sayılara bölmek gerekir. Eğer hiçbir sayıya tam bölünmez ise sayı asaldır. Aksi halde sayı asal
değildir.
› Algoritma
› 4. adımdaki i değişkeni sayının bir eksiğine kadar birer birer artıyor. 5. adımda sayı i
değişkenine bölünüyor. Eğer bu bölünme tam bölünme ise sayının asal olmadığı tespit ediliyor.
Önemli Not: Algoritmaların yazıldıktan sonra adım adım kontrol edilmesi olası mantık
39 hatalarının tespit edilip düzeltilmesi bakımından önemlidir.