Sayfalar

28 Nisan 2015 Salı

Fonksiyonlar

FONKSİYONLAR

        Fonksiyonlar kompleks bir işi parçalara bölerek hem daha kolay yapmamızı hemde daha sonra lazım olunca tekrar tekrar kullanmamızı sağlarlar.
     Fonksiyonları kısaca şu şekilde yazarız:
tür fonksiyonadı(parametreler)
{
komutlar;
}

Örnek üzerinden işlersek daha kolay olacak.


#include "stdafx.h"
#include<iostream> //Temel giriş-çıkış fonksiyonları için
#include <clocale> // setlocale kullanımı için
using namespace std; //std namespace deki metotları kullanmak için

void dizisay(char d[50])  /*Gönderilen değerleri alması lazım hangi değerleri yolladıysan
                                                   onun türüyle birlikte yazarak alıyoruz.*/
{
    int sayac = 0, b = 0;
    while (d[b] != '\0')
    {
        b++;
        sayac++;
    }
    cout << "Dizinizde bulunan harf sayısı....:  " << sayac<<endl;
}

int main()
{
    setlocale(LC_ALL, "TURKISH");
    char d[50];
    cout << "Cümle giriniz...: " ;
    gets_s(d);  /* cin komutundan farkı enter tuşuna basılıncaya kadar girilen her şeyi kaydeder, cin komutu ise boşluk yada enter tuşuna basılıncaya kadar değer alıyordu.*/

    dizisay(d); /*Fonksiyonu çağırırken fonksiyonun ismini yazıp parantezin içine parametreleri yazıyoruz.*/

    system("pause");
    return 0;
}


----------------------------------------------------------------------------------------------------------
/* İlk örneğimizde prototip tanımlamaya ihtiyacımız yoktu çünkü: fonksiyonumuz main'in üstündeydi, şimdi fonksiyonumuzu mainin altına aldığımızda neler yapmamız gerekli ona bakalım.*/


#include "stdafx.h"
#include<iostream> //Temel giriş-çıkış fonksiyonları için
#include <clocale> // setlocale kullanımı için
using namespace std; //std namespace deki metotları kullanmak için

void dizisay(char d[50]);   /*Fonksiyonumuzu main'in altında yazdığımızda prototipini yazmamız lazım. */

int main()
{
    setlocale(LC_ALL, "TURKISH");
    char d[50];
    cout << "Cümle giriniz...: ";
    gets_s(d);

    dizisay(d);

    system("pause");
    return 0;
}

void dizisay(char d[50]) 
{
    int sayac = 0, b = 0;
    while (d[b] != '\0')
    {
        b++;
        sayac++;
    }
    cout << "Dizinizde bulunan harf sayısı....: " << sayac<<endl;
}


Burada küçük bir örnek olarak gördük. Sonraki derslerimizde daha kompleks programlar yazarken fonksiyonların ne kadar önemli olduğunu anlayacağız. Burada işlemediğimiz bir konu olan referans ile çağırma var, bu konuyu bir sonraki konuyla birlikte işleyeceğiz.

Not: Yukarıdaki bütün kodlar Visual Studio da yazılmıştır. Kodları direkt olarak kopyalayarak çalıştırabilirsiniz.

27 Nisan 2015 Pazartesi

Örnekler


ÖRNEKLER

Armstrong SayılarıHer basamağın, sayının basamak sayısı kadar kuvvetinin alınıp toplanmaları ile elde edilen sonuç armstrong sayılarını verir.
0 dan 999 a kadar olan armstrong sayılarını bulan programı yazalım.


int sayı1, sayı2, b, o, y, s, f;
    sayı1 = 0;
    sayı2=1000;
    for (sayı1; sayı1 <= sayı2; sayı1++)
    {
        y = sayı1 / 100;
        o = sayı1 % 100;
        s = o / 10;
        b = o % 10;
        f = (y*y*y + s*s*s + b*b*b);
        if (sayı1 == f)
        {
            cout << sayı1 << endl;
        }
    }

-------------------------------------------------------------------------------------------------------
 Asal Sayılar: 1 ve kendisinden başka pozitif tam böleni olmayan sayılara denir.

int a, c, d;
    cout << "Son değeri giriniz....:";
    cin >> a;
    for (int b = 2; b < a; b++)
    {
        d = 1;
        for (int g = 2; g <= b / 2; g++)
        {
            if (b%g == 0)
                d = 0;
        }

        if (d == 1)
            cout << b << endl;

    }

