Upload
lythuy
View
250
Download
0
Embed Size (px)
Citation preview
BİLGİSAYAR NEDİRBilgisayar elektronik-digital bir alet olup, kendisine verilen ham bilgileri işlemcisi ve bellek yardımı ile işleyip (temelde 4 işlem yaptığını söyleyebiliriz), sonucunda kullanıcıya anlaşılır bilgi üreten bir makinedir.Bilgisayar, kullanıcıdan aldığı verilerle mantıksal ve aritmetiksel işlemleri yapan, yaptıgı işlemlerin sonucunu saklayabilen, sakladığı bilgilere istenildiğinde ulaşılabilen elektronik bir makinedir.Bilgisayarlar temel yapı itibariyle donanım ve yazılım olmak üzere iki kısımdan oluşmaktadır.Bilgisayar sistemi, fiziksel tüm parçalar (iç/dış donanım) ve programları ile uyumlu çalışabilen ve işlem yapabilen birimin tümüne bilgisayar sistemi denir.
20.10.2009 Dr. Mustafa T. Babagil 1
Bilgisayarlar temel olarak 2 kısımdan oluşmaktadır.
DONANIMBilgisayarların elle tutulur gözle görülür fiziksel olan kısımına donanım denilmektedir. Ör. Ekran, klavye, Sabit disk (harddisk), fare, yazıcı, bellek, mikroislemci, tarayıcı, ...
Bir bilgisayarın donanımı genel olarak dört ana bölümde incelenebilir. Bunlar, veri girişbirimleri, sonuç çıkış birimleri, hafızalar (bellekler) ve merkezi işlem birimi(CPU) olarak sayılabilir.
20.10.2009 Dr. Mustafa T. Babagil 2
Bilgisayarlar 2 kısımdan oluşmaktadır.
• YAZILIMBir problemin bilgisayar yardımıyla çözümünüsağlayan, çizim yapan, yazı yazan, Internet’tegezinme işlemini gerçekleştiren her türlüprograma, bu programları hazırlayanprogramlara ve bunların ürettikleri veri veyabelgelere, hepsine birden yazılım denir.
20.10.2009 Dr. Mustafa T. Babagil 3
DONANIM
1-)Veri giriş birimleriBelli kurallara göre düzenlenmiş verilerin ve komutların merkezi işlem birimine aktarılmasınısağlayan donanımlardır. En çok kullanılan girişbirimleri olarak klavye (key board), fare (mouse, optik okuyucu (optical reader), tarayıcı(scanner), kamera, barkod okuyucu, ses kayıt cihazı, ağa bağlı diğer bilgisayarlar ve yardımcıbellekler (sabit disk, disket ve kompakt disk) sayılabilir.
20.10.2009 Dr. Mustafa T. Babagil 4
DONANIM
2-)Sonuç çıkış birimleriBilgisayar ortamında mevcut olan bilgileri belirtilen dış ortama aktarılması için kullanılan cihazlardır. Bu birimlerden bazıları aynı zamanda giriş birimi olarak da görev yaparlar. Çıkışbirimlerinden en çok kullanılanları ekran, yazıcıve çizici olarak sayılabilir. Sabit disk, disket, kompakt disk, hoparlör, bilgisayar ağına bağlıdiğer bilgisayarlar, faks-modem gibi cihazlar girişbirimi olduğu kadar aynı zamanda birer çıkışbirimi olarak da görev yaparlar.
20.10.2009 Dr. Mustafa T. Babagil 5
DONANIM3-)Bellek (hafıza / memory), Bilgisayarlarda bulunan bütün verilerin, bilgilerin ve programların geçici ya da uzun vadeli olarak saklandığıbirimlere denir. Bilgisayar bellekleri dış bellek (yardımcı bellek) ve iç bellek (ana bellek) olmak üzere ikiye ayrılabilir.
Dış bellekler, bilgisayarda bulunan bütün programların ve bilgilerin uzun üseli olarak depolandığı birimdir. İşletim sistemi programları ve uygulama programları bu birime kayıt edilerek kalıcı hale getirilir. Hart disk (sabit disk), disket (floppy disk), CD-ROM (compact disc – read only memory) en yaygın kullanılan dış belleklerdir.
İç bellekler, komutların, verilerin ve sonuçların bilgisayarın içinde aktif olarak bulunduğu yerlerdir. Herhangi bir veri ve o veriyi işleyecek olan program mutlaka belleğe yerleştirilmiş olması gerekir. Bilgisayarın çalışması sırasında programlar kullanılan ve üretilen bilgiler bu bellekte yer alır. Fakat bu bellekte bulunma işlemi geçicidir. Bilgisayarın kapatılmasıveya enerjinin kesilmesi durumunda bellekte kayıtlı olan bilgiler silinir. Ana bellekler yapılarına göre RAM (Random Access Memory) ve ROM (Read Only Memory) olmak üzere ikiye ayrılabilir.
20.10.2009 Dr. Mustafa T. Babagil 6
DONANIM
– RAM, geçici bellek, ana bellek, direkt erişimli bellek olarak da anılır. Programların çalışmasını sağlar ve direkt olarak Merkezi İşlem Birimi ile bilgi alışverişi yapar. Sadece RAM’de bulunan program çalışıp işlem yapar, sadece RAM’de bulunan veri işlenir. Programıyüklemek, dosya açmak, aslında onu RAM’e yüklemek demektir.
CD sürücü Kasa Disket SürücüMonitör Tarayıcı Hoparlör KlavyeKumanda Fare
20.10.2009 Dr. Mustafa T. Babagil 7
DONANIM
ROM ise üzerine kayıtlı bilgilerin bir daha değişmesine izin verilmeyen bellektir. Bilgisayar imalatçıları tarafından içlerine bilgiyazılan bu bellek bilgisayar her açıldığında çalışma esaslarının yer aldığı komutların devreye girmesini ve işletim sisteminin de temel program parçalarının RAM belleğe aktarılmasınısağlar.
20.10.2009 Dr. Mustafa T. Babagil 8
DONANIM
4-)Merkez İşlemci Birimi (CPU), bilgisayarın en önemli yapısını oluşturur. Verilerin işlendiği, önceliklerin belirlendiği, bütün birimlere görevlerinin hatırlatıldığı bölümdür. Mikroişlemci veya microprocessor olarak da adlandırılır. MİB’nin yaptığıgörevler şu şekilde sıralanabilir: Önceden verilen komutları veriliş sırasına göre yapılan işlemleri denetler.Aritmetik ve mantıksal işlemleri gerçekleştirir.Giriş biriminden gelen komutların ve verilerin alınarak bellek bölümüne aktarılmasını sağlar.Sonuçların bellek ortamına veya istenen dış ortama aktarılır.
20.10.2009 Dr. Mustafa T. Babagil 9
YAZILIM
Yazılım temel olarak iki ana başlık altında incelenebilir.1-Sistem yazılımları (İşletim Sistemi)İşletim Sistemleri (Operating System - OS), bilgisayar donanımının kullanımına ve düzenlenmesine imkân sağlayan, bilgisayar işlevlerini görecek şekilde kullanmaya hazır hale getiren, açık durduğu sürece kullanıcı ile bilgisayarın arasındaki iletişimi sağlayan programlar topluluğudur. Kişisel ve orta boy bilgisayarlarda kullanılan pek çok işletim sistemi vardır. OS-2, DOS, MOS (Machintosh Operating System), UNIX, XENIX, Windows 9X, Windows 2000, NT, Windows XP örnek olarak sayılabilir.20.10.2009 Dr. Mustafa T. Babagil 10
YAZILIM
2-Uygulama ProgramlarıBilgisayarı kullanarak günlük hayattaki bir işin görülmesini sağlayan her türülü yazılıma uygulama programı denir. Aslında sistem yazılımları, programlama dilleri ve belgelerin dışında kalan bütün yazılımlara uygulama programı denir. Bilgisayarda yazıyazmak (Word), resim yapmak (Paint), çizim yapmak (CorelDraw), internette dolaşmak (Explorer), oyun oynamak (Chess), müzik dinlemek (Media Player) gibi her işi yapan çok sayıda uygulama programı vardır. Aslında bilgisayarın maksadı da kullanıcılara uygulama programları vasıtasıyla yardımcı olmaktır.
20.10.2009 Dr. Mustafa T. Babagil 11
PROGRAMLAMA DİLİBilgisayardaki her türlü yazılımın hazırlanmasınısağlayan programlara “programlama dili” denir. Kullanılan her türlü program mutlaka herhangi bir programlama dili ile hazırlanmıştır. Programlama dilleri kendilerine özgü kodlar kullanarak hazırlanan uygulama programlarının çalışmasını, dolayısıyla kullanıcının istediği amaçlar doğrultusunda program hazırlamasını sağlarlar. Basic, Cobol, Fortran, C++, Delpi programlama dillerine örnek verilebilir. Meselâ bir kullanıcıbilgisayarda bir mektup yazmak isterse önce bilgisayara bir yazı yazma programı yüklemelidir.
20.10.2009 Dr. Mustafa T. Babagil 12
PROGRAMLAMA DİLİ
Yazı yazma programı ise başkaları tarafından hazırlanmış bir yazılımdır. Fakat bunu yapmak için programlama dili kullanmışlardır. Tabi ki, programlama dillerini hazırlamak için de yine programlama dilleri gerekmiştir. Programlama dilleriyle yazılan programlar derlenerek .EXE dosyaları haline dönüştürülürler. Böylece bir programın dosya ismi yazılarak program çalıştırılabilir. Programlama dilleri ile yazılmış bu yazılımlara programın source (kaynak) kodu dosyası denir.
20.10.2009 Dr. Mustafa T. Babagil 13
PROGRAMLAMA DİLİ
• Bir programlama dilinde aranan başlıca özellikler:
• (1) Kullanım kolaylığı, • (2) Tasarım kolaylığı, • (3) Farklı donanımlara uyum, • (4) Program hatalarını takip edebilirlik ve • (5) Belgeleme kolaylığı olarak sayılabilir
(Banger, 1995).
20.10.2009 Dr. Mustafa T. Babagil 14
PROGRAMLAMA DİLİ
• Programlama dilleri pek çok özelliğine göre sınıflandırılabilir. Günümüzde aslında dilleri birbirinden farklı kılan özellikler azalmakta, programlama dilleri gittikçe birdirine yaklaşmaktadır. Buna rağmen programlama dilleri kabaca dört grupta toplanabilir.
20.10.2009 Dr. Mustafa T. Babagil 15
PROGRAMLAMA DİLİMakine Dili : Her işlemi, ikili sayı sistemindeki kod numarasıile ifade ederek program yazılmasını sağlayan dildir. Dolayısıyla komutlar doğrudan bilgisayarın anlayacağışekildedir. Ayrıca bir yorumlayıcı veya çeviriciye gerek yoktur. Aslında bilgisayarlar zaten makine kodlarına göre çalışmaktadır. Ancak makine dilinde programlamayıöğrenmek ve uygulamak çok zor ve zaman alıcıdır.
Alt Düzey Diller : Makine diline en yakın dillerdir. Sembolik kodlar ve isimler kullanılır. Kendilerine ait birleştirici ve derleyici programları yardımıyla hazırlanan uygulama programlarını makine diline çevirerek çalıştırırlar. Öğrenmesi ve uygulaması oldukça zor dillerdir. Assebler bu grubun en tipik örneğidir .
20.10.2009 Dr. Mustafa T. Babagil 16
PROGRAMLAMA DİLİÜst Düzey Diller : Makine dili komutlarıyla şeklen hiçbir benzerliği bulunmayan, değim, komut ve ifadeler kullanarak işlem yapılmasını sağlayan dillerdir. Öğrenmesi ve uygulaması Alt Düzey dillerine göre daha kolaydır. Hazırlanan uygulama programları derleyici (compiler), yorumlayıcı (intepretater) veya çevirici (assebler) yardımıyla makine diline dönüştürülerek çalıştırılırlar. Fortran, Cobol, PL/1, RPG ve C bu gruba dahil edilebilir.
Etkileşimli Diller : Programcının bir bilgisayar ile karşılıklıetkileşim içinde program geliştirmesini sağlayan dillerdir. Programcı editör vasıtasıyla komutlar yazarak bilgisayara iletir. Bilgisayar komutu hemen işleme sokarak makine diline çevirerek (yorumlayarak) gereken işlemi yapar. Basic ve APL bu grup programlama diline örnek verilebilir.20.10.2009 Dr. Mustafa T. Babagil 17
PROGRAM-YAZILIM
• İnsanla bilgisayar arasındaki iletişim aracı• Programlama dili, programcı ile bilgisayar
arasındaki iletişimi sağlayan bir araç olup programların yazılımında kullanılan bir notasyondur.
20.10.2009 Dr. Mustafa T. Babagil 18
Bilgisayarda problem çözme aşamaları:
• Problemin tanımı• Çözüm yolunun tespiti• Algoritmanın hazırlanması• Akışı diyagramının çizilmesi• Programın hazırlanması• Hazırlanan programın test edilmesi• Uygulama
20.10.2009 Dr. Mustafa T. Babagil 19
1. DESİN SONU
• HAFTAYA HAZIRLANMASI GEREKENLER.
GELECEK HAFTA İÇİN;• ALGORİTMA NEDİR?• AKIŞ DİAGRAMI NEDİR?• AKIŞ DİAGRAMINDA KULLANILAN
SEMBOLLER.
20.10.2009 Dr. Mustafa T. Babagil 20
ALGORİTMA VE AKIŞDİAGRAMLARI
20.10.2009 Dr. Mustafa T. Babagil 21
ALGORİTMA NEDİR
• Algoritma,herhangi bir sorunun çözümü için izlenecek yol anlamına gelmektedir.
• Algoritma verilerin bilgisayara hangi çevre biriminden girileceğinin,problemin nasıl çözüleceğinin,hangi basamaklardan geçirilerek sonuç alınacağının,sonucun nasıl ve nereye yazılacağının sözel olarak ifade edilmesi biçiminde tanımlanabilir.
20.10.2009 Dr. Mustafa T. Babagil 22
BASİT bir örnek: Verilen iki sayının toplamının bulunmasının
Algoritma
Adım 1-Başla
Adım 2-Birinci sayıyı oku
Adım 3-İkinci sayıyı oku
Adım 4-İki sayıyı topla
Adım 5-Dur
20.10.2009 Dr. Mustafa T. Babagil 23
DİKKAT!..
• Algoritma yazımı, sorunun çözümünün başladığını gösteren "BAŞLA" ifadesi ile başlamakta ve işlemlerin bittiğini belirten "DUR" ifadesi ile sona ermektedir.
20.10.2009 Dr. Mustafa T. Babagil 24
Algoritmada kullanılan terimler
Tanımlayıcı (programdaki değişkenleri, sabitleri, kayıt alanlarını, özel bilgi tiplerinin adlandırılması veya belirlenmesi)Değişken (x, ad, tel_no, sayi1 vs. )Aktarma (değişken = ifade)Sayaç (sayac = sayac + 1, x = x+3, s=s-5)Döngüde◦ Döngü değişkeninin başlangıç ve bitiş değeri,◦ Artma ya da azalma miktarı belirlenir.Ardışık toplama ve çarpma◦ top_degis= top_degis+sayi◦ carp_degis= carp_degis*sayi
NOT: bu değişkenleri kullanmanız gerekli değildir. Bunlar, sizlere kolaylık olması için örneklendirme için verilmiştir.
20.10.2009 Dr. Mustafa T. Babagil 25
Örnek 1:• Bir öğrencinin numarası, adı ve soyadı, vize
notu ve final notu girilmektedir. Verilere göre vize notunun %30'ü ile final notunun %70'i alınarak ortalaması hesaplanmak isteniyor. Algoritmayı maddeler halinde yazınız.
20.10.2009 Dr. Mustafa T. Babagil 26
Çözüm 1:
20.10.2009 Dr. Mustafa T. Babagil 27
Örnek 2:• Klavyeden girilen herhangi 5 sayının
ortalamasını bulan programın algoritmasını ve çalışmasını inceleyelim..
20.10.2009 Dr. Mustafa T. Babagil 28
Çözüm 2:
20.10.2009 Dr. Mustafa T. Babagil 29
AKIŞ ŞEMALARI
Yaygın olarak FLOWCHART olarak da türkçede isimlendirilmektedir.Herhangi bir sorunun çözümü için izlenmesi gerekli olan aritmetik ve mantıksal adımların söz veya yazı ile anlatıldığı algoritmanın, görsel olarak simge ya da sembollerle ifade edilmişşekline denir.Algoritmadan farkı,adımların simgeler şeklinde kutular içine yazılmış olması ve adımlar arasındaki ilişkilerin ve yönünün oklar ile gösterilmesidir.20.10.2009 Dr. Mustafa T. Babagil 30
Algoritmanın başladığınıya da sona erdiğini
belirtmek için kullanılır.
Klavye aracılığı ile giriş ya da okuma
yapılacağını gösterir.
Yazıcı aracılığı ile çıkış yapılacağını gösterir.
Kart okuyucu aracılığıyla giriş yapılacağını gösterir.
Araç belirtemeden giriş ya da çıkış
yapılacağını gösterir.
Hesaplama ya da değerlerin değişkenlere aktarımını gösterir.
Aritmetik ve mantıksal ifadeler
için karar verme ya da karşılaştırma durumunu gösterir.
Diskten okuma veya diskete
yazmayıgösterir.
Dr. Mustafa T. Babagil 3120.10.2009
Disketten okuma veya diskete
yazmayıgösterir.
Teyp kütüğünügösterir.
Yapılacak işler birden fazla sayıda yinelecek İse, diğer bir deyişle
iş akışında çevrim (döngü) var ise bu sembol kullanılır.
Oklar işin akış yönünügösterir.
20.10.2009 Dr. Mustafa T. Babagil 32
Akış şemaları içerik ve biçimlerine göre genel olarak üç grupta sınıflandırılabilirler.
> Doğrusal Akış Şemaları
> Mantıksal Akış Şemaları
> Döngüsel (iteratif, çevrimli, yineli) Akış Şemaları
20.10.2009 Dr. Mustafa T. Babagil 33
Doğrusal Akış Şemaları
20.10.2009 Dr. Mustafa T. Babagil 34
İş akışları giriş, hesaplama, çıkış biçiminde olan akış şemaları bu grup kapsamına girer.
Örnek 1: İki sayının çarpımının bulunmasıyla ilgili algoritma aşağıdaki gibidir.Değişkenler:A: Birinci sayıyıB: İkinci sayıyıC: İki sayının çarpımını (A*B) göstersin
Algoritma:Adım 1 – BaşlaAdım 2 – A’yı okuAdım 3 – B’yi okuAdım 4 – C=A*B’yi hesaplaAdım 5 – C’yi yazAdım 6 - Dur
Doğrusal Akış Şemaları
• Örnek 2: Klavyeden girilen İki sayının toplamını hesaplayıp yazan algoritma ve akış şemasını hazırlayınız.
(X: Birinci sayı, Y: İkinci sayı, Z: toplam)A1 : BaşlaA2 : Klavyeden oku XA3 : Klavyeden oku YA4 : Hesapla Z = X + YA5 : Yaz ZA6 : Dur
20.10.2009 Dr. Mustafa T. Babagil 35
Örnek 2 – Akış Şeması
20.10.2009 Dr. Mustafa T. Babagil 36
BAŞLA
DUR
OKU X
OKU Y
Z=X+Y
YAZ Z
ÖRNEK: KLAVYEDEN İKİ DEĞİŞKEN GİRİLİP BUNLARIN ÇARPIMININ BAŞKA BİR DEĞİŞKENE
ATANMASI VE SONUCUN HESAPLANMASI
20.10.2009 Dr. Mustafa T. Babagil 37
Mantıksal Akış Şemaları• Geniş ölçüde mantıksal kararları içeren akışşemalarıdır. Hesap düzenleri genellikle basittir.
Örnek 3: Klavyeden girilen bir sayının pozitif, negatif veya sıfıra eşit olma durumunu hesaplayıp yazdıran algoritma ve akış şemasını hazırlayınız.
(S : Sayı)A1 : BaşlaA2 : Oku SA3 : Eğer S > 0 ise “Pozitif” yaz, A4 : Eğer S < 0 ise “Negatif” yaz,A5 : Eğer S = 0 ise “Sıfıra eşit” yaz,A6 : Dur
20.10.2009 Dr. Mustafa T. Babagil 38
Örnek 3 – Mantıksal Akış Şemaları(klavyeden girilen sayının 0 ile kıyaslanması)
20.10.2009 Dr. Mustafa T. Babagil 39
BAŞLA
DUR
OKU S
S : 0
YAZ“Sıfıra eşit”
YAZ “Pozitif”
YAZ “Negatif”
S < 0S > 0
S = 0
Döngüsel Akış Şemaları
• Sorunun çözümü için, çözümde yer alan herhangi bir adım ya da aşamanın birden fazla kullanıldığı akış şemalarına denir. İş akışlarıgenel olarak giriş ya da başlangıç değeri verme, hesaplama, kontrol biçiminde olmaktadır.
20.10.2009 Dr. Mustafa T. Babagil 40
Döngüsel Akış Şemaları• Örnek 4: Klavyeden girilen bir yazıyı 5 kez yazdıran algoritma
ve akış şemasını oluşturunuz.
( Y : Yazı, S : Sayaç )A1 : BaşlaA2 : Oku YA3 : Yaz YA4 : S = S + 1A5 : Eğer S < 5 ise A3 e gitA6 : Dur
20.10.2009 Dr. Mustafa T. Babagil 41
Örnek 4 – Döngüsel Akış Şemaları
20.10.2009 Dr. Mustafa T. Babagil 42
BAŞLA
DUR
OKU Y
YAZ Y
S = 0 , 5, 1
S
Sayısı bilinen döngülerde; başlangıçdeğeri, son değer, artışsayısı
Döngünün çalıştığıbölüm
ÇALIŞMA SORULARI -1: ALIŞTIRMALAR
• Girilen 2 sayının toplamını, çarpımını ve farkını hesaplayan bir algoritma ve akışdiagramı hazırlayınız.
• Girilen 2 sayınında 10’dan büyük olup olmadığını veya 10’a eşit olduğunu hesaplayan bir algoritma ve akış diagramıhazırlayınız.
• Girilen 2 sayının ikisinin de 10’dan büyük girilene kadar girişin devam edileceği bir algoritma ve akış diagramı hazırlayınız.
20.10.2009 Dr. Mustafa T. Babagil 43
ÇALIŞMA1: Girilen 2 sayının toplamını, çarpımını ve farkını hesaplayan bir algoritma ve akış diagramı hazırlayınız.
• Başla• Sayı1 ve Sayı2 gir.• Toplam= Sayı1+Sayı2• Çarpım= Sayı1*Sayı2• Fark=Sayı1-Sayı2• Dur.
Dr. Mustafa T. Babagil 4420.10.2009
Dur
Başla
Oku Sayı1, Sayı2
Toplam= sayı1+sayı2Çarpım=sayı1*sayı2
Fark=sayı1-sayı2
Yaz Sayı1, Sayı2, Toplam, Çarpım, Fark İstenirse, Dur’dan önce
eklenebilir!..
Adım adım algoritmaların Çalışmasını inceleyelim. İleride aynı adım adım çalıştırma işini programlar ve program parçaları için de yapacağız.
Çalıştır Sayı 1 Sayı 2 Toplam Çarpım Fark1. Kez 2 5 7 10 -3
2. Kez 10 10 20 100 0
20.10.2009 Dr. Mustafa T. Babagil
Yukarıdaki Tablo, Çalışma 1’in 2 kere çalıştırılmış durumudur. Unutmayın Sayı1 ve Sayı 2 bizim tarafımızdan girilen sayılardır.
45
ÇALIŞMA 2: Girilen 2 sayınında 10’dan büyük olup olmadığını veya 10’a eşit olduğunu hesaplayan bir algoritma ve akış diagramı hazırlayınız.
• Adım 1: Başla• Adım 2: Sayı1 ve Sayı2 gir.• Adım 3: Eğer (Sayı1>10 ve
Sayı2>10) ise Adım 6’e git, Sayı1 ve Sayı2 10’a eşit ise Adım 5’e git
• Adım 4: Yaz, Sayı1 ve Sayı2 aynıanda 10’dan büyük değil. Git Adım 7.
• Adım 5: Yaz, “Sayı1 ve Sayı2 10’a eşit!” Git Adım 7.
• Adım 6: Yaz, “Sayı1 ve Sayı2 10’dan büyüktür”
• Adım 7: Dur.
20.10.2009 Dr. Mustafa T. Babagil 46
Dur
Başla
Oku Sayı1, Sayı2
Sayı1 >10Sayı2>10
Sayı1 ve sayı2 10’dan
büyük
Sayı1 ve sayı2 10’dan büyük değil
Sayı1 ve sayı2 10’a
eşit.
İki sayı da 10’dan büyük
En az bir sayı10’dan küçük
İki sayı da 10’a eşit
Adım adım algoritmaların Çalışmasını inceleyelim. İleride aynı adım adım çalıştırma işini programlar ve program parçaları için de yapacağız.
Çalıştır Sayı 1 Sayı 2 İkisi de Büyük Biri 10’dan büyük Birbirlerine Eşit
1. Kez 1 13 - Evet -2. Kez 14 10 - Evet -3. Kez 11 25 Evet - -4. Kez 10 10 - - Evet
20.10.2009 Dr. Mustafa T. Babagil 47
Yukarıdaki Tablo, Çalışma 2’in 4 kez çalıştırılmış durumudur. Unutmayın Sayı1 ve Sayı 2 bizim tarafımızdan girilen sayılardır.
Versiyon1-ÇALIŞMA 3: Girilen 2 sayının ikisinin de 10’dan büyük girilene kadar girişin devam edileceği bir algoritma ve akış diagramı hazırlayınız.
• Adım 1: Başla• Adım 2: S1 gir.• Adım 3: S1 < 10 Adım 2’ye git.• Adım 4: S2 gir.• Adım 5: S2 < 10 Adım 4’e git.• Adım 6: Dur.
20.10.2009 Dr. Mustafa T. Babagil 48
Başla
İstenirse, Dur’dan önce eklenebilir!..
Oku S1
S1>10S1 10’dan küçük
Oku S2
S2>10S2 10’dan küçük
S1 10’dan büyük
S2 10’dan büyük
Dur
Yaz Sı1, Sı2
NOT: TABİİ Kİ FARKLI ALGORİTMALAR VE AKIŞDİAGRAMLARI HAZIRLANABİLİR.
Adım adım algoritmaların Çalışmasını inceleyelim. İleride aynı adım adım çalıştırma işini programlar ve program parçaları için de yapacağız.
Çalıştır Sayı 1 Sayı 2 İkisi de Büyük Biri 10’dan büyük Birbirlerine Eşit
1. Kez2. Kez 3. Kez4. Kez
20.10.2009 Dr. Mustafa T. Babagil 49
Versiyon 1: Yukarıdaki Tablo, Çalışma 3’ün ?? kere çalıştırılmış durumudur. Unutmayın Sayı1 ve Sayı 2 bizim tarafımızdan girilen sayılardır.
Versiyon2-ÇALIŞMA 3: Girilen 2 sayının ikisinin de 10’dan büyük girilene kadar girişin devam edileceği bir algoritma ve akış diagramı hazırlayınız.
• Adım 1: Başla• Adım 2: S1,S2 gir.• Adım 3: S1 < 10 ve S2 < 10
Adım 2’ye git.• Adım 4: Dur.
20.10.2009 Dr. Mustafa T. Babagil 50
Başla
İstenirse, Dur’dan önce eklenebilir!..
Oku S1,S2
S1>10S2 > 10
S1, S2 10’dan büyük değil
S1 ve S2 10’dan büyük
Dur
Yaz Sı1, Sı2
Adım adım algoritmaların Çalışmasını inceleyelim. İleride aynı adım adım çalıştırma işini programlar ve program parçaları için de yapacağız.
Çalıştır Sayı 1 Sayı 2 İkisi de Büyük Biri 10’dan büyük Birbirlerine Eşit
1. Kez2. Kez 3. Kez4. Kez
20.10.2009 Dr. Mustafa T. Babagil 51
Versiyon 2: Yukarıdaki Tablo, Çalışma 3’ün ?? kere çalıştırılmış durumudur. Unutmayın Sayı1 ve Sayı 2 bizim tarafımızdan girilen sayılardır.
Versiyon3-ÇALIŞMA 3: Girilen 2 sayının ikisinin de 10’dan büyük girilene kadar girişin devam edileceği bir algoritma ve akış diagramı hazırlayınız.
• Adım 1: Başla• Adım 2: S1,S2 gir.• Adım 3: S1 <10 ise Adım 4’e git, S2
<10 ise Adım 5’e git değil ise Adım 6’ya git.
• Adım 4: S1 gir, Adım 3’e git.• Adım 5: S2 gir, Adım 3’e git.• Adım 6: Dur.
20.10.2009 Dr. Mustafa T. Babagil 52
Başla
İstenirse, Dur’dan önce eklenebilir!..
Oku S1, S2
S1 10’dan büyük değil
Dur
Yaz Sı1, Sı2
S1 >10S2 > 10
Oku S1 S2 10’dan büyük değil
Oku S2
Evet
Adım adım algoritmaların Çalışmasını inceleyelim. İleride aynı adım adım çalıştırma işini programlar ve program parçaları için de yapacağız.
Çalıştır Sayı 1 Sayı 2 İkisi de Büyük Biri 10’dan büyük Birbirlerine Eşit
1. Kez2. Kez 3. Kez4. Kez
20.10.2009 Dr. Mustafa T. Babagil 53
Versiyon 3: Yukarıdaki Tablo, Çalışma 3’ün ?? kere çalıştırılmış durumudur. Unutmayın Sayı1 ve Sayı 2 bizim tarafımızdan girilen sayılardır.
Çalışma Soruları 2: Algoritma, Akış Diagramı ve test çalıştırmasını yapınız (en az 5 kez).
1. Gerekli ölçüleri girilen 100 dikdörtgenin alanını ve çevresini hesaplayınız. Ekrana boyutlar, alan ve çevreyi yazdırınız.
2. 20 öğrenci için, Bilg213 dersinden, 2 arasınav(%30) ve 1 final(%40) sınav notunu klavyeden girerek, dersten geçilip geçilmediğini hesaplayınız ve ekrana notlar, ortalama ve başarılı olup olmadığını yazdırınız.
3. Klavyeden 0 sayısı girdi verilene kadar girilecek sayıların ortalamasını hesaplayınız ve ekrana girilen tüm sayıları, kaçtane sayı girildiğini ve ortalamayı yazdırınız.
20.10.2009 Dr. Mustafa T. Babagil 54
1- Gerekli ölçüleri girilen 100 dikdörtgenin alanını ve çevresini hesaplayınız. Ekrana boyutlar, alan ve çevreyi yazdırınız.
• A1: Başla• A2: sayaç=0• A3: boy, en gir• A4: sayac=sayaç+1• A5: Alan=boy*en,
çevre=2*boy+2*en• A6: yaz, boy, en, alan,
çevre• A7: Eger sayaç < 100 git
A3• A8: Dur
20.10.2009 Dr. Mustafa T. Babagil 55
Başla
Sayaç=0
Boy, en
Sayaç=sayaç+1
Alan=boy*enÇevre=2*en+2*boy
En, boy Alan, çevre
Sayaç<100evet
Dur
hayır
1- Gerekli ölçüleri girilen 100 dikdörtgenin alanını ve çevresini hesaplayınız. Ekrana
boyutlar, alan ve çevreyi yazdırınız.
Çalıştır en boy Sayaç Alan Çevre Ekran Çıktısı
İlk durum - - 0 - - -
1. Kez 2 3 1 6 10 3, 2, 6, 10
2. Kez 4 5 2 20 18 5, 4, 20, 18
3. Kez 10 10 3 100 40 10, 10, 100, 40
4. Kez 7 5 4 35 24 5, 7, 35, 24
5. Kez 6 3 5 18 18 3, 6, 18, 18
20.10.2009 Dr. Mustafa T. Babagil 56
2- 20 öğrenci için, Bilg213 dersinden, 2 arasınav(%30) ve 1 final(%40) sınav notunu
klavyeden girerek, dersten geçilip geçilmediğini hesaplayınız ve ekrana notlar,
ortalama ve başarılı olup olmadığını yazdırınız.
A1: BaslaA2: sayaç=0A3: snv1, snv2, final girA4: sayaç=sayaç+1A5: ortalama= 0.3*snv1+0.3*snv2+0.4*finalA6: eger ortalama >= 50 git A7
degilse git A8.A7: yaz, “Gecti”A8: yaz “Kaldi”A9: snv1, snv2, final, ortalama A10:eger sayac < 20 git A3A11: Dur
20.10.2009 Dr. Mustafa T. Babagil 57
Başla
Sayaç=0
snv1, snv2, final
Ortalama=snv1*0.3+snv2*0.3+final*0.4
Ortalama >=50 Geçti
Kaldı
Hayır Evet
Sayac<20
Sayaç=sayaç+1
hayır DurEvet
Snv1, snv2, final, ortalama
2- 20 öğrenci için, Bilg213 dersinden, 2 arasınav(%30) ve 1 final(%40) sınav notunu klavyeden girerek, dersten geçilip geçilmediğini hesaplayınız ve ekrana notlar,
ortalama ve başarılı olup olmadığını yazdırınız.
Çalıştır snv1 snv2 final sayaç ortalama Geçti/Kaldı Ekran Çıktısı
İlk durum - - - 0 - - -
1. Kez 50 50 50 1 50 Geçti Geçti, 50,50,50,50
2. Kez 30 50 80 2 56 Geçti Geçti, 30, 50, 80, 56
3. Kez 50 90 90 3 78 Geçti Geçti, 50, 90, 90, 78
4. Kez 60 70 80 4 71 Geçti Geçti, 60,70, 80, 71
5. Kez 30 40 50 5 41 Kaldı Kaldı, 30, 40, 50, 41
20.10.2009 Dr. Mustafa T. Babagil 58
3- Klavyeden 0 sayısı girdi verilene kadar girilecek sayıların ortalamasını hesaplayınız ve
ekrana girilen tüm sayıları, kaç tane sayıgirildiğini ve ortalamayı yazdırınız.
• A1: Basla• A2: sayaç=0, toplam=0,
ortalama=0• A3: Sayi gir• A4: eğer sayi = 0 git A7• A5: sayaç=sayaç+1• A6: toplam=toplam+sayi, git A3• A7: ortalama=toplam/sayaç• A8: yaz sayaç, ortalama• A9: Dur
20.10.2009 Dr. Mustafa T. Babagil 59
Başla
sayaç=0Toplam=0 ortalama=0
sayı
Sayı =0
Sayaç=sayaç+1
Toplam=toplam+sayı
Ortalama=toplam/sayaç
Sayac, ortalama
Dur
evet
3- Klavyeden 0 sayısı girdi verilene kadar girilecek sayıların ortalamasını hesaplayınız ve ekrana girilen tüm sayıları, kaç tane sayı girildiğini ve ortalamayı yazdırınız.
Çalıştır sayı sayaç toplam ortalama Ekran Çıktısıİlk Durum - 0 0 0 -
1. Kez 5 1 5 - -2. Kez 7 2 12 - -3. Kez 8 3 20 - -4. Kez 10 4 30 - -
5. Kez 0 4 30 7.5 4, 7.5
20.10.2009 Dr. Mustafa T. Babagil 60
Çalışma Soruları 3: Algoritma, Akış Diagramı ve test çalıştırmasını yapınız (1 ve 2’yi en az 5 kez, 3’ü ise
XXX çıkana kadar çalıştırınız.).1- İkinci dereceden bir denklemin gerçel köklerinin olup olmadığını inceleyen ve ekrana
yazdıran bir algoritma hazırlayınız. Klavyeden girilecek olan katsayılar olmalı ve x2 nin katsayısı 0 girilene kadar program çalışmalı. En sonunda ekrana diğer çıktılara ek olarak bir de, kaçtane hesaplandığını yazdırınız.
2- 2’nin 20’nci kuvvetine kadar hesaplayan ve 2’nin 0’ıncı kuvvetinden başlayarak tüm bu kuvvetlerini yazdıran bir algoritma hazırlayınız.
3- Ekrana aşağıdaki çıktıları yazdırabilen bir algoritma hazırlayınız.1 2 3 X1 2 3X X1 2 3X XX1 2 3X XXX.........
20.10.2009 Dr. Mustafa T. Babagil 61
Yani, 3’e kadar say ve X yazdır, bir kere daha 3’e kadar say, XX yazdır, sonra yine 3’e kadar say XXX koydur. Bu işlemi 10 tane X koydurana kadar tekrarlayınız.
1- İkinci dereceden bir denklemin gerçel köklerinin olup olmadığını inceleyen ve ekrana yazdıran bir algoritma hazırlayınız. Klavyeden girilecek olan
katsayılar olmalı ve x2 nin katsayısı 0 girilene kadar program çalışmalı. En sonunda ekrana diğer çıktılara ek olarak bir de, kaçtane hesaplandığını yazdırınız.
• A1: Başla• A2: sayaç=0• A3: a,b,c gir• A4: Eğer a=0 git A9• A5: D=b2 – 4.a.c• A6: Eğer D < 0 ise Git A10• A7: Yaz “gerçek kökleri vardır!..”• A8: sayaç=sayaç+1 git A3• A9: Yaz “ikinci dereceden fonk. değil” git
A11• A10: Yaz “Gerçek kök yoktur!.”• A11: Yaz sayaç• A12: Dur.
20.10.2009 Dr. Mustafa T. Babagil 62
Başla
Sayaç=0
a,b,c
A<0
D=b2 – 4.a.c
D<0
“gerçek kökleri vardır”
Sayaç=sayaç+1
“ikinci derece fonk.değil”
“gerçek kökleri yoktur”
sayaç
Dur
evet
hayır
evet
hayır
2- 2’nin 20’nci kuvvetine kadar hesaplayan ve 2’nin 0’ıncı kuvvetinden başlayarak tüm
bu kuvvetlerini yazdıran bir algoritma hazırlayınız.
• A1: Başla• A2: sayac=1, kvt=1• A3: Yaz kvt.• A4: Eğer sayaç > 21 git
A8• A5: kvt=kvt*2• A6: Yaz kvt• A7: sayaç=sayaç+1 git
A4• A8: Dur
20.10.2009 Dr. Mustafa T. Babagil 63
Başla
Sayaç=sayaç+1
kvt
Sayaç >21
kvt=kvt*2
kvt
Sayaç=1 kvt=1
Dur
hayır
evet
Ekrana aşağıdaki çıktıları yazdırabilen bir algoritma hazırlayınız.1 2 3
X1 2 3X X1 2 3X XX1 2 3
X XXX.........
• A1: Başla• A2: i=0• A3: k=i, s=0• A4: Eğer i=10 git A12• A5: s=s+1• A6: yaz s• A7: Eğer s<3 git A5• A8: k=k+1, i=k;• A9: Eğer k<1 git A3• A10:Yaz “X”• A11: k=k-1git A9• A12: Dur
20.10.2009 Dr. Mustafa T. Babagil 64
Başla
i=0
k=i, s=0
s=s+1
i=10
k=k+1 i=k
s
s<3
K<1
“X”
k=k-1
Dur
evet
hayır
hayır
evet
hayır
evet
C++ PROGRAMLAMAYA GİRİŞ• C ve C++ büyük ve küçük harf duyarlılığına sahiptir.
Kullandığımız ifadeleri birbirinden farklı ve aynıifade olarak kullanıyorsak programımız hataverecektir. Buna bir örnek olarak
ProgramPROGRAMprogRAMProgRam
Kelimelerini verebiliriz. Hepside farklı kelimeler olarak kabul edilirler!...
20.10.2009 Dr. Mustafa T. Babagil 65
C++ İle Programlamaya Giriş• C++ ‘ın Genel Formu
20.10.2009 Dr. Mustafa T. Babagil 66
İlk programımız!• // ilk1.cpp• // Ekrana "Bu benim ilk programım" yazdırıyoruz• #include <iostream.h>• int main()• { • cout << "Bu benim ilk programım";• return 0; • }
20.10.2009 Dr. Mustafa T. Babagil 67
Şimdi Yazdığımız programı inceleyelim:
• "//" işaretini açıklama satırlarında kullanıyoruz. C++ derleyicisi bu notasyonla başlayan satırı okumaz. Bununla birlikte daha uzun cümlelerimiz olursabunları da " /* */ " notasyonunun içinde yazıcağız. Bu özellik de C den bize kalma. Demiştik zaten C `nin tüm özelliklerini C++ içerir. Fakat biz genelde " // " yi kullanacağız.
20.10.2009 Dr. Mustafa T. Babagil 68
#include <iostream.h> : Bu bizim C++ da bulunankütüphane dosyamızı çağırmaya yarıyor.
iostream.h kütüphanesindeki hazır olan " cout " fonksiyonunu çağırıyor. Yani buda bizim fazla kodyazmamıza engel oluyor. .h ile biten dosyalarkütüphane dosyalarıdır. Bunu şuna da benzetebiliriz. Farz edelim ki elimizde bir alet çantası var içindentornavidayı çağırdığımızda vida sıkacağızdır. Bu daona benziyor. C++ da ki hazır kütüphanelerde bir çokhazır fonksiyonlar vardır. İlerde Bu hazır fonksiyonlarişimizi görmemeye başlayınca kendi kütüphanemiziyapmaya başlayacağız. Tabi bu seviyeye geldiğimizdeolayı hemen hemen kavramış olacağız,
20.10.2009 Dr. Mustafa T. Babagil 69
• Daha sonraki satır her C++ programında mutlakabulunması gereken bir satırdır. Her C++ programında main() fonksiyonu olmak zorundadır; bu fonksiyonumuzun önünde ise o fonksiyonundönderdiği değişkenin veri tipi olmalıdır. Tabi ki C++ fonksiyonlar ve onların dönderdikleri değerlerkonusunu da ileride işleyeceğiz.
• Bir sonraki satırda ise; C++ fonksiyonlar ve kodblokları " { } " parantezleri arasında bulunmalıdır. main de bir fonksiyon ise onun içindeki kodlar doğalolarak { } parantezleri arasındadır.
20.10.2009 Dr. Mustafa T. Babagil 70
Program derlenip çalıştırıldığında ise ( Turbo C++ 3.1 kullanıyorsanız ctrl+f9 kısa yoluyla programıçalıştırabilirsiniz (Run) ) karşımıza "Bu benim ilk programım" yazısı çıkacaktır. İşte bu yazıyı ekrana veren komut da iostream.h kütüphanesindeki cout fonksiyonudur.Önemli bir nokta ise C++ dilinde her satır ifadenin sonuna " ; " koymak zorundayız. Bundan farklı olarak #include satırlarının ve bir kaç farklı satırın arkasına " ; " gelmez. Bunları ileride göreceğiz.Return 0 : programımızın (aynı zamanda main fonksiyonumuzun) çıkış noktasıdır. Eğer return ile 0 değeri dönderirsek programımızın güvenle çıktığınıişletim sistemine bildirmiş oluruz. Bu sayede güvenleprogramımızın çalıştığını göreceğiz.
20.10.2009 Dr. Mustafa T. Babagil 71
Bazı gerekli notasyonlar
20.10.2009 Dr. Mustafa T. Babagil 72
Dizi: Adı:
\a Alarm
\b Bir karakter geri (Backspace)
\f Formu itekle
\n Yeni satır ( yukarda kullandığımız (newline) )
\r Return
\t Yatay boşluk
C++ Programlamanın temel parçaları
// örnek C++ programı#include <iostream>using isim std;int main() {
cout << “merhaba, nasılsın!";return 0;
}
20.10.2009 Dr. Mustafa T. Babagil 2-73
Yorum
Hazır kütüphane dosyası çağırımı
Kullanılacak isimler
Main ismindeki başlangıç fonksiyonu
Main bloğunun başlangıcı
output statement
Mesaj olarak Düz yazı.
0 tam sayısını işletim sistemine gönderme
Main bolğunun bitişi
ÖZEL KARAKTERLERCharacter Name Meaning// Çift slaş Yorum başlangıcı# Numaralandırma
işaretiKütüphane dosyası başlangı
20.10.2009 Dr. Mustafa T. Babagil 2-74
cı, (çağırılması)
< > Açma/kapama sembolleri
#include daki dosya adlarının başına ve sonuna konur.
( ) Açma/kapama parantezleri
Fonksiyonlar isimlendirilirken kullanılır.
{ } Açma/kapama parantezleri
Birden çok, grup komutlarıyazılırken kullanılır.
“ “ Aç/kapat tırnak işaretleri
Düz yazı yazdırılacağında kullanılır.
; Noktalı virgül Bir program komutunun sonunu bildirir.
cout Objesi
• Bilgisayar ekranına çıktıyı göndermeye yarar.
• cout’a bilgi gönderirken << işareti kullanılır.
cout << “Programlama çok zevkli!";
20.10.2009 Dr. Mustafa T. Babagil 2-75
• Aşağıdaki tek satırda gözüken bir çıktıoluşturacaktır.
cout << “Programlama çok”;cout << “zevkli!”;
ccoutout ObjesiObjesi
20.10.2009 Dr. Mustafa T. Babagil 2-76
endl uygulayıcısı
• endln, yeni bir satır oluşturmak, bu komutun kullanıldığı yerde yeni satıra geçmek için kullanılır. Aşağıdaki iki satır çıktı oluşturur.
cout << “Programlama çok” << endl;cout << “zevkli!”;
20.10.2009 Dr. Mustafa T. Babagil 2-77
endl uygulayıcısı
20.10.2009 Dr. Mustafa T. Babagil 2-78
Programlama çokgüzel!
cout << “Programlama çok” << endl;cout << “güzel!”;
#include direktifleri.
• Yazmakta olduğunuz programın içerisine bir başka dosyanın içeriğini dahil etmek amaçlıkullanımlar için emir komutudur.
• Bu bir C++ komutundan ziyade bir işlem öncesiemir aktarımı olarak kabul edilebilir.
• #include satırları derleyici tarafından dikkate alınmazlar.
• #include bir komut olmadığından dolayısonuna ; işareti konmamalıdır.
20.10.2009 Dr. Mustafa T. Babagil 79
Değişkenler (variables)
• Değişken (variable) hafızada yer tutabilecek bir isimlendirmedir.
• Tutacağı yada saklayacağı bilginin ismini ve türünü gösterir.
• Kullanılmadan önce tanımlanmalıdırlar.
int degisken2;
şeklinde, kullanılırlar.20.10.2009 Dr. Mustafa T. Babagil 80
// Bu programda variable uygulaması görülmektedir.#include <iostream>using namespace std;int main(){int sayi;
sayi=5;
// ekrana yazdırmak için
cout << “ sayimizin değeri “ << sayi << endl;
return(0);}
Programın çıktısı isesayimizin değeri 5 şeklindedir.20.10.2009 Dr. Mustafa T. Babagil 81
Tanımlayıcılar. (identifiers)• Bir tanımlayıcı, programın belli bir parçasını
tanımlayandır. Bunlar, bir fonksiyon, bir değişken ya da bir başka dosya adı olabilirler.
• Bir sonraki slayt da yalnızca C++’a ait, C++’a özel ayrıltılmış (reserved) kelimeler vardır. Bunlar tanımlayıcı olarak kullanılamazlar.
20.10.2009 Dr. Mustafa T. Babagil 82
C++C++’’ a a öözel, ayrzel, ayrııltltıılmlmışış kelimeler kelimeler aaşşaağığıdaki gibidirler.daki gibidirler.
20.10.2009 Dr. Mustafa T. Babagil 83
Değişken isimleri
• Değişkenlerin isimleri seçilirken neyi temsil ettiklerini anlatabilmeleri gerekliliği üstünde durmalıyız. Yani anlaşılabilir değişken isimleri seçilmelidir.
20.10.2009 Dr. Mustafa T. Babagil 84
Temel Değişken kuralları
Bir değişkenin:1. İlk karakteri alfabetik bir karakter olmalıdır.2. Eğer alfabetik bir karakterle başlamayacak ise
“_ “ alt çizgi ile başlamalıdır.3. İlk karakterden sonra alfabetik, sayısal yada alt
çizgi karakterleri kullanılabilir.4. Unutmayınız ki Büyük ve küçük harf kullanımı
farklılık göstermektedir. Yani, “Mustafa” ve “mustafa” C++ için farklı iki değişken olabilir.
20.10.2009 Dr. Mustafa T. Babagil 85
Geçerli ve geçerli olmayan değişkenlere örnek
20.10.2009 Dr. Mustafa T. Babagil 86
DEĞİŞKEN (IDENTIFIER)
GEÇERLİ? Geçerli değilse, nedeni!...
toplamsatis Evet
toplam_satis Evet
toplom.Satış hayır . İşareti ve türkçe kullanıldı
4tebirsatis hayır Sayı ile başlamamalı.
toplamsati$ hayır $ işareti içermemeli.
Toplam_satıs hayır Türkçe karakter kullanıldı.
Toplam-satış hayır Hem türkçe karakter hem de –işareti kullanıldı.
Tam sayı değişkeni (integer, int)
• integer değişkeni 5, 100, 3, 0, -34 gibi sayılarısaklamakta kullanılır.
20.10.2009 Dr. Mustafa T. Babagil 87
Tam sayı değişkeni yani integer değişken çeşitinin büyüklüğü ve hafızada tutabileceği sayı aralığı değerleri.
Büyüklüğü AralığıBilgi çeşiti
Değişken tanımlamaları
Ayni cinsten olan değişkenler farklı satırlarda olabileceği gibi aynı satırlar içerisinde de tanımlanabilirler.
int genislik;int yukseklik;int alan;
Veya
int genislik, yukseklik, alan;20.10.2009 Dr. Mustafa T. Babagil 88
Char data çeşiti
• 1 byte yer tutar• Tek karakter temsil etmekte kullanılır.• Karakterin sayısal değeri bellekte tutulur.
CODE:char harf;harf = 'C';
BELLEK:harf
20.10.2009 Dr. Mustafa T. Babagil 89
67
Char data çeşiti
• Değişkene atamalar yapılırken yada ekrana yansıtma (çıktı) yapılırken tek tırnak işareti arasında kullanılır.
harf=‘W’;
‘A’
şeklinde.
20.10.2009 Dr. Mustafa T. Babagil 90
Akışkan sayı (Floating point) data çeşiti• Floating point sayıları aslında reel sayılar olarak
adlandırılabilirler.• Bu data tipleri şunlardırfloatdoublelong double3.48, -2.13 gibi sayıları bellekte tutmaya yararlar.float 4 byte bilgi tutar ve +/-3.4E-38 ve +/-3.4E+38 aralığındadır.double 8 byte’tır ve +/-1.7E-308 ile +/-1.7E+308 aralığındadır.long double 8 byte’tır ve +/-1.7E-308 ile +/-1.7E+308 aralığındadır.
20.10.2009 Dr. Mustafa T. Babagil 91
Floating point programı// reel sayı uygulaması yapalım#include<iostream>using namespace std;
int main(){float katedilenyol;float zaman, hiz;
katedilenyol=308; //kilometrezaman=2.5; //saathiz=katedilenyol/zaman;cout<<katedilenyol<<“ km. mesafeyi “<<hiz<<“km.saatte bir hizla gittiniz.”<<endl;return(0);}
20.10.2009 Dr. Mustafa T. Babagil 92
Programın çıktısı şöyle olacaktır.
308 km. Mesafeyi 123.2km.saatte bir hizla gittiniz.
•• cincin objesi tanımlamış olduğunuz değişken için klavyeden bir değer atamak için kullanılır.
Kullanışı ise aşağıdaki gibidir.........
int yukseklik;cout << “yukseklik gir”;cin >> yukseklik;
...20.10.2009 Dr. Mustafa T. Babagil
cincin ObjesiObjesi
2-93
•• cincin objesi ile birden çok değişken de girilebilir.
Kullanışı ise aşağıdaki gibidir.........int yukseklik, taban;cout << “yukseklik ve taban gir”;cin >> yukseklik >> taban;
...Unutulmamalıdır ki, ilk girilen değer birinci değişkene atanmaktadır.
20.10.2009 Dr. Mustafa T. Babagil 2-94
cincin ObjesiObjesi
•• cincin objesi ile bir karatter dizisi yani bir kelime girişi (klavyeden) aşağıdaki gibi yapılabilir.
Kullanışı........string isim[21]; cout << “adınızı giriniz”;cin >> isim;
...
20.10.2009 Dr. Mustafa T. Babagil 2-95
cincin ile karakter dizisi okumak. (yani ile karakter dizisi okumak. (yani bir kelime giribir kelime girişşi yapmak!..)i yapmak!..)
•string isim[21];
Bunun anlamı 22 karakterden oluşan bir diziyi isim değişkeni üzerine tanımlamaktır. 0, 1, 2, ... 21 ‘ inci karakterler olarak tutulmaktadır. Önemli bir başka nokta ise NULL karakterinin de 22 karakter olarak bu değişkene atanmasıdır. Yani 0 dan 21’e kadar 22 karakter var. Bunu iyice anlamamız gereklidir.
20.10.2009 Dr. Mustafa T. Babagil 2-96
cincin ile karakter dizisi okumak. (yani ile karakter dizisi okumak. (yani bir kelime giribir kelime girişşi yapmak!..)i yapmak!..)
Matematiksel Tanımlar
• Birden fazla matematiksel operatör yardımı ile çok komplex formüller yazılabilir.
• Bir matematiksel tanım, birden fazla matematiksel operatör ile değişkenler kullanılarak, yada değkenler kullanılmadan da yazılabilir!..
• Çıktı ekrana gönderilirken de, cout, objesi güvenle kullanılabilir:
Alan = 2 * PI * yaricap;cout << “cevre = " << 2*(l+w);
gibi..
20.10.2009 Dr. Mustafa T. Babagil 3-97
Matematiksel işlem sırası
• Birden fazla operasyon içeren matematiksel tanımlamalarda işlem sırası aşağıdaki gibidir.
• * , /, +, -
• Örnek: 2 + 2 * 2 – 2
ikinci
20.10.2009 Dr. Mustafa T. Babagil 3-98
ilk üçüncü
Operasyon sırası
20.10.2009 Dr. Mustafa T. Babagil 3-99
Bazı Tanımlamalarda İşlem sonuçları
Tanım Değer
Parantezler ile Gruplama
20.10.2009 Dr. Mustafa T. Babagil 3-100
Bazı Tanımlamalarda İşlem sonuçları
Tanım Değer
Değişken tiplerinde hiyararşi
En Yüksek değer:
En düşük:Saklayabilecekleri (tutabilecekleri) en büyük sayıya göre sıralanmışlardır.
20.10.2009 Dr. Mustafa T. Babagil 3-101
long doubledoublefloatunsigned longlongunsigned intint
İsimlendirilmiş Sabitler• İsimlendirilmiş sabitler (constant variable): Değeri
değiştirilemeyen değişken tanımlarıdırlar. Sabit olarak program başında tanımlanırlar.
• Sabit değişkenleri temsil etmekte kullanılırlar.const double VERGI_ORANI = 0.0675;const int IL_SAYISI = 50;
• Tercihen büyük harflerle tanımlanmaları uygundur.
20.10.2009 Dr. Mustafa T. Babagil 3-102
Sabitler (Constants) ve Sıralı değişkenler (ARRAYS)
• Genel olarak bir isim sabiti kullanımı boyutu bildirilen bir array ile anlatılır.
const int boyut = 21;char isim[boyut];
Olarak tanımlanır. Bunun anlamı 21 karakterlik bir ism girilebileceğidir.
20.10.2009 Dr. Mustafa T. Babagil 3-103
#define kullanımı
#define boyut 50–Tanımın sonunda ; olmadığına dikkat edin!..• Bellekte const gibi yer tutmaz. Bu bir
avantaj olarak sayılabilir.
20.10.2009 Dr. Mustafa T. Babagil 3-104
Bileşik Atamalar
• Aşağıdaki tanımı inceleyelim:
toplam = toplam + 1;
Toplam üzerine devamlı olarak 1 ekler.
20.10.2009 Dr. Mustafa T. Babagil 3-105
Benzer tanımlar
20.10.2009 Dr. Mustafa T. Babagil 3-106
X=6 olarak kabul edelim
Tanım
x e 4 ekler
X’in tanımdan sonraki değeri
x den 3 çıkartır
X’i 10 ile çarpar
X’i, x’in 2 ye bölümüne eşitler
X’i x/4 sonundaki kalana eşitler
Ne yapar
• cmath kütük dosyasını ister.• double alır, ve double çıkartır.• Genelde kullanılan fonksiyonlar:
sin Sine cos Cosinetan Tangentsqrt Kare köklog Doğal (e) logabs Mutlak değer (bir int alır ve bir int çıkartır)
BazBazıı Matematiksel KMatematiksel Küüttüüphane Fonksiyonlarphane Fonksiyonlarıı
20.10.2009 Dr. Mustafa T. Babagil 3-107
Bazı Matematiksel Kütüphane Fonksiyonları
• Aşağıdakiler ise cstdlib kütüğünü isterler.• rand(): 0 ile enbüyük tutabileceği sayı arasında
rastgele bir sayı üretir (int). Her program çalıştığında ayni sırayla sayılar üretir.
• srand(x): Yukardaki sayı üreticiyi başlangıçdurumuna getirmeye yarar. unsigned int xkullanır. Amacı ise değişik sayılar üretilmesini sağlamaktır.
20.10.2009 Dr. Mustafa T. Babagil 3-108
20.10.2009 Dr. Mustafa T. Babagil 109
Karar MekanizmalarKarar Mekanizmalarıı
İlişki (Kıyaslama) Operatörleri
• Sayıların kıyaslanmasında kullanılır.• Operatörler:
> Büyüktür< Küçüktür>= Büyük veya eşit<= Küçük veya eşit== Eşittir!= Eşit değildir
20.10.2009 Dr. Mustafa T. Babagil 4-110
Bazı kıyaslamalar• Boolean tanımlamalar – doğru veya yanlış
• Örnek:12 > 5, doğru7 <= 5, yanlış
eğer x 10 ise, (if x = 10 then)x == 10, doğru, x != 8, doğru, vex == 8, yanlış
olarak değerlendirilir.
= ve == karıştırmamaya dikkat ediniz!..
20.10.2009 Dr. Mustafa T. Babagil 4-111
if ...then... else...
Dr. Mustafa T. Babagil20.10.2009 4-112
Dışarısı soğuk mu?
Ceket giy
Eldiven tak
Bere tak
Doğru
Yanlış
if ...then... else...
• Genel Format:
if (kıyaslama)tanım;
Burada tanım, bir ekran çıktısıkomutu, bir matematiksel işlem, bir başka kıyaslama yada bir atama, v.s. olabilir.
20.10.2009 Dr. Mustafa T. Babagil 4-113
if ...then... else...
20.10.2009 Dr. Mustafa T. Babagil 4-114
Ortalama 50’den büyük
mü?
Başarılı
Doğru
Yanlış
Başarısız
if kıyaslamasını geliştirebiliriz• Birden fazla komutu çalıştırmak için { }
kullanılmalıdır:if (ortalama > 90){
Harfnotu = 'A';cout << “İyi is cıkarttınız!\n";
}
• { } belli bir blok komutu işletmek, çalıştırmak için kullanılır.
• Çok önemli bir başka durum da, iç içe İf kıyaslarıkullanılabileceğidir.
20.10.2009 Dr. Mustafa T. Babagil 4-115
Mantık Operatörleri• Kıyaslamalardan oluşan kıyaslamalar
oluşturmada kullanılırlar• Operatör aslında açıklama anlamına gelebilir:
&& AND Eğer her iki kıyas da doğru olursa,yeni kıyaslama da doğrudur.
|| OR Eğer iki kıyastan biri doğru ise, yeni kıyas da doğru olur.
! NOT Bir tanımın değerini ters çevirir ve doğru tanım yanlış olur, yanlış tanım da doğru olur.
20.10.2009 Dr. Mustafa T. Babagil 4-116
Mantık Operatörleri - örnekEğer tanım aşağıdaki gibi ise,int x = 12, y = 5, z = -4;
(x > y) && (y > z) doğru
(x > y) && (z > y) yanlış
(x <= z) || (y == z) yanlış
(x <= z) || (y != z) doğru
!(x >= z) yanlış
4-117
switch Komutu• Birçok alternatif içerisinden seçim yapmaya
yarar.• Bazı durumlarda if/else if kıyaslaması
yerine kullanılır.
20.10.2009 Dr. Mustafa T. Babagil 4-118
switch Kullanımıswitch (tanım) //integer çıkmalı
{ case durum1: tanım1;case durm2: tanım2;...case durumn: tanımn;kabul edilen: tanımn+1;
}
** break komutu ile switch tanımından çıkış yapılabilir.Harf notu çıkarmak için kullanılabilir!.. Menü hazırlamada kullanılabilir!..
20.10.2009 Dr. Mustafa T. Babagil 4-119
Döngüler (Loops)while (kıyaslama) tanım;
tanım:komut, atama, v.s (bu tanım bir blok olarak da {} arasında yazılabileceği unutulmamalı).
int sayi;sayi=0;while (sayi <= 5){
cout << “selam\n";sayi++;
}
Çıktı 6 tane alt alta selam yazısı olacaktır!.. (sayaçuygulaması)Unutmayın başta kıyaslama yapılıp döngüye giriliyor.
20.10.2009 Dr. Mustafa T. Babagil 120
do-while döngüsü• do-while: önce döngü gerçekleşir sonra kıyaslama
tanımlaması test edilir. (alttan test yöntemi) • Genel Format:
dotanım; // yada bir blok tanım{ }
while (kıyaslama);
• Unutmayın ki ; konulması illa ki şarttır!.
20.10.2009 Dr. Mustafa T. Babagil 5-121
for döngüsü (Loop)• Sayaç kontrolü bilinen döngüler için çok kullanışlıdır.
• Genel Yapısı:
for(başlangıç; test; değer değişimi)komut; // yada blok olarak komutlar{ }
• 3 üncü komut sonrası ; yok!.. Yada şöyle diyelim ) sonrası ; yok!...
20.10.2009 Dr. Mustafa T. Babagil 5-122
for döngüsü (Loop) - Örnekint sayac;
for (sayac = 1; sayac <= 5; sayac++)cout << “selam" << endl;
5 kere alt alta selam yazacaktır!... Veee,
int sayackuvvet=1;for (sayac=1; sayac <=10; sayac++)
kvvet=kuvvet*2;
Yukarıdaki ise 2’nin 10uncu kuvvetine kadar hesaplayacaktır.
İç içe for döngüleri ve iç içe while döngüleri kurulabileceğini de asla unutmayınız.
20.10.2009 Dr. Mustafa T. Babagil 5-123
ÖDEV1- ALGORİTMA1-AKIŞDİAGRAMI!.. C++ PROGRAM KODU-1
20.10.2009 Dr. Mustafa T. Babagil 124
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangici
int sayi1,sayi2; //klavyeden girilecek sayilarint toplam, carpim, fark; //islem sonucunda elde edilecekler
clrscr; // ekranin temizlenmesi için komut (TC4.5’de pek gerekli değil!.. )cout <<"1. sayi ="; cin >> sayi1; cout << "\n"; // klavyeden 1. sayinin girilmesicout <<"2. sayi ="; cin >> sayi2; cout << "\n"; // klavyeden 2. sayinin girilmesitoplam=sayi1+sayi2; carpim=sayi1*sayi2; fark=sayi1-sayi2; // hesaplamalar
cout << "toplam="; cout <<toplam; cout << "\n"; // ekran çiktisi "toplam"cout<<"carpim="; cout<< carpim; cout << "\n"; // ekran çiktisi "carpim"cout<< "fark="; cout<<fark; // ekran çiktisi "fark"
return 0; // main bloguna bir tamsayi(integer) dönulmesi
}// * main blogunun bitimi
ÖDEV1- ALGORİTMA2-AKIŞDİAGRAMI!.. C++ PROGRAM KODU-2
20.10.2009 Dr. Mustafa T. Babagil 125
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangici
int sayi1,sayi2;
cout <<"1. sayi ="; cin >> sayi1; cout << "\n"; // klavyeden 1. sayinin girilmesicout <<"2. sayi ="; cin >> sayi2; cout << "\n"; // klavyeden 2. sayinin girilmesi
if ((sayi1 >10) && (sayi2 >10)) cout << "sayilar 10 dan buyuk!"; // 1. ve 2. sayinin 10 ile //kiyaslanmasi
else if ((sayi1 ==10) && (sayi2 ==10)) // 1. ve 2. sayinin 10 ile kiyaslanmasi
cout << "sayilar esit"; // ekran çiktisi
else cout << "sayilar 10 dan buyuk degil"; // ekran çiktisi
return 0; // main bloguna bir tamsayi(integer) dönulmesi} // * main blogunun bitimi
ÖDEV1- ALGORİTMA3-AKIŞDİAGRAMI!.. C++ PROGRAM KODU-3
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangiciint s1,s2; // klavyeden girilecek olan 1. ve 2. sayinin tanimlanmasi
cout << "sayi1="; cin >> s1; cout<<"\n"; // klavyeden 1. sayinin girilmesiwhile (s1 <= 10) { cout << "sayi1="; cin >> s1; cout<<"\n"; } // 1. sayinin 10 ile kiyaslanmasi ve 10 dan
//büyük girilene kadar giris yapilmasicout << "sayi2="; cin >> s2; cout<<"\n"; // klavyeden 2. sayinin girilmesiwhile (s2 <= 10) { cout << "sayi2="; cin >> s2; cout<<"\n"; } // 2. sayinin 10 ile kiyaslanmasi ve 10 dan
//büyük girilene kadar giris yapilmasi
cout << "sayi1= " << s1; cout<< " sayi2= " << s2; // 1. ve 2. sayinin ekrana yazdirilmasi
return 0; // main bloguna bir tamsayi(integer) dönulmesi} // * main blogunun bitimi
20.10.2009 Dr. Mustafa T. Babagil 126
ÖDEV
VERİLEN ALGORİTMA PROBLEMLERİNİN (ÖDEV SETİ 2)
PROGRAMLARINI YAZINIZ. ÇALIŞTIRIP, KONTROL ETTİKTEN SONRA
LABORATUVARDA DERS HOCANIZA BUNLARI TESLİM EDİNİZ.
20.10.2009 Dr. Mustafa T. Babagil 127
ÖDEV2- ALGORİTMA1-AKIŞ DİAGRAMI!.. C++ PROGRAM KODU- 4
Gerekli ölçüleri girilen 100 dikdörtgenin alanını ve çevresini hesaplayınız. Ekrana boyutlar, alan ve çevreyi yazdırınız.
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangici
int sayac; // dikdörtgenleri sayacak olan sayac(tamsayi olmak zorunda)float boy,en; // boyutlarin tanimlanmasi (reel sayi olabilir)float alan,cevre; // hesaplanacak olanlarsayac=0; // baslangic olarak sifirlanmasi gerekli. Nedeni ise ileriki
// adimlarda +1 yapilacagindan dolayi bilgisayarin kendince atamis// oldugu degeri sifira getirmektir.
20.10.2009 Dr. Mustafa T. Babagil 128
PROGRAM KODU 4, SAYFA 1/2
while (sayac < 100)// 100 den kucuk oldugu sürece asagidakileri yapacak{ // ** dongunun baslangici// ölçülerin girilmesicout << " boy="; cin >> boy; cout <<"\n";cout << " en="; cin >> en; cout <<"\n";
//hesaplamalarin yapilmasi ve sayacin bir arttirilmasisayac=sayac+1;alan=boy*en;cevre=2*(boy+en);//bilgilerin ekrana yazdirilmasicout << "boy="; cout << boy; cout <<"\n";cout << "en="; cout << en; cout <<"\n";cout << "alan="; cout << alan; cout <<"\n";cout << "cevre="; cout << cevre; cout <<"\n";} // ** dongunun sonu
return 0; // main bloguna tamsayi(integer) donulmesi} // * main blogunun bitimi
20.10.2009 Dr. Mustafa T. Babagil 129
PROGRAM KODUNUN DEVAMI(4) SAYFA 2/2
ÖDEV2- ALGORİTMA2-AKIŞ DİAGRAMI!.. C++ PROGRAM KODU- 5
20 öğrenci için, Bilg213 dersinden, 2 arasınav(%30) ve 1 final(%40) sınav notunu klavyeden girerek, dersten geçilip geçilmediğini hesaplayınız ve ekrana notlar, ortalama ve başarılı olup
olmadığını yazdırınız.
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangiciint sayac; // kac ögrenci oldugunu sayacak olan sayac(tamsayi olmak zorunda)int snv1,snv2,final; // sinavlarfloat ortalama; // hesaplanacak olan
sayac=0; // baslangic olarak sifirlanmasi gerekli. Nedeni ise ileriki// adimlarda +1 yapilacagindan dolayi bilgisayarin kendince atamis// oldugu degeri sifira getirmektir.
20.10.2009 Dr. Mustafa T. Babagil 130
PROGRAM KODU 5, SAYFA 1/2
while (sayac < 20) // 20 den kucuk oldugu sürece asagidakileri yapacak{ // ** dongunun baslangici// sinav notlarinin girilmesicout << "arasinav-1="; cin >> snv1; cout << "\n";cout << "arasinav-2="; cin >> snv2; cout << "\n";cout << "final="; cin >> final; cout << "\n";// hesaplamalarin yapilmasi ve sayacin bir arttirilmasisayac=sayac+1;ortalama=0.3*snv1+0.3*snv2+0.4*final;// hesaplanan ortalamanin 50 ile kiyaslanmasi ve ekrana sonuc çikartilmasiif (ortalama >= 50) cout << "Basarili!.. :)) ";
else cout << "Basarisiz!.. :)) ";// ekrana sinav notlari ve ortalamanin eklenmesicout << "arasinav-1= "; cout << snv1; cout << " arasinav-2= "; cout << snv2;cout << " final= "; cout << final; cout << " ortalama= "; cout << ortalama;cout << "\n \n"; // satir atlanmasi.} // ** dongunun sonureturn 0; // main bloguna tamsayi(integer) donulmesi} // * main blogunun bitimi
20.10.2009 Dr. Mustafa T. Babagil 131
PROGRAM KODUNUN DEVAMI(5) SAYFA 2/2
ÖDEV2- ALGORİTMA3-AKIŞ DİAGRAMI!.. C++ PROGRAM KODU- 6
Klavyeden 0 sayısı girdi verilene kadar girilecek sayıların ortalamasını hesaplayınız ve ekrana girilen tüm sayıları, kaç tane sayı girildiğini ve ortalamayı yazdırınız.
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangiciint sayac; // ortalamasi bulunacak sayilarin kac tane oldugunu sayacakfloat sayi,toplam,ortalama; // girilecek olan, hesaplanacak toplam
// ve hesaplanacak olan ortalama degiskenlerisayac=0; toplam=0; ortalama=0; // degiskenlerin sifirlanmasi
20.10.2009 Dr. Mustafa T. Babagil 132
PROGRAM KODU 6, SAYFA 1/2
cout << "sayi= "; cin >> sayi; cout << " \n"; // sayinin girilmesiwhile (sayi != 0) { // sayi 0 girilene kadar calisacak olan dongu
sayac=sayac+1; // girilen sayinin sayilmasitoplam=toplam+sayi; // girilen sayilarin toplanmasicout << "sayi= "; cin >> sayi; cout <<"\n \n"; // yeni sayi girisi
} // dongunun (saglanmasi) sonuortalama= toplam/sayac; // ortalamanin hesaplanmasi
cout << " ortalama= "; cout << ortalama; // ortalamanin ekrana yazilmasi
return 0; // main bloguna tamsayi(integer) donulmesi
} // * main blogunun bitimi
20.10.2009 Dr. Mustafa T. Babagil 133
PROGRAM KODUNUN DEVAMI(6) SAYFA 2/2
Hangi Döngüyü, Nerede Kullanmalı!..Aslında bu sorunun pek de net bir yanıtı yoktur. Ancak elimizdeki problemin çözümü için izlenecek yolu programı yazan kişi belirlediğine göre, seçim de tamamen programı yazana aittir!..•while: Bu döngü önce test eder ve döngü bloğunu çalıştırır yada çalıştırmaz!..
• do-while: Döngü bloğu bir kez çalışır ve sonunda test edilir, uygunsa döngü çalışmaya devam eder!..
• for: eğer belirli sayıda tekrarlama gerekiyorsa bu döngüyükullanmak doğru olur.
•NOT: while ve do-while döngülerinde tekrar sayısıbilinmiyor ve belirli bir şart sağlaması için döngü devam ediyor.
20.10.2009 Dr. Mustafa T. Babagil 5-134
TANIMLANMIŞ FONKSİYONLAR
Fonksiyonları anlatmaya başlamadan önce fonksiyonların neden önemli olduğunu, modüler programlamanın temeli olduğundan biraz bahsedelim.
Modüler programlama, bir programı küçük, fonksiyonel, ve daha basit parçalara bölme işlemine denir. Bu küçük ve daha basit parçaların her biri fonksiyon olarak adlandırılır.
Bir fonksiyon, kendi içinde belirli bir işi yapması için düzenlenmişbir komutlar dizisidir (küçük programdır).
Fonksiyonlar, bir programın işlerliliğini artırıcı ve program yazılımını basitleştirici bir etkiye sahiptir.
20.10.2009 Dr. Mustafa T. Babagil 5-135
20.10.2009 Dr. Mustafa T. Babagil 136
Bu program uzun ve komplex komutlardan oluşmaktadır. Ancak Biz problemi yandaki gibi daha basit parçalara bölerek yazmayı tercih ettik.
Bu programda, program küçük parçalar halinde (gerktiği kadar!..) hazırlandı ve kendileri ayrı ayrıçalışabilen programlar (fonksiyonlar) olarak yazıldı.
int main () {
komut;komut;komutkomut;komut;komut;komut;komut;komutkomut;komut;komutkomut;komut;komut;komut;
}
��� ���� ��
� ���������1�
����� ������� ���ı �������� �������������2�
����� ������� ���ı �������� ������������� 0�
�
���� ���������1 ��
�
�����1�
�����2�
�����3�
�
���� ���������2 ��
� �����1�
�����2�
�����3�
�����4�
�
• Bir önceki slaytta görüldüğü gibi fonksiyon tanımlamaları basitce yapılabilir. Ama unutulmamalıdır ki her yazılan yeni fonksiyon, MAIN program içerisinde kullanılmadan önce tanımlanmalıdır. Derleyici böyle bir fonksiyonun varlığından haberdar edilmeli ve MAIN içerisinde gördüğü her fonksiyonu, tüm program kodu içerisinde function olarak tanımlanmış şekilde bulmalıdır. Eğer function olarak bulamazsa derleyici bize hata gönderecektir.
20.10.2009 Dr. Mustafa T. Babagil 137
Fonksiyon tanımlama
20.10.2009 Dr. Mustafa T. Babagil 138
Hepimizin bildiği gibi MAIN de bir fonksiyondur, yani bir function olarak tanımlanmıştır aslında. Buna göre, bir function tanımını MAIN üzerinde anlatabiliriz.
Fonksiyonun dışarıya vereceği değer çeşidi.
Funksiyon ismi.
Funksiyon parametreleri
Burada parametre yoktur, verilmemiştir
Fonksiyonun esas bölümü.
MERHABA ...............
• Ancak yukarıdaki tanımda olduğu gibi, fonksiyonun, ana programa muhakkak bir değer göndermesi gerekli değildir. (int main () , yani burada int tanımıolmadan da fonksiyon tanımlaması yapılabilir. Ancak böyle bir tecihte int yerine void yazmak gereklidir.)
• Bu durumu şöyle de açıklayabiliriz. Eğer bir fonksiyon, dışarıya değer döndürmeyecekse, o fonksiyonun dışarıya vereceği değer çeşidi voidolmalıdır..void basligiyazdir(){
cout << "Aylik satislar\n";}
20.10.2009 Dr. Mustafa T. Babagil 139
Fonksiyonların Ana programda çağrılması
• Eğer fonksiyonumuz void olarak tanımlanmışsa fonksiyon isminin arkasından () yazılarak kullanılır. Yani,
basligiyazdir();
şeklinde çağrılır.Çağrılan fonksiyon çalıştırıldıktan sonra,
programda fonksiyonun çağrıldığı noktadan sonraki komuta dönülür ve oradan itibaren program devam eder.
20.10.2009 Dr. Mustafa T. Babagil 140
• Aşagıdaki program bir fonksiyonun tanımlanması ve kullanımını gösteriyor.
#include<iostream.h>
void mesajgonder();
void mesajgonder(){cout <<“ fonksiyondan mesaj.........." << "\n";}
int main(){cout <<" ana programdan mesaj!...." << "\n";mesajgonder();cout <<" tekrar ana programdan mesaj!....";return 0;}
20.10.2009 Dr. Mustafa T. Babagil 141
PROGRAMIN ÇIKTISI AŞAĞIDAKİ GİBİDİR!.ana programdan mesaj!....fonksiyondan mesaj..........tekrar ana programdan mesaj!....
Tüm fonksiyonlardaki çalışma şekli şöyledir.
20.10.2009 Dr. Mustafa T. Babagil 142
void mesajgonder(){cout <<“ fonksiyondan mesaj.........." << "\n";}
int main(){cout <<" ana programdan mesaj!...." << "\n";mesajgonder();cout <<" tekrar ana programdan mesaj!....";return 0;}
Önemli!..
• İstenildiği kadar fonksiyon yazılabilir.• Main içerisinde istenildiği kadar fonksiyon
çağrılabilir.• Fonksiyonlar başka fonksiyonları çağırabilir.• Derleyicilerin fonksiyon hakkında bilmesi
gerekenler;• Fonksiyonun ADI• Fonksiyonun return değer tipi (tabii ki varsa)• Kaç parametresi olduğu (tabii ki varsa)• Her parametrenin bilgi tipi (int, char, float ...)20.10.2009 Dr. Mustafa T. Babagil 143
#include<iostream.h>
float dikdortgen_alan(float, float);
float dikdortgen_alan(float x, float y){float alan;alan=x*y;return (alan);}
int main(){float dikkenar, taban, dikdortgeninalani;
cout <<" dik kenari gir---->"; cin >> dikkenar; cout <<"\n";cout <<" taban uzunlugunu gir---->"; cin >> taban; cout << "\n";
dikdortgeninalani = dikdortgen_alan(dikkenar,taban);cout << dikdortgeninalani;
return 0;}
Parametreli Bir Örnek!.
20.10.2009 Dr. Mustafa T. Babagil 144
#include<iostream.h>#include<stdlib.h>
float dikdortgen_alan(float, float);float ucgen_alan(float , float );
float dikdortgen_alan(float x, float y){float alan;alan=x*y;return (alan);}
float ucgen_alan(float x, float y){float alan;alan=(x*y)/2;return (alan);}
int main(){float dikkenar,taban, dikdortgeninalani, ucgeninalani;int secim;
while (secim!=0){cout << " Menuden cikis için -------------> 0" << "\n";cout << " Dikdortgenin alani için -------------> 1" << "\n";cout << " Ucgenin alani için -------------> 2" << "\n";cout << " Programdan Cikis için -------------> 3" << "\n";20.10.2009 Dr. Mustafa T. Babagil 145
20.10.2009 Dr. Mustafa T. Babagil 146
cin >> secim;
switch (secim){case 1: {
cout <<" dikdortgenin dik kenarini gir -------->"; cin >> dikkenar; cout <<"\n";cout <<" dikdortgenin taban uzunlugunu gir ---->"; cin >> taban; cout << "\n";
dikdortgeninalani = dikdortgen_alan(dikkenar,taban);cout << dikdortgeninalani << "\n \n";break;}
case 2: {cout <<" ucgenin dik kenarini gir -------->"; cin >> dikkenar; cout <<"\n";cout <<" ucgenin taban uzunlugunu gir ---->"; cin >> taban; cout << "\n";
ucgeninalani = ucgen_alan(dikkenar,taban);cout << ucgeninalani << "\n \n";break;}
case 3: exit (0);}
}cout << " SWITCH UYGULAMASI BITTI!..";
return 0;}
DİZİLER - ARRAYS• Diziler birden çok aynı bilgi tipinde olan değişkeni
barındırabilen bir tür değişken çeşitidir.• Diziler değişik boyutlarda olabilirler. Bir boyutlu diziler
olabileceği gibi, çok boyutlu diziler de tanımlanabilir. Örnek:
A:A bir tamsayı dizisi olarak tanımlanabilir. Bir boyutlu ve
10 tane aynı çeşitte bilgi saklayabiliyor.tanımlaması int A[10] olarak yapılmalıdır!..
20.10.2009 Dr. Mustafa T. Babagil 147
-5 0 2 3 15 -26 7 8 9 1
A:A bir tamsayı dizisi için
A[0]= -5 A[1]= 0 A[2]= 2A[3]= 3 A[4]= 15 A[5]= -26A[6]= 7 A[7]= 8 A[8]= 9A[9]= 1
Önemli NOT: A Bilgi dizisi 0,1,2,3,4,5,6,7,8,9 lokasyonları olarak yerleştirilmiştir. 0 dan başladığına dikkat etmelisiniz!...
20.10.2009 Dr. Mustafa T. Babagil 148
-5 0 2 3 15 -26 7 8 9 1
• Bir de çok boyutlu dizilere örnek olarak aşağıdaki gibi bir tanım yapabiliriz.
• int A[4][5]
Bu tanım, dizimizin 4 satır ve 5 kolondan oluşacağını ve saklayacağı bilgi tipinin tam sayı olacağını belirtiyor.
A
20.10.2009 Dr. Mustafa T. Babagil 149
1 2 4 -1 3
0 7 8 5 4
0 1 0 9 2
-3 4 5 8 17
• int A[4][5]
A
A[0][0]=1 A[0][1]=1 A[0][2]=4 A[0][3]=-1 A[0][4]=3A[1][0]=0 A[1][1]=7 A[1][2]=8 A[1][3]=5 A[1][4]=4A[2][0]=0 A[2][1]=1 A[2][2]=0 A[2][3]=9 A[2][4]=2A[3][0]=-3 A[3][1]=4 A[3][2]=5 A[3][3]=8 A[3][4]=17
20.10.2009 Dr. Mustafa T. Babagil 150
1 2 4 -1 3
0 7 8 5 4
0 1 0 9 2
-3 4 5 8 17
DİZİLER İÇERİSİNDEKİ BİLGİLERE ERİŞİM, VE BİLGİLERİN İŞLENMESİ
• Bir Dizideki bilgilerin her biri, bir alt_numaraya atanarak saklanmıştır. Yukarıdaki 2 slaytta da bunu gözlemleyebileceğiniz gibi alttaki örneğe dikkat ederek bunu daha iyi anlamanız da mümkündür.
• Yukarıda görüldüğü gibi, numaralandırma, herzaman 0’dan başlamaktadır. Bu numaralandırmayı, bir apartmanın daire numaralarına benzetebilirsiniz!..
20.10.2009 Dr. Mustafa T. Babagil 151
0 1 2 3 4
• Eğer dizideki eleman sayısı n ise ozaman dizinin son elemanının numaralandırması n-1 olur.
• Aşağıdaki dizi 5 eleman için tanımlanmıştır. Buna göre 0,1,2,3 ve 4 numaralandırması toplam olarak 5 elemana denk gelmektedir.
20.10.2009 Dr. Mustafa T. Babagil 152
0 1 2 43
Bir dizinin elemanları, normal değişkenler nasıl işlem görüyorsa,
aynen öyle işleme girebiliyor.• Diziler (Arrays), eleman eleman, tek bir
numaralandırma olarak işlenmelidirler.Cin >> sinavlar[0]; (0 lokasyonuna değer girilmesi için
kullanılır.)
sinavlar[0]=85; sinavlar[1]=75; sinavlar[2]=50;
ortalama=0.3*sinavlar[0]+0.3*sinavlar[1]+0.4*sinavlar[0];
cout << sinavlar; (yanlış bir tanımdır!...)
cout <<sinavlar[0]<<sinavlar[1]<<sinavlar[2]; (Doğrudur!.)
20.10.2009 Dr. Mustafa T. Babagil 153
Aşağıdaki program bir öğrencinin sınav notlarını, 3 elemanlı tanımlanmış bir dizi içerisine klavyeden girip,
ortalamasını hesaplar.#include <iostream.h>
İnt main()
{ int sinavlar[3]; float ortalama;
cout << “arasinav 1 =“; cin >> sinavlar[0];
cout << “arasinav 2 =“; cin >> sinavlar[1];cout << “final =“; cin >> sinavlar[2];
ortalama=0.3*sinavlar[0]+0.3*sinavlar[1]+0.4*sinavlar[2];
cout <<“ortalama= “<<ortalama;
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 154
ÖNEMLİ
• Bir dizi (array) tanımlandığı zaman o dizinin boyutu yani kapasitesi kadar, hangi değişken tipinde tanımlanmış ise, bellekte, o değişkenin gerektirdiği kadar yer ayrılır. Yani char isim[15]; tanımı, bellekte 15 tane char değişkeni yeri ayırır. Kullanılsa da kullanılmasa da bu 15 char değişkeni bellekte ayrılmıştır. Bu da, belleği iyi kullanmamız gerektiğini bize gösteren en önemli noktalardan biridir.
20.10.2009 Dr. Mustafa T. Babagil 155
ÖNEMLİ
• Bir başka önemli nokta ise, ARRAY kullanımında dikkatli olmamızı gerektiren diğer bir özelliktir. Genelde, sayisal değerler saklanacak olan ARRAYler için, kullanmadan önce tüm değerleri yani ARRAY lokasyonlarını ilk değerlere atamak gerekliliği vardır. Aslında bu yapılmazsa herzaman sorun oluşturmayacağı gibi, boş bırakılmışolabilecek olası lokasyonların olası kullanımlarında sorunlarla karşılaşabiliriz.
20.10.2009 Dr. Mustafa T. Babagil 156
Bir dizi içerisine döngü yardımı ile bilgi girişi yapma işlemi. İşimizi çok kolaylaştırıcı bir örnek
#include <iostream.h>
int main(){ long int ogrencinumarasi[10]; int i;
//asagidaki dongu 10 tane ogrenci numarasini tek tek girmemizi saglayacak.for(i=0;i<10;i++){cout << (i+1) <<"." <<" ogrencinin numarasini giriniz---> "; cin >> ogrencinumarasi[i]; cout <<"\n";}
//asagidaki dongu ise girdigimiz ogrenci numaralarini ekrana yansitmamizi saglayacak.
for(i=0;i<10;i++){cout << (i+1) <<"." <<" ogrencinin numarasi---> " << ogrencinumarasi[i];cout <<"\n";}
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 157
Bir dizi içerisine döngü yardımı ile bilgi girişi yapma işlemi. İşimizi çok kolaylaştırıcı bir örnek. Kırmızı ile
yazılan bölüme dikkat ediniz.#include <iostream.h>
int main(){ long int ogrencinumarasi[10]; int i;
//asagidaki dongu, ARRAYi başlangic kabul edilen değerlere atayacaktir.
for(i=0;i<10;i++) ogrencinumarasi[i]=0;
//asagidaki dongu 10 tane ogrenci numarasini tek tek girmemizi saglayacak.for(i=0;i<10;i++){cout << (i+1) <<"." <<" ogrencinin numarasini giriniz---> "; cin >> ogrencinumarasi[i]; cout <<"\n";}
//asagidaki dongu ise girdigimiz ogrenci numaralarini ekrana yansitmamizi saglayacak.
for(i=0;i<10;i++){cout << (i+1) <<"." <<" ogrencinin numarasi---> " << ogrencinumarasi[i];cout <<"\n";}
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 158
Dizilerin (Array) başlangıç değerleri atamaları
• Diziler bazen ilk değerler atanarak işleme koyulabilirler. Bunlar, program içerisinde aritmetik veya mantıksal işlemlerle değişebilen değerlerdir. Bu işlem, program başlangıcında veya tanımlama sırasında, aşağıdaki gibi yapılabilir. (Aşağıdaki programı yazıp deneyiniz!..)
#include <iostream.h>
int main(){ long int ogrencinumarasi[4]={100000,100900,100350,100542};
int i;
for(i=0;i<=3;i++){cout << (i+1) <<"." <<" ogrencinin numarasi---> " << ogrencinumarasi[i];cout <<"\n";}
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 159
Diziler (ARRAY) ve Sakladıkları Bilgilerin İşleme Koyulması
• Bir DİZİ (ARRAY) içerisindeki bilgileri çağırabilmek için bir indeks numarasına ihtiyaç vardır. Bu indeks numarası bir tam sayı olmalıdır ( yani bu indeks numarası, “ int “ olarak tanımlanmalıdır).cout << ogrencinumarasi[3] << endl;
Şöyle kullanılmalıdır: (kullanılabilir!..)int i = 5;cout << ogrencinumarasi[i] << endl;
20.10.2009 Dr. Mustafa T. Babagil 160
Aşağıdaki program SAYI adında 100 elemanlı bir ARRAY tanımlayıp her bir elemanına -1 değeri atamaktadır. Sonra da içeriğin tümünü ekrana yazdırıyor.#include <iostream.h>
int main()
{const int MAX = 100; // sadece MAX değerini değişerek farklıint SAYI[MAX]; // büyüklükte ARRAY oluşturabilirsiniz.
int i;
for (i=0;i<MAX;i++) SAYI[i]=-1;
for (i=0;i<MAX;i++) {cout << SAYI[i]; cout <<"\n";}
return 0;
}
20.10.2009 Dr. Mustafa T. Babagil 161
ÖNEMLİ!..• Array için kullanmış olduğunuz indeks numarası bir
tamsayı ise, derleyici bu indeks numarasının doğru yerde kullanılıp doğru numaralandırma olup olmadığınıkontrol EDEMEZ!..
• Bu yanlışlık, yanlış bellek kullanımına ve bilgisayarın kilitlenmesine, programın hata raporu vermesine yada derleyicinin durmasına sebep olabilir!.. Bu hata indeks numaralarının 0 ile başlaması gerektiği halde 1 ile başlanıldığındagenelde karşımıza çıkar!.. (döngü kullanımlarında dikkat edilmesi gereken bir nokta)
• Başka bir deyişle kullanmış olduğumuz indeks numarası ARRAY için tanımlı olmayabilir. Buna dikkat etmeliyiz. Derleyici, sadece, indeks numarasının tam sayı olup olmadığını kontrol eder.20.10.2009 Dr. Mustafa T. Babagil 162
Aşağıdaki örnek size yukarıda anlattığım durumu açıklamak için yazılmıştır. Burada sayiarrayi içerisinde index numaralandırması artırılmıştır ama program çalışacaktır. (mantıksal olarak yanlış olsa dahi çalışır). Kırmızı ile yazılmış ikinci program ise giriş yapılan yerde hata oluşturacaktır ve çalışmayacak. Ancak Program kodunda hata olmadığına dikkat ediniz!....
#include<iostream.h>
int main(){int sayiarrayi[3];int i;
for (i=0;i<3;i++) sayiarrayi[i++]=i*2;
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 163
#include<iostream.h>
int main(){
int sayiarrayi[3];int i;
for (i=0;i<=3;i++) // hata burda!.. = kaldırınsayiarrayi[i]=i*2;
for (i=0;i<3;i++) cout <<sayiarrayi[i]<<"\n";
return 0;
}
Alttaki program, 10 elemanlı bir ARRAY tanımlar ve başlangıç olarak ilk 4 değeri 3,6,9,12 olarak atanır. Ancak geriye kalan diğer 6
ARRAY elemanına ise, 0 değeri, otomatik olarak derleyici tarafındanatanır.
#include<iostream.h>
int main(){int sayiarrayi[10]={3,6,9,12}; // ARRAY‘in ilk 4 elemanına değerler atıyor.int i;
//for (i=0;i<3;i++) sayiarrayi[i]=i*2;
for (i=0;i<10;i++) cout <<sayiarrayi[i] << "\n";
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 164
Derleyicinin açıklamış olduğum 0 değerlerini atamaması için C++ bize, aşağıdaki gibi, boyut belirlemeyi, bizim girdiğimiz başlangışdeğerleri sayısı kadar otomatik belirlenmesine yardımcı olur.
20.10.2009 Dr. Mustafa T. Babagil 165
#include<iostream.h>
int main(){int sayiarrayi[ ]={3,6,9,12}; // buraya dikkat ediniz!...int i;
for (i=0;i<10;i++) cout <<sayiarrayi[i] << "\n"; // ekrana yazdırmak için..return 0;}
Şunu asla unutmayınız ki, buradaki çıktı sırasında ilk 4 elemandan sonraki elemanlar bilgisayarın işlemcisi tarafından gelişi güzel ekrana yazılmaktadır. Aslında o lokasyonlarda bilgi yoktur ve varmış gibi davranmaktadır!...
Aşağıdaki program, ALFANUMERİK değişkenler (STRING’ler) için, NUMERİK ARRAY’lerde yapmış olduklarımızı, ARRAY tanımınıkullanarak ALFANUMERİK değişkenler için örneklendiriyor.
#include<iostream.h>
int main(){
char sayiarrayi[]="BABAGIL";int i;
//for (i=0;i<3;i++) sayiarrayi[i]=i*2;
for (i=6;i>=0;i--) // BABAGIL yazısını Tersten,cout <<sayiarrayi[i] << "\n"; // L I G B A B A olarak
// Yukarıdan aşağıya doğru yazacaktır.return 0;}
20.10.2009 Dr. Mustafa T. Babagil 166
Aşağıda, soldaki program, İçerisine tanımlama sırasında bilgi girilen ARRAY’in, index numarasıolan i değişkenini artırarak içeriğini ekrana yazmaktadır.
#include<iostream.h>
int main(){ int A[10]={2,4,6,8,10,12,14,16,18,20};int i;
i=0;while (i<10) {
cout << A[i++] << "\n";}return 0;}
20.10.2009 Dr. Mustafa T. Babagil
Aşağıda, sağdaki program, İçerisine tanımlama sırasında bilgi girilen ARRAY’in, her bir elemanının
167
değerini 1 artırarak bu değişmişiçeriğini ekrana yazmaktadır.
#include<iostream.h>
int main(){ int A[10]={2,4,6,8,10,12,14,16,18,20};int i;
for(i=0;i<10;i++){ A[i]++;cout << A[i] << "\n";
}return 0;}
20.10.2009 Dr. Mustafa T. Babagil 168
#include<iostream.h>#include<conio.h>#include<stdio.h>
int main(){ // * main blogunun baslangiciint sayac; // ikinci derecen fonksiyonlarin kactane girildigini sayacak olan sayacfloat a,b,c; // aX^2+bX+c=0 fonksiyonundaki katsayilar.float D; // Discriminant
sayac=0; a=-1; // gerekli baslangic degerleri. a degeri sifirdan farkli herhangibirsey!..
while (a !=0 ) // X^2 nin katsayisi 0 olmadıgi sürece bu döngü isleyecek{ // ** döngünün baslangici
cout << "X^2 nin katsayisini, yani a= "; cin >> a; cout << "\n"; // ilk a degerinin kontrol edilmesiif (a != 0) { // sifir degeri girilmemis ise diger katsayilarin girilmesine devam edilecekcout << "X nin katsayisini, yani b= "; cin >> b; cout << "\n"; // b katsayisi girisicout << "sabit sayiyi, yani c= "; cin >> c; cout << "\n"; // c katsayisi girisi
D=b*b-4*a*c; // discriminant degerinin hesaplanmasi// D degerine göre, köklerin olup olmadiginin degerlendirilmesi
if (D < 0) cout << " Gerçek kokler yoktur!.. \n";else cout << " Gerçek kokleri vardir!.. \n \n";
sayac=sayac+1; // bir sonraki katsayilar girilmeden önce sayacin arttirilmasi} // if kiyaslamasinin sonu (a!=o) icin..
} // ** döngünün sonu
//ekrana kaç kez giris yapildiginin ve hesaplama yapildiginin yansitilmasicout << sayac; cout << ", tane ikinci derece denklem incelendi!.";
return 0; // main bloguna tamsayi(integer) donulmesi
} // * main blogunun bitimi
ÖDEV, PROGRAM KODU 7, SAYFA 1/1
20.10.2009 Dr. Mustafa T. Babagil 169
#include<iostream.h>
int main(){ // * main blogunun baslangiciint sayac; // ikinin 20 kuvvetinin sayilmasiint kvt; // kuvvetlerin hesaplanacagi degisken
sayac=1; kvt=1; // degerlerin baslangic durumlarinin belirtilmesi
while (sayac < 20){ // **ikinin 20 kuvvetine kadar hesaplayacak olan döngü baslangicikvt=kvt*2; // kuvvetin hesaplanmasi
cout << " 2 nin "; cout << sayac; cout <<" inci kuvveti = "; // hesaplanan kuvvetin ekrana yansitilmasicout << kvt; cout <<" \n"; // hesaplanan kuvvetin ekrana yansitilmasi
sayac=sayac+1; // sayacın arttirilmasi} // **ikinin 20 kuvvetine kadar hesaplayacak olan döngünün sonu
return 0; // main bloguna tamsayi(integer) donulmesi
} // * main blogunun bitimi
ÖDEV, PROGRAM KODU 8, SAYFA 1/1
20.10.2009 Dr. Mustafa T. Babagil 170
#include<iostream.h>
int main(){ // * main blogunun baslangiciint i,k,s; // Kullanilacak olan degiskenlerin tanimlanmasi
i=0; k=0; s=0; // baslangic degerleri, yada degiskenlerin sifirlanmasiwhile (i<10) { // **bu islemin 10 kez yapilmasini saglayacak olan döngü baslangici
k=i; // X yazdirilmasinda kullanilacak olan k degiskenine deger atamawhile (s<3) { // 1 2 3 yazacak olan döngü baslangici. s ile yazilacaks=s+1; // s nin 1 arttirilmasicout << s; cout << " "; // ekrana yadirilmasi
} // 1 2 3 döngüsü sonucout <<" \n"; // yeni satira geçilmesik=k+1; // bu sayac kaç kez 1 2 3 yazdirilmis onun bilgisini tutuyori=k; // k bilgisi toplam isin kaç kez yapilacagi ile ilgili
// olarak da kaybedilmemesi gerekli bir bilgi. Bundan dolayi// bu bilgiyi kaybetmemek için i degiskeni tutuluyor.
s=0; // s=0 olmak zorunda. çünkü her defasinda tekrardan 1 2 3 yazilacakwhile (k>=1) { // Ekrana X yazdirilmasi için döngü
// kac kez 1 2 3 yazilmissa o kadar X,// herdefasinda yazdirilacak..cout <<" X "; // ekrana X yazdiriliyork=k-1; // döngünün sona erdirilmesi için..
} // döngü sonucout << " \n \n"; // 2 satır atlayarak yeni satira geçer} // 10 uncu kez yazdirilip, döngünün bitirilmesi
// **döngü sonu
cout << " Bitti!.. ";
return 0; // main bloguna tamsayi(integer) donulmesi
} // * main blogunun bitimi
ÖDEV, PROGRAM KODU 9, SAYFA 1/1
20.10.2009 Dr. Mustafa T. Babagil
#include<iostream.h>
double fact(int);
double fact(int k){double faktoriyel;
if (k==0)faktoriyel = 1; else faktoriyel= fact(k-1) * k;
return faktoriyel;}
int main(){int a;
cout << " sayi gir ---> "; cin >> a; cout <<" \n";
cout << " factorial " << a << " = " << fact(a);
return 0;}
Yandaki Program çalıştırıldığızaman, klavyeden gireceğiniz tam sayının faktöriyelini hesaplıyor.
171
20.10.2009 Dr. Mustafa T. Babagil
;
fibo=0; else {if (k==1) fibo=1;elsefibo=fibonacci(k-2)+fibonacci(k-1);
}
)
< "sayi giriniz ---> "; cin >> sayi; cout << "\n";
< fib;
Yandaki Program Fibonacci sayılarını
hesaplamaktadır. Fibonacci sayıları,
1,1,2,3,5,8,13,21,34,55,89,144.... olarak
yazılan bir sira tam sayıdır. Görüldüğü gibi,
dizideki her sayı kendinden önceki 2
sayının toplamı olarak hesaplanır. Bundan
dolayı yandaki program, rikörsiv olarak
kendi kendisini çağırmakta ve istenilen
sıradaki Fibonacci sayısını hesaplar.
172
#include<iostream.h>
double fibonacci(int )
double fibonacci(int k){double fibo;
if (k<1)
return fibo;}
int main({ int sayi; double fib;
cout <fib=fibonacci(sayi);cout <
return 0;}
Klavyeden girişi yapılan bir
dizi sayının en büyük
olanını bulur ve ekrana
yansıtır. Bu programda
dizinin eleman sayısını
sabit olarak 10 verdik.
(#define max 10 )
#include<iostream.h>
#define max 10
int main(){ int A[max],i,maxi;
for (i=0;i<max;i++){ cout << "sayi giriniz ---> ";
cin >> A[i]; cout << "\n";}
maxi=A[0];
i=1;while (i<max){if (A[i] > maxi) maxi=A[i];i=i+1;}
cout << "max= " <<maxi;
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 173
#include<iostream.h>
#define max 100
int main(){ int A[max],i,k; // i ve k döngülerde kullanilacak degiskenlerint elemansayisi; // A bir dizi (ARRAY). elemansayisi ise kacchar devam; // tane sayi girildigini tutacak olan degiskenint gecici; // devam ise sayi girisini denetleyecek olan degisken.
// sayilarin yer degismesinde kullanilacak degisken.
for (i=0;i<max;i++) A[i]=0; // tüm dizi degerlerine 0 degeri ata.
i=0;while ((i<max) && (devam!='H')) // biz dur diyene kadar A dizisine{ cout << (i+1) << ". sayiyi giriniz ---> "; // degerler girilmesi icin hazirlanan
cin >> A[i]; cout << "\n"; // dongu modulu.i=i+1;cout << " DEVAM ETMEK ISTIYORMUSUNUZ? --->E/H ";cin >> devam; cout << " \n";}
elemansayisi = i;
// tüm girilen sayilari KÜCÜKTEN BÜYÜGE dogru siralayacak olan modül.
for (i=1;i<elemansayisi;i++) // donguyu 1. elemandan baslattik{ k=i; // hangi elemani kiyasliyorsak onun yerini
while ((A[k]<A[k-1]) && (k>0)) // kaybetmemek icin k degiskenini kullandik{ // while dongusu, dogru oldugu süre sayilaringecici=A[k]; // yerleri degismeye devam edecek.A[k]=A[k-1]; // 0 pozisyonu kontrol edildikten sonra duracakA[k-1]=gecici; // ve onceden siralanmislara dokunmayacakk--; // tabii ki kiyaslanan sayi kücük oldugu sürece} // yer degisimi devam edecek.
}
for (i=0;i<elemansayisi;i++) cout << A[i] <<" \n"; // siralanmis sayilarin ekrana// aktarilmasi.
return 0; // isletim sistemine tam sayi donulmesi.}
20.10.2009 Dr. Mustafa T. Babagil 174
Yandaki program, eleman
sayısı 100 ile sabitlenmiş olan
bir tam sayı dizisi içerisine,
klavyeden biz dur diyene
kadar veya 100 tane sayı
girilene kadar sayı girişi
yapılmasına izin verir. Giriş
bittikten sonra ise bu girilen
sayıları küçükten büyüğe
doğru sıralar.
Önemli: Büyükten küçüğe
doğru sıralayan programı da
siz yazınız. Bu program
kodunda ufak bir değişiklik
yeterli olacaktır.
Yandaki program, paskal
üçgenini 2 boyutlu dizi
kullanarak ekrana
yansıtmaktadır. Dizinin
boyutunu 10 satır ve 10 kolon
olarak sabit tanımladım.
İsterseniz değiştirerek
denemeler yapınız.
Örneğin, değişiklik denemesi,
klavyeden girilecek bir sabit
sayıya kadar paskal üçgenini
hazırlatınız.
#include<iostream.h>
int main(){ int k,n;
int A[10][10];
for(n=0; n<10; n++){
for(k=0; k<=n; k++){
if(k==0){A[n][k]=1;}
else if(A[k]==A[n]){A[n][k]=1;}
else if(k>0){A[n][k] = A[n-1][k-1] + A[n-1][k];}
cout << " " << A[n][k];
}cout << "\n";
}
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 175
Yandaki program yine
paskal üçgenini
ekrana getiriyor.
Ancak bizim
istediğimiz kadar sıra
ekrana çıkartıyor.
Ayrıca DİZİ
kullanılmamasına
dikkat ediniz.
#include <iostream.h>
int main(){int n,c;int i,j;
cout << " kac satirdan olusmasini istiyorsunuz? ---> ";
cin >> n;for (i = 0; i < n; i++){
c = 1;for (j = 0; j <= i; j++){
cout << c << " ";c = c * (i - j) / (j + 1);
}cout<<"\n";;
}cout<<"\n";return 0;
}
20.10.2009 Dr. Mustafa T. Babagil 176
Yine bir paskal üçgeni
ancak kendi kendisini
çağıran, rikörsive bir
fonksiyon uygulaması
olarak yazılmış.
#include <iostream.h>
int pascal_ucgeni(int row, int col){
if (row == 0 || col == 0 || row == col + 1)return 1;
return pascal_ucgeni(row - 1, col - 1) + pascal_ucgeni(row - 1, col);
}
int main(){int i,j;
for (i = 0; i <= 15; ++i) {for (j = 0; j < i; ++j)
cout << pascal_ucgeni(i, j) << " ";cout << "\n";
}
return 0;}
20.10.2009 Dr. Mustafa T. Babagil 177
Yandaki program, 2-boyutlu bir 2 tane dizinin carpımını(yani matriks çarpımı) yapmaktadır. Döngülere dikkat ediniz. İki matriks de 3x3 matriks olarak tanımlanmıştır.
#include<iostream.h>
#define satir 3#define kolon 3
int main(){int A[satir][kolon], B[satir][kolon], CARPIM[satir][kolon];int i,j,k,toplam;
//A matriksinin elemanlarini girinizfor (i=0;i<satir;i++)
{ cout <<" ";for(j=0;j<kolon;j++){ cout<<"A["<<i+1<<"]["<<j+1<<"]= "; cin>>A[i][j]; cout<<" "; }
cout <<"\n";}
//B matriksinin elemanlarini girinizfor (i=0;i<satir;i++)
{ cout <<" ";for(j=0;j<kolon;j++){ cout<<"B["<<i+1<<"]["<<j+1<<"]= "; cin>>B[i][j]; cout<<" "; }
cout <<"\n";}
// CARPIM=AxB isleminin sonucu ise asagidaki gibidir.
for (i=0;i<satir;i++)for (j=0;j<kolon;j++)
{toplam=0;for(k=0;k<3;k++)
toplam=toplam+A[i][k]*B[k][j];
CARPIM[i][j]=toplam;}
// CARPIM sonucunun ekrana yazdirilmasifor (i=0;i<3;i++)
{ cout <<" ";for(j=0;j<3;j++){ cout<<CARPIM[i][j]; cout<<" "; }
// { cout<<"B["<<i+1<<"]["<<j+1<<"]= "; cout<<CARPIM[i][j]; cout<<" "; }cout <<"\n";}
return 0;}
Çalışma: Programı adım
adım inceleyiniz ve elde
çalıştırarak deneyiniz. Bu
sizlerdeki, döngü mantığını
geliştirmeye yardımcı
olacaktır.
20.10.2009 Dr. Mustafa T. Babagil 178
Yandaki program, 2-boyutlu bir 2 tane dizinin carpımını(yani matriks çarpımı) yapmaktadır. Döngülere dikkat ediniz. Burada 3x3 ve 3x2 matriks carpımı yapılmıştır.
#include<iostream.h>
#define satir 3#define kolon 3
int main(){int A[satir][kolon], B[kolon][2], CARPIM[satir][2];int i,j,k,toplam;
//A matriksinin elemanlarini girinizfor (i=0;i<satir;i++)
{ cout <<" ";for(j=0;j<kolon;j++){ cout<<"A["<<i+1<<"]["<<j+1<<"]= "; cin>>A[i][j]; cout<<" "; }
cout <<"\n";}
//B matriksinin elemanlarini girinizfor (i=0;i<satir;i++)
{ cout <<" ";for(j=0;j<2;j++){ cout<<"B["<<i+1<<"]["<<j+1<<"]= "; cin>>B[i][j]; cout<<" "; }
cout <<"\n";}
// CARPIM=AxB isleminin sonucu ise asagidaki gibidir.
for (i=0;i<satir;i++)for (j=0;j<2;j++)
{toplam=0;for(k=0;k<3;k++)
toplam=toplam+A[i][k]*B[k][j];
CARPIM[i][j]=toplam;}
// CARPIM sonucunun ekrana yazdirilmasifor (i=0;i<3;i++)
{ cout <<" ";for(j=0;j<2;j++){ cout<<CARPIM[i][j]; cout<<" "; }
// { cout<<"B["<<i+1<<"]["<<j+1<<"]= "; cout<<CARPIM[i][j]; cout<<" "; }cout <<"\n";}
return 0;}
Çalışma: Programı adım
adım inceleyiniz ve elde
çalıştırarak deneyiniz. Bu
sizlerdeki, döngü mantığını
geliştirmeye yardımcı
olacaktır.
20.10.2009 Dr. Mustafa T. Babagil 179