Ders 5: C++ ile Tarih Belirleme

 Ders 5: C++ ile Tarih Belirleme

Lesson 5: Date Determination with C++

Mehmet Keçeci

04.04.2000

11. Örnek: Tarih Belirleme

#include <iostream>
#include <ctime>

using namespace std;

 

class Tarih {
int gun, ay, yil;
int toplamgun;
static bool is_valid(int, int, int);
static bool is_leap(int y) {
return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}
static int gunler[][13];
static int yillar[2];
static const char *sgun[];
static const char *say[];
static const int yiltabani = 1700;
static const int faktor = 3;
void toplamgunler();
void revTarih(int toplamgunler1);
public:
Tarih(int, int, int);
Tarih();
int get_yil_gun()const;
int get_hafta_gun()const;
int get_gun()const {return gun;}
int get_ay()const {return ay;}
int get_yil()const {return yil;}
Tarih &operator+=(int n);
Tarih &operator-=(int n);
Tarih &operator++();
Tarih operator++(int);
Tarih &operator–();
Tarih operator–(int);

 

friend std::ostream &operator<<(std::ostream &, const Tarih &);
friend std::istream &operator<<(std::istream &, Tarih &);
friend bool operator<(const Tarih &, const Tarih &);
friend int operator-(const Tarih &, const Tarih &);
};

 

class KotuTarih{};

 

//GLOBAL fonksiyon dekrerasyonu
bool operator>(const Tarih &, const Tarih &);
bool operator>=(const Tarih &, const Tarih &);
bool operator<=(const Tarih &, const Tarih &);
bool operator==(const Tarih &, const Tarih &);
bool operator!=(const Tarih &, const Tarih &);
Tarih operator+(const Tarih &, int);
Tarih operator+(int, const Tarih &);
Tarih operator-(const Tarih &, int);

 

