11 Kasım 2016 Cuma

C++ Girilen Sayının En Büyük Değeri ve Baştan Sırası ile En Küçük Değeri ve Sondan Sırası

Kullanıcıdan alınan 10 tamsayı değerinin en büyük değeri ve baştan sırasını, en küçük değeri ve sondan sırasını ve girilen sıfır sayı miktarını hesaplayan program kodu.
#include <iostream>

using namespace std;

int main(){
    int a[10];
    int eb = 0, ek = 0;
    int bs = 0, ss = 0;
    int sifir = 0;

    for(int i=0; i<10; i++){
        cout << i+1 << ". sayi : ";
        cin >> a[i];

        if(i==0){
            eb = a[i];
            ek = a[i];
        }
        else if(eb <= a[i]){
            eb = a[i];
            bs = i+1;
        }
        else if(ek > a[i]){
            ek = a[i];
            ss = (10-(i+1))+1;
        }
        else if(a[i] == 0){
            sifir++;
        }
    }
    cout << endl;
    cout << "en buyuk deger : " << eb << endl;
    cout << "en buyuk degerin bastan sirasi : " << bs << endl;
    cout << endl;
    cout << "en kucuk deger : " << ek << endl;
    cout << "en kucuk degerin sondan sirasi : " << ss << endl;
    cout << endl;
    cout << "girilen sifir sayisi miktari : " << sifir;
    cout << endl;

    return 0;
}

C++ Girilen Pozitif, Negatif ve Sıfır Sayılarının Ayrı Ayrı Hesaplanması

Aşağıdaki program kodunda kullanıcı tarafından girilen 10 sayıdan pozitif olan sayıların miktarı ve toplamı, negatif olan sayıların miktarı ve toplamı ile sıfır girilen sayıların miktarı hesaplanmaktadır.
#include <iostream>

using namespace std;

int main(){
    int sayi[10];
    int pozitif = 0, negatif = 0, sifir = 0;
    int ptoplam = 0, ntoplam =0;

    for(int i=0;i<10;i++){
        cout << i+1 << ". sayi : ";
        cin>>sayi[i];
        if(sayi[i]>0){
            pozitif++;
            ptoplam += sayi[i];
        }else if(sayi[i]<0){
            negatif++;
            ntoplam += sayi[i];
        }else{
            sifir++;
        }
    }
    cout << endl;
    cout << "Pozitif girilen sayi miktari : " << pozitif << endl;
    cout << "Negatif girilen sayi miktari : " << negatif << endl;
    cout << "Sifir girilen sayi miktari : " << sifir << endl;
    cout << endl;
    cout << "Pozitif sayilarin toplami : " << ptoplam << endl;
    cout << "Negatif sayilarin toplami : " << ntoplam << endl;

    return 0;
}

C++ Matrisin Transpozu

#include <iostream>

using namespace std;

int main(){
    int m,n;
    cout << "m (satir sayisi) : ";
    cin >> m;

    cout << "m (sütun sayisi) : ";
    cin >> n;

    int x[m][n];
    int i,j;

    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            cout << "x[" << i+1 << "][" << j+1 << "] = ";
            cin >> x[i][j];
        }
    }
    for(j=0;j<n;j++){
        for(i=0;i<m;i++){
            cout << x[i][j];
            cout << " ";
        }
        cout << endl;
    }
    return 0;
}

10 Kasım 2016 Perşembe

C++ Karakterin ASCII Kodunu Bulma

#include <iostream>

using namespace std;

int main(){
    char asciikodu;

    cout << "Bir karakter gir : ";
    cin >> asciikodu;

    cout << "ASCII karakter kodu : " << (int)asciikodu;

    return 0;
}

C++ Girilen Sayının Pozitif - Negatif Kontrolü

#include <iostream>

using namespace std;

int main(){
    int sayi;

    cout << "Sayi gir : ";
    cin >> sayi;

    if(sayi > 0){
        cout << "sayi pozitif";
    }
    else if(sayi == 0){
        cout << "sayi nötr";
    }else{
        cout << "sayi negatif";
    }
    return 0;
}

C++ İki Sayının Toplamı

#include <iostream>

using namespace std;

int main(){
    int sayi1, sayi2;
    int sonuc;

    cout << "Sayi1 : ";
    cin >> sayi1;
    cout << "Sayi2 : ";
    cin >> sayi2;

    sonuc = sayi1 + sayi2;
    cout << "Sonuc : " << sonuc;

    return 0;
}

9 Kasım 2016 Çarşamba

warning: deprecated conversion from string constant to 'char*' Uyarısı Çözümü

MinGW derleyicisinde karşılaşabileceğimiz bir uyarı. Örnek olarak şekildeki gibi recursive fonksiyon yazdım ancak derleme sırasında warning: deprecated conversion from string constant to 'char*' bu uyarısı karşımıza çıktı.  MinGW derleyicisinde bu şekilde bir yazım desteklenmiyor eğer visual studio üzerinde derlerseniz böyle bir sorunla karşılaşılmaz. visual studio hakkında tam bir bilgim yok aslında uzun zamandır kullanmıyorum. Güncelleme sırasında 2012 sürümlerinden itibaren bu uyarıyı vs'de almakta muhtemel olabilir. Şimdi hatalı kodu görelim.
void reverse(char *p, int length)
{
    if(length == 0)
        return;
    cout << p[length-1];

    reverse(p,length-1);
}

int main(){
    
    reverse("merhaba",7);

    return 0;

}
Uyarının nedeni parametredeki karakter dizisinin const olarak tanımlanmamasında kaynaklandı. Doğru kullanım aşağıdaki gibidir.
void reverse(const char *p, int length)

8 Kasım 2016 Salı

Chio Yöntemi Akış Diyagramı ve C++ Kodu


#include <iostream>
using namespace std;

int main(){
    int n;

    do{cout << "Matris boyutu..:";
        cin >> n;
    }while(n<2);

    int a[n][n];
    int b[n-1][n-1];

    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        cout << i + 1 << ".satır " << j + 1 << ".sütun = ";
        cin >> a[i][j];
        b[i][j]=0;
      }
    }

    int us=n-2;

    int sayac=0;

    do{
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        b[i][j] = a[0][0]*a[i][j] - a[0][j]*a[i][0];
      }
    }
    for(int i=1;i<n;i++){
        for(int j=1;j<n;j++){
        a[i][j]=b[i][j];
        }
    }
    n--;
    us--;
    sayac++;

    }while(n > 2);

  int det=(int)(a[0][0]*a[1][1]-a[1][0]*a[0][1]);

    for(int y=0;y<sayac;y++){
        det*=1/(a[0][0]^us);
    }

    cout<<"determinant="<<det<<endl<<endl;
    return 0;
}


