24 Ağustos 2015 Pazartesi

TUBITAK BILGEM YTE ' de Staj






     Blogda uzun zamandır yazmıyordum. Stajın son haftasındayım ve staj defterini hazırlarken bloguma da staj ve enstitü hakkında biraz bilgi vermek istedim. Ben YTE'ye başvuracağım zaman internette böyle bir yazı olmamasının eksikliğini yaşadım. Bundan sonra kimse yaşamaz umarım.


     İlk stajımı yapacak olmanın verdiği heves ve heyecanla stajımı yapacak güzel  bir yer ararken kendimi Tübitak Bilgem'in başvuru formuyla başbaşa buldum. Staj başvuruları genelde Mayıs ayında oluyor.İlk stajımı yazılım konusunda yapma isteğim dolayısıyla Bilgem'e bağlı olan YTE Yazılım Teknolojileri Araştırma Enstitüsü'ne başvurumu yaptım. Bilgeme bağlı toplam 6 enstitü var. Başvuru kabul mailinin gelmesiyle staj heyecanı başlamış oldu.

     Staj için gerekli belgeleri hazırlayıp stajın ilk günü belgelerle beraber kuruma gitmek gerekiyor. Bazı eksik belgeler varsa staj sonuna kadar tamamlamak gerek. İlk gün hepsi hazır gitmese de sıkıntı yok. Gerekli belgelerin neler olduğunu staj kabul maili ile birlikte gönderiyorlar.
Ankara'da Eskişehir Yolunun kenarında olan YTE otobüs veya metro ile Armada AVM(söğütözü durağı)'ye 10 dk yürüme mesafesinde. Servis yok malesef ama öğle yemekleri çok güzel. Yemeklerden bahsetmişken enstitüde bulunan terasta öğle yemeği olarak mangal yapıldığı bile oldu. :) Çalışma saatleri 8.30 - 17.30 ama stajyerler için 09.00 - 17.00 mesai saatleri uygulanıyor. Ayrıca enstitüde koşu bandı, bisiklet, dambıllar, langırt, masa tenisi mevcut.

     Stajın ilk günü gerekli belgeleri İK'da  bizimle ilgilenen Orhan Bey'e teslim ettikten sonra toplantı odasına geçtik. Benimle beraber 10 stajyer, stajına toplantı odasında devam etti. İlk hafta klima arızalı olsada sonra ki haftalarda TUBITAK BILGEM YTE  tarafından rahat bir çalışma ortamı, sınırsız çay ve kahve, leziz ve benzersiz öğle yemekleri, her katta bulunan mutfak, buzdolabı vs. biz stajyerlere sunuldu. Devletimiz gerçekten de bilime  ve bilim adamına değer veriyor :)

     Stajın ilk günü Orhan Bey enstitü hakkında bilgiler verdi. Yazılım Teknolojileri Araştırma Enstitüsü bakanlıklara, devlet kurumlarına vs. yazılım hizmeti sağlıyor. Enstitünün devam eden projelerine burdan bakabilirsiniz.

     Stajyerlerle ilgilenecek mühendislerin belirlenmesi de ilk gün oldu. İkinci gün herkes kendisiyle ilgilenecek mühendisle tanışmıştı. Enstitüde çalışan mühendislerin yaş ortalaması gerçekten çok genç. Mühendisler herkese bir proje verdi. Kimse boş durmuyor, herkesin bir projesi var. Yani stajyerler burda çay getir, götür işlerine karışmıyor :) 

     Benimle birlikte dört stajyer ile bir mühendis ilgileniyordu.Bizden bir web projesi yapmamızı istedi. Proje hakkında detaylı bilgi veremiyorum şirket kuralları gereği. İsterseniz kendi projenizle de ilgilenebilirsiniz dedi. Biz verdiği projeyi Asp.net MVC kullanarak yaptık. Stajımızda bizimle ilgilenen mühendis haftanın ilk ve son günü görüşmemizi söyledi.

     Diğer stajyerler android ile uygulama, version kontrol sistemlerine konfigürasyon, JUnit, Java ile web uygulaması , Hibernate, Java ile site monitör vs. konularda çalışmalar yaptılar. Bazı mühendisler neredeyse her gün toplantı odasına gelip ilgili stajyerlerine gerekli desteği sağladılar.

     Uzun lafın kısası YTE'de staj yapmanızı tavsiye ederim. Gerçekten burda staj yapmak insana güzel deneyimler katıyor. Boş durmuyorsunuz. Aklınıza takılan birşey olursa da yorum yaparak sorabilir veya blogun iletişim kısmından bana ulaşabilirsiniz.

     Hayırlı günler.. :)