int Tarih::gunler[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

 

int Tarih::yillar[] = {365, 366};

 

const char *Tarih::say[] = {“”, “Ocak”, “Subat”, “Mart”, “Nisan”, “Mayis”,
“Haziran”, “Temmuz”, “Agustos”, “Eylul”,”Ekim”, “Kasim”, “Aralik”};

 

const char *Tarih::sgun[] = {“Pazartesi”, “Sali”, “Carsamba”, “Persembe”,
“Cuma”, “Cumartesi”, “Pazar”};

 

Tarih::Tarih(int g, int a, int y)
{
if (!is_valid(g, a, y))
throw KotuTarih();

gun = g;
ay = a;
yil = y;
toplamgunler();
}

 

Tarih::Tarih()
{
time_t timer = time(0);
tm *tp = localtime(&timer);
gun = tp->tm_mday;
ay = tp->tm_mon + 1;
yil = tp->tm_year + 1900;
toplamgunler();
}

 

int Tarih::get_yil_gun()const
{
int yilgun = gun;

for (int k = 1; k < ay; ++k)
yilgun += gunler[is_leap(yil)][k];

return yilgun;
}

 

int Tarih::get_hafta_gun()const
{
return (toplamgun + faktor) % 7;
}

 

Tarih &Tarih::operator+=(int n)
{
revTarih(toplamgun + n);
return *this;
}

 

Tarih &Tarih::operator-=(int n)
{
revTarih(toplamgun – n);
return *this;
}

 

Tarih &Tarih::operator++()
{
return *this += 1;
}

 

Tarih Tarih::operator++(int)
{
Tarih retval(*this);
++*this;

return retval;
}

 

Tarih &Tarih::operator–()
{
return *this -= 1;
}

 

Tarih Tarih::operator–(int)
{
Tarih retval(*this);
–*this;

return retval;
}

 

void Tarih::toplamgunler()
{
toplamgun = 0;

for (int k = yiltabani; k < yil; ++k)
toplamgun += yillar[is_leap(k)];

toplamgun += get_yil_gun();
}

 

void Tarih::revTarih(int toplamgunler1)
{
toplamgun = toplamgunler1;
yil = yiltabani;

while (toplamgunler1 > yillar[is_leap(yil)])
toplamgunler1 -= yillar[is_leap(yil++)];
ay = 1;

 

while (toplamgunler1 > gunler[is_leap(yil)][ay])
toplamgunler1 -= gunler[is_leap(yil)][ay++];

gun = toplamgunler1;
}

 

bool Tarih::is_valid(int d, int m, int y)
{
if (y < yiltabani)
return false;

if (m < 1 || m > 12)
return false;

 

return m > 0 && m <= gunler[is_leap(y)][m];
}

 

ostream &operator<<(ostream &os, const Tarih &r)
{
return os << r.gun << ” ” << Tarih::say[r.ay] << ” ” << r.yil
<< ” ” << Tarih::sgun[r.get_hafta_gun()];
}

 

istream &operator<<(istream &is, Tarih &r)
{
int g, a, y;
is >> g >> a >> y;

 

if (!Tarih::is_valid(g, a, y))
throw KotuTarih();

r.gun = g;
r.ay = a;
r.yil = y;

 

r.toplamgunler();
return is;
}

 

bool operator<(const Tarih &d1, const Tarih &d2)
{
return d1.toplamgun < d2.toplamgun;
}

 

bool operator>(const Tarih &d1, const Tarih &d2)
{
return d2 < d1;
}

 

bool operator>=(const Tarih &d1, const Tarih &d2)
{
return !(d1 < d2);
}

 

bool operator<=(const Tarih &d1, const Tarih &d2)
{
return !(d2 > d1);
}

 

int operator-(const Tarih &d1, const Tarih &d2)
{
return d1.toplamgun – d2.toplamgun;
}

 

Tarih operator+(const Tarih &d, int n)
{
return Tarih(d) += n;
}

 

Tarih operator+(int n, const Tarih &d)
{
return d + n;
}

 

Tarih operator-(const Tarih &d, int n)
{
return Tarih(d) -= n;
}

 

int main()
{
Tarih d1(27, 2, 2005);
Tarih d2(d1 + 25);

while (d1 < d2)
cout << d1++ << endl;

return 0;
}

Ders 4: C++ Örnekleri

 Ders 4: C++ Örnekleri

Lesson 4:Examlpes with C++

Mehmet Keçeci

04.04.2000

10. Örnek

#include<iostream>
#include<conio.h> //getch(); için
using namespace std;

main()
{

cout<<“Merhaba dunya\\n” ;

getch(); //Ekranın hemen kapanmamasını sağlar

}

11. Örnek: Sayı Bulmaca

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

 

void Start ();
void GetResults ();

 

int i, j, hayat, maksimum; //int tamsayı tanımlar
char c; //char karakter tanımlar

 

void
Start ()
{
i = 0;
j = 0;
hayat = 0;
maksimum = 6;

 

cout << “Zor modu sec:\\n”;
cout << “1 : Kolay (0-20)\\n”;
cout << “2 : Orta (0-40)\\n”;
cout << “3 : Zor (0-60)\\n”;
cout << “veya cikmak için farkli bir sey secin\\n”;
c = 30;

 

cin >> c; // kullanıcının seçimmini okur
cout << “\\n”;

 

switch (c) //Seçimime göre aşagıdaki şıkları işletir
{
case ”1” : maksimum = 20; // Rastgele sayı 0 ile maksimum arasında olacaktır
break;
case ”2” : maksimum = 40;
break;
case ”3” : maksimum = 60;
break;
default : exit(0); //hiç biri değilse ekranı kapatır
break;
}

 

hayat = 6; // oyuncunun kaç seçim yapacağını belirler
srand( (unsigned)time( NULL ) ); // tamsayı rastgele sayı üreten fonksiyon
j = rand() % maksimum; // j 0 ile maximum sayı arasında bir sayıyı tutar

 

GetResults();

 

}

 

void
GetResults ()
{
if (hayat <= 0)
// şayet 6 seçim sonundada bilemezsiseniz
{
cout << “Kaybettiniz !\\n\\n”;
Start();
}

 

cout << “Bir sayi: \\n”;
cin >> i; // oyuncunun sayısını okur

 

if ((i>maksimum) || (i<0)) // şayet oyuncunun sayısı doğru değilse tekrar başlatır.
{
cout << “Hata : Sayi 0 ile ” << maksimum << ” arasinda degil\\n”;
GetResults();
}

 

if (i == j)
{
cout << “Kazandiniz !\\n\\n”; // Oyuncu doğru sayıyı bulursa
Start();
}

 

else if (i>j)
{
cout << “Cok buyuk\\n”;
hayat = hayat – 1; // secenek sayınızı bir azaltır
cout << “Kalan sayi hayat: ” << hayat << “\\n\\n”;
GetResults();
}

 

else if (i<j)
{
cout << “Cok kucuk\\n”;
hayat = hayat – 1;
cout << “Kalan sayi hayat:\\n” << hayat << “\\n\\n”;
GetResults();
}
}

 

int
main ()
{
cout << “** Sayi bulmaca **\\n”;
cout << “Secilen bir sayiyi bulacaksiniz. \\n”;
cout << “5 tahmin hakkiniz var\\n”;
cout << “Sayi bulmaca size çok buyuk veya cok kucuk olarak bildirecek ve sizde tahmin edeceksiniz\\n\\n”;
Start();
return 0;
}

Ders 2: Basit C++ Yazılım Örnekleri

Ders 2: Basit C++ Yazılım Örnekleri

Lesson 2: Simple C++ Program Examples

Mehmet Keçeci

04.04.2000

* Bu örneklerde DOS ortamından bakmamız gerekmez çalıştır dediğimizde ekran açık kalır.

2. Örnek (example):

 #include <iostream>
 using namespace std;
 int main (int argc, char *argv[])
{
char cik;
 cik = ‘\0’;
while (cik != ‘a’)
{
cout << “Merhaba Dünyâ” << endl;
cout << “Bugün nasılsınız?” << endl;
cout << “\’İyiyiz.\’.” << endl;
cout << “Çıkmak için a ya basın.” << endl;
cin >> cik;
}
 return 0;
}

 

c++

c++

Burada dikkat edeceklerimiz:

  1.  
  2. #include <iostream>, <iostream.h>, “iostream”, “iostream.h” şeklinde farklı derleyicilerde farklı şekillerde veya bir kaçını kabul edebilir.
  3. using namespace std; bu ifadeyi başta kullanmazsak bir önceki dersteki gibi her cout ve cin komutlarının başına std:: getirmemiz gerekir (Bizim derleyicimiz için)
  4. int main (int argc, char *argv[]), int main (), int main (void) olabilir. (int:integer (tamsayı))
  5. Char Karakter tanımı yapar (asdf, as3d vs..)
  6. cout << “…..” girilenleri ekranda gösterir
  7. << endl; bir alt satıra geç demektir.
  8. cin<< ekrana veri gir anlamındadır. Burada “a” verisi giriliyor.
  9. != eşit değilse şunu yap (eşit değilse alttakileri ekrana yaz eşitse çık)
  10. While () iken

Bir kısmı ileriki derslerde işleneceği için bu kadarla yetindik.

3. Örnek:

 

/*Dosya*Yeni*Kaynak Kodu Dosyası veya Ctrl+N tuşlarına basın.*/

#include <iostream> //iostream kütüpanesini kullanır
using namespace std; //std:: fonksiyonunu destekler
int main() //ana fonksiyonu başlatır.
{ //ana fonksiyonun başladığı yer.

cout<<“Merhaba Dunya!”; //verileri ekrana yazar “output”

cin.get(); //ekrana quick yazana kadar ekranı açık tutar
} //ana fonksiyonu kapatır.

Her programımızın başına #include ifadesini ve bunun kullandığı kütüphaneleri ekleyeceğiz en geneli iosteam diğerlerini de yeri gelen komutlarda kullanacağız. Bunlar olmazsa örneğin Cout deklare edilmemiştir gibi hatalar verir cout’un ne yapabilecekleri, iostream.h dosyasında tanımlanmıştır.

C++ bir Object Oriented Programming (OOP-Nesneye Dayalı (Yönelimli) Programlama-NDP) dır.

Kod yazımı diğerlerine göre daha kısa daha güvenilirdir.

4. Örnek

 

#include <iostream>

//(using std::cout;) şeklindede tanımlayabiliriz

int main()
{
std::cout << “Merhaba\\n Dunya”;
}

Kullandığımız işaretler:

\\ n Bir satır aşağıya indirir
\\ a Zil sesi verir (bell)
\\ b Geri tuşu. Backspace
\\ f – Formfeed işaretini verir (&#9792)
\\ r – Kendinden itibaret satır başından yazar. Carriage return
\\ t – Tablo haline sokar (tabular)
\\ v – Düşey tablolar veya dişil işareti kor (&#9794)
\\ ‘ – Kesme imi Apostrof
\\ ” – Tırnak işareti kor
\\ ? – Soru İşareti (?): Question mark, znak zapytania.
\\ \ – Ters eğik çizgi. Backslash
\\ 0oo – Kendisinden sonrakini satır başı yapar.
\\ xhhh – x”den sonra 0-9 ve a-f arasında Heksadesimal (On altı tabanlı sayı sistemi, hexadesimal) değer girilebilir xffe gibi

4. Örnek

#include <iostream>
using std::cout;
using std::cin;

main ()
{
int Mehmet;
cout<<“Adiniz:”;
cin>>Mehmet;
cout<<“sizin isminiz Mehmet “<<Mehmet; /*tekrar cout yazmadan aynı satırda << ile Mehmet tamsayısını atattırdık.*/
return 0;
}

 

C++’da kullanılan sayı ve karakter değerleri

int (16 bit) -32768 ÷ 32767
int (32 bit) -2147483648 + 2147483647
short -32768 + 32767
long -2147483648 + 2147483647
float 1,2E-38 + 3,4E+38
double 2,2E-308 +1,8E+308
long double 3,4E-4932 + 1,2E+4932
char 256 karakter

Kaynaklar/References:

  1. https://github.com/PhpHunter/Cplusplus_Ornekler

Ders 1: C++’ a Başlarken

Ders 1: C++’ a Başlarken

Lesson 1: Getting Started with C++

MSc. Mehmet Keçeci

04.04.2000

İlk önce yapmamız gereken yazacağımız kodları derleyecek güzel bir derleyiciye ihtiyacımız olacak. Bunun için en güzel ve basit, kolay, ücretsiz olan ve Türkçe desteği olan BloodShed Dev”in Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2 sürümünü kullanacağız. 9 MB’lık az bir alan kaplıyor.

Doğrudan indirme bağlantısı www.bloodshed.net veya aşağıdaki bağlantı.

Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2
Dev-C++ version 4.9.9.2, includes full Mingw compiler system with GCC 3.4.2 and GDB 5.2.1 See NEWS.txt for changes in this release.

Download from: Buradan indirebilirsiniz: Son sürüm: 5.8.3

  •  SourceForge (açılan bağlantıdan size en yakın ülke linkini tıklayın ve indirin) indirdiğimiz programı Türkçe desteği ile kuralım

c++

Ok’yi işaretledikten sonra lisans anlaşmasını kabul edin.

c++

Daha sonra Full’u (Hepsi) seçip devam edelim.

Daha sonra nereye kuracağımıza karar verelim ve Kur diyelim.

c++

 

c++

Programımız kendiliğinden çalışacak ve Günün ipucu ekranı ile açılacak ip ucunu her açılışta çıkmasını istemiyorsak alt kısmına işaretleyerek bunu halledebiliriz. Bitir’i işaretleyerek kurulumu tamamlamış oluruz.

C++

 

İpucunu kapatarak ilk programımıza başlayabiliriz.

Boş Kaynak Kodu Dosyamızı Açalım.

c++

Ortada gözüken beyaz boş alan bizim kodlarımızı yazacağımız alandır ve ilk kodlarımızı yazalım

(Programcıların bir özelliği vardık ilk kodları genellikle Merhaba Dünya! veya Hoşgeldin Mehmet! gibi ifadelerdir.)

#include<iostream>

int main()
{
std::cout << “C++”ın harika dünyasına hoş geldiniz!!!\\n”;
return 0;
}

ve bunu dosyadan merhaba.cpp olarak kaydedelim (Sizler C:\\Dev-Cpp\\Ornek”e kaydederseniz sonraları rahat edersiniz)

c++

Çalıştır* Derleye tıklayarak kodlarımızı makina diline anlayacak hale gerirelim.

c++

Yine aynıyerden Çalıştır komutunu vererek programımızı (merhaba.exe) çalıştıralım. Fakat burada bir sorunumuz var çalıştırdığımız kod DOS ortamında çalışıp hemen kaybolacaktır (kaybolmaması için ek kodlar sonraki derslerimizde gösterilecektir.)

Bunun için Başlat*Çalıştır”cmd yazarak DOS İstemcisini Çağıralım.

c++

Burada Merhaba.exe programımızı nereye kaydetti isek DOS istemcisinde oraya gidip merhaba veya merhaba.exe yazalım

cd.. ile bir alt satıra g: ile harddisk bölümüne cd ile istediğiniz dizine gidersiniz.

C++

Yazdığımız programın adını yazıp enter’layalım. Burada dikkati çeken DOS ortamı Türkçe Karakterleri desteklemediğinden çıktılarda sorun olmaktadır.

C++

Evet harika böylelikle ilk programınızı hem de C++’da yazmış oldunuz. Tebrikler.

Açıklama: Programda yazmış olduğumuz std:: komutu örneğin Borland derleyicisinde yazmamıza gerek yoktur. Fakat Borland derleyicisinin boyutu oldukça yüksek olduğundan derslerimizde kendi programımızı kullanacağız.

İsteyen Borland’ı kullanabilir fakat Türkçe desteği yoktur.

Ek 1: 03.01.2012

Turbo C++ –> Borland C++ -> Borland C++Builder -> CodeGear C++Builder -> Embarcadero C++Builder olarak değişmiştir.

Sitesi: http://www.embarcadero.com

Ek 2: 27.12.2014

DevC++’nin yeni linki: http://sourceforge.net/projects/orwelldevcpp/

Bazı resimler bu son DevCpp 5.8.3’e göre değiştirilmiştir.

Artık kodlarımızı ve derlemelerimizi çevrimiçi, online yapabiliriz. Bunun için çok güzel bir site olan http://www.tutorialspoint.com/compile_cpp11_online.phpaçalım ve kodumuzu girelim

#include <iostream>

using namespace std;

int main()
{
   cout << “Merhaba Dünyâ.” << endl;
   
   return 0;
}

Compile–>Execute’a tıklayalım ve kodumuz çalıştı.

C++11

Diğer programlama dillerinde kod yazmak istersek http://www.tutorialspoint.com/ yazarak aşağıdaki linklerden onlara da ulaşabiliriz.

Kaynaklar/References:

  1. http://sourceforge.net/projects/orwelldevcpp
  2. http://www.bloodshed.net/dev/devcpp.html
  3. http://www.mingw.org
  4. http://www.embarcadero.com
  5. https://software.intel.com/en-us/intel-parallel-studio-xe
  6. https://software.intel.com/en-us/c-compilers
  7. http://www.visualstudio.com/tr-tr/products/visual-studio-express-vs
  8. http://gcc.gnu.org
  9. http://sourceforge.net/projects/codeblocks
  10. http://www.tutorialspoint.com/compile_cpp11_online.php
  11. http://www.tutorialspoint.com
  12. http://www.tutorialspoint.com/cplusplus/index.htm

C’siz C++

C’siz C++

C++ Without C

Mehmet Keçeci

02.04.2000

C++
 

Birçok kurs ve üniversitelerde ilk önce 1 sene C dersi veriyorlar daha sonra C++”a geçiyorlar fakat ben bu fikre katılmıyorum bence bu öğrencinin zamanını çalmak gibi bir şey. Örneğin Visual BASIC’i öğrenmek için BASIC’ten başlamak ne kadar saçma ise burada da ayni saçmalık mevcuttur. Her dilin kendi içinde bir mantığı vardır ve bu mantık verilerek o dilin temelleri atlanmadan bunlar başarı ile uygulanabilir. Ben bunu ilk defa 1999”da ders olarak böyle yaptığımda oldukça başarı sağladım ve gördüm ki C’yi baştan vermeye gerek yok sadece derslerde yeri geldikçe C’den tamamen habersiz olmamaları için kısa açıklamalar yapmak yeterli oluyor. Bu fikrime katılan veya ben onun fikrine katılıyorum (bu fikri ilk koyan kim olduğunu bilmediğimden bunu söylüyorum). Dünyaca ünlü 24 saatte C++ dersinin yazarı gibi o da bu düşüncede. Çünkü iş burada bitmiş değil C++’dan sonra C++ Builder (Borland) ve diğer türevlerini öğrenmek gerekecek ki buna zaman bulmak oldukça kolay değil. Vakti olmayanlara tabii ki az çok programcılık mantığını bilenlere C++ Builder’dan a başlayabilirler en azından kendi çaplarında bir şeyler yapabilirler…

    Günümüzde sadece bir programlama dilini iyi bilmek yetmiyor değişik platformların dillerini de bilmek gerekiyor örneğin web tasarım dilleri Html, ASP (VBasic Script), asp.net (VBasic Script, C#, J#), PHP, cgi-perl vs… bunları da kullanabilmek gerekiyor ayrıca Java’nın popülaritesini (yaygınlığı ve beğenilmesi) düşünürsek buna da el atmak gerekiyor. Artık siz düşünün ne kadar uğraşacağınızı…

MSc. Mehmet Keçeci
02.04.2000
İlk yayın: www.hiperteknoloji.org