error: lvalue required as increment operand Hatası Çözümü

8. satırdaki işlem sonucu alınan hata.
#include <iostream>

using namespace std;

int main(){
    int sayi[] = {1,2,3,4,5,6,7,8,9,10};

    int* p = &sayi[0];

    cout << "*++p++ = " << *++p++ << endl;
 
    return 0;
}
Çözüm olarak yapılması gereken *++p++ işleminin doğru şekli *(++p)++ şeklinde kullanımıdır.

C++ İki Sayının Yer Değiştirmesi (Pointer)

#include <iostream>

using namespace std;

void Degistir(int*, int*);

int main(){
    int sayi1, sayi2;

    sayi1 = 34;
    sayi2 = 27;

    cout << "Sayi 1 : " << sayi1 << endl;
    cout << "Sayi 2 : " << sayi2 << endl;

    Degistir(&sayi1, &sayi2);

    cout << "Sayi 1 : " << sayi1 << endl;
    cout << "Sayi 2 : " << sayi2 << endl;

    return 0;
}

void Degistir(int* sayi1, int* sayi2){
    int temp = 0;
    temp = *sayi1;
    *sayi1 = *sayi2;
    *sayi2 = temp;
}

5 Kasım 2016 Cumartesi

error: 'atoi' was not declared in this scope Hatası Çözümü

atoi fonsksiyonunun tanımlı olması için stdlib kütüphanesini eklemelisiniz, aksi halde program derlenme sırasında error: 'atoi' was not declared in this scope hatasını verecektir.

#include <stdlib.h>

Ücretsiz Programlama Kitapları

Aşağıdaki linke giderek GitHub üzerinden paylaşılan İngilizce olan ücretsiz programlama kitaplarına ulaşabilirsiniz.

https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md

3 Kasım 2016 Perşembe

Basit Sayı Tahmin Etme Oyunu | JavaScript | Uygulama 1

JavaScript Kodu

//Oyun Değişkenleri
var dogruSayi = 60; // translate: "correcNumber" - "dogruSayi" 
var oyuncuTahmini = 0; // translate: "playerGuess" - "oyuncuTahmini"

//giriş ve çıkış alanlar
var input = document.querySelector("#input");
var output = document.querySelector("#output");

//buton
var button = document.querySelector("button");
button.style.cursor = "pointer";
button.addEventListener("click", clickHandler, false);

function clickHandler(){
 oyunOyna();
}

function oyunOyna(){
 oyuncuTahmini = parseInt(input.value);

 if(oyuncuTahmini > dogruSayi)
 {
  output.innerHTML = "Çok Yüksek";
 }
 else if(oyuncuTahmini < dogruSayi)
 {
  output.innerHTML = "Çok Düşük";
 }
 else if(oyuncuTahmini === dogruSayi)
 {
  output.innerHTML = "Doğru Tahmin!";
 }
}

HTML Kodu

<p id="output">0-99 sayıları arasında bir sayı tahmin et.</p>
<input type="text" id="input" placeholder="Sayı tahmini girin...">
<button>Tahmin et</button>

2 Kasım 2016 Çarşamba

C++ Çarpım Tablosu (1-9)

#include <iostream>
#include <iomanip>

using namespace std;

int main(){
    int i,j;
    for(i=1;i<10;i++){
        for(j=1;j<10;j++){
            cout << i*j << setw(5);
        }
        cout << "\n";
    }
    return 0;
}

İç içe iki for döngüsü kullanarak 9 satır 9 sütun olacak şekilde çarpım sonuçlarını 1'den 9'a kadar düzgün bir şekilde yazdırdık. iomanip kütüphanesi ekleyerek setw fonksiyonunu çarpım tablosunun satır içerisindeki boşluklarını düzgün göstermek için kullandık.

jQuery Giriş

jQuery, bir JavaScript Kütüphanesidir. jQuery, JavaScript programlamayı büyük ölçüde kolaylaştırır. Öğrenmesi kolaydır.

jQuery kullanımının amacı çok daha kolay bir şekilde JavaScript'i web sitelerinde kullanabilmektir.

Bilmeniz Gereken Diller

  • HTML
  • CSS
  • JavaScript

jQuery'i öğrenmeden önce yukarıdaki dilleri bilmeniz gereklidir. Eğer bilmiyorsanız bu yazıyı okumanızın bir anlamı yoktur. Bilmiyorsanız öğrenin ve tekrar gelin.


jQuery Nedir?


jQuery daha az kodla, daha fazla iş yapabilme mantığıyla oluşturulmuş JavaScript kütüphanesidir. Biraz önce okunduğu gibi jQuery'de amaç web sitelerinde JavaScript'i çok daha kolay kullanabilmektir. JavaScript kodu ile yazılana birden fazla satırı, jQuery ile tek satır metod halinde yazabiliriz.


Neden jQuery?


Çok fazla JavaScript framework vardır. Ancak aralarında en popüler olanı jQuery'dir.
Teknoloji dünyasının birçok büyük şirketleri web sayfalarında bile kullanılmaktadır.

1 Kasım 2016 Salı

JavaScript Fonksiyon Örnekleri

Tek Argumentli Uygulama


JavaScript Kodu
function dayTime(txt){
 alert(txt);
}
HTML Kodu
<form>
    <input type="button" onclick="dayTime('Günaydın!')" value="Sabah">
    <input type="button" onclick="dayTime('Tünaydın')" value="Öğle">
    <input type="button" onclick="dayTime('İyi Geceler')" value="Akşam">
</form>


Çift Argumentli ve Dönüşlü (return) Uygulama


JavaScript Kodu
var x = topla(12,45);

function topla(x, y){
 return x + y;
}

document.getElementById("islem").innerHTML = x;
HTML Kodu
<p id="islem"></p>

31 Ekim 2016 Pazartesi

JavaScript Veri Türleri

JavaScript değişkenleri birçok değişken türünü içerisinde bulundurabilir.
  • String
  • Number
  • Boolean
  • Array
  • Object
  • daha fazlası..

Aşağıdaki kod yapısını inceleyiniz.
var sayi = 13;      //number
var blogadi = "Sturdy Geek";    //string
var dizi = ["elma", "armut", "nar"];   //array
var insan = {gozRengi:"yeşil", sacRengi:"siyah"}; //object

Veri Türleri Kavramı


Programlamada Veri Türleri önemli bir kavramdır. Değişkenler üzerinde çalışırken türler hakkında bilgi sahibi olmamız oldukça önemlidir.

Şimdi biraz uygulamaya geçelim.

Öncelikle bir string veri türüne sahip değer ile number veri türüne sahip değeri aynı değişkene atarsanız JavaScript number veri türüne sahip değeri, string olarak yorumlayacaktır.