26 Nisan 2015 Pazar

Windows Format USB'si Oluşturma (PROGRAMSIZ)

     Bilgisayarımıza format atmak istiyoruz ve cd-room bozuk, çalışmıyor veya mevcut değil. Bu durumda USB ile format atmak sorunumuza çare olacaktır, hemde daha hızlı!
Adım adım format atma USB'si yapmayı sizlere anlatacağım bu yazımda.
   
1.USB'nin içinde U3 gibi ek bir partition varsa bunu silmek gerekiyor. USB'nin kendi silme programı var.Küçük bir google araştırmasıyla bulunabilir. U3 yoksa eğer ikinci adımdan devam edin.
2.USB'yi bilgisayara takın.
3.Başlat -> Çalıştır -> CMD yazıyoruz ve komut satırını açıyoruz.
4.diskpart yazıp entera basıyoruz.
5.Yeni bir komut penceresi açılacak, ordan devam ediyoruz.
6.list disk yazıp entera basıyoruz.
USB diskimizin numarasına burdan bakıyoruz. Genelde numarası 1 olur. 1 numarada değilse USB boyutundanda anlaşılabilir. Eğer numarası görülmüyorsa 1.adıma gidin. Çünkü U3 partition yüklüyse numara görünmez.
7.select disk 1 (hangi numaraya aitse) yazıp entera basıyoruz.
8.clean yazıp entera basıyoruz.
9.create partition primary yazıp entera basıyoruz.
10.select partition 1 yazıp entera basıyoruz.
11.active yazıp entera basıyoruz.
12.assign yazıp entera basıyoruz.
13.exit 
14.exit 

Gelen format penceresinde fat32'yi ve cluster boyutunuda 32 kb seçiyoruz. 64kb hariç herhangi biri de olabilir. Ama 32 kb olması hız açısından daha verimli olur.

