algorİtma ve programlama (bölüm 1) · 2017-11-01 · problem ÇÖzme ve algorİtmalar (devam)...
TRANSCRIPT
ALGORİTMA VE
PROGRAMLAMA
(Bölüm 1)
1
Prof. Dr. Hakan Ündil - Elektronik Teknolojisi - 2017-2018 Güz
(Bölüm 1 – 2)
PROBLEM ÇÖZME ve ALGORİTMALAR
Bir problemi çözmek için yapılacak işlemler
en genel şekilde iki adımda incelenebilir:
1. Algoritma (Problemi Çözme Yolu)
2. Kodlama (Gerçekleştirme)
2
1. Algoritma
Problemin çözümünü
tanımlayan
adımların sırasıyla
elde edilmesidir.
3
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Her Algoritma Aşağıdaki Kriterleri Sağlamalıdır:
1. Girdi : Dışarıdan Sıfır veya farklı bir değer verilmeli.
2. Çıktı : En azından bir değer üretilmeli.
3. Açıklık : Her işlem (komut) açık olmalı ve farklı
anlamlar içermemeli.
4. Sonluluk : Her türlü ihtimal için algoritma sonlu adımda
bitmeli.
5. Etkinlik : Her işlem (komut), kişinin kalem ve kağıt ile
yürütebileceği kadar basit olmalıdır.
4
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Algoritma yapma Sırasında Dikkat Edilecek Hususlar:
Doğruluğu kesin olarak ispatlanmadıkça, hiçbir şeyi doğru
olarak kabul etmeyin; tahmin ve önyargılardan kaçının.
Karşılaştığınız her güçlüğü mümkün olduğu kadar çok
parçaya bölün.
Anlaşılması en kolay olan (basit) şeylerle başlayıp yavaş
yavaş daha zor ve karmaşık olanlara doğru ilerleyin.
Önce olaya bakışınız çok genel, sonra hazırlayacağınız
Detaylı Algoritma ise hiçbir şeyi dışarıda bırakmayacak
kadar kusursuz ve ayrıntılı olsun. ---------------------------------------------------------------------------------
5
2. Kodlama
Bir programlama diliyle
bu Algoritma’nın
programa (yazılıma)
dönüştürülmesidir.
6
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Kodlama (Programlama) Dili Seçerken;
Dil yapılacak işe uygun özelliklere sahip mi ?
Diğer dillerle uyumluluğu ve bu dillere dönüştürme
imkanları nedir?
Öğrenmesinin kolay/zor olup olmadığı, çokca örnekler
var mı?
Piyasada, bu dili kullanan, yeteri kadar iş gücü(kişi)
olup olmadığı…
gibi hususlara dikkat edilmelidir. ----------------------------------------------------------------------
7
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Ayrıntılı Çözme Aşamaları
Problem Çözme (Daha Ayrıntılı) Aşamaları:
1. Sistem İhtiyaçları:
Sistem ihtiyaçlarına göre problemin tam olarak ne
olduğunun anlaşılmasıdır.
Problemin çözümünden neler beklendiği bilinmelidir.
Çözümün girdi ve çıktılarının neler olacağı kesin
olarak belirlenmelidir.
8
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Ayrıntılı Çözme Aşamaları
2. Analiz:
Sistem ihtiyaçları belirlendikten sonra bunlar
temel parçalara ayrılarak bu parçalar ayrı ayrı
değerlendirilir.
Bu parçalar arasındaki ilişkiler tanımlanır.
Bu suretle sonuca gitmeye çalışılır.
9
3. Algoritma :
Kullanılacak çözüm adımlarını gösteren
Algoritma adı verilen bir liste yapılır…
Böyle bir algoritma tasarlanırken ilk önce ana
(genel) adımlar çıkarılır.
Daha sonra her adım için daha ayrıntılı bir
algoritmaya geçilir.
10
PROBLEM ÇÖZME ve ALGORİTMALAR(Devam)
Ayrıntılı Çözme Aşamaları
4. Kodlama (Programlama):
Geliştirilen algoritma bir programlama diline
çevrilir.
Bu dilin, programın yazımını aşırı
zorlaştırmayacak ve karmaşıklaştırmayacak
bir dil olması tercih edilmelidir.
Programı yazacak olanın bilgisi de dikkate alınır.
11
PROBLEM ÇÖZME ve ALGORİTMALAR(Devam)
Ayrıntılı Çözme Aşamaları
5. Sistem Testi:
Program değişik Girdiler ile çalıştırılır…
Programın ürettiği sonuçlar (Çıktılar) kontrol
edilerek test işlemi gerçekleştirilir.
Sonuçlar (Çıktılar) beklendiği gibi ise programın
doğru çalıştığı ispatlanmış olunur…
Değilse doğru çalışmayan kısımları tespit edilerek
geri adımlara dönülmek suretiyle düzeltilir.
12
PROBLEM ÇÖZME ve ALGORİTMALAR(Devam)
Ayrıntılı Çözme Aşamaları
6. Bakım:
Programın güncel şartlara göre yeniden
düzenlenmesini (Update) içeren bir
konudur.
Zamanla oluşan hataların giderilmesi …
Yeni iyileştirmeler yapılması…
Ya da programın teknolojisinin
yenilenmesi gibi işlemlerdir.
13
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Ayrıntılı Çözme Aşamaları
14
• Herhangi bir adımda sorun yaşanırsa (gerektiğinde) bir adım geri
dönülür…
PROBLEM ÇÖZME ve ALGORİTMALAR(Devam)
Çözme Aşamaları (Adımlar)
Problem Çözmede Algoritma ve Programlama
Yukarıda açıklanan
Ayrıntılı Problem Çözme Aşamalarından
ikisi dersimizin konusunu ile
doğrudan ilgilidir :
ALGORİTMA
KODLAMA (Programlama)
Bu başlıkları daha ayrıntılı olarak inceleyelim…
15
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Algoritma Türleri
ALGORİTMA :
İki farklı şekilde ifade edilebilirler:
1. Pseudo (Sözde) Kod
2. Akış Diyagramı (Akış Şeması)
16
1. Pseudo (Sözde) Kod:
Bir algoritmanın;
Hem programlama dili kuralları
hem de konuşma dili kullanılarak
ortaya koyulması/tanımlanmasıdır.
İyi bir biçimde yazılmış, Psedo Kod’dan,
programlama diline kolaylıkla geçilebilir.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Psedo (Sözde) Kod
17
Pseudo (Sözde) Kod…
Doğrudan konuşma dilinde…
Programlama mantığı altında…
Eğer, iken gibi şart kelimeleri ve …
Büyük, Eşit, Küçük ise vb. ifadeler ile
yazılır.
Not: Aynı Problem için çok farklı Psedo Kod Yazılabilir.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Psedo Kod (Devam)
18
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
Örnek 1: Verilen iki sayının toplamının bulunarak bu
toplamın yazdırılması algoritmasını psedo (sözde) kod
ile yazınız.
1. Başla
2. Birinci Sayıyı Oku
3. İkinci Sayıyı Oku
4. İki Sayıyı Topla
5. Toplamı yaz
6. Dur
19
Örnek 2: Verilen bir sıcaklık derecesine göre suyun
durumunu belirten bir algoritmayı psedo (sözde) kod ile
yazınız. Çalıştırılmasını gösteriniz.
Not 1: Programın, sıcaklığa göre Su, Buz, Buhar
şeklinde Suyun durumunu göstermesi istenmektedir.
Not 2: Önce programın ne yaptığına dâir açıklama
mesajı sonra da sıcaklık değerinin girilmesi için
uyarı mesajı yazılsın.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
20
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
1. Başla
2. Programın görevini belirten Açıklama Mesajı yaz
3. Kullanıcının sıcaklığı girmesi için bir Uyarı Mesajı yaz
4. Girilen Sıcaklığı Oku
5. Eğer Sıcaklık sıfırdan Küçük ise
Durum=“Buz”
6. Eğer Sıcaklık 100’e Eşit ya da Büyük ise
Durum= “Buhar”
7. Hiçbiri Değil ise
Durum =“Su”
8. Durum sonucunu (Ekrana) Yaz.
9. Son 21
Programın Çalışması: (140 derece örneği için)
Bu Program, sıcaklığa göre Su, Buz, Buhar
şeklinde suyun durumunu gösterir. (Ekrana Açıklama
Mesajı)
Lütfen derece cinsinden sıcaklığı giriniz: 140
(Ekrana Uyarı Mesajı)
(Klavyeden Girdi)
BUHAR (Ekrana yazılan Çıktı)
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
22
Örnek 3: Bir Pseudo (sözde) Kod yazarak bir
öğrencinin dönem sonu not ortalamasını
hesaplayıp öğrencinin dersten geçip
geçmeyeceğini tespit edin.
Not : Not ortalaması eşit ağırlıklı 4 nottan oluşsun ve
Geçme notu 50 olsun.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
23
1. Başla
2. “Öğrencinin dersten aldığı 4 notu Girin” uyarı
mesajını yaz.
3. Ortalamayı hesaplamak üzere girilen notları
topla ve 4’e böl ve sonucu Ortalama’ya aktar
4. Eğer Ortalama 50 ‘nin altında ise
“Başarısız” yaz.
5. Değilse (Aksi halde)
“Başarılı” yaz.
6. Son
24
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
Aynı Psedo Kodu Programlama Diline daha yakın tarzda farklı şekilde tekrar yazalım:
1. Başla
2. M1,M2,M3,M4 olarak Öğrencinin Notlarını Girin
3. ORTALAMA = (M1+M2+M3+M4)/4
4. Eğer (ORTALAMA < 50) ise
“Başarısız” yaz
5. Değilse (Aksi halde)
“Başarılı” yaz
6. Son
25
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam) Psedo Kod (Devam)
2. Akış Diyagramı (Akış Şeması):
Algoritmanın görsel/şekilsel olarak ortaya
koyulmasıdır.
Yapılması gerekenleri geometrik
şekillerden oluşan sembollerle gösterir.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı
26
Akış Diyagramı kullanılması ile
program Görsellik kazanacağından
Programın takip edilmesi
daha da kolaylaşır.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
27
Terminal Sembolü:
Akış Diyagramında Başlangıç ya da Bitiş belirtir.
Giriş İşlemi Sembolü:
Bir Giriş işlemini temsil eder.
İşlem Sembolü:
Algoritmada bir işlemi temsil eder
Karar Sembolü:
İki değerin mukayesesi dahil karar işlemini temsil eder
Ön Tanımlı İşlem Sembolü:
Daha önce tanımlı bir işlemi temsil eder
Çıkış İşlemi Sembolü:
Bir Çıkış işlemini temsil eder.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam) AKIŞ DİYAGRAMI SEMBOLLER (Sık Kullanılanlar) :
28
Örnek 4:
Girilen bir uzunluğa ait inch (inç) değerini santimetreye çeviren hem bir Psedo (Sözde) kod yazıp hem de bir Akış Diyagramı çiziniz.
Not: 1 inch = 2.54 cm dir.
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
29
Akış Diyagramı
30
Psedo Kod
1. Başla 2. inch olarak (Linc) uzunluğu
(klavyeden) girin. 3. inch değerini 2,54 ile çarparak santimetreye çevir ve sonucu Lcm ‘ye aktar 4. Uzunluğu santimetre (Lcm) olarak (ekrana) yaz. 5. Son
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
Psedo Kodu ( Örnek 3 de yazılmıştı)
1. Başla
2. M1,M2,M3,M4 değerlerini girin
3. ORTALAMA = (M1+M2+M3+M4)/4
4. Eğer (ORTALAMA <50) ise
“BAŞARISIZ” yaz
5. Değilse(aksi halde)
“BAŞARILI” yaz
6. Son
Öğrencinin Ortalamasını hesaplayıp durumunu belirleyen Örnek 3 için;
31
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
32
BAŞARILI
BAŞLA
M1,M2,M3,M4
ORTALAMA = (M1+M2+M3+M4)/4
ORTALAMA
<50
Mi?
DUR
E H
BAŞARISIZ
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
Örnek 5 :
şeklindeki ikinci derece bir
denklemin köklerini bulmak için bir psedo kod
yazarak akış diyagramı çizin.
Hatırlatma: [d: diskriminant ] olmak üzere
d = sqrt ( ) olmak üzere (sqrt: Karekök)
Denklemin Kökleri;
x1 = (–b + d)/2a ve
x2 = (–b – d)/2a şeklinde hesaplanır.
2 0ax bx c
2 4b ac
33
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
Psedo Kod
1. Başla
2. a, b, c katsayılarını girin
3. d =sqrt ( ) hesapla
4. x1 = (–b + d)/(2 x a) hesapla
5. x2 = (–b – d)/(2 x a) hesapla
6. x1 ve x2 yi yaz
7. Son
Not: sqrt, Karekök anlamındadır.
BAŞLA
a, b, c
d = sqrt (b.b – 4.a.c)
x1 , x2
DUR
x1 = (–b + d) / (2.a)
X2 = (–b – d) / (2.a)
4b b a c
Akış Diyagramı
34
PROBLEM ÇÖZME ve ALGORİTMALAR (Devam)
Akış Diyagramı (Devam)
ALGORİTMA VE
PROGRAMLAMA
(Bölüm 2)
35
BİLGİSAYARDA İŞLEMLER
Bilgisayar programları ile gerçekleştirilen
işlemlere genel olarak bir göz atalım:
Bu işlemler temelde 3 Grupta toplanabilir:
1. Matematiksel İşlemler
2. Karşılaştırma(Karar) İşlemleri
3. Mantıksal(Lojik) İşlemler
36
Bilgisayarda İşlemler (Devam)
Matematiksel İşlemler (Devam)
1. Matematiksel İşlemler:
Temel Aritmetik İşlemler;
(Toplama,çıkarma,çarpma,bölme)
Matematiksel Fonksiyonlar;
(Üstel,logaritmik,trigonometrik,hiperbolik vb.)
37
İşlem Matematikte Bilgisayarda
Toplama a+b a+b Çıkarma a-b a-b Çarpma a.b a*b Bölme a:b a/b Üs alma ab a^b
38
Bilgisayarda İşlemler (Devam)
Matematiksel İşlemler (Devam)
Öncelik Sırası İşlem Bilgisayar dili
1 Parantezler ((…………….))
2 Üs alma a^b
3 Çarpma ve bölme a*b ve a/b
4 Toplama ve çıkarma a+b ve a-b
NOT: Bilgisayar diline kodlanmış bir matematiksel ifadede, aynı önceliğe
sahip işlemler mevcut ise bilgisayarın bu işlemleri gerçekleştirme sırası
soldan sağa (baştan sona) doğrudur.
•Mesela ; Y=A*B/C işleminde;
Önce A*B işlemi yapılacak, ardından bulunan sonuç C ye bölünecektir.
39
Bilgisayarda İşlemler (Devam)
Matematiksel İşlemler (Devam)
40
Bilgisayarda İşlemler (Devam)
Matematiksel İşlemler (Devam)
Karşılaştırma Operatörleri
Operator Tanımı
> Daha büyük
< Daha küçük
= Eşit
Daha büyük veya eşit
Daha küçük veya eşit
Eşit değil
2. Karar (Karşılaştırma)İşlemleri
41
Bilgisayarda İşlemler (Devam)
(Karar) Karşılaştırma İşlemleri (Devam)
A>B bir karşılaştırma (mukayese) ifadesidir.
Test etmek istediğimiz bir “şartı” tanımlar
Bu şartın sağlanıp sağlanmama durumuna göre farklı işlemler yapılabilir.
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
42
Mesela A>B ise A nın değerini, aksi halde B değerini
yazan Psedo Kod (parçası) yazalım:
Eğer A>B doğru ise
A ‘nın değerini yaz.
Değil ise (Aksi halde)
B ‘nin değerini yaz.
Not: A=B durumu, A<B ile birlikte Değil ise durumuna
dahil olacaktır.
43
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Bu Karar yapısını Akış Diyagramı (parçası)
olarak gösterelim;
A>B
Mi?
B
Değeri
A
Değeri
E H
44
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Bir başka yapıya örnek olarak;
Eğer A>B doğru ise “İŞLEM” i yaparak
tekrar test eden…
A>B doğru değil ise (aksi halde) B ‘nin değerini yazan bir karar yapısına ait bir
Akış Diyagramı (parçasını) gösterelim.
Not: Programın tamamına ait (Başla’dan Son’a kadar)
A. Diyag. gösterilmezse «parçası» ifadesi kullanılır.
45
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
A>B
Mi?
H E
İŞLEM
B
Değeri
46
Akış Diyagramı (Parçası)
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Bir başka yapıya örnek olarak;
Eğer A>B doğru ise A değerini yazdıktan sonra Devam eden,
A>B doğru değil ise (aksi halde) A değerini yazmadan Devam eden Karar yapısına ait bir Akış Diyagramı (Parçasını) çizelim.
47
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
A>B
Mi?
E
H
48
Akış Diyagramı (Parçası)
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
A
Değeri
Daha farklı Karar Yapıları bulunmakla birlikte
bunları ilerdeki uygulamalarımıza
bırakarak birkaç örneği (tam program için);
Hem psedo…
hem de Akış Diyagramı olarak inceleyelim:
49
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Örnek 6 :
Girilen iki değeri mukayese ettikten sonra büyük
olanı yazan bir psedo (sözde) kod ve akış
diyagramı veriniz.
1. Başla
2. DEGER1 ve DEGER2 yi Girin
3. Eğer (DEGER1 > DEGER2) ise
MAX’a DEGER1 ’i aktar
4. Değilse (Aksi halde)
MAX’a DEGER2’yi aktar
5. MAX değerini yaz
6. Son 50
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
MAX = DEGER1
MAX
DUR
E H
BAŞLA
DEGER1,DEGER2
MAX = DEGER2
DEGER1>DEGER2
Mİ?
Akış Diyagramı
51
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Örnek 7 : 3 sayıyı (N1,N2,N3) okuyan
ve en büyük değeri yazan bir program
için bir psedo kod yazarak Akış
Diyagramı çiziniz.
52
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
1. Başla
2. N1, N2, N3 değerlerini girin
3. Eğer (N1>N2) ise
Eğer (N1>N3) ise
MAX’a N1’i aktar [N1>N2 ve N1>N3] demektir.
Değilse
MAX’a N3’ü aktar [N1>N2 ve N3>N1] demektir.
4. Değilse;
Eğer (N2>N3) ise
MAX’a N2’yi aktar [N2>N1 ve N2>N3] demektir. .
Değilse
MAX’a N3’ü aktar [ N2>N1 ve N3>N2] demektir.
5. MAX değerini yaz.
6. Son
53
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
MAX = N1
Akış Diyagramı:
MAX
DUR
E H
BAŞLA
N1,N2,N3
N1>N2 Mİ?
N1>N3 Mİ?
N2>N3 Mİ?
E E H H
MAX = N3
MAX = N2
MAX = N3
54
Bilgisayarda İşlemler (Devam)
Karar (Karşılaştırma)İşlemleri (Devam)
Bilgisayarda İşlemler (Devam)
Mantıksal İşlemler
Mantıksal işlem Matematiksel sembol Komut/Operatör
VE . AND
VEYA + OR
DEĞİL ‘ NOT
NOT1:
“VE,VEYA,DEĞİL “ operatörleri hem matematiksel işlemlerde hem de karar
ifadelerinde kullanılırlar.
NOT2:
Bütün şartların sağlatılması isteniyorsa şartlar arasına VE (AND)
Herhangi birinin sağlatılması isteniyorsa şartlar arasına VEYA (OR)
Şartı sağlamayanlar isteniyorsa DEĞİL (NOT) mantıksal operatörü
kullanılır.
3. Mantıksal İşlemler
55
Örnek 8: Bir sınıfta Bilgisayar dersinden 65 in üzerinde
not alıp, Türk Dili veya Yabancı Dil derslerinin herhangi
birinden 65 in üzerinde not alanların isimleri yazan bir Psedo
Kod ‘un yazılması istensin.
Açıklama:
Burada 2 şart vardır:
Bilgisayar dersinden 65 in üzerinde not almış olmak
temel şarttır.
Diğer iki dersin notlarının herhangi birinin 65 in
üzerinde olması
Bilgisayarda İşlemler (Devam)
Mantıksal İşlemler (Devam)
56
Bu durumda Psedo Kod yazılırsa:
1. Başla
2. Bilg. Not, TDili Not , YDil Not değerlerini giriniz.
3. Eğer Bilg. Not>65 VE (TDili Not>65 VEYA YDil Not>65) ise
İsmi Yaz
4. Son
Not : Burada 3. satırdaki komut için VE , VEYA
operatörleri kullanılmıştır.
Bilgisayarda İşlemler (Devam)
Mantıksal İşlemler (Devam)
57
Örnek 9 : Bir işyerinde çalışan işçiler
arasından yalnızca yaşı 23 üzerinde
olup Maaş olarak Asgari ücret
alanların isimleri yazılmak istenebilir.
Bu durumda bir Psedo Kod yazarsak :
Bilgisayarda İşlemler (Devam)
Mantıksal İşlemler (Devam)
58
1. Başla
2. Yaş, Maaş, Asgari ücret ‘ i girin
3. Eğer Yaş>23 VE Maaş=Asgari ücret ise
İsmi Yaz
4. Dur
Not: İsmi Yaz komutu 1. ve 2. şartın her ikisi de sağlanıyorsa
çalışır.
59
Bilgisayarda İşlemler (Devam)
Mantıksal İşlemler (Devam)
ALGORİTMALARDA SIKÇA KULLANILAN BAZI
TERİMLER
Tanımlayıcı
Değişken
Sabit
Aktarma
Sayaç
Döngü
Ardışık Toplama
Ardışık Çarpma
İçiçe Döngüler
60
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Tanımlayıcı:
Programdaki ;
Değişkenleri,
Sabitleri,
Kayıt alanlarını,
Özel bilgi tiplerini vb. adlandırmak için kullanılan
kelimelerdir.
Tanımlayıcılar, yerini tuttukları ifadelere çağrışım
yapacak şekilde seçilmelidir.
( İsim ve Telefon için: adtelef gibi)
61
Tanımlayıcılarda ;
İngiliz alfabesindeki A-Z veya a-z arası 26 harf
ile 0-9 arası rakamlar kullanılabilir.
Tanımlayıcı isimleri harfle veya alt çizgiyle
başlayabilir.
Sembollerden sadece alt çizgi (_) kullanılabilir.
Tanımlayıcı ismi, rakamla başlayamaz veya
sadece rakamlardan oluşamaz.
62
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Değişken:
Genelde programın her çalıştırılmasında, farklı değerler
alırlar.
Değişken isimlendirilmeleri de yukarıda sayılan tanımlayıcı
kurallarına uygun şekilde yapılmalıdır.
Meselâ ;
Bir ismin aktarıldığı değişken; ad
Bir isim ve soy ismin aktarıldığı değişken; adsoyad
Ev telefon no sunun aktarıldığı değişken; evtel
Ev adresinin aktarıldığı değişken; evadres
İş adresinin aktarıldığı değişken; isadres şeklinde
verilebilir.
63
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Sabit:
Programdaki değeri değişmeyen ifadelere “sabit” denir.
Yukarda açıklanan “İsimlendirme kuralları”na uygun
olarak oluşturulan sabitlere…
Sayısal veriler doğrudan… (Örn: A=7)
Alfasayısal veriler ise tek yada çift tırnak içinde
aktarılır. (Örn: A=“puan25” veya A=‘puan25’)
Not: Alfasayısal (alfanümerik), Verinin hem harf hem de
rakamlardan oluştuğunu belirtmek için kullanılır.
64
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Örnek 10 : Öğrenci adını içeren bir mesajı Psedo Kod
ile yazalım;
1. Başla
2. Bir isim giriniz (A)
3. “Derse Hoş geldin” mesajı (B) yaz
4. B ve A yı Yaz
5. Dur
Not: Burada (A) nın isim bilgisi taşıdığı yani öğrenciye göre
değişeceği için “Değişken” olduğuna…
(B) nin de değişmeyen bir ifade yani “Sabit” olduğuna
dikkat edelim.
65
A değişkeni B sabiti Ekranda yazılan
Onur Derse Hoş geldin Derse Hoş geldin Onur
Emre Derse Hoş geldin
Derse Hoş geldin Emre
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Yukarıdaki algoritma (psedo kod), dışarıdan girilen bir
A değişkeni ile B sabitini birleştirip aşağıdaki iki
örnekteki gibi ekrana yazar.
66
Aktarma:
Herhangi bir bilgi alanına, veri yazma; herhangi bir
ifadenin sonucunu başka bir değişkende gösterme vb
görevlerde “aktarma” operatörü kullanılır.
değişken=ifade ( Örn: puan=a*65 )
= sembolü, aktarma operatörüdür ve sağdaki
ifadenin/işlemin sonucunu soldaki değişkene aktarır.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
67
Değişken yazan soldaki kısım herhangi bir
değişken ismidir.
(Yukarıdaki örnekte puan kelimesidir.)
İfade yazan sağdaki kısımda ise matematiksel,
mantıksal veya alfasayısal ifade olabilir.
(Yukarıdaki örnekte bir çarpma ifadesi)
Bu durumda değişkenin eğer varsa bir önceki
değeri silinir.
68
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Sayaç :
Programlarda bazı işlemlerin belirli sayıda
yaptırılması veya işlenen/üretilen değerlerin
sayılması gerekebilir.
Örnek: say=say+1 ( say adlı değişken için)
Yukardaki işlemde sağdaki ifadede değişkenin eski
değerine 1 eklenmekte; bulunan sonuç yine kendisine
yeni değer olarak aktarılmaktadır.
Not: Bu ifadeden önce say=7 ise sonra say=8 olur.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
69
Sayacın genel formülü;
Sayaç değişkeni = Sayaç değişkeni + adım
Örnek: X=X+3
(X değişkenini adım kadar (3) arttırır)
Örnek: S=S-5
(S değişkenini adım kadar (5) azaltır)
70
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Örnek 11: Aşağıda 1 - 5 arası sayılar yazdırılmaktadır.
(Sayac için S değişkeni kullanılmıştır)
1. Başla
2. S=0 (S değişkenine 0 ilk değerini ver.)
3. Eğer S>4 ise
git 7. (S, 4 den büyükse 7. satıra git)
4. Değilse
S=S+1 (S, 4 den büyük değilse S yi 1 arttır)
5. S ‘yi Yaz (S değerini yaz)
6. Git 3. (3. satıra git)
7. Dur
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
71
Önceki S Değeri Yeni S Değeri Ekrana Yazılan
0 0+1=1 1
1 1+1=2 2
2 2+1=3 3
3 3+1=4 4
4 4+1=5 5
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
72
Döngü:
Bir çok programda bazı işlemler,belirli ardışık
değerlerle gerçekleştirilmekte veya
belirli sayıda yaptırılmaktadır.
Programlardaki belirli işlem bloklarını,
verilen sayıda gerçekleştiren
işlem akış çevrimlerine “Döngü” denir.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
73
Örnek 12: 1 ile 10 arası tek sayıların
toplamını hesaplayan ve yazan bir Psedo
Kod yazınız.
Not: T, toplamı;
J, tek sayıları (1,3,5,7,9) temsil
eden değişkenlerdir.
74
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
1. Başla
2. T=0 ( Önce T toplam değişkenini sıfırla)
3. J=1 ( İlk tek sayıyı J değişkenine aktar)
4. Eğer J>10 ise
git 8. (J>10 olduysa 8. adıma git)
5. Değilse
T=T+J (Aksi halde T değişkenini J kadar arttır)
6. J=J+2 ( J yi adım yani 2 kadar arttır)
7. Git 4. ( 4. adıma git)
8. T yi yaz ( Toplamı yani T yi yazdır)
9. Dur
Not: 7. ile 4. satırlar arasında Döngü vardır.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
75
Önceki J Değeri Önceki T Değeri Yeni T Değeri Yeni J Değeri
1 0 0+1=1 3
3 1 1+3=4 5
5 4 4+5=9 7
7 9 9+7=16 9
9 16 16+9=25 11
11 - - -
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
76
Ardışık Toplama:
Programlarda, aynı değerin üzerine yeni değerler
eklemek için kullanılır.
Örnek11: Klavyeden girilen 5 sayının ortalamasını bulan
programın algoritmasını Psedo Kod ile yazalım.
Not: T: (Ardışık) Toplamı;
S: Girilen sayının sırasını göstersin.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
77
1. Başla
2. T=0 (Toplamı yani T yi sıfırla)
3. S=0 (Girilen sayının sırasını sayan S yi sıfırla)
4. Eğer S>4 ise
git 8 (S>4 yani S=5 olduysa 8. adıma git)
5. Değilse S=S+1 (Aksi halde S yi 1 arttır)
Sayıyı (A) girin (Klavyeden A sayısının girilmesini iste)
6. T=T+A (Girilen sayıyı T ile topla)
7. Git 4. (4. adıma git)
8. Ortalama=T/5 (Ortalama’yı hesapla)
9. Ortalama’yı yaz (Ortalama’yı yaz)
10. Dur
78
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Ardışık Çarpma :
Ardışık çarpma işleminde; aynı değer (çarpım), yeni
değerlerle çarpılarak eskisinin üzerine aktarılmaktadır.
Örnek 14: Klavyeden girilen N sayısının faktöriyelini
hesaplayan programın algoritmasını Psedo Kod ile
yazınız.
Not: 5! (5 faktöriyel); 1.2.3.4.5 sayılarının çarpımıdır.
Faktöriyel değeri Faktor adlı değişkende (ardışık)
çarpma ile hesaplanır.
79
1. Başla
2. N sayısını girin ( Hangi sayının faktöriyelini hesaplasın)
3. Faktor=1 (İstenen Faktöriyel değeri 1 den başlasın)
4. S=0
5. Eğer S>N-1 ise
git 9. (S, N-1 den büyükse işlem bitecek)
6. S=S+1 (Çarpılacak sayıları elde etmek için arttır)
7. Faktor=Faktor*S (Önceki Faktor değerini yeni S ile çarp)
8. Git 5. (5. adıma git)
9. Faktor’u yaz (Faktor değerini yaz)
10. Dur
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
80
Döngü Yapısı :
Bu yapı kullanılırken;
Döngü sayacı…
Şart bilgisi ve …
Sayacın artım bilgisi gibi değerler verilmelidir.
Not: Döngü sayacı kullanılmıyorsa sadece döngüye
devam edebilmek için gerekli olan şart bilgisi verilmelidir.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
81
Genel olarak pek çok programlama dilinin döngü
deyimleri :
1) While
2) Do-while
3) For gibi yapılar üzerine kurulmuştur.
Not: Farklı dillerde bu yapılara farklı alternatifler olsa da
döngülerin çalışma mantığı genel olarak benzerdir.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
82
1. Durum (While):
Şart daha çevrim içerisine girmeden sınanır.
Şart sağlanmıyorsa İşlem hiç yapılmaz…
Ve döngü içerisindeki İşlem’de yapılması
gerekenler atlanır.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Döngü Yapısı (Devam)
83
•Döngüye Girildikten
sonra Şart’ın sağlanıp
sağlanmadığına bakılır.
•Sağlanmıyorsa
Döngüden çıkılır.
•Şart sağlandığı sürece
(defa) İşlem
yapıldıktan sonra
döngüden çıkılır.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Döngü Yapısı (Devam)
84
Örnek 15: Bu tür bir döngü için daha önce algoritması
yazılan Örnek 12 ‘e ait bir akış diyagramı çizelim.
Önce Örnek 12’ i hatırlayalım:
Klavyeden girilen N sayısının faktöriyelini
hesaplayan programın algoritmasını Psedo Kod ile
yazınız.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
85
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Not:
• Faktor=1 ile Faktöriyele
ilk değeri veriliyor.
•Böylece 1 sayısının
Faktöriyeli baştan yazılmış
oluyor.
• Sayac=2 ile Sayac’a
başlangıç olarak 2 değeri
veriliyor.
•Sayac değeri 2 den
başlayarak girilen
Örn: N=10 değerine eşit
olana kadar (2,3,4….9,10)
Faktor=Faktor*Sayac
işlemi tekrar yapılıyor.
• Sayac++ ile her seferinde
Sayac 1 arttırılıyor.
86
2. Durum (Do-While):
Bu durumda çevrim en az bir defa
gerçekleşir. Çünkü şart sınaması döngü
sonunda yapılmaktadır.
Eğer şart sağlanmıyorsa bir sonraki çevrime
geçilmeden döngüden çıkılır.
Çevrimin Devam edebilmesi için her döngü
sonunda yapılan şart testinin olumlu
sonuçlanması gerekir.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Döngü Yapısı (Devam)
87
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Döngü Yapısı (Devam)
88
3. Durum (For):
Diğer deyimlerden farklı olarak, döngü sayacı doğrudan şart
parametreleri olarak başta verilir.
Döngüye girmeden önce sayaç değişkenine başlangıç ve
artım değeri atanmakta ve daha sonra şarta bakılmaktadır.
Şart sağlandığı sürece belirtilen «İşlem» yapıldıktan sonra
her seferinde sayaç değişkeni arttırılmaktadır.
Döngü sayısına ulaşınca (şart sağlanamayınca) döngü
sona erer.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
Döngü Yapısı (Devam)
89
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
90
İçiçe Döngüler:
Programlamada yaygın kullanılan bir döngüdür.
İçiçe döngü kurulurken en önemli unsur, içteki döngü
sonlanmadan bir dıştaki döngüye geçilmemesidir.
Diğer bir deyişle döngüler birbirlerini kesmemelidir.
En içteki döngü bir dıştaki döngünün her adımında N
kere tekrarlanır.
İç ve dış döngülerin çarpımı kadar “İşlem” yapılmış olur.
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
İçiçe Döngüler
91
Algoritmalarda Sıkça Kullanılan Terimler (Devam)
92
ALGORİTMA VE
PROGRAMLAMA
(Bölüm 3)
Vize Kısmı
93
C PROGRAMLAMA DİLİ C Nasıl Bir Programlama Dilidir?
C orta düzey bir programlama dili olarak son
derece esnek kullanımlı bir dildir.
C, bir Assembly dili derleyicisinin sağladığı
esneklik ve gücü sağlarken üst düzey bir
programlama dilinin sağladığı kolay
anlaşılabilirlik özelliğini de sunmaktadır
94
C Dilinin Temel Özellikleri :
C, oldukça fazla sayıda ifade ve denetim
komutları bulunduran bir programlama
dilidir.
Ancak, dikkatli yazılmalıdır.
Zira hatalı veya eksik bir işaret
programımızı doğru çalıştırmayacaktır.
95
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Program Yazma, Derleme ve Çalıştırma:
Önemli olan, önce basit bir programı yazıp
derleyebilmek, çalıştırabilmek ve elde edilen
sonuçları görebilmektir.
Yazma, Derleme ve Çalıştırma kullandığımız
ortama bağlı olmakla birlikte genellikle kolay bir
şekilde yapılabilir.
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
96
C dilinde yazılan programın uzantısı (.c) dir.
C dilindeki program (derleyici, bağlayıcı ve
Kütüphane fonksiyonları ile) önce (.obj),
sonra (.exe) uzantılı olur…
Böylece (.exe) uzantısı dolayısıyla PC ‘de
yürütülebilir hale gelir.
97
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
98
C ‘de bulunan pek çok fonksiyonun
kullanılabilmesi için bazı kütüphane başlık
dosyalarının programa eklenmesi gerekir.
Karışıklığı önlemek adına programlarımızda
gösterilmeyecek olan bu dosyalardan en
temel ve önemli olanı:
#include <stdio.h> şeklindedir…
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Bu başlık dosyasından başka ileri matematik işlemlerde kullanılan…
#include <math.h>
Yine rastgele sayı üretmek, sıralama yapmak vb. işlemlerde kullanılan…
#include <stdlib.h>
gibi farklı başlık dosyaları mevcuttur…
İhtiyaca göre bu ifadelerin main()
öncesinde programın başına eklenmesi gerekir.
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
• IDE (Tümleşik Geliştirme Ortamı):
Tümleşik Geliştirme Ortamları, Derleyicileri–
Bağlayıcıları tek bir ortam içinden
kullanabilmeyi sağlarken…
Ayrıca Hata ayıklama (debug), Gözlem
penceresi (watch) gibi bileşenlere sahiptirler.
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
101
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
IDE’lerde yazım işlemini kolaylaştıracak
vurgulamalar, uyarılar ve yardım menüleri
mevcuttur.
Derleyici ve Bağlayıcı parametreleri
menülerden ayarlanabilir.
Her yazılım dilinin kendi IDE ‘si mevcuttur…
102
İlk Program: C ‘de Programlamayı öğrenmeye başlarken
sıkça kullanılan bir ifade olan “Merhaba C ” yi ekrana
yazdıran bir mini örnek programla başlayalım:
main() {
printf(“Merhaba C\n”) ;
}
Not: Daha evvel de belirtildiği gibi yukarıdaki printf() fonksiyonunun
çalışabilmesi için main() den önce #include <stdio.h> kütüphane başlık dosyasının eklenmesi gerekir.
Dersimizdeki örneklerde bu dosya eklenmeyecektir; ancak bilgisayarda
derleme yapmadan önce programda kullanılan fonksiyonlara göre bu
ve benzer dosya/dosyaların ilâve edilmesi şarttır.
103
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Bu programın Ekran Çıktısı;
Merhaba C
şeklinde olur.
Not:
main İngilizcede ana, asıl anlamındadır.
printf() ekrana yazdırmak için kullanılan bir
fonksiyondur.
104
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Her komuttan (fonksiyondan/deyimden) sonra
; işareti konulması şarttır.
\n Merhaba C ifadesinden sonra satır atlatır.
{ ve } küme parantezleridir. main() fonksiyonu
fonksiyonları/deyimleri bunların içine yazılır.
105
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Bir C programı boyutu ne olursa olsun bir ya da
daha fazla fonksiyon denilen bloktan oluşur.
C Dilinde olmazsa olmaz fonksiyon (blok)
main() fonksiyonudur (bloğudur *).
Program her zaman bu main() adlı
fonksiyondan çalışmaya başlar.
Not: Bundan sonra blok yerine “fonksiyon” ifadesi
kullanılacaktır.
106
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Genelde fonksiyonun yanındaki parantez içinde
parametreler (argümanlar) yer alır. Örn:
printf(“Merhaba C\n”) ;
ifadesindeki Merhaba C\n gibi…
Not: main() fonksiyonunun herhangi bir parametresi
olmadığından parantezi boştur. Parametre yoksa
parantez içine void ifadesi de yazılabilir. 107
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
Fonksiyonlar arasında haberleşme ve
(varsa)değerlerin aktarımı parametreler
(argümanlar) maharetiyle gerçekleşir.
Fonksiyonlar adı yazılan yerde
çağrılır(çalışır).
(Varsa) elde edilen sonuçlar kendisini
çağıran fonksiyona gönderilir.
108
C PROGRAMLAMA DİLİ (Devam)
Başlarken…
printf() FONKSİYONU
printf(“Merhaba C \n”);
satırı (deyimi) adı printf olan bir fonksiyon
çağırır.
Not :printf() ekrana bir bilginin yazılmasını
sağlayan bir kütüphane fonksiyonudur ve
standart C arşivinin (kütüphanesinin) bir
parçasıdır.
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu
109
printf() fonksiyonu asla otomatik
olarak yeni bir satıra geçiş sağlamaz.
Aşağıdaki program önceki örnekteki ile aynı
çıktıyı verecektir :
main() {
printf(“Merhaba ”) ;
printf(“C ”) ;
printf(“\n”) ;
}
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu
110
Benzer şekilde…
\n satır atlattığı gibi…
\t tab için,
\b geriye doğru silme (kürsörü bir karakter öne
alma) işlemi için (Backspace),
\” çift tırnağın kendisini yazdırmak için kullanılır.
Bunlar görünmeyen kontrol karakterlerdir.
Ekrandaki çıktıyı kontrol etmektedirler.
C PROGRAMLAMA DİLİ (Devam)
Bazı Kontrol Karakterleri
111
Mesaj ile birlikte bir değişkenin değerini
ekrana yazdırmak için yine printf() fonksiyonu
kullanılabilir.
İlk örnek “Merhaba C” de olduğu gibi sadece
mesaj ve değişkenin biçimi çift tırnak içine
alınarak belirtilir.
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
112
printf() fonksiyonu ile hem mesaj
hem de değişken değeri birlikte yazılabilir.
Örnek: Ekranda sonuc adlı desimal bir değişken
yazdırılacaktır. Bunun için önce sonuc= ifadesi,
bu ifadenin hemen yanına bu değişkenin değeri
yazılacaktır. Değişken değerinden sonra dir.
eklenecektir.
Gerekli printf() deyimini (komutunu) yazınız.
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
113
Cevap:
printf(“sonuc= %d dir.”,sonuc);
Not: Yukarıdaki printf() fonksiyonu ile sonuc adlı
değişkenin değeri sonuc= ifadesinin yanına (%d nin
yerine) yazılmakta sonra da dir. eklenmektedir.
114
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
Burada %d , değerin desimal olarak
yazılacağını belirtir.
Ekranda sonuc değişkeninin değeri komuttaki
%d nin yerine yazılır.
Bu durumda Ekran Çıktısı, (sonuc değeri 25
olsun)
sonuc=25 dir. şeklinde olur.
115
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
Örnek: Daha önce hesaplanmış m değişkeni
Sayi= ve n değişkeni Karekoku=
ifadelerinden sonra ekrana yazdırılmak
istenmektedir. m değişkeni desimal
(tam sayı), n değişkeni ondalıklı
(virgüllü) sayı olacaktır. Tek bir printf()
ifadesini ve Ekran Çıktısını yazınız.
Not: Ondalıklı sayı için %f kontrol karakteri kullanılır.
116
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
Cevap:
printf(“Sayi= %d Karekoku=%f “,m,n);
şeklinde olabilir.
Ekran Çıktısı :
( m=5 ve n= 2.236076 değişken değerleri girildiği durumda)
Sayi= 5 Karekoku= 2.236076
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
117
Yukarıda görüldüğü gibi %d , %f vb. gibi yazdırma
kontrol karakterleri dışındaki çift tırnak içindeki
karakterler çıkışta aynen yazılır.
Parantezde kaç değişken varsa o kadar kontrol karakteri
olmalıdır. (Örnekte: m ve n için %d ve %f )
Not : Eğer kesirli olan (n) değişkeni için kontrol karakteri
olarak %f yazılmayıp %d şeklinde yazılsaydı
2.236076 sayısı yerine çıktıda sadece 2 (tam sayı
kısmı) olarak görülecekti.
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
118
printf() komutu içinde yaygın olarak kullanılan…
bazı yazdırma kontrol karakterleri şöyledir:
%c : tek karakter [ örn: M ]
%d : desimal (tam sayı) [ örn: -326]
%u : işaretsiz desimal [ örn: 476] (Sadece pozitif sayılar)
%f : ondalık kayan nokta [ örn: 314.2857]
%e : bilimsel (üslü) gösterim [ örn: 3.142857e+002]
%x : heksadesimal [ örn: 3F ]
%s : karakter katarı [ örn: ADRES ]
C PROGRAMLAMA DİLİ (Devam)
printf() fonksiyonu…
119
C PROGRAMLAMA DİLİ (Devam)
scanf() fonksiyonu
scanf() FONKSİYONU:
Klavyeden değer okumak için
scanf() adlı yine bir standart kütüphane
fonksiyonu kullanılabilir.
Bu fonksiyonda da benzer kontrol karakterleri
vardır ve okunacak değerin tipini belirler.
printf()‘e benzer şekilde %d tam sayı, %f kesirli
(virgüllü) sayı okunacağını ifade eder.
120
Mesela iki scanf() fonksiyonu ile önce a
değişkenine bir tam , sonra b değişkenine bir
kesirli sayı okunacaksa;
scanf (“%d”, &a);
scanf (“%f”, &b); yazılabilir
.
Not: Burada a veya b adlı değişkenlerin
hafızadaki değerleri (içeriği) anlamında
başlarına & karakteri gelmektedir.
C PROGRAMLAMA DİLİ (Devam)
scanf() fonksiyonu
121
Eğer X ve Y adlı iki desimal değişkeni aynı scanf()
fonksiyonunda okumak istersek, aşağıdaki gibi iki farklı
şekilde yazabiliriz.
İki komut arasındaki fark ilk %d den sonraki virgüldür.
(Kullanıcı tarafından klavyeden girilen sayılar 12 ve 567 olsun)
scanf(“%d,%d”, &X, &Y); /* Sayılar arasına virgül
konarak giriş yapılır. Yani
klavyede 12,567 yazılır */
scanf(“%d %d”, &X, &Y); /* Sayılar arasına boşluk
konarak giriş yapılır. Yani
klavyede 12 567 yazılır */
C PROGRAMLAMA DİLİ (Devam)
scanf() fonksiyonu
122
Şimdiye kadar öğrendiklerimizi uygulamak için…
Örnek : main() fonksiyonu içinde iki tam sayıyı
toplayıp ortalamasını alarak ekrana
yazdıran bir C programı yazınız.
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
123
main() {
int a,b,top ; /* a ve b toplanacak tam sayilar, top ise toplam degiskeni */
float ort ; /* ortalama degiskeni ort ve tipi kesirli (virgüllü) */
printf(“ iki sayı giriniz:”) ; /* ekrana iki sayı giriniz: mesaji yaziliyor*/
scanf(“%d,%d”,&a,&b); /* a ve b tam sayı olarak klavyeden okuyacak */
top= a+b ; /* a ve b toplanip top degiskenine aktariliyor*/
ort = top/2.0 ; /* ortalama alinip ort degiskenine aktariliyor */
printf (“ ortalama= %f dir.”,ort) ; /* ort degeri yaziliyor */
} /* Bu karakterler arasına açıklama yazılabilir */
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
124
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
Ekran Girişi ve Çıktısı ise…
( a= 5 ve b= 4 olduğu kabul edilsin, Giriş sayıların arasına
virgül konarak kullanıcı tarafından klavyeden yapılıyor)
iki sayı giriniz: 5,4 (
ortalama=4.500000
Not: Çıktıda Float tipi sonuç olduğundan noktadan sonra 6
basamak yazıldı.(12 basamak veren derleyiciler de vardır)
125
Örnek: Tamsayı olarak verilen X ve Y nin farkını (X-Y) hesaplayıp
SAYILARIN FARKI= ifadesinden sonra yazdıran main()
fonk. yazınız.
main() { /* Bu main fonksiyonu X ve Y nin farkini hesaplar*/
int X,Y,fark ; /* X , Y, fark tam sayi */
printf (“ iki sayı giriniz:”) ; /* Ekrana iki sayı giriniz: mesaji
yazilsin */
scanf (“%d,%d”,&X,&Y) ; /* X ve Y klavyeden okunacak */
fark= X-Y ; /* X ve Y cikarilip fark degiskenine aktariliyor*/
printf (“ SAYILARIN FARKI= %d”, fark) ; /* cikis yaziliyor */
}
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
126
Ekran Girişi ve çıktısı olarak…
( X=25 ve Y=13 olduğu kabul edilirse )
iki sayı giriniz: 25 , 13
SAYILARIN FARKI= 12
127
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
Örnek: Klavyeden girilen, kesirli sayı olan
yarıçap (R) ile dairenin alanı ve
çevresini hesaplayarak ekrana
yazdıran bir main() fonk. yazınız.
(¶ = 3.14 alınacaktır)
128
main () { /* Bu ornek main fonk. Dairenin alani ve Cevresini hesaplar*/
float R,S,C ; /* R: Yaricap S: Alan C: Cevre olsun*/
printf( “Yaricapi Giriniz: “); /* Yaricapi Giriniz: yaz*/
scanf (“%f”, &R); /* Yaricapi R degiskenine oku*/
S= 3.14 * R * R ; /* Alani hesapla*/
C = 2 * 3.14 * R ; /* Cevreyi hesapla*/
printf (“Dairenin Alani= %f\n”, S); /* Alani ekrana yazdir*/
printf (“Dairenin Cevresi= %f”, C); /* Cevreyi yazdir*/
}
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
129
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
Programın Ekran Girişi ve Çıktısı:
(Dairenin Yarıçapı = 5.2 kullanıcı tarafından girilmiş olsun)
Yarıcapi Giriniz: 5.2
Dairenin Alani= 84.905600
Dairenin Cevresi= 32.656000
130
Örnek: Tabanı (a) ve yüksekliği (h) olup virgüllü sayı olarak verilen
bir üçgenin alanını hesaplayıp yazdıran main() fonk. yazınız.
main() { /* Bu main fonksiyonu ücgenin alanini hesaplar*/
float a,h,alan; /* a: taban , h: yukseklik ve alan olsun */
printf (“Taban ve yuksekligi giriniz:”) ; /* kenarlari girin
mesaji */
scanf (“%f,%f”,&a,&h); /* a ve h klavyeden okunacak */
alan = a*h/2.0; /* alan hesaplanip alan adli degiskene aktariliyor */
printf (“ Ucgenin Alani= %f ”,alan) ; /* cikis yaziliyor */
}
131
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
Ekran Girişi ve çıktısı:
(Üçgende a=5.5 ve h=4.6 olarak klavyeden girildi ise… )
Taban ve yuksekligi giriniz: 5.5 , 4.6
Ucgenin Alani= 12.650000 dir.
132
C PROGRAMLAMA DİLİ (Devam)
main() fonksiyonu
SABİTLER:
Programın yürütülmesi sırasında değerleri değişmez.
Sabitler genelde sayısal ve alfasayısal olurlar…
Sabitler üzerlerinde aritmetik işlem yapılarak değiştirilemezler…
Sayısal sabit… örn : 3.45
Alfasayısal sabit… örn: “34MYO”
Alfasayısal sabitler tırnak içerisinde verilir.
Alfasayısal sabit tek karakter ise tek tırnak, birden
fazla karakter ise çift tırnak içinde verilir.
C PROGRAMLAMA DİLİ (Devam)
Sabitler
Sabit tanımlanırken program boyunca değişmeyeceğini belirtmek için sabit tipinin başına const ibaresi konulmalıdır. Meselâ:
const int a= - 45;
/* a adli ve degeri - 45 olan sabit (tam) sayi demektir , bu tanımdan sonra programda a yazılırsa (- 45) anlamına gelir */
const float b= 2.435298; /* b adli kesirli bir sabit sayi */
const char ch = ‘A’; /* ch adli karsiligi A olan sabit karakter */
C PROGRAMLAMA DİLİ (Devam) Sabitler
DEĞİŞKENLER:
• Değişkenler hafızada saklanan ve program boyunca değeri değişebilen simgesel isimlerdir.
• C'de temel olarak (sabitlere benzer) Sayısal ve Alfasayısal değişken türleri bulunmaktadır.
• Değişkenler içlerine uygun nesneler konan farklı tipte kutular olarak düşünülebilir.
• Her nesne her kutuya konamaz. Mesela ondalık bir sayı, (int) tipi kutuya konmaz. Konursa veri kayıpları oluşabilir.
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Değişken tipleri uzunluklarına göre de değişir. En yaygın olanlar:
int : Hafızada 2 bayt (16 bit) veya 4 bayt(32 bit) yer tutan tam sayı için kullanılır. … (Derleyiciye göre farklı iki durum vardır !)
short int : int tipinin yarısı uzunlukta 1 ya da 2 bayt sayı
long int : int tipinin iki katı uzunlukta 4 ya da 8 bayt sayı
float : Tek hassasiyetli kesirli sayı (virgülden sonra 6 basamak)
double : Çift hassasiyetli kesirli sayı (virgülden sonra 12 basamak)
char : Tek yada daha fazla karakter saklar.
(Hafızada her karakter 1 bayt yer tutar)
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
• Bazı değişken tanımlama örnekleri şöyle olabilir:
int x=69,y,z; /* x ‘in başlangıç degeri 69 olsun */
short int say; /* say adlı değişken 1 bayt (8 bit) */
long int sonuc; /* sonuc adlı değişken 4 bayt (32 bit) */
float pi; /* pi adlı kesirli bir değişken */
double e= 2.711828182845;
/* e adlı çift hassasiyetli kesirli sayı değişkeni başlangıç değeri ile
tanımlanmıştır */
char sehir[15] ; /* sehir adli 15 uzunluklu karakter */
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
• Değişkenler tanımlanırken birden fazla olacak ise virgül ile ayrılmalıdırlar.
• Her ifade/deyim gibi değişken tanımının sonuna noktalı virgül konulması zorunludur.
• Değişkenlerin hafızada karşılıkları vardır. Bir Değişkenin hafızadaki karşılığı genellikle…
Tam sayı Kesirli sayı Karakter olabilir…
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Tam sayı değişkeni tanımlamak için …
• Örn:
int a,b,c ; /* 3 tam sayı değişken tanımlanıyor */
[ Burada a,b,c (78 457 -189 -32 0 gibi )
değerler alabilir, ama kesirli sayı olmaz)]
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
• Bu değişkenlere başlangıç değeri de verilebilir.
• Örnek olarak kısa bir main() fonksiyonunda a isimli bir tam sayı değişkeni tanımlayalım ve program içinde bu değişkene 10 başlangıç değeri verip a’nin degeri= ifadesinden sonra çıktı olarak yazdırarak bir satır atlatalım:
main() {
int a=10 ;
printf (“a’nin degeri= %d\n ”,a) ;
}
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Kesirli (ondalıklı) sayı değişkeni tanımlamak için…
• Mesela
float f=12.345 ; /* Başlangic değeri verilmiş f adli
ondalıklı değişken */
• Float tipinde bir değişken aşağıdaki gibi değerler alabilir:
8.7 0.459 -5.45E9 ( üslü sayıdır : -5,45.109 )
• Bu sayıları bir int değişkenine eşitlersek sadece tam kısmını alırız. (8.7 yerine 8 alınır.)
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Örnek olarak main() fonksiyonu içinde bir a değişkenine kesirli bir sayı değeri verelim ve bunu a’nin degeri= ifadesinden sonra 2 basamak tam kısmı, 3 basamak kesirli kısmı olacak şekilde çıktı olarak yazalım.
main () {
float a ;
a= 18.909 ;
printf (“a’nin degeri= %2.3f”,a) ;
}
Ekran Çıktısı: a’nin degeri= 18.909 olacaktır.
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Tam sayı ve Float Değişken Tiplerinin Beraber Kullanımı
• Bir float değişkenine int tipi değişken eşitlenirse , C otomatikman bu değeri float tipine çevirir. Mesela…
main() { float a ; int b=10 ; a=b ; printf (“a’nin degeri= %f”,a); }
• Ekran Çıktısı a’nin degeri=10.000000 şeklinde elde edilir.
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
Karakter Tanımlamak için…
• Aşağıda Ch adlı bir karakter değişkeni tanımlanmıştır…
char Ch ; • Değişken tanımlanırken de başlangıç değeri verilebilir…
char Ch=‘H’ /* Başlangıç değeri H olsun */
• Karakter uzunluğu birden farklıysa değişken adının yanında bu değer de yazılır.
char isim[28]; /* isim adlı uzunluğu 28 olan bir karakter değişkeni tanımladık */
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
• Bu defa, a adlı bir karakter değişkenine klavyeden girilen bir harfi yerleştirerek bu değerin karakter tipinde a’nin
degeri= ifadesinden sonra yazdırıp bir satır atlamayı sağlayan programı main() içinde yazalım.
main () { char a ;
printf (“Harfi Girin:“);
scanf(“%c“, &a);
printf (“a’nin degeri= %c\n ”,a);
}
Ekran Çıktısı: (Klavyeden z harfi girildiyse…)
a’nin degeri= z şeklinde elde edilir.
C PROGRAMLAMA DİLİ (Devam)
Değişkenler
• Bir başka tip tanımlaması da sayının işaretsiz olduğunu belirtir.
• Bunun için unsigned kelimesi kullanılır. Mesela;
unsigned int sayi ;
sayi adlı değişkenin tam sayı türünde olduğu, sadece pozitif sayı olacağı anlaşılır.
• Böylece çalışma alanı (int 16 bit kabul edilirse) sayı
0 ile 65535 aralığında olur. (216 = 65536 ; sıfır dahil!)
C PROGRAMLAMA DİLİ (Devam)
İşaretsiz Değişkenler
unsigned int sayi ; /* sayi adlı sadece pozitif 16 bit*/
unsigned long sayi ; /* sayi adlı sadece pozitif 32 bit */
• unsigned (işaretsiz) ifadesi olmasaydı çalışma aralığı…
-32768 ……0…… +32767 olacaktı.
• Yani sayi işaretli olacak ve hem pozitif hem negatif değerler alabilecekti.
NOT: Mikrodenetleyiciler dersindeki pozitif (+) ve negatif (-)
değerler alabilen işaretli sayıları hatırlayınız.
C PROGRAMLAMA DİLİ (Devam) İşaretsiz Değişkenler
Sık kullanılan Değişken Türlerini bir Tablo halinde Özet olarak tekrar verirsek…
C PROGRAMLAMA DİLİ (Devam) Değişkenler
C FONKSİYONLARI
• İyi tasarlanmış bir program, büyük bir programı parçalara (fonksiyonlara) böler.
• Fonksiyon belli bir işi yapan program parçasıdır.
• main() de bir fonksiyondur. Ancak daha önce belirtildiği gibi olmazsa olmazdır ve program her zaman buradan çalışmaya başlar.
C PROGRAMLAMA DİLİ (Devam) Fonksiyonlar
• Fonksiyonlar değer (parametre) kullanarak ya da kullanmadan çalışırlar.
• Bir fonksiyon yazılıp hatalardan arındırıldıktan sonra başka programlarda da kullanılabilir.
• Kütüphane fonksiyonları da birer hazır fonksiyondur, daha önce yazılıp yerleştirilmişlerdir ve derleme sırasında kullanılırlar.
C PROGRAMLAMA DİLİ (Devam) Fonksiyonlar
• Bir değer alıp işlem yapan ama kendisi bir değer vermeyen (üretmeyen) bir fonksiyon olarak…
printf("Merhaba, Dunya");
örnek olarak verilebilir.
• Burada printf() fonksiyonuna, Merhaba, Dunya değer olarak girmekte ancak kendisi bir değer üretip başka fonksiyona göndermemektedir.
• printf() sadece ekrana çıktı yazmaktadır.
C PROGRAMLAMA DİLİ (Devam) Fonksiyonlar
C PROGRAMLAMA DİLİ (Devam) Fonksiyonlar
• Standart C ‘de çok sayıda (farklı başlık dosyalarıyla kullanılan) hazır kütüphane fonksiyonları bulunmakla birlikte şimdilik birkaç örneği inceleyelim.
• Aşağıdaki örnek kütüphane fonksiyonu, büyük harfle yazılmış bir karakteri küçük harfe çevirmektedir.
tolower() Fonksiyonu
Bu fonksiyona parantez içinde parametre olarak büyük harf girer ve küçük harf şeklinde bir değer üretir.
Örnek:
main() fonk. içinde klavyeden girilenbüyük bir karakteri tolower() fonksiyonu kullanarak küçük karaktere dönüştürüp yazdıran bir main() fonksiyonu yazınız.
C PROGRAMLAMA DİLİ (Devam) tolower() Fonksiyonu
main() { char a,b; printf("Bir buyuk harf girin:"); scanf("%c",&b); a=tolower(b); printf("%c’nin Kucugu:%c",b,a); }
Ekran Çıktısı: (K harfi girildiği kabul edilirse)
K’nin kucugu:k elde edilecektir.
Not: Tersine küçük karakteri büyük karaktere dönüştürmek için benzer şekilde toupper() fonksiyonu kullanılabilir.
C PROGRAMLAMA DİLİ (Devam)
tolower() Fonksiyonu
C PROGRAMLAMA DİLİ (Devam)
abs() Fonksiyonu
abs() Fonksiyonu (Mutlak değer alır)
Örnek: Klavyeden girilen bir Negatif sayının mutlak değerini main() içinde yazdırınız…
main() { int a,b; printf("Bir negatif tam sayi Girin:"); scanf("%d",&a); b=abs(a); printf("%d sayisinin mutlak degeri:%d dir.",a,b); }
Ekran Çıktısı (( -58 girilirse) • ---58 sayisinin mutlak degeri:58 dir.
strcpy() Fonksiyonu (Karakter katarını bir değişkene
kopyalar)
Örnek: 18 karakterli bir ifadeyi ch adlı değişkene aktardıktan sonra ekrana yazdıran programı main() fonksiyonu içinde yazınız…
main() {
char ch[19];
strcpy(ch,"MERHABA,NASILSINIZ");
printf("%s\n",ch);
} Ekran Çıktısı:
MERHABA,NASILSINIZ
C PROGRAMLAMA DİLİ (Devam)
strcpy() Fonksiyonu
floor() Fonksiyonu (Kesirli bir sayıyı bir alt tam sayıya yuvarlar)
Örnek:
Kesirli olarak klavyeden girilen sayıyı bir alt tam sayıya yuvarlayan main() fonksiyonunu yazınız.
main() {
float s;
int a;
scanf(" %f", &s);
a=floor(s);
printf("Asagi Yuvarlanmıs Sayi:%d",a);
}
C PROGRAMLAMA DİLİ (Devam)
floor() Fonksiyonu
C PROGRAMLAMA DİLİ (Devam)
Formatsız Giriş ve Çıkış Komutları
• Komut İşlem getchar() Klavyeden bir karakter okur ve ENTER’e basılmasını
bekler…
getche() Klavyeden bir karakter okur ve ENTER’e basılmaksızın
karakteri değişkene aktarır. Karakter ekrana yazılır.
getch() Klavyeden bir karakter okur ve ENTER’e basılmaksızın
karakteri değişkene aktarır.Karakter ekrana yazılmaz.
gets() Klavyeden girilen karakter katarını bir değişkene aktarır.
putchar() Ekrana bir karakter yazar.
puts() Bir karakter katarını ekrana yazar.
Örnek: Girilen bir cümleyi bir karakter değişkenine aktardıktan sonra bir tuşa basılmasını bekleyen ve ekrana yazan bir main() fonk. yazın.
main() {
char str[80];
printf("Bir cumle yazin:");
gets(str);
printf("Bir tusa basin...\n");
puts(str);
getch(); //Program bir tuşa basınca sonlanır
}
C PROGRAMLAMA DİLİ (Devam)
Formatsız Giriş ve Çıkış Komutları
C PROGRAMLAMA DİLİ (Devam)
Formatsız Giriş ve Çıkış Komutları
Örnek: Girilen bir karakteri bir değişkene aktardıktan sonra bir satır atlayıp ekrana yazan bir main() fonk. yazın.
main() {
char ch;
printf("Bir harf yazin:");
ch=getchar();
printf("\n");
putchar(ch);
}
• Fonksiyonlar sadece main() ya da kütüphane fonksiyonlarından ibaret değildir.
• Genellikle pek çok işlem programcı tarafından yazılan çeşitli fonksiyonlarca yapılır…
• …Ve ürettiği değerler main() fonksiyonuna gönderilir.
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Mesela programcı tarafından ismi top() olan bir toplama fonksiyonu yazılarak toplama işlemini yapılabilir ve sonuc (toplam) main() fonksiyonuna gönderilebilir.
• Aşağıda bir fonksiyonun genel yapısı ve çeşitli örnekler incelenecektir.
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
Genel olarak bir Fonksiyonun Yapısı:
fonksiyonTipi fonksiyonAdi (arguman listesi )
argumanların tip bildirimi;
{ fonksiyona ait (yerel) değişkenlerin bildirimi .
.
fonksiyon içindeki deyimler ve diğer fonksiyonlar…
.
.
}
163
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Yazacağımız fonksiyona yaptığı işle ilgili bir ad verilir.
topla() , carp() , ara(), gibi…
• Bu ad C dilinde kullanılan anahtar kelimeler (return, printf, scanf vb) olamaz.
• fonksiyonTipi ise fonksiyon görevini yaptıktan sonra çağrıldığı yere göndereceği sonucun (değerin) ne tip (tam sayı [int] , kesirli sayı [float] vb.) olacağını belirtir.
164
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
Örnek: Önce a ve b tam sayı değişkenlerini toplayan
top() adlı bir toplama fonksiyonu yazalım.
Not 1 : Sadece fonk. içinde kullanılan (yerel) toplam değişkeni g dir. Bu değer return g deyimi ile main() fonksiyonuna geri yollanacaktır.
Not 2 : top(a,b) ‘nın başında yer alan int bu geri gönderilen g değerinin tipini belirtir.)
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
int top(a,b) /* top(a,b) fonksiyonunun main() ‘e gondereceği
toplamın tipi int */
int a,b ; /* top() ‘a ait arguman degiskenleri tam sayı */
{
int g ; /* Sadece bu fonk. icinde tanimli g degiskeni tam sayı */
g=a+b ; /* Toplama islemi yapiliyor, toplam g ‘ye */
return g; /* g degiskeni top() fonksiyonunu cagiran main() ’deki fonksiyona geri yollaniyor */
}
166
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Yukarıdaki örnekte iki tam sayıyı toplayan bir top() fonksiyonu yazmıştık. Ancak bu fonksiyon tek başına yani main() fonksiyonu olmadan çalışamaz.
• Şimdi toplama yapan bu top() fonksiyonunu
kullanacak bir main() fonk. yazalım. Bu main()
de iki değişkenin ortalaması alınsın ve sonuç
ortalama= ifadesinden sonra ekrana yazdırsın.
Not: Bu main() fonksiyonunda toplanan değişkenlerin x ve y
şeklinde farklı kullanılabildiğine dikkat edelim.
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
main() {
int x,y,z; /* her üc degisken tam sayi */
float ort; /* ort degiskeni kesirli sayi */
printf (“iki sayı giriniz:”) ; /* sayiların girilmesi mesaji */
scanf(“%d, %d”,&x,&y) ; /* sayilar klavyeden okunuyor */
z=top(x,y) ; /* top() fonksiyonu cagriliyor */
ort = z/2.0 ; /* ortalama hesaplaniyor */
printf (“ ortalama= %f dir.”,ort) ; /*ort degeri yazdiriliyor*/
}
168
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Ekran çıktısı (Örn: x=64 ve y=65 olarak girilsin.)
64,65
ortalama= 64.500000 şeklinde olur.
NOT: main() deki toplama değişkenleri x ve y iken top() fonksiyonunda a ve b olduğuna dikkat edelim. main() deki x yerine top() fonksiyonunda a ; y yerine b nin karşılık gelmektedir.
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
Örnek : main() tarafından çağrılan carp() adlı bir çarpma
fonksiyonunu main() fonk. ile birlikte yazalım.
• Bu fonksiyonun değişkenleri a ve b ise artık parametreleriyle
birlikte carp(a,b) olarak da fonksiyonu ifade edebiliriz.
• Programda main() içinde her carp() yazdığımızda bu çarpma fonksiyonu çalışır ve çarpma gerçekleşir…
• carp() fonksiyonundaki ‘return’ deyimi ile sonuç kendisini çağıran fonksiyona geri gider.
170
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Önce main() fonksiyonu:
main() {
int x,y,z ; /* her üc degisken tam sayi */
printf (“iki sayı giriniz:”) ; /* sayiların girilmesi mesaji */
scanf(“%d, %d”,&x,&y) ; /* sayilar klavyeden okunuyor */
z=carp(x,y) ; /* carp() fonksiyonu cagriliyor */
printf (“ carpim= %f dir.”, z) ; /* carpim= ifadesi ve
z degeri ekrana yazdiriliyor.*/
}
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
• Şimdi main() tarafından çağrılan carp() adlı Çarpma Fonksiyonumuzu yazalım:
int carp(a,b) /* carp() fonksiyonunun sonucunun tipi tam sayi (int), argumanları a ve b */
int a,b; /* a ve b, carp() fonk. argumanlari tam sayı */
{
int g; /* carpim da tam sayı olacak */
g= a*b; /* carpim yapılıyor, sonuç g değişkenine */
return g; /* bulunan g değeri çağrıldığında, çağıran fonksiyona geri gönderiliyor */
} 172
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
Örnek : main() fonksiyonunu yazmadan değişkenleri a ve
b olan bol() adlı bir bölme fonksiyonu yazınız.
float bol(a,b) /* bol() fonksiyonunun sonucunun tipi kesirli
int a,b; sayı (float), a ve b değişkenleri tam sayı */
{
float g; /* bölüm g kesirli sayı */
g= a/b; /* bölüm yapılıyor, sonuç g değişkenine */
return g; /* bulunan g değeri, bol() fonksiyonunun
cagrildigi yere geri gönderiliyor */
}
173
C PROGRAMLAMA DİLİ (Devam)
Fonksiyonlar
C PROGRAMLAMA DİLİ (Devam)
Operatörler
OPERATÖRLER:
Değişkenler ve sabitler üzerinde çeşitli işlemler yaparlar. 4 Grupta incelenebilirler :
Aritmetik Operatörler
Karşılaştırma Operatörleri
Mantıksal Operatörler
Bit seviyesinde işlem yapan Operatörler
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
Aritmetik Operatörler:
+ Toplama
- Çıkarma
* Çarpma
/ Bölme
% Modulüs (kalan)
-- Bir azaltma (tam sayı veya karakterlerde)
++ Bir arttırma (tam sayı veya karakterlerde)
• Temel Aritmetik Operatörleri, örneklerimizde zaten
büyük oranda kullanmıştık.Örnek olarak (-) yani çıkartma operatörünü hatırlamak için iki tam sayıyı çıkardıktan sonra ekrana yazan main() fonk. yazalım. main() {
int a,b ;
b= 3 ;
a= 2-b ;
printf (“a’nin degeri= %d\n ”,a);
}
Ekran Çıktısı: a’nin degeri= -1 elde edilir.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
• Yukarıdaki çıkarma işleminde…
a=2-3; ifadesinde (-) yerine (/) kullansaydık,
yani çıkarma yerine bölme yapmak isteseydik,
a=2/3; yazacaktık.
Bu durumda Ekran Çıktısı:
a’nin degeri= 0 şeklinde olurdu !
• Bunun sebebi a değişkeninin int a,b ; ile tam sayı olarak tanımlanmasıdır.
• Bu yüzden ekranda, 0.666666 olan asıl neticenin tam kısmı olan 0 görülmektedir.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
Modulüs Operatörü :
• Aritmetik Operatörlerden bir diğeri de modulüs
işlemi için kullanılan % operatörüdür.
• Bölme işlemi sonrası kalanı gösteren bir operatördür.
• Mesela, aşağıda 5%2 işlemi ile 5 sayısı 2 ye bölünmekte ve kalan 1 olarak elde edilmektedir.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
main()
{
int a;
a= 5%2 ;
printf (“a’nin degeri= %d\n ”,a);
}
• Ekran Çıktısı :
a’nin degeri= 1 elde edilir.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
Arttırma Operatörü:
• Aritmetik Operatörlerden bir diğeri de ++ (bir arttırma ) operatörüdür. Mesela…
main() {
int m=7, j=12 ; /* tam sayılar, Baslangic degerleri */
m ++ ; /* m=m+1, m değeri 1 artti */
++ j ; /* j=j+1 üstteki deyimle ayni anlamda */
printf (“%d,%d ”,m,j) ;
}
• Ekrana çıktı olarak 8,13 değerleri yazılır.
Not: Benzer şekilde m-- veya --j ile bir eksiltme işlemi yapılabilir.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
• Aşağıdaki örnekte değişken aktarımı olduğundan dikkatli olunmalıdır.
main() {
int m=7, j=12 ,k,z ;
k=m++ ; /* once m=m+1 sonra k=m anlamında */
z= ++j ; /* once z=j dir, sonra j=j+1 */
printf (“k=%d,z=%d”,k,z) ;
}
• Ekran Çıktısı olarak k=8 z=12 yazılır.
C PROGRAMLAMA DİLİ Aritmetik Operatörler (Devam)
Karşılaştırma Operatörleri:
• Sayı değerlerini ve karakterleri karşılaştırmak için kullanılırlar. Ancak karakter katarlarını karşılaştırmazlar. Bunlar;
> büyük mü?
>= büyük veya eşit mi?
< küçük mü?
<= küçük veya eşit mi ?
== eşit mi?
! = farklı mı?
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
• Bu operatörler Karşılaştırma ve Döngülerde şartın test edilmesi için kullanılırlar. 3 farklı yapıda incelenebilirler:
1) if yapısı
2) if-else yapısı
3) switch-case yapısı
1) if yapısı :
• Bir veya birden fazla şartın gerçekleşmesine bağlı olarak bir komut ya da komutlar bloğunun çalışması sağlar.
• Şarta bağlı olarak tek bir komut çalışacaksa, komut if deyiminin altına (ya da sonra) yazılabilir.
• Eğer şart sağlandığında komutlar bloğunun çalışması isteniyorsa o zaman bu komutlar küme parantezine {} alınmalıdır…
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
• Örnek olarak aşağıdaki program parçasında ekrana MERHABA yazdırmak için m değişkeninin 30 dan büyük olması gerekir.
….
if (m > 30)
printf(“MERHABA”) ;
….
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
• Parantez içine sadece değişken yazılırsa ve bu değişken sıfırdan farklıysa işlem yapılır. Örn;
….
if (k) printf(“SIFIRDAN FARKLI”) ;
….
• k değişkeni sıfırdan farklı ise ekrana SIFIRDAN FARKLI
yazılacaktır.
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
• Aşağıdaki örnekte girilen sayıların birincisi 41 den büyük ve ikincisi 51 den küçük ise ifadeyi çıktıya yazar ve satır atlar.
main() {
int t,k;
printf (“iki sayi giriniz :”) ;
scanf (“%d,%d”, &t,&k) ;
if ( t>41)
if ( k < 51)
printf (“Sayilar 42 ile 50 arasinda\n”) ;
}
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
2) if-else yapısı: • if deyimine benzer şekilde if parantezi içinde verilen
şart sağlanıyorsa (şart doğru ise) if ‘den sonraki komut ya da komutlar çalışır.
• Eğer if parantezi içindeki şart sağlanmıyorsa (şart yanlış ise) else kelimesinden sonraki komut veya komutlar çalıştırılır.
• else ‘den sonra şayet birden fazla komut çalıştırılmak isteniyorsa bu komutlar yine küme parantezine {} alınmalıdır.
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
Örnek : Program çalıştığında klavyeden bir karakter girilmesi istenecek bu karakterin küçük ya da büyük olduğu ekrana yazılacaktır.
main() { char ch;
printf(“Bir harf giriniz :”);
ch=getche();
printf(“\n”);
if (‘A’<=ch && ch<=‘Z’)
printf(“Buyuk harf girdiniz :”;
else
printf(“Kucuk harf girdiniz :”;
}
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
3) switch-case Yapısı:
• Bu yapıda bir değişken ya da ifade birkaç ayrı değerle karşılaştırılır ve eşitlik durumuna göre program akışı değişir…Yapısı:
switch (değişken veya ifade) {
case 1: Komut…Komut…break;
case 2: Komut…Komut…break;
case 3: Komut…Komut…break;
}
C PROGRAMLAMA DİLİ Karşılaştırma Operatörleri (Devam)
Örnek: Klavyeden girilen 1 veya 2 veya 3 sayılarına göre ekranda hangi sayının girildiğini yazdıran bir main() fonksiyonu yazınız.
main() {
int a;
printf (“Bir sayi giriniz (1/2/3) :”) ;
scanf (“%d, &a) ;
switch(a) {
case 1: printf(“BIR sayisi girdiniz…\n”); break;
case 2: printf(“IKI sayisi girdiniz…\n”); break;
case 3: printf(“UC sayisi girdiniz…\n”); break;
}
}
Mantıksal Operatörler:
• Yukardaki örnekteki gibi birden fazla şart varsa bunlar birleştirilip tek bir şart olarak yazılabilir.
• Böyle durumlarda mantıksal operatörler kullanılır.
• Bunlar:
&& (VE işlemi için)
|| (VEYA işlemi için)
! (DEĞİL işlemi için)
C PROGRAMLAMA DİLİ Mantıksal Operatörler
Yukardaki örneği mantıksal operatör kullanarak tekrar yazalım;
main()
{
int t,k ;
printf (“iki sayi giriniz :”) ;
scanf (“%d,%d”, &t,&k) ;
if ( t>41 && k < 51 )
printf (“Sayilar 42 ile 50 arasinda\n”) ;
}
C PROGRAMLAMA DİLİ Mantıksal Operatörler (Devam)
• Aşağıdaki örnekte klavyeden girilen sayının tek ya da çift olduğu çıktıda yazılmaktadır: main() {
int sayi,t ; printf (“sayiyi giriniz :”) ; scanf (“%d”, &sayi) ; t= sayi % 2 ; if (t) printf (“Tek Sayi”) ; else printf (“Cift Sayi”) ; }
C PROGRAMLAMA DİLİ Mantıksal Operatörler (Devam)
Bit seviyesinde işlem yapan Operatörler
Bir tam sayı ya da karakter değişkeninin bitleri üzerinde test, değiştirme ve öteleme gibi işlemleri yapan operatörlerdir.
Bu suretle assembly dili seviyesinde çalışmak mümkün olur.
C PROGRAMLAMA DİLİ Bit Seviyesi Operatörleri
• Bu operatörler 6 tanedir:
& Bit seviyesinde VE işlemi
| Bit seviyesinde VEYA işlemi
^ Bit seviyesinde özel VEYA işlemi
~ 1’e tümleme
<< Sola Öteleme
>> Sağa Öteleme
C PROGRAMLAMA DİLİ Bit Seviyesi Operatörleri (Devam)
• & operatörü istenen bit/bitleri sıfırlamak için kullanılabilir.
• Bunun için örnek olarak 0000 0110 ikili sayısı yani (06) sayısı ile bir a değişkeninin bit seviyesinde VE işlemine tabi tutulmasını ele alalım…
• a değişkeninin önce desimal 12 (heksadesimal 0C) değerinde olduğu durum için…
C PROGRAMLAMA DİLİ Bit Seviyesi Operatörleri (Devam)
C PROGRAMLAMA DİLİ Bit Seviyesi Operatörleri (Devam)
Bit No 7 6 5 4 3 2 1 0
a değişkeni : (d’12 ‘) = h’0C’ 0 0 0 0 1 1 0 0
6 ‘nın binary ifadesi 0 0 0 0 0 1 1 0
a & 6 nın değeri : (04) 0 0 0 0 0 1 0 0
Önce a = d’12 ‘ = h’0C’ olsun.
a = a & 6 ifadesi (komutu) yazılırsa a değişkeninin 1. ve 2. bitleri dışındakiler
sıfırlanmış olur.
Bu komuttan sonra a = 4 olur.
Benzer şekilde diğer operatörlerle de belirtilen işlemler yapılabilir.
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri
• C Dilinde Program Akışı Kontrol Deyimleri oldukça güçlü olduğundan çoğu zaman GOTO türü bir deyim kullanma ihtiyacı olmaz.
• Bu deyimler 2 grupta incelenebilir:
– Karşılaştırma Deyimleri
– Döngü Deyimleri
Not: 1. Grupta yer alan deyimler Karşılaştırma Operatörleri incelenirken kısmen incelenmiştir.
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri (Devam)
• C Dilinde Program Akışı Kontrol Deyimleri oldukça güçlü olduğundan çoğu zaman GOTO türü bir deyim kullanma ihtiyacı olmaz.
• Akışı Kontrol Deyimleri 2 grupta incelenebilir:
Karşılaştırma Deyimleri (Daha önce if deyimi ile kısmen incelenmişti)
Döngü Deyimleri
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri (Devam)
Döngü Deyimleri: Bu tip deyimler kümenin (belli komutlar grubunun) belirli bir şart altında tekrarlanması amacıyla kullanılırlar.
3 tip Döngü deyimi vardır:
1. while
2. do…while
3. for
Not: 1 ve 3. grupta şart döngünün başında test edilir.
2. grupta döngünün başında sonunda test edilir.
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri (Devam)
1. while : Şart olumlu olduğu sürece döngü tekrarlanır.
Aşağıda sayac değişkeni 0….49 olarak ekranda yazılıyor.
main() {
int sayac=0;
while(sayac<50) {
printf(“%d”,sayac);
sayac++;
}
}
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri (Devam)
2. do….while: while deyiminden farklı olarak şart döngü
sonunda tekrarlanır. Döngü enaz 1 kere tekrarlanır.
Aşağıda girilen sayının karesi hesaplanarak yazdırılmaktadır.
main() { int sayi;
do { printf(“ BIR SAYI GIRIN:”);
scanf(“%d”,&sayi);
printf(“KARESI=%d\n”,sayi*sayi);
} while(sayi>0);
}
C PROGRAMLAMA DİLİ Program Akışı Kontrol Deyimleri (Devam)
3. for : Diğer döngü deyimleri gibi bir grup deyimi belli sayıda tekrarlamak için kullanılır. Şart önceden test edilir. Aşağıda 10’dan başlayarak 5’er arttırımla 50 ye kadar olan sayıların karesi hesaplanıp yazdırılıyor. main() { int a; for (a=10;a<=50;a=a+5) { printf(“ a’nin karesi=%d\n”,a*a); } printf(“Dongu sona erdi!\n”); }
C PROGRAMLAMA DİLİ * ve & İşaretçi Operatörleri
• İşaretçi(pointer) bir değişkenin hafızadaki adresidir. İşaretçi değişken bu adresin saklanacağı özel bir değişkendir.
• Bazı uygulamalarda değişkenlerin bulunduğu adresin bilinmesi büyük avantaj sağlar.
• * karakteri : (Çarpmadan farklı !) bir operatör olup
2 maksatla kullanılır:
– İşaretçi Bildirimi
– İşaretçinin işaret ettiği hafızanın içeriğine erişmede
C PROGRAMLAMA DİLİ & ve * İşaretçi Operatörleri (Devam)
Örnekler:
*p : p adlı işaretçinin(adresin) içindeki değişkendir.
int *p : Eğer başına int konursa bu p değişkeninin tamsayı
olduğu anlaşılır.
*a : a adlı değişkenin işaretçisini (adresini) gösterir.
char *k : k adlı karakter değişkeninin işaretçisini (adresini)
gösterir.
C PROGRAMLAMA DİLİ & ve * İşaretçi Operatörleri (Devam)
• & karakteri : Daha önce lojik (bit seviyesinde) VE işlemi için kullanılmıştı. Bu durumda değişkenin değeri değil de adresi ile ilgileniliyor demektir.
• Örnek: p işaretçi (adres) , m ve n normal değişkenler ise…
int *p, n=15, m;
…..
m=n; // m de 15 oldu.
p=&m; // m degiskeninin bulunduğu hafıza baslangic adresi p oldu.
C PROGRAMLAMA DİLİ & ve * İşaretçi Operatörleri (Devam)
• Bir işaretçinin gösterdiği değişkenin normal bir değişkene atanması için yine * operatörü kullanılır.
• Bu durumda değişken ile ilgileniyoruz demektir.
• Örnek:
int *q,a ; // q işaretçisinin(adresinin)içindeki sayı ve a tamsayi olsun
q=&a ; // a adlı değişkenin işaretçisi (adresi) q olsun.
*q=130 ; //q işaretçisinin(adresinin) gösterdiği degişkene (a= 130) yaz.
Not: Yukarıdaki örnekte aslında a=*q işlemi yapılmış oldu !
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri
Karakter Üzerinde İşlem Yapanlar:
Fonksiyon Adı : isalnum()
Kullanılacak Başlık Dosyası: # include <ctype.h>
Bildirimi (Kullanılışı): int isalnum(int kr);
Açıklaması:
• Eğer kr alfanümerik ise sıfırdan farklı bir sayı verir…
• Eğer kr alfanümerik değil ise sıfır gönderir.
209
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri (Devam)
Örnek: k değişkeni alfanümerik ise deger= 10 , aksi
halde deger=20 yazan deyimleri yazınız. (fonk. değil)
….
if (isalnum (k)) // k alfanumerik mi ?
a=10; // Evetse
else // Degilse
a=20;
printf (“deger=%d ”,a); // a degiskenini yaz
…..
210
Benzer şekilde…
o isalpha() fonksiyonunun parametresi harfse sıfırdan
farklı bir sayı, aksi halde sıfır gönderir.
o islower() fonksiyonunun parametresi küçük harfse
sıfırdan farklı bir sayı, büyük harfse sıfır gönderir.
o islower() fonksiyonunun parametresi büyük harfse
sıfırdan farklı bir sayı, küçük harfse sıfır gönderir.
211
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri(Devam)
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri(Devam)
Katar Üzerinde ve Hafıza Alanında İşlem Yapanlar:
Katar, ‘\0’ ile sonlandırılmış karakter dizisidir.
#include<string.h> başlık dosyası isterler.
str… ya da mem… ile başlayan fonksiyonlardır.
str… ile başlayanlar kopyalama işlemi yaparlar ve
karakter işaretçi yollarlar.
mem… ile başlayanlar sorgulama işlemi yaparlar ve
mantıksal sonuç gönderirler.
212
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri(Devam)
Fonksiyon Adı : strcat()
Kullanılacak Başlık Dosyası: # include <string.h>
Bildirimi (Kullanılışı):
char strcat(char *k1,const char *k2);
Açıklaması:
• Hafızada k2 katarını k1 katarının peşine ekler.(k2 nin ilk
elemanı k1’in ‘\0’ [sonlandırma karakterinin] yerine gelir.
213
C PROGRAMLAMA DİLİ Bazı Hazır (Kütüphane) Fonksiyon Örnekleri(Devam)
Benzer şekilde…
o strchr() fonksiyonu bir katar içinde bir karakterin olup
olmadığını araştırır.
o strcmp() fonksiyonu iki katarı karşılaştırır.
o strlen() fonksiyonu katarın karakter sayısını gönderir.
o strstr() fonksiyonu bir katarın diğer bir katar içinde olup
olmadığını araştır.
214
Örnek ya da sizin yazdığınız programları çalıştırmak
için…
The open source, Cross-Platform IDE 13.12 programını
aşağıdaki siteden indirip kurunuz.
http://www.codeblocks.org/
Deneyeceğiniz basit Programların başına
#include <stdio.h> ya da gerekli başlık ifadelerini
yazarak printf(), scanf() gibi Standart kütüphane
fonksiyonlarının çalışmasını sağlayınız.
215
C PROGRAMLAMA DİLİ Program Çalıştırma
Örnek ya da sizin yazdığınız programları çalıştırmak için
aşağıdaki internet adresinden deneme için C free
standart 5.0 dosyasını indirip kurunuz.
http://www.programarts.com/cfree_en/download.htm
Deneyeceğiniz basit Programların başına
#include <stdio.h> ya da gerekli başlık ifadelerini
yazarak printf(), scanf() gibi Standart kütüphane
fonksiyonlarının çalışmasını sağlayınız.
216
C PROGRAMLAMA DİLİ
Program Çalıştırma
ALGORITHMS AND FLOWCHARTS, faraday.ee.emu.edu.tr/ web
sitesi
ALGORİTMA VE PROGRAMLAMA Ders Notları, Öğr. Gör. Dr. Umut
Engin AYTEN
C Programlama Dili Programlama 3, Kemal YARCI
C Programlama Ders Notları, İnönü Üniversitesi, “The C
Programming Language”, W Kernighan ve Dennis Ritchie’den
tercüme
C Programlama Dili, Dr Rıfat ÇÖLKESEN, Papatya Yayınları
Kolay C Programlama, Editör: Gürcan BANGER, Bilim Teknik
Yayınevi
C Programming Tutorial by Examples, Dr. Kalim Qureshi
C PROGRAMLAMA DİLİ
Faydalanılan Kaynaklar…
217