Aşağıdaki kod yapısında ne demek istediğimizi gösterelim.
var goster1 = "merhaba" + 12;
var goster2 = 12 + "merhaba";

document.getElementById("goster-1").innerHTML = goster1; // sonuç -> merhaba12
document.getElementById("goster-2").innerHTML = goster2; // sonuç -> 12merhaba
Ancak dikkat edilmesi gereken bir husus var. JavaScript yorumlanabilen yani interpreter bir programlama dilidir. Aşağıdaki kod yapısını dikkatle inceleyin.
var goster1 = "merhaba" + 12 + 2;
var goster2 = 12 + 2 + "merhaba";

document.getElementById("goster-1").innerHTML = goster1; // sonuç -> merhaba122
document.getElementById("goster-2").innerHTML = goster2; // sonuç -> 14merhaba
İşlemler yorumlanırken soldan sağa doğru gittiği için goster1 değişkeninin yazdıracağı değer ilk önce 12 ile 2 sayısının toplamı olur daha sonrasında ise string veri türü geldiği için elde edilen 14 sayısıda string olarak yorumlanır. goster2 değişkeninin değerleri doğrudan string ile başladığı için ondan sonra gelen değerlerde string olarak yorumlanır.


JavaScript Dinamik Türleri


JavaScript'in dinamik türleri de vardır. Bunun anlamı aynı değişkende farklı türleri kullanabiliriz demektir.
var slm;   //değişken şu an tanımsız (undefined)
var slm = 12;  //değişken şu an bir number
var slm = "arda";  //değişken şu an bir String

30 Ekim 2016 Pazar

ASP.NET MVC Link Oluşturma

ASP.NET MVC ile proje üzerinde link oluşturmak için Html.ActionLink metodu kullanılır. Aşağıda gösterilecek örnekte bir controller içerisinde iki action arasında link verme gösterilmektedir.

İlk önce Html.ActionLink metodunun yapısını inceleyelim.

@Html.ActionLink("linkİsmi", "actionİsmi", "controllerİsmi")

linkİsmi kısmına bağlantı yapacağımız action metodunun ismi gelebilir. Örneğin bizim HomeController içinde Iletisim isminde bir action metodumuz olsun linkİsmi bölümüne İletişim yazabiliriz.

actionİsmi bölümünde ise çalışacak olan action metodunun ismi yazılır örnek olarak Iletisim.

controllerİsmi kısmında ise action metodları arasında bağlantı yaptığımız ve aynı controller içinde bulunduklarından dolayı controller ismini yazmalıyız.

Aşağıdaki kodları inceleyerek yukarıdaki yazılanları daha iyi anlayabilirsiniz.

HomeController.cs
public class HomeController : Controller
{
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Iletisim()
        {
            return View();
        }
}

Index.cshtml
@{
    Layout = null;
}

<h1>Anasayfa</h1>

@Html.ActionLink("İletişim","Iletisim","Home")

Iletisim.cshtml
@{
    Layout = null;
}

<h1>İletişim</h1>

@Html.ActionLink("Anasayfa", "Index", "Home")

Bunun dışında link oluşturmak için bir metodumuz daha vardır. Bu metod ise Url.Action metodudur. Ancak kullanımı Html.ActionLink metoduna göre daha farklıdır. Link bağlantısını kendimiz HTML ile oluşturmak zorundayız. Aşağıdaki gibi mesela.

<a href="@url.Action("actionİsmi", "controllerİsmi")"> linkİsmi </a>

Index.cshtml
@{
    Layout = null;
}

<h1>Anasayfa</h1>

<a href="@Url.Action("Iletisim", "Home")">İletişim</a>

29 Ekim 2016 Cumartesi

C++ Matris Çarpımı (nxn)

#include <iostream>

using namespace std;

int main()
{
    int n,i,j;
    cout << "matris boyutu gir : ";
    cin >> n;
    double u[n][n], l[n][n];
    double s[n][n] = {};
    cout << "1. matris" << endl;
    for (i = 0; i<n; ++i)
        for (j = 0; j<n; ++j){
            cout << "[" << i+1 << "][" << j+1 <<"] : ";
            cin >> l[i][j];
        }
    cout << endl <<"2. matris" << endl;
    for (i = 0; i<n; ++i)
        for (j = 0; j<n; ++j){
            cout << "[" << i+1 << "][" << j+1 <<"] : ";
            cin >> u[i][j];
        }

    cout << endl <<  "Sonuc" << endl;

    for(int r = 0; r<i; r++){
        for(int c=0; c<j; c++){
            for(int in=0; in <i; in++){
                s[r][c] += l[r][in]*u[in][c];
            }
            cout << s[r][c] << " ";
        }
        cout << endl;

    }

    return 0;

}


27 Ekim 2016 Perşembe

Code::Blocks içinde OpenGL & GLUT Kullanımı

Code::Blocks indirmek için tıklayınız :
http://www.codeblocks.org/downloads/26

GLUT dosyasını indirmek için bu adrese gidiniz :
indir

GLUT dosyasını indirdikten sonra açın ve aşağıdaki adımları uygulayın :
  • glut32.dll kopyala, c:\windows\system dosya adresine yapıştır.
  • glut32.dll kopyala, c:\windows\system32 dosya adresine yapıştır.
  • glut32.lib kopyala, C:\Program Files (x86)\CodeBlocks\MinGW\lib adresine yapıştır.
  • glut.h kopyala C:\Program Files (x86)\CodeBlocks\MinGW\include\GL adresine yapıştır.
Bu adresler temel alınabilir ancak dosya yolları sizinkinde farklı olabilir. Fakat genel olarak .lib ve .h dosyaları mingw dosyası içerisinde, .dll dosyası ise system klasörü içerisine atılır.

Code::Blocks programını açın ve yeni bir proje oluşturun.


Karşınıza çıkan pencereden GLUT project kategorisini seçip go butonuna tıklayın.


Next butonuna tıklayarak devam edin.


Proje başlığına isim verin ve projenin nereye kaydolmasını istiyorsanız o yerin adres yolunu belirtin.


GLUT dosyalarının bilgisayar içerisindeki bulunduğu kısmı seçmeliyiz. Seçilen adres yolunun alt dosyaları include ve lib olmalıdır.


Daha sonra ayarlar aşağıdaki şekilde olacak şekilde Finish butonuna tıklıyoruz.


Aşağıdaki resimde görüldüğü gibi bir kod yapısı çıkacak karşımıza.


Project >> Build options... yolunu izleyin.


Karşınıza çıkan pencereden Linker Settings sekmesine giriniz.


