Lab Notları 1 Algoritma Kavramı Algoritma: Bir problemi çözmek için gerçekleştirilmesi gereken adımlar dizisidir. Bir algoritma belli bir adım sonra sonlanmalıdır. Belli bir adım sayısı birkaç olabileceği gibi 10000 veya çok daha fazla da olabilir. Algoritmanın her adımı açık ve kısa bir şekilde yazılmalıdır. Bir algoritma yazmak için mutlaka bir dile bağımlı kalmak zorunluluğu yoktur. Önemli olan yazılan algoritmanın herhangi bir programlama diline uyarlanabilirliğinin olmasıdır. Bu şekilde programlama dilinden bağımsız yazılan koda sözde kod (Pseudocode) denir. Problem: Dosyadan okunan sayıların ortalamasını hesaplayan algoritmayı yazınız. Sözde Kod: 1. Gerekli değişkenleri ilkle 2. while dosya sonu değil ise 3. { 4. Dosyadan sıradaki elemanı oku 5. sayıyı toplam değişkene ekle 6. Toplam sayı adedini bir arttır 7. } 8. return toplam / sayi_adedi Problem: Kullanıcı sıfır girene kadar girmiş olduğu sayıların ortalamasını ekrana yazan bir algoritma yazınız. Sözde Kod: 1. toplam=0, sayi_adedi=0 2. read x 3. If x = 0 goto 7 4. toplam = toplam + x 5. sayi_adedi++ 6. goto 2 7. write toplam / sayi_adedi 8. END Programlama: Bir problemin çözümü için gerekli olan algoritmayı gerçeklemek için istenilen bir programlama dilinde kodunu yazıp çalıştırmaktır. Burada yazılan kod programlama diline uygun olmalıdır. Bir program yazabilmek için yazmak istediğiniz programlama dilini tanıyan ve onu çalıştırılabilir bir program haline getiren bir Derleyici ye ihtiyaç vardır. C++ Programlama Dili C++ dili, hızlı ve düşük seviye özelliklere erişmek isteyen uygulamaların yazılması için popüler bir dildir. C programlama diline birçok ekstra özellik katmıştır. En önemlisi nesne yönelimli bir programlama dilidir. Sınıfları destekler. Çok biçimlilik ve kalıtımı destekler. Bütün C kodlarını derleyebilir. C++ programlama dilini kullanacak bir programcı bellek yönetimini çok iyi bilmelidir. Kaynak dosyaları “.cpp”, “.cxx”, “.C” gibi uzantılara sahip olabilir. Bir C++ programı bir dizi komuttan oluşur ve bu komutlar bilgisayara ne yapması gerektiğini söyler. Bu komutlar bilgisayar tarafında Assembly kodu iken C++ tarafında kaynak koddur. Dolayısıyla ihtiyacınız olan bir C++ derleyicisi bu kaynak kodu bilgisayarın anlayacağı Assembly koduna çevirmelidir. Kaynak kodda bahsedilen komutlar anahtar kelimeler olabileceği gibi fonksiyonlarda olabilir. int x=10; // Anahtar kelime int int Topla(int x,int y){ // fonksiyon … } Bu ders kapsamında Microsoft Visual Studio C++ derleyicisi kullanılacaktır. Örnek bir C++ Programı #include <iostream> using namespace std; /* Merhaba yazan program */ int main(){ // main metodu cout<<"Merhaba"<<endl; cin.get(); return 0; } Yazılmış olan her programın bir giriş noktası bulunmalıdır. Bu şekilde işletim sistemi bu programı çalıştıracağı sırada nereden başlayacağını bilebilir. Bu başlama noktası C++’ta main metodudur. main metodu işletim sistemi tarafından çağrılır ve bu şekilde program başlamış olur. Bundan da main metodunun sonlanması ile programın sonlanacağı anlamı çıkmaktadır. Çalıştırılabilir her program main metodunu içermelidir. Yukarıdaki ekrana merhaba yazan program incelenirse; # karakteri ile başlayan ifadeler, ön işlemci komutlarıdır. Derleme işleminin hemen öncesinde çalıştırılırlar. Bir başka dosya veya kütüphane ekleme işlemleri bu şekilde yapılmaktadır. Programda iostream kütüphanesi eklenmiştir nedeni ekrana yazı yazmak ve kullanıcıdan değer almak için gerekli olan komutlar bu kütüphanenin içindedir. C++’ta her çalıştırılabilir komut ; ile bitmelidir. cout ekrana birşeyler yazmak için kullanılan komuttur. cin ise kullanıcıdan değer almak için kullanılan komuttur. C++’ta yorum satırlarının // ifadesiyle başladığı görülecektir. Birden çok satırda yorum yapmak için /* yorumlar… */ şeklinde bir kullanım yapılmalıdır. Yorum satırları derleyiciler tarafından görülmez ve o satırlar atlanır. Bu satırlar programcılar için açıklama mahiyetindedirler. { } ifadeleri C++ dilinde kod bloklarının açılma ve kapanma ifadeleridir. Fonksiyonlar, sınıf tanımlamaları döngüler, kontrol ifadelerinin hepsi birer kod bloğu olduğu için bu ifadeler ile başlayıp biterler. main fonksiyonun sonundaki return 0; ifadesi programın, işletim sistemine “her şey yolunda gitti ve işlem başarıyla tamamlandı” demesidir. Nasıl Derlenir: Visual Studio’da derleme yapmak için önce bir proje oluşturulmalıdır. Bunun için üst menüden File > New > Project adımları izlenir. Karşınıza gelecek olan ekrandan sol menüde, Visual C++’a tıklanıp sağ tarafta Win32 Console Application seçilir. Aşağı tarafta proje ismi verildikten sonra OK tuşuna basılır. Karşınıza proje oluşturmak için bazı adımlar gelecektir. İlk pencerede Next butonuna basılır. Daha sonra gelen ekranda Console Application ve sadece Empty Project seçilir ve Finish butonuna basılır. İlk C++ dosyasını eklemek için Source Files kısmına ters tıklayıp Add > New Item seçilir. Gelen ekranda solda Visual C++ seçili iken sağ tarafta C++ File (.cpp) seçeneği seçilir. Aşağı tarafta dosya ismi verildikten sonra Add butonuna basılır. Oluşan dosya içerisine aşağıda verilmiş C++ kodları yazılarak derleme ve çalıştırma işlemleri yapılabilir. Bunun kısa yol tuşu F5’tir. Değişken Tanımı: Kullanıcıdan değer almak için cin kullanıldığı belirtilmişti fakat alınacak bu değer nerede saklanacak işte bunun için saklanacağı bir değişken tanımlanmalıdır. C++ programlama dilinde değişken tanımı aşağıdaki formatta yapılır. Tür değişken_adı; Problem: Kullanıcıdan alınan 2 sayı üzerinde dört işlemin yapılıp ekrana yazdırılması #include <iostream> using namespace std; int main(){ int x,y; cout<<"X:"; cin>>x; cout<<"Y:"; cin>>y; cout<<"X+Y="<<x+y<<endl; cout<<"X-Y="<<x-y<<endl; cout<<"X*Y="<<x*y<<endl; cout<<"X/Y="<<x/y<<endl; cin.get(); cin.ignore(); return 0; } Problem: Kullanıcıdan adını alıp ona merhaba diyen bir program yazınız. #include <iostream> #include <string> using namespace std; int main(){ string isim; cout<<"Adinizi Girin:"; cin>>isim; cout<<"Merhaba "<<isim; cin.get(); cin.ignore(); return 0; } C++’ta karakter katarları string içinde tutulurlar. Bir önceki örnekteki kullanıcıdan sayı almadaki aynı mantık ile kullanıcıdan isim alındığında yine cin kullanılır. Burada diğerinden farklı olarak cin.ignore komutu görünmektedir. Bunun nedeni derleyici bir string’in bittiğini sonundaki ‘\0’ karakterinden anlar bu karakter bütün string ifadelerin sonunda vardır. Program kapanmadan kullanıcının bir tuşa basmasını beklemek için kullanılan cin.get komutu kullanıcı bir tuşa basmasa dahi ‘\0’ karakteri okuduğunda çalışacaktır ve sanki kullanıcı bir butona basmış gibi program sonlanacaktır. Bunu engellemek için bu karakteri görmezden gel komutu olan cin.ignore kullanılır. C++ programlama dilinde kullanıcıdan string alınacağı zaman dikkatli olunmalıdır. Çünkü yukarıdaki programa arada boşluk bırakarak birden fazla kelime girdiğinizde sadece ilk kelimeyi alacaktır. Bunun nedeni >> operatörü her çalışmada sadece bir kelime okumaktadır. Bunun üstesinden gelebilmek için tüm satırı oku anlamındaki getline komutu kullanılır. Aşağıda da görüldüğü üzere cin.ignore komutuna bu durumda gerek kalmamıştır. Bunun nedeni tüm satırı getline komutu ile okuyor olmamızdır. Diğer bir dikkat edilmesi gereken nokta Visual Studio C++’ta string işlemleri sırasında mutlaka <string> kütüphanesi eklenmelidir. #include <iostream> #include <string> using namespace std; int main(){ string isim; cout<<"Adinizi Girin:"; getline(cin, isim); cout<<"Merhaba "<<isim; cin.get(); return 0; } Hazırlayan Arş. Gör. M. Fatih ADAK