-------------------------------------------------------------------------------------------------------
 Dikdörtgen çizelim.

    int x, y,a,b;
    cout << "Cizilecek dikdörtgen boyutu" << endl;;
    cin >> x >> y;
   

    for ( a = 0; a < x;a++)
    {
        for ( b = 0; b < y;b++)
        {
            cout << "#";
        }
        cout << endl;
    }



-------------------------------------------------------------------------------------------------------
Bir cümle girilsin ve içinden bir harf istensin, istenen harfin dizideki yerlerini bulan programı yazalım.

int sayac = 0;
    char d[50], a;
    setlocale(LC_ALL, "Turkish");
    cout << "Lütfen cümle giriniz....:";
    gets_s(d);
    cout << "İstenilen harfler....:";
    cin >> a;
    for (int x = 1; x < 51; x++)
    {
        if (d[x] == a)
        {
            sayac++;
            cout << "  " << x;
        }
    }
    cout << endl;
 -------------------------------------------------------------------------------------------------------
Negatif bir sayı alınıncaya kadar girilen sayılar arasındaki en büyük sayıyı bulan programı yazalım.

 int ek, eb, temp,a;
    setlocale(LC_ALL, "TURKISH");
    cout << "Değer gir" << endl;
    cin >> ek >> eb;
    while (ek>=0 && eb>=0)
    {
        if (ek <= eb)
            cin >> ek;
        else if (ek>eb)
        {
            temp = eb;
            eb = ek;
            ek = temp;
        }
       

    }
    cout << "En Büyük....:" << eb<<endl;

-------------------------------------------------------------------------------------------------------
İki diziyi çarpan ve trasnpozunu alan programı yazalım.
int i, j, diziboyutu, sayi, dizi[10][10], dizi2[10][10], sonuc[10][10] = { 0 };
    cout << "Matrisinizin boyunu giriniz....:" << endl;
    cin >> diziboyutu;
    //Dizi elemeanlarını giriyoruz.
    for (i = 0; i < diziboyutu; i++)
    {
        for (j = 0; j < diziboyutu; j++)
        {
            cin >> dizi[i][j];
        }
        cout << endl;
    }

    for (i = 0; i<diziboyutu; i++)
    {
        for (j = 0; j<diziboyutu; j++)
        {
            cout << "  " << dizi[i][j];
        }
        cout << endl;
    }
    cout << endl << endl << endl;
//Transpoz.
    for (i = 0; i<diziboyutu; i++)
    {
        for (j = 0; j<diziboyutu; j++)
        {
            cout << "  " << dizi[j][i];
        }
        cout<< endl;
    }
    cout << endl << endl << endl;
    //Matris çarpımı.
    cout << "Carpilacak diziyi giriniz...:";
    for (i = 0; i < diziboyutu; i++)
    {
        for (j = 0; j < diziboyutu; j++)
        {
            cin >> dizi2[i][j];
        }
        cout << endl;
    }
    cout << "Carpilacak diziyi giriniz...:";
    for (i = 0; i < diziboyutu; i++)
    {
        for (j = 0; j < diziboyutu; j++)
        {
            cin >> dizi[i][j];
        }
        cout << endl;
    }

    for (int i = 0; i < diziboyutu; i++)
    {
        for (int j = 0; j < diziboyutu; j++)
        {
            for (int k = 0; k < diziboyutu; k++)
            {
                sonuc[i][j] += dizi[i][k] * dizi2[k][j];
            }
            cout << endl;
        }
    }
    for (i = 0; i < diziboyutu; i++)
    {
        for (int j = 0; j < diziboyutu; j++)
        {
            cout << sonuc[i][j] << "   ";
        }
        cout <<endl;
    }
 -------------------------------------------------------------------------------------------------------
Zar atma oyunu yapalım. Bilgisayar kendisi 1000 kere zar atsın ve gelen sayıları tutsun.

 int zar()
{
    return rand () % 6 + 1;

}

 //main ekleyin
int bir=0, iki=0, uc=0, dört=0, bes=0, alti=0 ;
    for (int i = 0; i < 1000; i++)
    {
        switch (zar())
        {
        case 1: bir++; break;
        case 2: iki++; break;
        case 3: uc++; break;
        case 4: dört++; break;
        case 5: bes++; break;
        case 6: alti++; break;
        default:
            break;

        }
    }
        cout << "Bir...: " << bir << endl;
        cout << "İki...: " << iki << endl;
        cout << "Üç...: " << uc << endl;
        cout << "Dört...: " << dört << endl;
        cout << "Beş...: " << bes << endl;
        cout << "Altı...: " << alti << endl;
    
Not: rand fonksiyonu random sayılar verir ancak çalışma prensibinden dolayı her zaman aynı sayıları alırsınız. Farklı sayılar çıkması için srand(time(null)); fonksiyonunu kullanmanız lazım.