Add libary penceresinden C:\Program Files (x86)\CodeBlocks\MinGW\lib dosyasını çağırın.


Question penceresi çıktığında Hayır butonuna tıklayın.


Ok butonuna tıklayarak devam edin.


Gerekli kütüphaneyi ekledikten sonra OK butonuna tıklayın.


Artık kodu derleyip çalıştırmak kaldı. Bu işlemleri yapalım ve aşağıdaki gibi bir görüntü karşınıza çıkıyorsa işlem başarılı bir şekilde tamamlanmıştır.



YARARLANILAN KAYNAKLAR

1. http://www.sci.brooklyn.cuny.edu/~goetz/codeblocks/glut/

25 Ekim 2016 Salı

C++ Konsolda Yazıya Renk Verme

#include <iostream>
#include <windows.h>

using namespace std;

int main(){
    HANDLE renkVer;
    int n;

    renkVer = GetStdHandle(STD_OUTPUT_HANDLE);

    for(n = 1; n < 255; n++){
        SetConsoleaTextAttribute(renkVer, n);
        cout << n << " Sturdy Geek " << endl;
    }


    return 0;
}


C++ Random Sayı Üretme - (Uygulamalar)

C++ ile random yani rastgele sayı üretmek için ilk önce ctime başlık dosyasını eklemeliyiz. Daha sonra srand fonksiyonu ile zamanı parametre alarak sürekli rastgele sayı kendini tekrar etmeyen sayılar oluşturabiliriz. Aşağıda uygulama kodları yazılmıştır.
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main(){
    int sayi, random_sayi;

    cout << "Sayi gir";
    cin >> sayi;

    srand(time(0));

    random_sayi = (rand () % sayi) + 1;

    cout << random_sayi;

    return 0;
}
Girilen sayı kadar random sayı oluşturma
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main(){

    int sayi;

    cout << "Sayi gir : ";
    cin >> sayi;

    int random_sayi;

    srand(time(0));

    for(int i=0; i<sayi; i++){
        random_sayi = (rand () % sayi) + 1;
        cout << random_sayi;
    }

    return 0;
}

23 Ekim 2016 Pazar

Üye Kayıt İşlemi - PHP ve MySQL

Üye kaydetme işlemini PHP ve MySQL kullanarak oluşturacağız. Siteye giren ziyaretçi eğer siteye kayıt olmak isterse üye kayıt sistemi ile gerekli bilgileri girerek üye kaydını yapabilecek.

Öncelikle yapılması gereken htdocs klasörü içerisinde uyelik adında bir dosya oluşturmak. Daha sonra ise kayit.php dosyasını uyelik klasöründe oluşturmak.

Oluşturulan kayit.php dosyasını kullandığınız herhangi bir editörle açın. Benim kullanacağım editör Sublime Text.

İlk önce üye kaydı formu oluşturulmalı. Kayıt olacak kullanıcının gireceği bilgiler de şu şekilde olacak:
  • Kullanıcı Adı
  • E-mail Adresi
  • Şifre
  • Şifre Doğrulama
Kullanıcı bu bilgileri girdikten sonra kayıt ol butonuna bastığında eğer girdiği bilgiler kurallara uygunsa kayıt işlemi gerçekleşecek eğer girilen bilgiler düzgün şekilde girilmediyse bilgilerin doğru girilmesi konusunda uyarı verilecek ve tekrar yapılması istenecek.

kayit.php sayfasının kodları şu an için aşağıdaki gibi.


<!DOCTYPE html>
<html>
<head>
 <title>Üye Kayıt</title>
</head>
<body>
<div class="baslik">
 <h1>Üye Kaydı</h1>
</div>

<form>
 <table>
  <tr>
   <td>Kullanıcı Adı:</td>
   <td><input type="text" name="uyeadi" class="stiltext"></td>
  </tr>
  <tr>
   <td>E-mail:</td>
   <td><input type="email" name="email" class="stiltext"></td>
  </tr>
  <tr>
   <td>Şifre:</td>
   <td><input type="password" name="sifre" class="stiltext"></td>
  </tr>
  <tr>
   <td>Şifre Doğrulama:</td>
   <td><input type="password" name="sifre2" class="stiltext"></td>
  </tr>
  <tr>
   <td></td>
   <td><input type="submit" name="kayit_btn" value="Kayıt Ol"></td>
  </tr>
 </table>
</form>

</body>
</html>

Kodun Ekran çıktısı ise şimdilik şu şekilde.

Bu görünümü elde ettiyseniz yola devam. Öncelikle bilmemiz gereken iki tane form metotu vardır. Bunlar get ve post metotlarıdır. get metotu ile kullanıcıdan alınan bilgiler url adresi kısmında görülmektedir. Ancak post metotu ile url kısmında kullanıcının girdiği bilgiler görünmez. Kayıt işlemleri gibi özel durumlarda post metotunu kullanmak gereklidir. Bu sayede bilgileri açık hale getirmiyoruz.

Kullanıcı bilgilerini post metodu ile kayit.php sayfasına action ile yollaycağız. Bunu yapmak için <form> etiketini kullanacağız. <form method="post" action="kayit.php"> olacak şekilde yazalım.



Daha sonra <!DOCTYPE html> etiketinin üstüne php etiketi açıyoruz ve session başlatıp, veri tabanı bağlantısını yapıyoruz.
<?php
 session_start();

  $vt = @new mysqli("localhost", "root", "", "uyelik");
?>



Şimdi ise veritabanı oluşturmak için localhost/phpmyadmin adresine girelim. uyelik adında bir veritabanı oluşturalım. Veritabanına uyeler adında 4 tane sütunlu bir tablo oluşturalım.

Sıra sütunları oluşturmada. İlk önce id adı tanımladı ve bu alacağı değerler int olarak belirlendi. Her üyenin diğer üyelerden farklı id numarası olacak ve bunu da AUTO_INCREMENT ile sağlıyoruz, karakter uzunluğunu ise 10 verdik. uyeadi, email ve sifre adında üç sütun daha oluşturuldu. Bu sütunların alacağı değerler sayı, harf ve özel işaretler olabileceği için VARCHAR olarak ayarlandı.Uyarı - Eğer #1075 hatası ile karşılaşırsanız tablo oluşturmada, INDEX kısmındaki PRIMARY değerini UNIQUE yapın.

Üye kayıt işlemlerinin olacağı asıl kısma geldik. Bu bölümde php kodları yazacağız. PHP kodlarını yazdığımız etiket içerisinde if karar yapısı oluşturuyoruz. Daha sonra isset() fonksiyonu ile post değişkeninin sorgulanmasını yapıyoruz. isset fonksiyonu değişkenin tanımlanıp tanımlanmadığını sorgular.


