Algoritma ve Programlama: Karar Yapıları ve Döngüler Bir algoritma, herhangi bir programlama dili (C, C++, Pascal, Visual Basic, Java gibi) ile kodlandığında program haline gelir. Algoritmada yer alan her bir emir, birer komuttur. Komutlar programlama dillerine göre değişse de algoritma ve algoritmadaki akış şemaları her zaman aynıdır. Yani algoritma veya akış şemalarının dili evrenseldir. Algoritmadaki emir kiplerinin (Gir, Yaz gibi) ve her bir akış şemasının programlama dillerinde (C, C++ ve Java) hangi komutla temsil edildiğini aşağıdaki tablodan (Tablo 1) görebilirsiniz. Tablo 1. Akış şemalarındaki simgelerin programlama dillerindeki komut karşılıkları Akış şeması C C++ int main () int main () Başla a Veri girişi (Gir) a Ekran çıktısı (Yaz, Göster) a=a+1; İşlem (Hesapla) koş ul Karar (Eğer ise) a=1,6, 1 Döngü (Tekrarla) isim Alt program (Çağır) Dur scanf (%d, a); printf ( a ); işlem (a=a+1; gibi) işlem-1; else işlem-2; for(a=1,6,a++) işlemler; tip isim (). scanf (%d, a); veya cin>> a; printf ( a ); veya cout<< a ; işlem (a=a+1; gibi) işlem-1; else işlem-2; for(a=1,6,a++) işlemler; tip isim (). Dr.Bülent Çobanoğlu1
Ekrana Yazdırma (Çıktı işlemi) Komutları Ekrana yazdırma (çıktı işleminde) kullanılan komutları, algoritmada Göster, Yaz emir kipleri ile ifade ettik. Aşağıdaki tabloda görüldüğü üzere, ekrana karakter, mesaj veya bir değişken içeriğini yazdırmada C dilinde printf komutu, C++ dilinde printf ve cout<< komutları kullanılır. Örnek 1. C\C++ dili printf kullanım örneği #include <stdio.h> #include <conio.h> int main() int a=9; printf ("girilen..:%d",a) ; C++ dili cout kullanım örneği #include <iostream> #include <conio.h> using namespace std; int main() int a=9; cout<< "girilen..:" << a << ; Bu iki programında ekran çıktısı aynıdır. İkisi de çıktısını verir. printf komutu <stdio.h> kütüphanesine ihtiyaç duyarken, cout komutu <iostream> kütüphanesine ihtiyaç duyar. Ayrıca cout komutunu yazmadan önce using namespace std; deyimini program başına eklemeliyiz. Aksi takdirde cout komutunu std::cout şeklinde yazmak gerekir. Tablo 1: printf ve scanf komut yapısında kullanılan format karakterleri Basılacak Karakter Çıkış Karakteri Açıklama Tamsayı (işaretli) %d char veya int türlerini onlu tamsayı formatında gösterir. Tamsayı (işaretsiz) %u Ondalıklı sayı %f unsigned int türünü işaretsiz onlu tamsayı formatında gösterir. float ve double türlerini onlu sistemde ondalıklı olarak gösterir. Ondalıklı sayı %g İşaretli veya üstel formatta ondalıklı sayı olarak gösterir. Dr.Bülent Çobanoğlu2
Ondalıklı sayı %e float ve double türlerini üstel biçimde gösterir. Karakter (Tek) %c Tek bir karakteri ekrana basar String (Karakter dizisi) %s Hexadecimal (Onaltılı) %x %X Octal ( Sekizli) %O Stringleri karakter dizisi şeklinde ekranda gösterir. veya int türünü hexadecimal- Onaltılık tamsayı (0,1,2, A,B,..F) formatında gösterir. int türünün Octal-Sekizlik tamsayı (0,1,2,3,4,5,6,7) formatında gösterir. Örnek 2. Komut Satırı int a= 13; printf("%f", (float)a); printf("a=%d",a); printf("a=%x",a); printf( "%c",'a' ); printf("%s","bade"); Ekran Çıktısı 13.0000 a=13 a=d A bade Tablo 2: printf komut yapısında kullanılan çıkış (escape) karakterleri Basılacak Karakter Çıkış Karakteri Örnek kod Ekran Çıktısı ' (Tek Tırnak) \' "Bade\'nin Evi" Bade nin Evi " (Çift Tırnak) \" "Bade dedi \"Selam\" " Bade dedi "Selam" \ (Backslash) \\ "C:\\" C:\ Bir alt satıra geç \n printf ("a\nb"); Bir tab boşluk \t "1\t2" 1 Ø 2 Backspace tuşu \b "12\b3" 13 a b Enter tuşuna basıldı (Satır başı) \r "Bade\rZehra" Bade Zehra Örnek 3. Aşağıdaki C programında printf komutu ile birlikte \n ve \t çıkış karakterlerinin kullanımını öğreneceksiniz. Dr.Bülent Çobanoğlu3
Veri giriş komutları Klavyeden yâda dışardan veri girişini algoritmadaki Gir emir kipi ile ifade ettik. Aşağıdaki tablodan da görüleceği üzere klavyeden veri girişi için C dilinde scanf komutu, Java dilinde Scanner sınıfının metotları, C++ dilinde ise scanf ve cin>> komutları kullanılmaktadır. C dili int a; scanf ("%d", &a); C++ Dili int a; scanf (" %d", &a); int a; std::cin>>a; scanf komutu: Dışardan veri girişi için kullanılan bir C\C++ komutudur. scanf komutunun ilk parametresi (çıkış formatı) printf ile aynıdır. İkinci parametresi ise tanımlanan bir değişken ismidir ve önüne & operatörü gelmelidir. Kullanım şekli; scanf ( çıkış formatı, °isken); çıkış formatı kısmına sadece Tablo 1 deki % simgesi ile gösterilen format karakterleri yazılabilir. Örnek 4: scanf komutunun kullanım örnekleri scanf (%u, &b); //Klavyeden veri girişi yaparken işaretsiz tamsayı girmelisiniz. scanf ("%d, %d, %c", &a, &b, &c); //Klavyeden veri girişi yaparken 3, 4, a gibi aralarında virgül kullanmalısınız. scanf ("%c %c %f", &c1, &c2, &a); //Klavyeden veri girişi yaparken a h 5.4 gibi aralarında boşluk kullanmalısınız. scanf ("%d-%c- %f", &s1, &c1, &s2); //Klavyeden veri girişi yaparken 4- a- 5.4 gibi aralarında tire kullanmalısınız. Dr.Bülent Çobanoğlu4
Tek seçimli yapılarda if deyiminin kullanım şekli; işlem-1; işlem-1; Çift seçimli yapılarda if else deyiminin kullanım şekli; işlem-1; else işlem-2; işlem-1; else işlem-2;? : Operatörü Ayrıca çift seçimli yapı, if /else deyimi kullanılmadan sadece?: operatörü ile gerçekleştirilebilir. Koşul doğru ise <işlem-1>, yanlışsa <işlem-2> gerçekleştirilir. Kullanım şekli; (Koşul)? <işlem-1> : <işlem-2> ; Örnek 5. Klavyeden girilen quiz1, quiz2, odev, vize ve final notuna göre o dersin ortalamasını hesaplayan programı yazınız. Çözüm: Dr.Bülent Çobanoğlu5
Algoritması 1.Başla 2.Gir, notları (q1,q2,od,v,f); 3.Hesapla, Başarı Notunu yi=q1*0.1+q2*0.1+od*0.1+v*0.7; Not=yi*0.5+f*0.5; 4. Eğer (Not>=50) ise Yaz "gectiniz"; Değilse Yaz "kaldınız"; 5.Dur Akış Şeması H Başla q1,q2,od,v,f yi=q1*0.1+q2*0.1+od*0.1+v*0.7; Not=yi*0.5+f*0.5; kaldın Not>= 50 E geçtin Dur C\C++ Dili Kodlaması #include<stdio.h> #include<conio.h> int main() unsigned int q1,q2,odev,vize,fin; double yi, sonuc; printf ("Gir,quz1-quz2-odev-vize-finalnotlarını\n"); scanf("%d %d %d %d %d", &q1,&q2,&odev,&vize,&fin); yi=q1*0.1+q2*0.1+odev*0.1+vize*0.7; sonuc= yi*0.5+fin*0.5; printf("basari Notunuz..:%g\n", sonuc); printf ( (sonuc>=50)? "gectiniz": "kaldiniz"); Örnek 6. 100 lük sisteme göre girilen başarı notunu harfli sisteme çeviren programı yazınız. Kriter: Girilen Not 90 ve üzeri ise AA, 80 89 arası ise BA, 70 79 arası ise BB, 60 69 arası ise CB, 50 59 arası ise CC, 50 den aşağı ise FF şeklinde gösterecek. Çözüm: Dr.Bülent Çobanoğlu6
Algoritması 1. Başla 2. Gir başarı notunu (not) 3. Eğer notunuz 90 ve üzeri ise Yaz AA 4. Değilse eğer notunuz 80 ile 89 arası ise Yaz BA 5. Değilse eğer notunuz 70 ile 79 arası ise Yaz BB 6. Değilse eğer notunuz 60 ile 69 arası ise Yaz CB 1. Değilse eğer notunuz 50 ile 59 arası ise Yaz CC 2. Değilse eğer notunuz 50 den küçükse Yaz FF 3. Dur C\C++ Dili Kodlaması #include <stdio.h> #include <conio.h> int main() int not; printf ("Gir Notu..:\n"); scanf ("%d", ¬); if (not >= 90) printf("aa"); else if (not >= 80) printf("ba"); else if (not >= 70) printf("bb"); else if (not >= 60) printf("cb"); else if (not >= 50) printf("cc"); else printf("ff"); Döngüler Programlama dillerindeki döngü komutlarını da aşağıdaki gibi sıralayabiliriz; for döngüleri while döngüleri do / while döngüleri for deyiminin kullanım şekli; Dr.Bülent Çobanoğlu7
for( değişken=başlangıç değeri; koşul; artım ya da azalım miktarı ) tekrarlanacak işlem-1; for döngü yapısında birden fazla tekrarlanacak işlem var ise tekrarlanacak işlemler aç- kapa süslü parantezleri arasına alınmalıdır. for( değişken=başlangıç değeri; koşul; Artım ya da azalım miktarı ) tekrarlanacak işlem-1; tekrarlanacak işlem-2; Örnek 7. 0 dan 24 e kadar olan çift sayıların toplamını ekranda gösteren programı for döngüsü ile yazınız. Çözüm: Akış Şeması i=0; i<= 24; i=i+2; T=T+i; T while döngüsü kullanım şekli; C\C++ Kodlaması #include <stdio.h> #include <conio.h> int main() int i,t=0; for (i = 0; i <= 24; i += 2) T=T+i; printf("%d ", T); while (koşul) İşlemler; Sürece ( koşul ) tekrarla (işlemleri) Verilen koşul doğru olduğu sürece döngü içerisindeki işlemler tekrar edilir. Koşul kontrol işlemi, döngü başında yapılır. Dr.Bülent Çobanoğlu8
do/while döngüsü kullanım şekli; do İşlemler; while (koşul); Tekrarla (işlemleri) ta ki <koşul> doğru olduğu sürece Bir defa işlem yapıldıktan sonra koşula bakılır, koşul doğru olduğu sürece döngü içerisinde belirtilen işlemler tekrarlanır. Koşul kontrol işlemi döngünün sonunda yapılır. Örnek 8. Aşağıdaki program parçaları çalıştırıldıktan sonra a değişkeninin en son değeri ne olur? int a=5; do a=a+1; while (a<3); int a=5; while (a<3) a=a+1; İlk önce işlem gerçekleşir sonra koşula bakılır. Koşul gerçekleşmediği için döngüden çıkılır. Buna göre a=6 değerini alır. İlk önce koşula bakılır, koşul gerçekleşmediği için döngüden çıkılır. Buna göre a=5 değerini alır. Örnek 9. Dışarıdan girilen sayı sıfırdan farklı olduğu sürece o sayının karesini alan programı yazınız. Çözüm: Algoritması Akış şeması 1. Başla 2. Değişkenleri tanımla 3. Döngüyü başlat (do ) 4. Gir bir sayı (A) 5. Hesapla karesini ( kare=a*a; ) 6. Göster sonucu (kare) 8. Döngü kontrolü yap ( while (A!= 0); ) 9. Dur Basla A kare=a*a; kare E A!=0 H Dur Dr.Bülent Çobanoğlu9
C\C++ Kodlaması #include <stdio.h> #include <conio.h> int main() int A; printf("çıkış için 0 giriniz\n"); do printf("gir bir sayi..:"); scanf ("%d", &A); printf ("karesi= %d \n", A*A); while(a!=0); İç içe Döngü Örneği Örnek 10. Çarpım Tablosunu oluşturup ekranda gösteren programı yazınız. Çözüm: İç içe for döngülerine en güzel örneklerden biri çarpım tablosudur. İçteki döngünün her tamamlanışından sonra dıştaki döngü otomatik olarak bir artar. Dıştaki döngü değişkeni i=1 iken içteki döngü değişkeni j, 1 den 10 a kadar değer alır. j en son değerine ulaştıktan sonra (j=10 olduktan sonra) i değişkeni 2 değerini alır. i=2 iken j değişkeni tekrar 1 den 10 a kadar değer alır ve bu işlem 10 kez tekrarlanır. Yani toplam 100 kez çarpma işlemi gerçekleşir. Dr.Bülent Çobanoğlu10