Not: Yukarıdaki bütün kodlar Visual Studio da yazılmıştır. Kodları direkt olarak kopyalayarak çalıştırabilirsiniz.

26 Nisan 2015 Pazar

Diziler

          TEK BOYUTLU DİZİLER

Diziler işlerimizi oldukça kolaylaştırmaktadır. Şöyle ki birden dazla değer girileceğinde tek tek değişken ataması yapmak yerine yerine tek bir dizi kullanarak bu işi kolaylıkla halledebiliriz.

Örneğin 4 kişilik bir sınıfımız olsun bu sınıftaki her öğrencinin notlarını tek tek kaydetmemiz oldukça zor olacak. Diziler burada yardımımıza koşuyor. 4 elemanlı bir dizi oluşturarak işimizi rahatlıkla hallederiz. Buradaki sayının 4 değilde 100 olduğunu düşünün.

Dizileri tanımlamanın birden fazla yolu vardır.

1.- Gösterim:
Dizi[0]=12;
Dizi[1]=25;
Dizi[2]=36;

2.- Gösterim: 
Dizi[]={12,58,78};
Dizi[]={'E','k','r','a','n','c','i','k','t','i','s','i'};
Not: Bu şekilde tanımlama yaptığımızda dizinin boyutunu belirlemek zorunda kalmayız.Not: Dizilerin ilk indisi 1 değil 0'dır. Her dizinin ilk indisi 0'dır.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int dizi[4];
    cout << "Not giriniz"<<endl;
    for (int i = 0; i < 4; i++)
    {
        cin >> dizi[i];
    }
    for (int i = 0; i < 4; i++)
    {
        cout << dizi[i]<<"  ";
    }
    system("pause");
    return 0;
}





ÇOK BOYUTLU DİZİLER

 Mantık olarak tanımlama aynıdır. Çok boyutlu diziler matris mantığı ile çalıştıklarından dolayı birinci indeks satır, ikinci indeks sütunları temsil etmektedir.

Not: Küçük bir ayrıntı olarak dizi tanımlarken ilk indisin içinin boş bırakılabileceğini bilelim. Nasıl kullanıldığını buraya bir satır kod yazarak göstereceğim. 
dizi[][15]={"Pazartesi","Salı","Çarşamba"}; Siz ekledikçe derleyici ilk kutuyu kendisi dolduracaktır.

dizi[a][i]     Dizide istediğimiz indise bu şekilde ulaşıyoruz. Kaçıncı sütun ve kaçıncı satır olduğunu dışarıdan girebiliyoruz.


#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int dizi[3][3];
    cout << "Not giriniz"<<endl;
    for (int i = 0; i < 3; i++)
    {
        for (int a = 0; a <3 ;a++)
        {
            cin >> dizi[a][i];
        }
    }
    for (int i = 0; i < 3; i++)
    {
        for (int a = 0;a<3;a++)
        {
            cout << dizi[a][i] << "  ";  //Dizide istediğimiz indise bu şekilde ulaşıyoruz.
        }
        cout << endl;
    }
    system("pause");
    return 0;
}


Not: Yukarıdaki bütün kodlar Visual Studio da yazılmıştır. Kodları direkt olarak kopyalayarak çalıştırabilirsiniz.



25 Nisan 2015 Cumartesi

For

      For çok kullanışlı bir kod olup neredeyse her yerde kullanılabilir. Kullanım alanını sınırlamak pek mümkün değildir, bir çok şey yapılabilir.

      Öncelikle for kodunun yazımının nasıl olduğuna bakalım.

 for(Değer Atamaları ; Koşul ; Artırma yada Azaltma)
{
 Komutlar;
}

-for kendinden sonraki gelen ilk satırı kendi satırı olarak kullanır, buraya süslü parantez açarak içine başka komutlarda yerleştirilebilir.
-Koşul kısmı boş bırakılırsa derleyici buraya her zaman 1 (true) değerini koyar ve sonsuz döngüye girer. Fakat komut satırına başka koşullar yazarak çıkış sağlanabilir.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int sayi=0,maxsayi;
    cout << "Tepe deger...: ";
    cin >> maxsayi;
    for (sayi = 0;   ; sayi += 2)
    {
        if (sayi >= maxsayi+1)
            break;
        cout << sayi<<"  ";
    }
    system("pause");
    return 0;
}


-Değer atamasını for içinde yapmak yerine dışarıda da yapabilirsiniz.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int sayi=0,maxsayi;
    cout << "Tepe deger...: ";
    cin >> maxsayi;
    for (  ;sayi<=maxsayi; sayi += 2) //Değer kısmını boş bıraktık çünkü zaten en üstte tanımlamıştık.
    {
        cout << sayi<<"  ";
    }
    system("pause");
    return 0;
}