<?php
 session_start();

 $vt = @new mysqli("localhost", "root", "", "uyelik");

 if(isset($_POST['kayit_btn'])){
  
 }
?>

Önemli - kayit_btn post değişkeni içerisine yazılır. Kodları böyle yazarak anlattığımdan dolayı kod örneklerini bundan sonra parça parça göstereceğim.


if(isset($_POST['kayit_btn'])){
  session_start();
  $uyeadi = $vt->real_escape_string($_POST['uyeadi']);
  $email = $vt->real_escape_string($_POST['email']);
  $sifre = $vt->real_escape_string($_POST['sifre']);
  $sifre2 = $_POST['sifre2'];
 }

if içerisinde tekrar session başlattık. Kullanıcının girdiği üye bilgilerini oluşturduğumuz değişkenlere atandı. Şimdi dikkat ettiyseniz sifre2 değişkeni de tanımlandı. Bu değişkenin içindeki değer sadece doğrulama amaçlı kullanılacak.Eğer doğru ise kullanıcı kayıt olacak. Kullanıcının şifresi ise veritabanında md5 olarak şifrelenecek. $sql değişkeni oluşturulup sql kodları ile bu kullanıcı bilgilerini içeren değişkenler veritabanındaki değerlere atanacak. Daha sonra bu yazma işlemini gerçekleştirmek için mysqli_query() sayesinde sql ile vt arasında bağlantı kuruyoruz. Ardından session değişkeni oluşturup doğrulama  amaçlı uyarı mesajı kullanıcı karşısına çıkacak ve "Şu an içerdesin" yazısını görecek. Tekrar session değişkeni oluşturup kullanıcının üye adını bu değişkene atıyoruz. Daha sonrasında ise header() fonksiyonu ile başka sayfaya yönlendirme yapıyoruz.

Eğer şifre karşılaştırma yanlış çıkarsa else içerisindeki kodlar çalışacak ve uyarı verecek.


if(isset($_POST['kayit_btn'])){
 session_start();
  $uyeadi = $vt->real_escape_string($_POST['uyeadi']);
  $email = $vt->real_escape_string($_POST['email']);
  $sifre = $vt->real_escape_string($_POST['sifre']);
  $sifre2 = $_POST['sifre2'];

  if($sifre == $sifre2){
   $sifre = md5($sifre);
   $sql = $vt->query("INSERT INTO uyeler(uyeadi,email,sifre) VALUES('$uyeadi','$email','$sifre')");
   $_SESSION['uyari'] = "Şu an içerdesin";
   $_SESSION['uyeadi']= $uyeadi;
   header("location: index.php");
  }else{
   $_SESSION['uyari'] = "Girilen İki Şifre Uyuşmamaktadır.";
  }
 }

 }

Şimdi ise biraz görünüme önem verelim. Bir tane style.css adlı dosya oluşturup bunu kayit.php dosyama dahil ediyorum. Oluşturuduğumuz bu dosyanın uyelik klasörü içinde olmasına dikkat edin. Ardından style.css dosyasına aşağıdaki kodları yazıyorum.


body{
 padding: 0;
 margin:0;
}
.baslik{
 background:#bad7f2;
 color:#333;
 text-align: center;
 top:0;
 width:100%;
 padding: 7px;
}
form{
 width: 45%;
 padding: 30px;
 border: 1px solid #ccc;
 margin: 5px auto;
}
.stiltext{
 margin-top:2px;
 height: 28px;
 border: 1px solid #666;
 font-size: 16px;
 padding: 1px;
 width: 100%;
}
#hatamesaji{
 width: 50%
 margin: 5px auto;
 height: 30px;
 border: 1px solid #ff0000;
 background: #ffb9b8;
 color: #ff0000;
 text-align: center;
 padding-top: 10px;
}
td{
 text-align:right;
}


style.css dosyasını dahil etmek için kayit.php kodları içerisinde ... etiketleri içerisine eklemelisiniz.


<link rel="stylesheet" type="text/css" href="style.css">

Üye kayıt formunun görünümüne bakalım.













Dikkat ettiyseniz header() fonksiyonu ile indx.php sayfasına yönlendirme yaptık. uyelik dosyası içerisine index.php dosyası açıp aşağıdaki kodları ekliyorum.


<!DOCTYPE html>
<html>
<head>
 <title>PHP Üyelik Sistemi</title>
 <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>

<div class="baslik">
 <h1>Ana Sayfa</h1>
</div>

<div>
<h4>Hoş geldin <?php echo $_SESSION['uyeadi'];?></h4>
</div>

</body>
</html>


Şimdi ilk kayıt işlemini yapalım. Kayıt başarılı olursa index.php sayfasına yönlenecek ve Hoş geldin phpbil diyecek.



Üye kayıt ile ilgili kısmı burada bitirmiş olduk. Diğer yazıda Üye girişi ve üye çıkış işlemi anlatılacaktır. Herhangi bir sorunda aşağıdan yorum atarak berlirtirseniz yardımcı olabilirim.

20 Ekim 2016 Perşembe

C++ Sınıflar ve Nesneler [Örnek 1]

#include <iostream>

class workers{
private:
 char worker_name[20], worker_surname[20];
 int worker_age;
public:
 void worker_info(char const *w_name, char const *w_surname, int  w_age){
  for(int i=0;i<20;i++){
   worker_name[i] = w_name[i];
   worker_surname[i] = w_surname[i];
  }
  worker_age = w_age;
 }
 void worker_print(){
  std::cout << worker_name << std::endl;
  std::cout << worker_surname << std::endl;
  std::cout << worker_age << std::endl;
 }
};

int main(){
 workers ali, arda, cihan;

 ali.worker_info("Ali","Bidost",20);
 arda.worker_info("Arda","Bidost",20);
 cihan.worker_info("Cihan","Bidost",20);

 ali.worker_print();
 std::cout << std::endl;
 arda.worker_print();
 std::cout << std::endl;
 cihan.worker_print();

 return 0;
}

14 Ekim 2016 Cuma

Font Awesome Kullanımı

Font Awesome, icon fontu ve CSS aracıdır. Font Awesome sayesinde bloglarımızda icon karakterleri ücretsiz şekilde kullanabiliyoruz. Blog içerisinde Font Awesome nasıl kullanılır aşağıda adım adım gösterilmektedir.

İlk adım olarak fontawesome.io adresine gidin.

Aşağıdaki resimde olduğu gibi email adresinizle abone olun.


Abone olduktan sonra email adresinize font awesome ile ilgili bir mesaj gelecektir. Mesaj içeriği şöyle olacaktır.


Verilen script çağırma kodunu kopyalayın ve HTML dosyasının  <head> etiketi içerisine ekleyin.