Evet şuanda USB'miz hazır. Tek eksik olan format için gerekli olan iso dosyamız. Son aşamada iso dosyasına sağ tıklayıp winrar (Winzip/Winrar/7-Zip vs.) yardımıyla extract(çıkart) işlemini yapacağız. Yani iso dosyasının içindekileri USB'ye çıkartacağız.
Direk iso dosyasını USB'nin içine sürüklerseniz olmaz,  iso dosyasına sağ tıklayıp dosya içerisindekileri winrar yardımıyla USB'nin içine çıkartmamız gerekiyor.
(iso dosyasına sağ tıkla->dosyaları çıkart->usb'yi seç.)

USB'miz hazır! Geriye format atmak kalıyor :)

23 Nisan 2015 Perşembe

Pointer and Swap

     Pointerlar verilerimizin bellekde hangi adreste tutulduklarını gösterir.    
     değişkenTipi* GöstergeAdi şeklinde tanımlanır.
     int türünde bir a pointeri
     int* a;  veya int *a; şeklinde tanımlanır.
     cout << a ; yazarsak a pointerının hangi adresi tuttuğunu görürüz. 
     cout << *a; yazarsak a pointerının tuttuğu adresdeki verinin değerini görürüz. 

    Soru:
    İnt türünde iki adet değişkenimiz olsun. Bu değişkenlerin değerlerini birbiriyle değiştiren bir fonksiyon yazalım.

Kodlar:
#include <iostream>
using namespace std;
void degistir(int *a, int *b);//fonksiyon prototipi
void main(){
    int a = 100;
    int b = 200;
    cout <<"-- degisimden once --"<< endl;
    cout << "a: " << a << " b: " << b << endl;
    degistir(&a, &b);//& adres operatörüdür. a ve b'nin adresini fonksiyona gönderdik.
    cout <<"-- degisimden sonra -- "<< endl;
    cout <<"a: "<< a << " b: " << b << endl;
    system("PAUSE");
}

void degistir(int *a, int *b){
    int x = *a;//a pointerındaki değeri x'a atadı.
    int y = *b;//b pointerındaki değeri y'ye atadı.
    *a = y;//a pointerının değerine y'yi atadı.
    *b = x;//b pointerının değerine x'i atadı.
}

Çıktı:

19 Nisan 2015 Pazar

Satır Temizleme Programı

     (DPU Veri Yapıları ve Algoritmalar 2013 Vize 6.soru)
     5 satırlık 3 sütunluk bir matrisimiz var. Bu matrisi bool türünde iki boyutlu bir dizi tanımlayarak oluşturacağız. Eğer matrisimizin herhangi bir satırındaki bütün değerler true ise bu satırın tamamını false yaparak temizleme işlemini gerçekleştireceğiz.


     Öncelikle kullanıcıdan matrisin elemanlarını alıp, gerekli kontrolleri yapıp temizleme işlemini bitireceğiz. Temizleme işlemini fonksiyon yardımıyla yapacağız.

Kodlar:
#include <iostream>
using namespace std;
void satir_temizle(bool dizi[][3], int satir);//fonksiyon başlığı
void main(){
    setlocale(LC_ALL,"Turkish");
    bool dizi[5][3]; //5satır ve 3sütundan oluşan bool matrisi.
    //matrise elemanları almak için for açtık.
    for(int i=0;i<5;i++){//ilk for satır satır ilerler.
        for(int j=0;j<3;j++){//içteki for sütun sütun ilerler.
        cout << i+1 <<".satırın " << j+1 << ".sütünunu giriniz: ";
            cin>> dizi[i][j];
        }
    }
    cout << "-- Oluşturduğumuz matris:"<<endl;
    //matrisi ekrana yazdırıyoruz.
    for(int i=0;i<5;i++){
        for(int j=0;j<3;j++){
        cout <<"     "<<dizi[i][j]<<" " ;    
        }
    cout << endl;
    }
    cout << " "<< endl;
    cout << "-- Satırları temizlenmiş olan matris: "<<endl;
    satir_temizle(dizi,5);//satir_temizle()fonksiyonu çağrıldı.
system("PAUSE");
}
void satir_temizle(bool dizi[][3],int satir){
    int sayac=0; // sayac değeri 3 olunca silme işlemi gerçekleşecek.
    //matrisin değerlerini kontrol etmek için for döngüsü.
    for(int i=0;i<satir;i++)
    {
        for(int j=0;j<3;j++)
        {
        if(dizi[i][j]) //matrisin i.satır j.sütur elemanı true ise
            sayac++; // sayacı bir arttır, 3sütunda true ise sayac==3 olacaktır.
        }
        //tüm satırlar true ise silme işlemi gerçekleşecek.
        if(sayac==3){ 
        for(int j=0;j<3;j++)
            dizi[i][j]= false; // ilgili satır false yapıldı.
        }
        sayac=0; // sayac diğer satırları kontrol için sıfırlandı.
    }
    //yeni oluşan matrisi ekrana yazdıralım.
    for(int i=0;i<satir;i++)
    {
        for(int j=0;j<3;j++)
        {
        cout <<"     "<<dizi[i][j]<<" " ;
            }
    cout << endl;
    }
}



Çıktıda 1-4 ve 5.satırların temizlendiğini görüyoruz. Çünkü kullanıcı bu satırların tüm elemanlarını true değer girdi.
Çıktı:

18 Nisan 2015 Cumartesi

ASCII Değeri ve Fonksiyon


 
     Fonksiyonları niye kullanıyoruz? Kod tekrarından kaçınmak için. Fonksiyonlar kod yazımını kolaylaştırır.Örneğin  elimizde sayı değerleri var ve biz bu değerlerin ortalamasını bulacağız. Kodumuzun çeşitli yerlerinde ortalama bulma işlemi yapacak ise fonksiyon yardımıyla işimizi kolaylaştırabiliriz. Fonksiyon kütüphaneleri olduğu gibi kendi fonksiyonumuzuda yazabiliriz.
Fonksiyon şu şekilde oluşturuluyor.

VeriTipi FonksiyonAdı(Parametreler) // fonksiyon başlığı
{
//kodlar
return döndürülecekDeğer;
}
Veri tipi double, int, string, bool vs. olabilir.
 Eğer fonksiyonun döndüreceği bir değer yoksa veri tipi void olarak tanımlanır ve return değeri olmaz.

Soru:
Her karakterin ASCII tablosunda sayısal bir değeri vardır. Siz de kullanıcıdan bir karakter ve tam sayı değeri girmesini isteyin. Girilen karakterin ASCII değerinin girilen tam sayı ile eşit olup olmadığını belirten bool türünde bir fonksiyon yazınız.(bool türü 0(false) veya 1(true) değeri alır.)

Cevap:


#include <iostream>
using namespace std;
bool asciiDegeri(char a, int b){ //bool türünde fonksiyon oluşturuldu.
if(a==b)
return true; // a==b ise return edilen değer true.
else
return false; // return edilen değer false.
}
void main(){ //main ana fonksiyonumuz
char ch; // ch adında bir karakter tanımlandı.
cout << "Karakteri giriniz: ";
cin >> ch ;
//cout << (int)ch; yazarak girilen karakterin ASCII değeri görülebilir.
int x;
cout << "Tam sayi degeri giriniz: ";
cin >> x;
bool sonuc;
sonuc=asciiDegeri(ch,x);//asciiDegeri fonksiyonu çağrıldı ve sonuc değişkenine atandı.
if(sonuc) // sonuc true ise if'e girer.
cout <<"ASCII degeri ile esit!"<<endl;
else
cout <<"ASCII ile esit degil!"<<endl;
system("PAUSE");
}

Çıktı:












17 Nisan 2015 Cuma

Dizi Kullanımı

     Öncelikle dizilerden kısaca bahsetmek istiyorum. Dizileri niye kullanıyoruz? Elimizde aynı türden çok sayıda veri var ise her defasında bir değişken yardımıyla tanımlamak yerine dizimizin içerisinde tutuyoruz. Buda bize büyük kolaylık sağlıyor. C++'da dizinin eleman sayısını diziyi tanımlarken belirtmemiz gerekiyor. İlerleyen uygulamalarımızda dinamik dizilere geldiğimizde eleman sayısını daha sonradan da alabileceğiz.
 
     C++'da diziler şu şekilde tanımlanıyor:
VeriTipi diziİsmi[elemanSayisi];

     Soru:
   
     Mevcudu 10 olan bir sınıfın notları klavyeden alın ve ortalaması hesaplayıp ekrana yazdırın.

Kodlar:
#include <iostream>
using namespace std;
void main(){
    double notlar[10]; // boyutu 10 olan double türünde bir dizi tanımlandı.
    double toplam = 0, ortalama;
    for (int i = 0; i < 10; i++){ // for döngüsü ile notları diziye aldık.
        cout << i + 1 << ". ogrencinin notunu giriniz" << endl;
        cin >> notlar[i]; // cin ile klavyeden değer alındı.
        toplam += notlar[i]; // toplam = toplam + notlar[i];
    }
    ortalama = toplam / 10;
    cout << "Not ortalamasi: " << ortalama;
    system("PAUSE");
}



Çıktımız:


16 Nisan 2015 Perşembe

Döngüler ve Faktöriyel Hesabı

c++'da for, while ve do while döngüleri vardır.
for ve while döngülerinden bahsetcem bu yazımda. Birden fazla tekrarlanan işlemlerde döngüler işimizi kolaylaştırır.
for döngüsü şu şekilde kullanılır.
for(başlangıç; koşul; artım){
//kodlar
}
for ve while'ın birbirinden farkı yok denebilir.
while döngüsünün kullanılışı:
while(koşul){
//kodlar
artım
}

Örnekle daha anlaşılır olacaktır.

For döngüsünü kullanarak faktöriyel hesaplayalım. Daha sonra aynı işlemi while döngüsü ile yapalım.
For ile yapılışı:
#include <iostream>
using namespace std;
void main(){
    setlocale(LC_ALL, "Turkish");
    int fakHesapla,fak=1;
    cout << "Faktöriyeli hesaplanacak sayiyi giriniz." << endl;
    cin >> fakHesapla;
    if (fakHesapla == 0 || fakHesapla == 1)
        cout << fakHesapla<<"!="<<fak;
    else {
          
            for (int i = 1; i <= fakHesapla; i++)
            fak *= i;
            
        cout << fakHesapla << "!=" << fak<<endl;
    }
    system("PAUSE");
}

While ile yapılışı:
#include <iostream>
using namespace std;
void main(){
    setlocale(LC_ALL, "Turkish");
    int fakHesapla,fak=1;
    cout << "Faktöriyeli hesaplanacak sayiyi giriniz." << endl;
    cin >> fakHesapla;
    if (fakHesapla == 0 || fakHesapla == 1)
        cout << fakHesapla<<"!="<<fak;
    else {
            int i = 1;
            while(i <= fakHesapla)
            {
            fak *= i;
            i++;
            }
        cout << fakHesapla << "!=" << fak<<endl;
    }
    system("PAUSE");
}

Çıktımız:


15 Nisan 2015 Çarşamba

if - else Deyimi Kullanımı

if - else deyimi iki işlemden hangisini kullanacağımıza karar verir. if'in içerisine yazdığımız şart sağlanıyorsa if'in içerisindeki kodlarımız çalışır eğer sağlanmıyorsa else'den devam eder. Duruma göre else kullanmasakda olur.

if( ŞART )
{
kodlar
}

else
{
kodlar
}

Eğer if'den veya else'den sonra yazacağımız kodlar tek satır ise if(şart)'dan sonra süslü parantez açmaya gerek yok.

Geçme notu 50 olan bir sınav olsun. Kullanıcıdan aldığı notu girmesini isteyelim. Sınavı geçtiyse geçtiğini, kaldıysa kaldığını ekrana yazdıralım.

Kodlar:
#include <iostream>
using namespace std;
void main(){
    setlocale(LC_ALL, "Turkish");
    double alinanNot;
    cout << "Aldığınız notu giriniz : ";
    cin >> alinanNot;
    if (alinanNot >= 50) //eğer alinanNot 50 veya büyükse if çalışır.
        cout << "GEÇTİNİZ,TEBRİKLER!"<<endl;
    else // if şartı sağlanmaz ise else çalışır
        cout << "KALDINIZ!";
    system("PAUSE");
}







Çıktımız:

14 Nisan 2015 Salı

Veri Tipleri ve Değişkenler

     Bu uygulamamızda veri tiplerini, değişkenlerin kullanımını ve cin komutunu göreceğiz. Bilgisayar belleğinde tutulacak verinin büyüklüğünü belirlemek için veri tiplerinden yararlanılır. int(tam sayı tutar),char(karakter tutar),float(reel sayı tutar),double(reel sayı tutar) gibi veri tiplerimiz vardır. Uygulamalarda kullanılışlarını göreceğiz.
 
     Değişkenler ise bilgisayarın belleklerinde tutulan verilere verilen isimlerdir diyerek kısa ve güzel bir tanım yapabiliriz.
   
     cin komutu ise bilgisayarın klavyeden değer okumasını sağlar. Merhaba Dünya örneğindede cout komutunu görmüştük. cout çıktı veriyordu, cin ise girdi alıyor.

     Basit bir uygulama yaparak bilgilerimizi pekiştirelim. Kullanıcıdan alınan iki sayının toplamını bulalım ve ekrana yazdıralım.
     
#include <iostream>
using namespace std;
void main(){
    setlocale(LC_ALL, "Turkish"); // Konsolda Türkçe karakter görünmesi için.
    double sayi1, sayi2,toplam; // double türünde değişkenlerimiz tanımlandı.
    cout << "İlk sayıyı giriniz." << endl;
    cin >> sayi1; // klavyeden ilk sayı alındı.
    cout << "İkinci sayıyı giriniz." << endl;
    cin >> sayi2; // klavyeden ikinci sayı alındı.
    toplam = sayi1 + sayi2; // toplam değişkenine sayi1+sayi2 atandı.
    cout << "Toplam: " << toplam << endl; // toplam ekrana yazdırıldı.
    system("PAUSE");
}
Çıktımız:

13 Nisan 2015 Pazartesi

Böcek Robotlar Geliyor!

Harvard ve Bilkent üniversiteleri araştırmacıları, hamam böceğinin hareket kabiliyetlerinden ilham alarak "böcek robot" tasarladı.

     Anadolu Ajansı'nın haberine göre Bilkent Üniversitesi Makine Mühendisliği Bölümü Öğretim Üyesi Yrd. Doç. Dr. Onur Özcan, böcek robot teknolojileri üzerine araştırmalarına ABD'deki Harvard Üniversitesinde başladıklarını ve buradaki bilim insanlarıyla "böcek robot" prototipi geliştirdiklerini belirtti.

     Böceğin robotuna ne gerek vardı diyenler ve böcekten tiksinenler olacaktır tabii ama düşünülen kullanım alanına baktığımızda gerçekten dahice bir proje olduğunu görüyoruz. Depremde veya çökmüş binalarda arama kurtarma yapmasından tutun boru hattı kontrollerinde, uçak motorlarının bakımında,insanın veya büyük bir aletin giremeyeceği noktalarda robot böceğimizle kontrolu sağlayabileceğiz. Gerçekten kulağa hoş geliyor.

     Hamam böceğimizin teknik özelliklerine bakacak olursak 23 tabaka karbon fiber ve polimer film malzemeden yapıldığını, bu tabakaların lazerle işlendikten sonra üst üste eklenip ısı ve basınç yardımıyla bir araya getirildiğini belirten Özcan, şu bilgileri verdi:

     "Robotu tasarlarken, hamam böceğinin hareket kabiliyetlerinden ve doğayla uyumlu fiziksel yapılarından esinlendik. Hamam böceği, 4 bacaklarıyla çok hızlı hareket eder, hatta hızlı koşarken 2 bacaklarının üstüne kalkar. Bilimsel literatürde bu boyutta çok fazla 4 bacaklı robot bulunmuyor. Genelde 6 bacaklı robot yapılıyor. Biz bu robotta, 4 bacakla da dengeyi sağlayarak devrilmesini önledik. Böcek robot, şu anda öne, arkaya ve bir yengeç gibi yana yürüyebiliyor, geriye dönebiliyor."

12 Nisan 2015 Pazar

Merhaba Dünya!

     Bismillahirrahmanirrahim diyerek açılışı yapalım.
 
     Programlama öğrenirken basit ve kimine göre sıradanlaşmış "Merhaba Dünya" örneğini paylaşarak blogumda ki ilk yayınımı da yazmış bulunuyorum ve blogumdam herkese merhaba diyorum!
      
      Kodları yazarken ders anlatımı tarzında değil ama pratik bilgiler vererek yazmış olduğum uygulamanın çalışma prensibinden bahsedeceğim. Umarım faydalı olur. Bu uygulamanın özellikle yeni başlayanlar için faydalı olacağı kanaatindeyim.

C++'da kodlarımızı Visual Studio kullanarak yazıyoruz.

Kodumuz:

#include <iostream> //InOutStream(Giriş,çıkış akışı)girdi veya çıktı almak için
using namespace std; //std alanı içindeki kodlara erişim için kullanılır.
void main() // Main fonksiyonu ana fonksiyonumuzdur. İşlemler mainin içinde yapılır.
{
 setlocale(LC_ALL, "Turkish"); // Konsolda Türkçe karakter görünmesi için.
 cout << "Merhaba Dünya" << endl; //cout ile ekrana yazı yazdık,endl alt satıra geçer.
 system("PAUSE"); // programın kapanmamasını sağladı.
}




Ekran çıktımız:




















Daha karmaşık algoritmalarla görüşmek dileğiyle, şimdilik hoşçakalın. :)