-Artma yada azalma kısmı boş bırakılabilir.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int sayi=0,maxsayi;
    cout << "Tepe deger...: ";
    cin >> maxsayi;
    for (sayi=0;sayi<=maxsayi;  )  //Artırma işlemini bir alt satırda yaptık.
    {
        cout << sayi<<"  ";
        sayi += 2;
    }
    system("pause");
    return 0;
}


Yukarıda for döngüsünün kulanım şekillerinde bazılarını anlattık. for döngüsünü şimdi tam olarak nasıl kullanıldığına dair bir kaç örnek yazalım.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int sayi=0,maxsayi;
    cout << "Tepe deger...: ";
    cin >> maxsayi;
    for (sayi = 0; sayi <= maxsayi; sayi += 2)
        cout << sayi<<"  ";
    system("pause");
    return 0;
}

 Not: Yukarıdaki bütün kodlar Visual Studio da yazılmıştır ve hepsinin ekran çıktısı aynıdır. Kodları direkt olarak kopyalayarak çalıştırabilirsiniz.

Do While

        Do while yapısı çok kullanılan bir yapı değildir.
        Kullanımını hemen bir örnekle anlatalım.

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int sayi=0,maxsayi;
    cout << "Tepe deger...: ";
    cin >> maxsayi;
    do
    {
        cout << sayi<<"  ";
        sayi += 2;
    }
    while (sayi <= maxsayi);
    system("pause");
    return 0;
}



Not: Kodlar Visual Studio da yazılmıştır. Kodu direkt kopyalayıp çalıştırabilirsiniz.

24 Nisan 2015 Cuma

Switch-case

          Swtich-case seçim aracıdır. Şöyle anlatayım; ekranda bir yazı belirdi ".... işlemini gerçekleştirmek için a'ya basınız, .... işlemi için b'ye basınız." yada ".... işlemini gerçekleştirmek için 1'e basınız, .... işlemi için 2'ye basınız." gibi bir ifade çıktı seçiminizi yaptıktan sonra bu yapımızla kolaylıkla seçme işlemini yapacağız. Kod üstünde gösterince daha rahat anlayacaksınız.

#include "iostream"
using namespace std;

int main()
{
    int a,b,c,sonuc=0;
    cout<<"1-Toplama\n2-Cikarma\n3-Carpma\n4-Bolme\n";
    cin>>a;
    if(a==1)
    {
    cout<<"Toplanacak sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b+c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    if(a==2)
    {
    cout<<"Cikarilacak sayilari giriniz"<<endl;
    cin>>b>>c;
   
    sonuc=b-c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    if(a==3)
    {
    cout<<"Carpilacak sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b*c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    if(a==4)
    {
    cout<<"Bolunecek sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b/c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
   
    system("pause");
    return 0;
   
}
                                       

Bu kodda swtich-case çalışma mantığını analamanız için if kullandık switch-case kullanarak ise şöyle yapılır:

#include "iostream"
using namespace std;

int main()
{
    int a,b,c,sonuc=0;
    cout<<"1-Toplama\n2-Cikarma\n3-Carpma\n4-Bolme\n";
    cin>>a;
    switch(a) //Değer burada okunuyor. İlgili yere gönderiliyor.
{
    case 1: //Seçim bu ise buradaki kodu uyguluyor.
    {
    cout<<"Toplanacak sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b+c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    break;
    case 2:  //Seçim bu ise buradaki kodu uyguluyor.
    {
    cout<<"Cikarilacak sayilari giriniz"<<endl;
    cin>>b>>c;
   
    sonuc=b-c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    break;
    case 3:  //Seçim bu ise buradaki kodu uyguluyor.
    {
    cout<<"Carpilacak sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b*c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    break;
    case 4:  //Seçim bu ise buradaki kodu uyguluyor.
    {
    cout<<"Bolunecek sayilari giriniz"<<endl;
    cin>>b>>c;
    sonuc=b/c;
    cout<<"Sonucunuz...:"<<sonuc<<endl;
    }
    break;
    default:
    /* verilen değer dışında bir değer
    girilirse swtich buradaki işlemi yapar*/
    break; //En içteki fonksiyondan çıkmayı sağlar.
               //break dışında birde continue fonksiyonu var. Bu fonskiyonda devam etmeyi sağlar.
}
    system("pause");
    return 0;
   
}

 Not: Kodlar DevC++ da yazılmıştır. Kodu direkt kopyalayıp çalıştırabilirsiniz.
Basitce kullanımını görmüş olduk.