Daha sonra fontawesome.io/icons adresine girin ve kullanmak istediğiniz iconu aratın. Site üzerinden kullanmak istediğiniz iconun html kodu aşağıdaki resimde olduğu gibi karşınıza çıkacaktır. Bu kodu kullanmak istediğiniz herhangi bir html bölüme ekleyebilirsiniz.


10 Ekim 2016 Pazartesi

ASP.NET MVC DayOfWeek

 public ActionResult Index()
        {
            string gun = DateTime.Now.DayOfWeek.ToString();
            if(gun == "Monday")
            {
                ViewBag.gun = "Pazartesi";
            }
            else if(gun == "Tuesday")
            {
                ViewBag.gun = "Salı";
            }
            else if (gun == "Wednesday")
            {
                ViewBag.gun = "Çarşamba";
            }
            else if (gun == "Thursday")
            {
                ViewBag.gun = "Perşembe";
            }
            else if (gun == "Friday")
            {
                ViewBag.gun = "Cuma";
            }
            else if (gun == "Saturday")
            {
                ViewBag.gun = "Cumartesi";
            }else
            {
                ViewBag.gun = "Pazar";
            }
            return View();
        }

ASP.NET MVC Html.BeginForm() Örneği

@using (Html.BeginForm())
{
 <p> Kullanıcı Adı : @Html.TextBoxFor(x=>x.username) </p>
 <p> E-mail    : @Html.TextBoxFor(x=>x.email) </p>
 <p> Şifre    : @Html.TextBoxFor(x=>x.sifre) </p>
 <p> Şifre Doğrulama : @Html.TextBoxFor(x=>x.sifre2) </p>
 <p> Cinsiyet   : @Html.DropDownListFor(x=>x.sex,new[]{
  
  new SelectListItem() { Text = "Kadın", Value=bool.TrueString},
  new SelectListItem() { Text = "Erkek", Value=bool.FalseString}
  
 }, "Seçim Yap")
 
 </p>
 
 <input type="submit" value="Üye Ol" />
 

}

C++ Fonksiyonlar

Eğer gelişmiş yapıda programlar yapılıyorsa fonksiyon kullanmak gereklidir. Bu sayede program kodları içerisindeki karışıklık önlenmiş olur. Fonksiyonlar sayesinde program kodlarını küçük parçalar ayırıp daha kolay bir şekilde yönetebiliriz. Bu parçaların birleşimi ise bütün bir programı ortaya çıkartır. Fonksiyonların bir diğer avantajı ise tekrar etme durumunu ortadan kaldırmasıdır. Örneğin program içerisinde 3 tane daire alanı hesaplayan kısım var. Tek tek hepsine aynı kodları yazmak yerine bir fonksiyon yapısı içerisine yazıp oradan sonucu çağırarak tekrar tekrar yazılması önlenmiş olur.

Fonksiyon Tanımlama

Değer döndüren ve değer döndürmeyen olarak iki çeşit fonksiyon yapısı vardır.

Değer döndüren fonksiyon yapısı aşağıdaki gibidir.
int carpİki(int a){
    int carp = a * 2;
    return carp;
}
Fonksiyon içerisindeki kodların yaptığı işlem sonucu olarak kullanıcıya dönecek olan değerin türü int yani tamsayıdır. int carpİki kısmındaki int değerin döneceği türdür. carpİki ise fonksiyon ismidir. int a ise fonksiyonun parametresidir. Aynı şekilde char, long gibi diğer değer türlerinde de değer döndürebiliriz.

Değer döndürmeyen fonksiyon yapısı ise aşağıdaki gibidir.
void yaz(){
    cout << "merhaba";
}
Değer döndürmeyen fonksiyonlarda değer türü yerine void ifadesi yazılır. Farkettiyseniz eğer değer döndürenlerde return komutu kullanıldı ancak döndürmeyenlerde return kullanılmıyor.

Fonksiyon Prototipi

Fonksiyonları oluştururken dikkat edilmesi gereken bir konudur fonksiyon prototipi. Fonksiyonu main metotunun üstüne yazdıysak prototip kullanımı gerekli değildir ancak fonkiyonu main metotunun altına yazdıysak o fonksiyonun prototipi yazılmalıdır. Eğer prototip yazılmazsa main metotu içerisinde çağırılan fonksiyon çalışmayacaktır. Bunun nedeni ilk önce main metotunu derlenmesidir. Bu yüzden içerisinde tanımlı olan fonksiyon tanımsız durumda kalıyor. Bu durumu önlemek için önceden fonksiyonun bildirimi olarak prototip kullanılır.

Prototip tanımlama aşağıdaki örnek yapılar gibi olabilir.
int carpİki(int);
int carpİki(int a);
Fonksiyon prototipleri çağırılan kütüphanelerin altına yazılır. Aşağıdaki örneği inceleyelim.
#include <iostream>
using namespace std;

int fact(int);

int main(){
    int sayi;
    cout << "Faktoriyeli alınacak sayıyı giriniz..:";
    cin >> sayi;
    cout << "sonuç...:" << fact(sayi);
    cin.get();
    return 0;
}

int fact(int a){
    int carpim = 1;
    for(int i=1;i<=a;i++){
      carpim = carpim * i;
    }
    return carpim;
}
İlk önce faktoriyel fonksiyonu prototipi yazıldı. Daha sonra main metotu içerisinde kullanıcıdan faktoriyeli alıncak olan sayı istenildi. Girilen sayı fonksiyon çağırılarak hesaplandı ve sonuç int türünde geri geldi, yazdırıldı.

Fonksiyon Çağırma

Oluşturulan fonksiyonlar main metotu içerisinde kullanılacağı kısımlar içinde çağırılmalıdır. Fonksiyonu çağırırken fonksiyon adını ve varsa parametresi yazılır. örnek : carpİki(sayi);

Fonksiyon Değer Döndürme

Değer döndüren fonksiyonlarda değer döndürmeyi sağlayan ifade return ifadesidir. return ifadesi fonksiyon içerisinde kullanılmazsa derleme hatası olmaz ancak fonksiyon döndürülecek değer için rastgele değer üretir. 

Fonksiyon Parametreleri

Fonksiyon parametreleri, fonksiyon içerisinde kullanılan değişkenlerdir. Main metotu içerisinden fonksiyon içerisinde gelen değerler bu parametrelere atanır. Bir ya da birden fazla parametre kullanılabilir. Örnek olarak aşağıdaki yapıyı inceleyiniz.
#include <iostream>
using namespace std;

int usAl(int,int);

int main(){
    int sayi, us;
    cout << "Sayı değeri..:";
    cin >> sayi;
    cout << "üs değeri..:";
    cin >> us;
    cout << "sonuc..:" << usAl(sayi,us);
    return 0;
}

