ALGORİTMA VE PROGRAMLAMA II HAFTA#1 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi YZM 1106
ALGORİTMA VE PROGRAMLAMA II
HAFTA#1
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu
Teknoloji FakültesiYZM 1106
Algoritma Nedir?2
• Basit tanım: Belirli bir görevi yerine getiren sonlu
sayıdaki işlemler dizisidir.
• Geniş tanım: Verilen herhangi bir sorunun çözümüne
ulaşmak için uygulanması gerekli adımların hiç bir
yoruma yer vermeksizin açık, düzenli ve sıralı bir
şekilde söz ve yazı ile ifadesidir. Algoritmayı
oluşturan adımlar özellikle basit ve açık olarak
sıralandırılmalıdır.
YZM 1102 – Algoritma ve Programlama II
Algoritmaların Sahip Olması Gereken
Genel Özellikler3
• Giriş/çıkış bilgisi,
• Sonluluk,
• Kesinlik,
• Etkinlik,
• Başarım ve performans.
YZM 1102 – Algoritma ve Programlama II
Örnek: Üçgenin Alanını Hesaplayan Algoritma
4
1. BAŞLA
2. Taban değerini gir
3. Yükseklik değerini gir
4. Taban ile yüksekliği çarp ve sonucu ikiye böl
5. Çıkan sonucu yaz
6. BİTİR
YZM 1102 – Algoritma ve Programlama II
5
1. BAŞLA
2. Taban değerini gir
3. Yükseklik değerini gir
4. Taban ile yüksekliği
çarp ve sonucu ikiye böl
5. Çıkan sonucu yaz
6. BİTİR
Düz Yazı Sözde Kod
Taban için t, yükseklik için
y, alan için A seç
1. BAŞLA
2. t değerini OKU
3. y değerini OKU
4. A = (t * y)/2
5. A değerini YAZ
6. BİTİR
Örnek: Üçgenin Alanını Hesaplayan Algoritma
YZM 1102 – Algoritma ve Programlama II
Akış Şemaları ile Gösterim
6
• Bir algoritmanın görsel şekiller ve sembollerle ifade edilmiş
haline «Akış Şemaları» adı verilir.
• Akış şeması sembolleri ANSI (American National Standards
Institute) standardı olarak belirlenmiş ve tüm dünyada
kullanılmaktadır.
• Algoritma doğal dille yazıldığı için herkes tarafından
anlaşılamayabilir ya da başka anlamlar çıkarılabilir. Ancak
akış çizgelerinde her bir şekil standart bir anlam taşıdığı için
farklı yorumlanması mümkün değildir.
YZM 1102 – Algoritma ve Programlama II
Akış Şeması Şekilleri
7
BAŞLA
BİTİR
Akış şemasının başlangıç ve bitiş yerlerini gösterir.
Başlangıç simgesinden çıkış oku vardır. Bitiş
simgesinde giriş oku vardır.
Aritmetik işlemler ve değişik atama işlemlerinin temsil
edilmesi için kullanılır.
Dışarıdan bilgi giriş çıkışı için kullanılır.
Belgeye, yazıcıya, ekrana çıktı için kullanılır.
YZM 1102 – Algoritma ve Programlama II
Akış Şeması Şekilleri
8
Oklar şemanın akış yönünü belirler.
Bağlantı işlemlerini temsil eder.
Kontrol ve karar verme işlemlerini temsil eder.
YZM 1102 – Algoritma ve Programlama II
Örnek: İki Sayının Toplamı Akış Şeması
9
Sözde Kod
Toplam için T, birinci sayı
için X, ikinci sayı için Y seç
1. BAŞLA
2. X değerini OKU
3. Y değerini OKU
4. T = X + Y
5. T değerini YAZ
6. BİTİR
Başla
T = X + Y
T değerini YAZ
Bitir
X ve Y
değerlerini
OKU
YZM 1102 – Algoritma ve Programlama II
Mantıksal İşlemler (devam…)
10
• DEĞİL bağlacı; doğruyu yanlış, yanlışı doğru yapar.
Örnek: Yazılım departmanında çalışan erkek personellerden
yaşı 30’un üzerinde olanları ekrana yazdır.
Eğer;
• (perCinsiyet = Erkek) VE (perYas > 30) ise ekrana yazdır.
1. KOŞUL 2. KOŞUL
YZM 1102 – Algoritma ve Programlama II
• Program çalıştırılması sonucunda ekrana «Hello World!»
yazmaktadır.
İlk C Programı11
YZM 1102 – Algoritma ve Programlama II
12
YZM 1102 – Algoritma ve Programlama II
1.Satır: Yorumlar /* …. */ Comments
• 1.satır /* ile başlayıp */ ile bitmektedir. Bu işaretler arasına
yorum satırları yazılır.
• Yorumlar, okunabilirliği artırmak amacıyla kullandığımız bir
özelliktir. Programcı notları olarak da düşünülebilirler.
• Yorum satırlarında bilgisayar hiçbir işlem yapmaz çünkü C
derleyicileri bu satırları atlar.
• Dolayısıyla, yorum satırları için makine diline çevrilmiş
kodlar oluşturulmaz.
13
YZM 1102 – Algoritma ve Programlama II
Yorum Satırı Örnekleri
/* Tek satır yorum */
// Tek satır yorum
/* İki satır yorum
örneği */
/* Birden fazla
satır yorum
örneği */
Toplam = X + Y; // X ve Y toplanarak Toplam değişkenine atanır
14
YZM 1102 – Algoritma ve Programlama II
2. ve 3. Satır: Ön işlemci Direktifleri (#include)
• # işaretiyle başlayan satırlar, program derlenmeden önce C ön
işlemcisi tarafından işlenirler.
• Bu satır, ön işlemciye standart giriş/çıkış başlık dosyasının
yani «stdio.h» dosya içeriğinin programa eklemesini söyler.
• Bu başlık dosyası, derleyicinin «printf» gibi standart
giriş/çıkış kütüphane fonksiyonlarının (STandarD-Input-
Output) derlerken kullanabileceği bilgi ve bildirimleri içerir.
• Başlık dosyalarının uzantısı .h dir.
15
YZM 1102 – Algoritma ve Programlama II
2. ve 3. Satır: Ön işlemci Direktifleri (#include) (devam…)
• Başlık dosyaları, derleyicinin kütüphane fonksiyonu
çağrılarının doğru yapılıp yapılmadığını anlamasında
yardımcı olan bilgiler içerir.
• ANSI C'deki standart başlık dosyaları şunlardır:
assert.h
ctype.h
errno.h
float.h
limits.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
time.h
16
YZM 1102 – Algoritma ve Programlama II
5. Satır: main( ) fonksiyonu
• C programlarının ana fonksiyonu olarak tabir edilir.
• main() kelimesinden sonraki parantezler ( ) main'in
fonksiyon adı verilen program oluşturma bloklarından biri
olduğunu gösterir.
• Programın yürütülmesi ilk olarak bu fonksiyonun
çağrılmasıyla gerçekleşir.
• C programları bir veya birden fazla fonksiyon içerebilir
ancak bunlardan biri mutlaka main() olmalıdır.
17
YZM 1102 – Algoritma ve Programlama II
7. Satır: printf("Hello World!\n"); fonksiyonu
• printf standart kütüphanede bulunan ekrana formatlı bilgi
yazdırma fonksiyondur. Çift tırnak işareti arasındaki
karakterleri ekrana yazdırır.
• Yazdırılacak karakterlerin tümüne karakter dizesi «string»,
mesaj ya da hazır bilgi «literal» denir.
• printf, parantezler içindeki bağımsız değişkenler (argument)
ve noktalı virgülden oluşan bu satıra «ifade» denir.
• Her ifade ; (noktalı virgül) ile bitmelidir. Noktalı virgüle ifade
sonlandırıcı da denir.
18
YZM 1102 – Algoritma ve Programlama II
7. Satır: printf("Hello World!\n"); fonksiyonu (devam…)
• printf ifadesindeki tırnak işaretleri arasındaki karakterler
aynen ekrana yazdırılır. Ancak \n karakterlerinin
yazdırılmamaktadır.
• Ters eğik çizgi ( \ ), çıkış karakteri olarak adlandırılır ve
printf'in farklı bir iş yapması gerektiğini belirtir.
• printf, ters çizgi işaretiyle karşılaştığında, bu işaretten sonraki
karaktere bakar ve bu karaktere göre bazı özel işler yapar.
• Ters çizgi işareti ( \ ) ve bu işaretten sonra gelen karaktere
çıkış sırası denir.
• \n çıkış sırası, yeni satır anlamına gelir ve imlecin yeni satıra
geçmesine sebep olur.
19
YZM 1102 – Algoritma ve Programlama II
C Veri Türleri
• C programlama dilinde 5 tane temel veri tipi bulunmaktadır.
1. char: karakter veriler
2. int: tamsayı veriler
3. float: tek duyarlıklı kayan noktalı sayılar
4. double: Çift duyarlıklı kayan noktalı sayılar
5. void: Değer içermeyen verilerdir.
20
YZM 1102 – Algoritma ve Programlama II
C Değişkenleri
• Değişken, program içinde kullanılan değerlere bellek
üzerinde açılan alanlardır. Bu alanlar bir değişken ismi ile
anılır.
• Değişken isimlendirilmeleri, tanımlayıcı kurallarına uygun
biçimde yapılmalıdır.
• C’de tüm değişkenler kullanılmadan önce programa
bildirilmelidir.
• Bu bildirim esnasında, değişkenin veri türü belirlenir.
• Örnek:
veri_türü değişken_adı;
int sayac;
21
YZM 1102 – Algoritma ve Programlama II
C Değişkenleri (devam…)
• Örnekler
int x;
int x1, y1, z1;
long d, d1;
char c;
char c1, c2, c3;
float a;
float a1, a2, a3;
int u[3];
float k[10*20];
• Örnekler
int x = 1;
int x1 = 10, y1 = 20,
z1 = 30;
char c = ‘a’;
float a = 123.45;
22
YZM 1102 – Algoritma ve Programlama II
C Sabitleri
• Sabit bildirimi, başlangıç değeri verilen değişken bildirimi
gibi yapılır.
• Ancak, veri tipinin önüne const anahtar sözcüğü konmalıdır.
• Sabit içerikleri program boyunca değiştirilemez. Yalnızca
kullanılabilir.
• Genellikle, sabit olarak bildirilen değişken isimleri büyük
harflerle, diğer değişken isimlerinin ise küçük harflerle
yazılması (gösterilmesi) C programcıları tarafından
geleneksel hale gelmiştir.
23
YZM 1102 – Algoritma ve Programlama II
C Sabitleri (devam…)
• Örnekler:
const float PI = 3.142857;
const double NOT= 12345.8596235489;
const int EOF= -1;
const char[] = "devam etmek için bir tuşa basın...";
24
YZM 1102 – Algoritma ve Programlama II
C Operatörleri – Atama Operatörleri
Operatör Açıklama Örnek Anlamı
= atama x = 7; x = 7;
+= ekleyerek atama x += 3 x = x + 3
-= eksilterek atama x -= 5 x = x - 5
*= çarparak atama x *= 4 x = x * 4
/= bölerek atama x /= 2 x = x / 2
%= bölüp, kalanını atama x %= 9 x = x % 9
++ bir arttırma x++ veya ++x x = x + 1
-- bir azaltma x-- veya --x x = x - 1
25
YZM 1102 – Algoritma ve Programlama II
C Operatörleri – Atama Operatörleri (devam…)
Örnek Anlamı
x = y++;
y’nin değeri önce x’e aktarılır sonra bir arttırılır.
x = y;
y = y + 1;
x = ++y;
y’nin değeri önce bir arttırılır sonra x’e aktarılır .
y = y + 1;
x = y;
x = y--;
y’nin değeri önce x’e aktarılır sonra bir azaltılır.
x = y;
y = y - 1;
x = --y;
y’nin değeri önce bir azaltılır sonra x’e aktarılır .
y = y - 1;
x = y;
26
YZM 1102 – Algoritma ve Programlama II
C Operatörleri – Atama Operatörleri (devam…)
• Örnek: Aşağıdaki işlemlerden sonra a, b ve c’nin son değerleri
ne olur?
a = 5;
b = a++;
c = ++a;
a = 7
b = 5
c = 7
27
YZM 1102 – Algoritma ve Programlama II
C Operatörleri – Atama Operatörleri (devam…)
• Örnek: Aşağıdaki işlemlerden sonra i’nin son değerlerine olur?
int i = 1;
i++;
++i;
i += 1 + i++;
i = i + 1;
i = 9
28
YZM 1102 – Algoritma ve Programlama II
scanf() Fonksiyonu
• Birçok programda ekrana verilerin bastırılmasının yanı sıra
klavyeden veri okunması gerekebilir.
• scanf() fonksiyonu klavyeden veri okumak için kullanılan
fonksiyondur.
• Tip belirleyicileri printf fonksiyonu ile aynı mantıkta
kullanılır ve % sembolü ile ifade edilir.
• Örneğin klavyeden bir x tamsayısı okumak için aşağıdaki
ifade kullanılır:
scanf("%d", &x);
29
YZM 1102 – Algoritma ve Programlama II
if…else Bloğu
• if ve else tek bir karşılaştırma
deyimi olup else kullanımı isteğe
bağlıdır.
• Eğer bu koşul olumlu ise if den
sonraki bölüm yürütülür ve else
den sonraki bölüm atlanır.
• Koşul olumsuz ise if den sonraki
küme atlanır ve eğer varsa, else
den sonraki kümedeki işlemler
gerçekleştirilir.
if (koşul)
{ Doğru ise İşlem1}
else
{ Yanlış ise İşlem2}
30
YZM 1102 – Algoritma ve Programlama II
if…else Bloğu (devam…)
if (sayi < 0) {
printf("Negatif sayı girdiniz\n");
}
else {
printf("Sıfır veya pozitif bir sayı
girdiniz\n");
}
if (sayi < 0)
printf("Negatif sayı girdiniz\n");
else
printf("Sıfır veya pozitif bir sayı
girdiniz\n");
Örnek 1 Örnek 2
Not: Her iki örnek aynı işlemi gerçekleştirmektedir. Tek fark birinci örnekte { }
sembollerinin kullanılmasıdır. Tek satır deyim içeren bloklarda, { } sembollerinin
kullanılmasına gerek yoktur.
31
YZM 1102 – Algoritma ve Programlama II
Örnek: Girilen notun harf karşılığını bulma
32
YZM 1102 – Algoritma ve Programlama II
switch…case Bloğu
switch (değişken) {case sabit1:
deyim1
break;case sabit2:
deyim2
break;…
case sabitn:deyimn
break;default:
deyimd;}
değişken değeri sabit1 değerine eşitse
deyim1 çalıştırılır ve break kullanılarak
bloktan çıkış yapılır.
değişken değeri herhangi bir sabite eşit
değilse default sabitinin deyimi deyimd
çalışır.
33
YZM 1102 – Algoritma ve Programlama II
Örnek: Girilen il plaka kodlarına göre şehir
isimlerinin yazdırılması (switch-case bloğu)
34
YZM 1102 – Algoritma ve Programlama II
? Karşılaştırma Operatörü
• Bu operatör, if-else karşılaştırma deyiminin yaptığı işi sınırlı
olarak yapan bir operatördür. Genel yazım biçimi:
(koşul) ? deyim1 : deyim2;
• İlk önce koşul sınanır.
• Eğer koşul olumluysa deyim1, olumsuzsa deyim2
değerlendirilir.
• deyim1 ve deyim2 de atama işlemi yapılamaz.
• Ancak koşul deyiminde atama işlemi yapılabilir.
• deyim1 ve deyim2 yerine fonksiyon da kullanılabilir.
35
YZM 1102 – Algoritma ve Programlama II
? Karşılaştırma Operatörü (devam…)
• Örnek:
int sayi = 15;
x = ( sayi < 10 ) ? printf("yazi1") : printf("yazi2");
36
YZM 1102 – Algoritma ve Programlama II
Döngü
• Döngü (loop) deyimleri, bir işlemi yerine getiren kodkümesinin belli bir koşul altında tekrar edilmesi için kullanılır.
• Bir değişken belirli bir değerden başlayıp, son değeri alıncayakadar belirtilen işlemler tekrarlanır.
• Örn: n! değerinin hesaplanması (faktöryel)
• C programlama dilinde:
• for,
• while,
• do...while
olmak üzere üç tip döngü deyimi vardır.
• Diğer programlama dillerinde olduğu gibi, bu deyimlerleistenildiği kadar iç-içe döngü yapısı kullanılabilir.
37
YZM 1102 – Algoritma ve Programlama II
Örnek: 1-10 arasındaki sayıların yazdırılması
38
YZM 1102 – Algoritma ve Programlama II
for Döngü Yapısı Örnekleri
• 1’den 100’e kadar birer birer arttırma
for ( i = 1; i <= 100; i++)
• 100’den 1’e kadar birer birer azaltma
for ( i = 100; i <= 1; i--)
• 7’den 77’ye kadar yedişer yedişer arttırma
for ( i = 7; i <= 77 ; i += 7)
• 2, 5, 8, 11, 14, 17, 20 değerlerini alacak biçimde değiştirme
for ( j = 2; j <=20; j += 3)
39
YZM 1102 – Algoritma ve Programlama II
while Döngüsü
• Bir koşulun gerçekleşmesi durumunda belirli işlemlerintekrarlanması söz konusu ise while döngülerinden yararlanılır.
• while döngüsünün çalışabilmesi için koşulun başlangıçtamutlaka doğru olması gerekir.
• Genel yazım biçimi aşağıdaki gibidir:
while (koşul)
{
...
döngüdeki deyimler;
...
}
40
YZM 1102 – Algoritma ve Programlama II
Örnek: 0 girilene kadar, girilmiş tüm sayıların
toplanması...
41
YZM 1102 – Algoritma ve Programlama II
break Deyimi
• Döngü işlemi devam ederken döngünün koşuluna bağlı
olmaksızın döngüden çıkılmasını sağlayan deyimdir.
• Döngü içinde bu deyime sıra geldiğinde, break ardından
döngü sonuna kadar olan tüm deyimler atlanır ve döngüye
bir sonraki adımdan itibaren devam edilir.
• Tüm döngü türlerinde kullanılabilir.
• Kullanım biçimi aşağıdaki gibidir:
break;
42
YZM 1102 – Algoritma ve Programlama II
İç İçe Geçmiş Döngüler
• Bir program içinde birbiri içine geçmiş birden çok döngü
kullanılabilir. Bu durumda (bütün programlama dillerinde olduğu
gibi) önce içteki döngü, daha sonra dıştaki döngü tamamlanır.
for (i=1; i<n; i++){
//1.dış döngü
for (j=1; j<m; j++) {
//2.iç döngü
}
}
43
YZM 1102 – Algoritma ve Programlama II
Dizi Nedir?
• Veri yapısı türlerinden bir tanesidir (Array, Struct, Pointer,
Class …).
• İçerisinde birden fazla,
• aynı tip ve
• aynı isimdeki
veriyi bellekte depolayabilen değişkenlere dizi denir.
• Örneğin; bir sınıftaki öğrencilerin notlarını saklamak için
dizileri kullanmak mümkündür.
44
YZM 1102 – Algoritma ve Programlama II
Dizilerin Bildirimi
• Bir dizi çok sayıda değişken barındırdığından, bunları
birbirinden ayırt etmek için indis adı verilen bilgiler kullanılır.
• C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış
olursa olsun başlangıç indisi her zaman 0'dır.
• Diziler tanımlanırken;
• dizinin adı,
• dizinin boyutu,
• dizi elemanlarının hangi tipte
olacağı belirtilmelidir.
45
YZM 1102 – Algoritma ve Programlama II
Dizilere Başlangıç Değeri Verme
• Bir dizi, doğal olarak bazı veriler içerecektir.
• Diziye aynı anda birden fazla değer atanabilir. Bunun için söz
konusu değerler { } işaretleri arasında virgül ile ayrılarak
yazılırlar.
• Örnek:
float kutle[5] = { 8.471, 3.683, 9.107, 4.739, 3.918 };
int maliyet[3] = { 25, 72, 94 };
double a[4] = { 10.0, 5.2, 7.5, 0.0};
• Küme parantezleri sonlandırıcı ; karakteri ile bitmektedir.
46
YZM 1102 – Algoritma ve Programlama II
Örnek: Dizi elemanlarına değer atama ve
okuma
47
YZM 1102 – Algoritma ve Programlama II
Karakter Dizileri (Strings)
• Bazı programlama dillerinde karakter dizilerini tutmak için
özel veri türleri (string, vb.) bulunmaktadır.
• Ancak C programlama dilinde böyle bir veri türü olmadığı için
yerine karakterlerden oluşan bir boyutlu diziler kullanılır.
• Karakter dizilerine özel olarak, karakter dizilerinin sonuna
sonlandırıcı karakter olarak adlandırılan bir simge eklenir.
• Sonlandırıcı karakter:
Dizinin bittiği yeri gösterir.
ASCII tablosunun sıfır numaralı ('\0') karakteridir.
48
YZM 1102 – Algoritma ve Programlama II
Fonksiyonlara Genel Bakış
• Fonksiyonlar karmaşık yapılı programların karmaşıklığını
azaltmak ve bu programları modüler bir yapıya
kavuşturmak için kullanılırlar.
• Fonksiyonlar, programcıların tekrarlanan kodlar
yazmalarını önlerler.
• Fonksiyon belirli bir adı olan program parçasıdır.
• Fonksiyonların çalışabilmesi için bir başka fonksiyondan
adı ile çağrılması gerekmektedir.
49
YZM 1102 – Algoritma ve Programlama II
C ve Fonksiyonlar
• C programları fonksiyonlardan oluşurlar.
• Şu ana dek kullandığımız main() de bir fonksiyondur. Bu
fonksiyonun bir başka fonksiyon içinden çağrılmasına gerek
yoktur.
• Her C programında bir main() fonksiyonun yer alması
gerekmektedir.
• main() fonksiyonu, program çalıştırıldığında otomatik olarak
çağrılan bir fonksiyondur.
• Bir main() fonksiyonu içinden bir başka fonksiyon çağrılabilir.
50
YZM 1102 – Algoritma ve Programlama II
Fonksiyon Tanımı
• Fonksiyon, belirli sayıda verileri kullanarak bunları
işleyen ve bir sonuç üreten komut grubudur.
• Her fonksiyonun bir adı ve fonksiyona gelen
değerleri gösteren parametreleri (bağımsız
değişkenleri) vardır.
• Bir fonksiyon bu parametreleri alıp çeşitli işlemlere
tabi tutar ve bir değer hesaplar.
51
YZM 1102 – Algoritma ve Programlama II
Örnek: İki sayının toplamı
52
YZM 1102 – Algoritma ve Programlama II
Parametre ve Argüman
• Fonksiyon
çağrılırken
gönderilen değerlere
Argüman denir.
• Fonksiyon
bildiriminde,
fonksiyona girdi
olarak, kullanılan
değişkenlere
Parametre denir.
53
YZM 1102 – Algoritma ve Programlama II
Örnek: Fonksiyon geri değer dönüşü ve
prototip kullanımı (UYGULA)
54
YZM 1102 – Algoritma ve Programlama II
Örnek: Dizinin Fonksiyonda Kullanılması