int usAl(int a, int b){
    int sonuc = 1;
    for(int i=1;i<=b;i++){
        sonuc=sonuc*a;
    }
    return sonuc;
}

9 Ekim 2016 Pazar

GitHub .js ve .css Dosya Upload Etme [Blogger]

Blogger'ın kendi host özelliği olmadığı için dışarıdan destek almak gerekiyor. JavaScript ve CSS dosyalarını Google Drive'ı host gibi kullanarak bloglarımız için kullanabiliyorduk. Ancak Google Drive host özelliğini iptal edene kadar. Bunun üzerine biraz araştırma yaptım ve alternatif olarak GitHub sitesinin host olarak kullanılabildiğini öğrendim. Deneme olarak bir .css dosyası upload ettim ve işe yaradığını gördüm. 

GitHub sitesini kullanmanız için ilk önce üye olmanız gerekiyor. github.com

Üye olduktan sonra mail adresinize gelen onaylama linkine tıklayarak, hesabınızı onaylatın.

Artık gerekli işlemleri yapmaya başlayabiliriz. İlk önce proje başlatıyoruz. Start a project butonuna tıklayın.


Repository kısmına bir isim verin. Public ve Private seçeneklerinden Public'i seçin ve Create repository butonuna tıklayın. 


Tıkladıktan sonra karşınıza gelen bölümden README linkine tıklayın.


README bağlantısına girdikten sonra açılan sayfada aşağıya inip Commit new file butonuna tıklayın.


Daha sonra üst kısımdan Settings seçeneklerine girin.


Settings sayfasında aşağıya inin ve GitHub Pages bölümündeki Automatic page generator içindeki launch butonuna tıklayın.


Açılan bölümde en aşağıdaki Continue to layouts butonuna tıklayarak devam edin.


Karşınıza çıkan index önizlemesi üzerinde olan Publish Page butonuna tıklayın.


Aşağıdaki sayfa karşınıza gelecek. Branch kısmından yeni bir isimde branch oluşturun.

Branch oluşturulduktan sonra Create new file butonuna tıklayın.


Dosyamıza javascriptdosyasi.js ismini verdik. Javascript kodları ise aşağı yazan kısma gelecek.


Oluşturulan dosyayı kaydetmek için Commit new file butonuna tıklıyoruz.


Görüldüğü üzere .js dosyası yüklendi.

 
Bu dosyayı kullanmak Blogger'da çağırabilmemiz için aşağıdaki gibi bir url yazmamız lazım.

http://kullaniciadi.github.io/repository-adi/dosyaismi.js

Bizim oluşturduğumuz .js dosyasının url'si aşağıdaki gibidir.

http://inekvar.github.io/dosyalar/javascriptdosyasi.js

Aynı yükleme işlemini .css dosyaları içinde yapabilirsiniz. Daha sonra bu oluşturduğunuz url bağlantıları Blogger içerisinde aşağıdaki kodlar ile çağırılır.

JavaScript dosyası için - <script src="dosya.js"></script>
CSS dosyası için - <link rel="stylesheet" href="dosya.css" />

Bir sorun yaşarsanız yorum yaparak bu sorunu belirtebilirsiniz.

8 Ekim 2016 Cumartesi

ASP.NET MVC Dosya Yapısı

ASP.NET MVC projesinin Visual Studio'da oluşturduğumuzda ekranın sağ tarafından projenin dosya yapısı görülür. Dosya yapısını bu yazıda inceleyeceğiz.


App_Data 

App_Data klasörü içeriğinde LocalDB gibi uygulama veri dosyalarını, .mdf dosyalarını, .xml dosyalarını bulundurur. IIS, App_Data dosyalarında asla bulunmaz.


App_Start

App_Start, uygulama başladığında çalışacak olan sınıf dosyalarını içerir. Genellikle bu dosya içerisinde AuthConfig.cs, BundleConfig.cs, FilterConfig.cs, RouteConfig.cs vb. yapılandırma(config) dosyaları bulunur. MVC 5'te otomatik olarak dahil edilen dosyalar ise BundleConfig.cs, FilterConfig.cs ve RouteConfig.cs dosyalarıdır. Bu dosyaları ileri ki yazılarda inceleyeceğiz.


Content

Content dosyası css dosyaları, resim dosyası ve icon dosyaları gibi statik dosyaları içerir. MVC 5 uygulamasında bootstrap.css, bootstrap.min.css, Site.css dosyaları dahildir.


Controllers

Controllers klasörü sınıf dosyaları için denetleyiciler içerir. Controllers kullanıcının isteğini görür ve geri dönüş yapar. Controller dosyalarının isminin sonu mutlaka "Controller" ile bitmelidir. Örnek olarak İletisimController. Controller konusunu sonraki yazıda inceleyeceğiz.

fonts

fonts klasörü, özel yazı tipi dosyalarını içerir.


Models

Models klasörü model sınıf(class) dosyalarını içerir. Uygulama verilerinin hangi uygulama tarafından kullanılacağı gibi public properties dosyaları dahildir.


Scripts

Scripts klasörü içerisinde uygulama için JavaScript ve VBscript gibi dosyalar bulunur. MVC 5 modelinde aşağıdaki resimde görülen dosyalar otomatik olarak bulunmaktadır.



Views

Views klasörü içinde uygulamanın HTML dosyaları bulunur. Genel olarak içerisinde HTML, C# ve VB.net kodları olan .cshtml dosyalarının barındırır.

Views klasörü içerisinde her controller için ayrı bir klasör vardır. Örnek vermemiz gerekirse HomeController tarafından işlenecek tüm .cshtml dosyaları Views > Home klasörü içerisinde olacaktır.



Ayrıca MVC projesi aşağıdaki yapılandırma (config) dosyalarını içerir.

Global.asax

Global.asax, uygulama düzeyinde çalışan olaylar için kullanılan Session_End Application_BeginRequest, Application_Start, Application_Error, session_start gibi kodları yazmak için izin verir.


Packages.config

Packages.config NuGet tarafından yönetilen dosya paketlerini ve sürümlerini yüklenmesi için vardır.


Web.config

Web.config dosyası uygulama düzeyinde yapılandırmaları içerir.

ASP.NET MVC Nedir?

Öncelikle bilinmelidir ki MVC, Microsoft tarafından geliştirilmiş bir teknoloji değildir. 1979 yılından beri kullanılan bir yazılım mimari modelidir. Tygve Reeskaug tarafından geliştirilmiştir. ASP.NET MVC Framework ise Microsoft tarafından geliştirilmiştir ve hala da geliştirilmektedir. ASP.NET ile MVC mimarisini kullanabiliyoruz.

MVC açılımı şu yapılardan oluşmaktadır.

Model - View - Controller

Model : Bu yapı içerisinde veritabanına erişim, veritabanı işlemleri, class'lar için kullanılacak olan EntityFramework, ADO.NET ya da Nhibernate ile veri işlemleri bulunur.

View  : HTML, CSS ve JavaScript kodları ile oluşturduğumuz kısım burasıdır. Kullanıcı burayla etkileşime geçer.

Controller : View kısmı ile etkileşime geçen kullanıcının(Client) istekleri(request) Controller tarafından tutulur. Daha sonrasında ise bu istekler işleme konur. Kullanıcının istekleri bu bölümde gerçekleştirilir.(nesne ve değişken oluşturma, ihtiyaç duyulan metotların çalışması) Model ile view arasında bağ oluşturur.


ASP.NET Web Forms Dezavantajları

ViewState

Kullanıcıya geç cevap veren bir web sayfası, sunucu üzerinde bant genişliğinin kullanıldıkça giderek artması. Kullanıcı gerekli bilgilerin gereksiz birikmesi sonucu performans düşüşü yaşanır.

Page Life Cycle

Türkçe anlamı ile Sayfa Yaşam Döngüsü. (Güncellenecek)

HTML Görünümü

Sunucu kontrolleri HTML kodlarını kendisine göre yorumlar ancak HTML görünümünün web standartlarına uygun olarak çıkmaması ve CSS, JavaScript kontrolünün sunucu tarafından karmaşık hale getirilmesi. (karmaşık kimlik değerleri)

Code-Behind Bağımlılığı

Mantıksal işlemleri çalıştıracak kodları sunum katmanındaki sayfaların kod arkasına(code-behind) yazma zorunluluğu vardır. Bu durum dağınık kod yapısı sorununu yanında getiriyor. Daha sonrasında kodu ekleme ve güncelleme yaparken zorlanmakta da bu sebeptendir.

ASP.NET Web Forms Nedir?

ASP.NET code behind özelliğini destekler. Code behind özelliği programlama öğeleri ile tasarım öğelerinin farklı sayfalarda bulunmasını sağlar.

Tasarım kısmı .aspx uzantılı dosyada bulunur.

Programlama kısmı ise .aspx.cs uzantılı dosyada bulunur. .cs olmasının sebebi C# dilini kullanmamızdan dolayıdır. Eğer VB.net kullanmak istersek .cs yerine .vb olmalıdır.

ASP.NET'in oturum yönetimi desteği gelişmiştir. Üye kaydı ve üye girişi işlemleri daha anlaşılır, kolay ve güvenli kullanılabilir.

ASP.NET Nedir?

ASP.NET, web teknolojisi uygulamasıdır. Microsoft tarafından geliştirilmiştir. Bu teknoloji sayesinde web uygulamaları, dinamik web sayfaları geliştirebilirsiniz.

ASP'nin açılımı Active Server Pages.

.NET Framework'un parçasıdır.

ASP.NET ile web uygulaması yaparken kullanmanız gereken .net dillerinden bir tanesi C# diğeri ise VB.NET dilleridir.

ASP.NET'in iki tane programlama modeli vardır. Bunlar:

1- Web Forms
2- MVC

Bu modelleri kullanarak uygulamalar geliştirebilirsiniz. (Bu blog içerisinde biz MVC modeli üzerinden ilerleyeceğiz.)

Web Forms, ASP.NET çıktığından beri kullanılan bir programlama modelidir. MVC ise Web Forms programlama modeline alternatif olarak geliştirilmiş ve 2009'da kullanılmaya başlanmış programlama modelidir.

7 Ekim 2016 Cuma

MinGW Kurulumu

MinGW kurulumu yaparak cmd üzerinde C++ program kodlarınızı derleyebilirsiniz. Yapmanız gereken adımlar şu şekilde:

İlk önce mingw.org sitesine gidiniz. Sağ menünün üst tarafında bulunan Download Installer butonuna tıklayın. Açılan pencerede otomatik olarak sourceforge sitesinde setup dosyası download edilecektir.

Kuruluma başlamak için indirilen setup dosyasını çalıştırın.





Continue butonuna tıklayın ve karşınıza gelen ekrandan Install butonuna tıklayın ve yükleme işlemini başlatın. Yükleme işlemi bir kaç dakika sürebilir.


Yükleme işlemi tamamlandıktan sonra Continue yaparak devam edin.


Yukarıdaki pencere karşımıza çıktıktan sonra sarı ile işaretlenmiş olan paketleri seçiniz ve Installation sekmesinden gerekli paketleri yüklemek için Apply butonuna tıklayın.


Karşımıza bu ekran çıktığında artık kurulumu tamamlamak için Close butonuna tıklayın.

Buraya kadar her şey tamam. Ancak cmd üzerinden ancak MinGW'nin kurulu olduğu dizin içersindeki bin klasörü içerisinde ki dosyalar derlenebilir. Bu konu dışındaki dosyaları cmd üzerinde derleyemeyiz. Her hangi bir konumda olan C++ dosyasını derlemek için aşağıdaki ayarları yapmamız gerek.

İlk önce Bilgisayar klasörünü bulup sağ click > özellikler yolunu izliyoruz. Karşımıza çıkan ekrandan Gelişmiş Sistem Ayarları bağlantısından ilerliyoruz.



Karşınıza çıkan pencereden Ortam Değişkenleri butonuna tıklayın.


Kullanıcı değişkenleri kısmından PATH'i seçin ve siyah çizgili dikdörtgen içerisindeki Düzenle butonuna tıklayın.


Karşınıza çıkan pencereden Yeni butonuna tıklayın ve yazılacak kısma C:\MinGW\bin\ yolunu yazıp işlemi tamamlamak için Tamam butonuna tıklayın.

Daha sonra cmd çalıştırın ve komut satırına g++ yazıp çalıştırın. Eğer karşınıza aşağıdaki gibi fatal error: hatası veriyorsa kurulum başarı ile tamamlanmıştır.

Deneme amaçlı ilk programımızı yazıp cmd üzerinde derlemeye çalışalım.

Aşağıdaki gibi bir C++ programı yazdım ve bu programı program.cpp olarak Masaüstüne kaydettim.

#include <iostream>
using namespace std;

int main(){
cout << "selam!";
cin.get();
return 0;
}

İlk önce program kodlarını kaydettiğim masaüstüne ulaşıyorum. Daha sonrasında program kodlarının derlenmesi için gerekli kodları yazıyorum. Program derlendikten sonra program ismini tekrar girip programı çalıştırıyorum. Resimde olduğu gibi.