Bir blog yazma girişimim daha başlasın “Merhaba Dünya!” diyerek. Neşet Ertaş’ı da bir kez daha anmaya sebep olsun bu girişim. Merhaba dünya, Ah yalan dünya…
Faydalı Bilgi - Masaüstü Klasörünün Konumunu Değiştirebilirsiniz
“Bir gece ansızın Windows’unuz çökebilir! Buna hazır mısınız?” sorusuyla başlayayım yazıya :) Bilgisayarınızda sakladığınız belgeler gerçekten güvende mi? En azından işletim sisteminiz açılmadığında dosyalarınızı kurtarabilecek durumda mısınız?
Windows’un durduk yere yamuk yapma ihtimaline karşı “Belgeler, Resimler, Videolar, Müzikler vs.” gibi gklasörleri Windows’un kurulu olduğu sürücüde saklamam. Böylece işletim sistemini çökerttiğimde ya da o benim yerime kendi kendini çökerttiğinde format atmaktan çekinmiyorum. Daha doğrusu çekinmiyordum. Ta ki masaüstümde de can alıcı dosyaları kaybetmenin eşiğine gelinceye kadar!
Gelen e-postaların eklentileri, internetten bulduğum faydalı bilgiler, e-kitaplar, ders notları, yazdığım programcıklar vb. sık sayılabilecek aralıklarla kullandığım herşeyi masaüstüne atar oldum. O kadar ki, masaüstüm zaman zaman yukarıdakine benziyor. Bu dosyaları bir süre masaüstümde bekletir ve daha az kullanılır olduğum zaman ilgili klasörlere aktarırım. Ama geçen gün yaşadığım talihsiz olayla masaüstümdeki dosyalarımı her an kaybedebileceğim gerçeğiyle yüzleştim ve karar verdim: Windows kurduğun sürücüde önemli dosyalarını saklamayacaksın!
Masaüstünü dosyalarla doldurup taşırma alışkanlığımdan da vazgeçemeyeceğim için bu klasörü başka bir sürücüye taşıyabilecek miyim diye baktım. Evet taşıyabiliyormuşum :) Nasıl oluyor o iş bahsedelim.
Windows XP’de masaüstü klasörünün konumu “C:\Documents and Settings\Kullanıcı Adı\Desktop”, Windows Vista ve Windows 7’de “C:\Users\Kullanıcı Adı\Desktop” şeklindedir. Benim istediğim ise bunu D:\Masaüstü gibi başka bir sürücüdeki klasörde saklamak. Bunu yapmak için:
Çalıştır’a ya da başlat menüsündeki program arama bölümüne regedit yazıp kayıt düzenleyicisini açalım.
“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders” sırasını takip edip “Desktop” dizesinin değerine, masaüstünüzü koymak istediğimiz klasörün konumunu yazalım. (“%USERPROFILE%\Desktop” yerine “D:\Masaüstü” gibi birşey yazacaksınız.)
Bilgisayarınızı yeniden başlattığınızda masaüstüne kaydettiğiniz herşey “D:\Masaüstü” klasörüne gidecek. Windows sizi format atmaya zorladığında “Acaba masaüstünde gerekli birşey var mıydı?” diye düşünmenize gerek kalmayacak.
Sözün özü: “Eşeği sağlam kazığa bağlayın.” diyorum :)
Bir üniversitenin görevi nedir? Öğrencilerine nasıl davranması gerekir? Onları teşvik mi etmesi gerekir? Yoksa yaptıklarını görmezden gelip, öğrencinin önüne aşılması güç engeller mi koymalıdır? Artık iyice emin oldum ki bizim okula bu sorular sorulmamış. Sorulduysa da hocalarımızın bazılarının -ne yazık ki- buna verecek yanıtı yok!
Daha önce burada yazmıştım. Sırf notumu yükseltmek amacıyla 1. sınıftan programlama dersini yeniden aldım. Zaten yapmış olduğum bir dönem ödevini, bu ders kapsamında tekrardan yapmak zorunda kaldım. Yaptım yapmasına… Çok da güzel yaptım hatta… Ama ne oldu? HİÇ! İsyan etmemek elde değil. Şiir gibi kodladığım projemin kodlarına bakma zahmetine bile girmeyen çok sevgili(!) hocam, kendi bilgisayarında eksik olan bir DLL dosyasından dolayı çalışmayan uygulamaya –kodlarda ne yazmışım diye bir bakma zahmetinde dahi bulunmadan-, asistanlarına “Benim notum belli arkadaşlar, isterseniz devam edebilirsiniz!” deyip çekip gitti odasından!
Bilgisayarınızda hala Windows XP kullanıyorsanız ve bu bilgisayar benim yazdığım kodu çalıştıramıyorsa bunun suçlusu ben miyim? Yoksa siz biraz daha çağa ayak uydurup güncel bir işletim sistemi mi kullanmalısınız?
Eski sürümlerle çalışabilecek bir sürümü de yanımda bulundurmama ve isterseniz hemen açıp o sürümü çalıştırabileceğimi söylememe rağmen burun kıvırıp gidiyorsanız, size saygı duymamı gerçekten bekliyor musunuz?
“Sadece C sürücüsünde çalışacak uygulamalar istiyordum bunu hepinize söyledim!” diyorsunuz. Acaba farkında mısınız ki, bizler çok daha önemli ve zor derslerle uğraşırken, zaten geçmiş olduğumuz dersinize devam etmek zorunda mıyız?
Sınıfta söylediklerinizden haberdar olmamızı nasıl bekliyorsunuz? Derse girmediğimiz belli bir şey. Moodle, bölümün sitesi veya mail grubumuzdan, böyle can alıcı ayrıntıları haber vermeniz bu kadar mı zor?
Bu projelerdeki amacınız bizlere sadece Windows XP’nin C sürücüsünde çalışan programlar yazdırmak mı? Yoksa kodlamanın doğru ve eksiksiz olması mı? Canım isterse Linux’ta çalışacak sürümünü yazarım, sizi ne ilgilendirir ki? Beni bir platforma (özellikle güncelliğini yitirmiş bir platforma) bağlama hakkını nasıl olur da kendinizde bulabilirsiniz?
Yazdığım kodları açıp bakma zahmetinde bulunmadınız. Acaba aynı kodları benim yazdığım zaman dilimi içerisinde tasarlayıp yazmanızı istesem bunu başarabilir misiniz? Zira C dilinin, piyasadaki en yüzeysel kitaptan bakıp tahtaya yazılarak öğretilecek/tahtadan bakıp öğrenilecek bir dil olmadığını düşünüyorum. Bu konuda hemfikir olabilir miyiz? (Zannetmiyorum)
Programlama bir sanattır! Bu sözü her fırsatta söylerdiniz. Eminim ki hala söylüyorsunuz. Ama sanatçıya en ufak bir saygınız olmadığının bilmiyorum farkında mısınız? Benim emeklerimi hiçe sayıp odayı terk etmeniz bunun en açık göstergesi değil midir?
Visual Studio 2010 ile yazdığım 12 MB’lık projemi, verdiğiniz 2 MB alana yüklememe zorunlu tutmanız ne demek oluyor? Sadece kodları yazdığım .c dosyasını gönderince, nasıl bundan beni sorumlu tutabilirsiniz? Grafik dosyaları okuyan, kayıt yapıp yeni dosyalar oluşturan, çeşitli DLL dosyalarına gereksinim duyan bir proje ödevi verirken, bizi o 2 MB’lık alana mahkum etmek akıl karı bir iş midir?
Bu sorular sormakla bitmez. Dersten kalmak veya geçmek umrumda değil. Amaç bu olsa zaten geçtiğim bir dersi tekrardan almazdım. İsyanımın sebebi iyi bildiğim bir şeyi eksiksiz yapıp, gereksiz ayrıntıları takıntı yapan bir hoca yüzünden hakkımı alamamak.
Her neyse… Yine belli oldu ki istediğim notu alamayacağım. Yazdığım kodları inceleme zahmetinde bulunan araştırma görevlileri Fırat ve Esra hocalara teşekkür etmeden geçemeyeceğim. Kodlarımın gerçekten iyi olduğunu ve bu projenin araya gittiğini (not anlamında), daha iyisini hak ettiğimi söyleyip beni teselli eden ve yapabileceklerini yapıp notumu 70’e çıkartan bu hocalara teşekkür ediyorum. Kodlarıma baktıkları için, beğendikleri için, her şeyden önce insan yerine koyup diğer hocaya rağmen dinleme zahmetinde bulundukları için…
Neyse… Dilim daha da sivrilmeden son sözü söyleyip yazıya son vereyim. Hocam, üzerinize geçen bir zerre hakkımı dahi helal etmiyorum size. Bu kadar öğrencinin ahını almak nasıl bir duygu bilemem. Sadece bize çektirdiklerinizi çekmenizi ve bize uyguladığınız muameleyi görmenizi diliyorum…
C++, C# ve Java'da String İşlemleri
String Tanımlama ve Atama
Java ve C# dillerinde stringler referans veri tipi olarak tanımlıdır. C++’da ise stringler karakter dizisi olmak zorundadır. C++’da string.h kütüphanesi yardımı ile stringler, sınıflardan türeyen nesneler olarak oluşturulup kullanılabilmektedir. Her dil için string tanımlamaya örnek verelim.
String str = new String("Hasan Gok");
string str = "Hasan Gok";
char str = "Hasan Gok\0";
string str = "Hasan Gok"; //(string.h kütüphanesi yardımı ile)
Bu üç dil için stringler üzerinde yapılan işlemlerden birkaç tanesine göz atalım. Tüm işlemlerde kullanmak için üç dil için de, içeriği farklı iki string değişkeni oluşturalım.
String str1 = new String("Hasan");
String str2 = new String("Gok");
string str1 = "Hasan";
string str2 = "Gok";
char str1 = "Hasan\0";
char str2 = "Gok\0";
Karşılaştırma: Yukarıdaki gibi tanımlanmış str1 ve str2, birbirinden farklı stringler içeriyor olsun. Her dil için karşılaştırma ifadeleri aşağıdaki şekilde olur:
if(str1 == str2) //bu şekilde iki stringin içeriği karşılaştırılır
Burada gördüğümüz gibi string türünden iki değişkeni, tıpkı tamsayılarda olduğu gibi karşılaştırmamız mümkün. Başta belirttiğimiz gibi stringler birbirlerinden farklı olduğundan bu kod parçası konsol ekranına “Stringler farkli” yazacaktır.
Java’da olduğu gibi bir if deyimi ile stringleri karşılaştırmaya C# dili de izin veriyor. Aynı örneği tekrarlamak yerine C#’ın String.Compare metoduna bir örnek verelim:
if (String.Compare(str1, str2) == 0)	//eşit ise
if (String.Compare(str1, str2) == -1)	//ilk string büyük ise
if (String.Compare(str1, str2) == 1)	//ilk string küçük ise
Burada büyüklük küçüklük kavramı ilk karakterin ASCII kodunun diğerinden önce veya sonra olması anlamındadır.
donus = strncmp (str1,str2,sayi);
Bu fonksiyon str1 içinde str2’nin “sayi” adet karakterini karşılaştırır. Fonksiyonunun dönüş değerleri, bize karşılaştırdığımız iki string arasındaki durumu verir. Dönüş değeri 0 ise iki string eşittir. str1, str2’den küçük olursa negatif bir tamsayı, büyük olursa pozitif bir tamsayı döner.
Birleştirme: Daha önceden tanımladığımız değişkenlerimizi birleştirmek için yapmamız gerekenlere de yine üç dil için de bakalım:
Java’da stringleri birleştirmek için “concat” metodu ve + operatörü kullanılabilir. Aşağıda her iki satırdaki kod da str3’ün değerini “Hasan Gok” yapacaktır.
Aynı şekilde + operatörü stringleri birleştirmek için kullanılır. str3’ün değeri “Hasan Gok” olacaktır.
string  str3 = str1 + str2;
C++ dilinde karakter dizisi olarak tanımladığımız stringleri strncpy() fonksiyonu yardımı ile birleştirebiliriz. Üç parametre alan bu fonksiyon ilk parametresine hedef stringi, ikinci parametresine kaynak stringi alır ve üçüncü parametrede belirtilen sayı kadar karakteri kaynaktan hedef stringe kopyalar. Yukarıdaki dillere kıyasla zahmetli bir işlemdir.
strncpy (str1,str2,4);	// \0 bitiş karakteri de dahil 4 karakter
Bu kod ile de str1 stringine str2’den 4 karakter kopyalanır. Programda bu satır çalıştıktan sonra str1’in değeri “Hasan Gok\0” olur.
Stringlerin Uzunluğunu Bulma: Tanımladığımız string değişkenlerinin sakladığı metnin kaç karakter içerdiğini kontrol etmek isteyebiliriz. Tanımlanan str1 ve str2 stringlerimizin kaç karakter içerdiklerini bulup, her üç dil için de karakterSayisi tamsayı değişkenine atayalım:
int karakterSayisi1 = str1.lenght();	//1. Stringin uzunluğunu alır
int karakterSayisi2 = str2.lenght();	//2. Stringin uzunluğunu alır
int karakterSayisi1 = str1.Length;	//1. Stringin uzunluğunu alır
int karakterSayisi2 = str2.Length;	//2. Stringin uzunluğunu alır
int karakterSayisi1 = strlen(str1);	//1. Stringin uzunluğunu alır
strlen() fonksiyonunu dizimizdeki karakterleri tek tek sayarak uzunluğunu bulur. C++’da bu fonksiyon aşağıdaki gibi tanımlanmıştır:
unsigned bizimStrLen(char * str)
while (*str != "\0")
Alt String Arama: Elimizdeki stringlerin birbirini içerip içermediğini kontrol etmemiz gerekebilir. str2’nin, str1 içinde yer alıp almadığını kontrol eden metod ve fonksiyonlara üç dil için de bakalım:
Java için alt string arama metodarından üç tanesine bakalım. Bu üç metod sırasıyla str1’in str2 ile başlayıp başlamadığını, str1 içinde herhangi bir yerde str2 olup olmadığını ve str1’in str2 ile bitip bitmediğini kontrol eder. Aşağıdaki örnekler için sonuç “True” ya da “False” olarak bir boolean değişkene yazılacaktır.
boolean  b = str1.startsWith(str2);
boolean  b = str1.endsWith(str2);
b = str1.indexOf(str2) &gt; 0;
C# dili içinde de arama metodu bir boolean değer döndürür. Bizim örneğimiz için str1, str2’yi içermediği için b = False olacaktır. Kullanımı aşağıdaki gibidir.
bool b = str1.Contains(str2);
Alt stringler strstr() fonksiyonu ile aranabilir. Stringlerimizi karakter dizisi olarak tanımladığımızdan, str1’in içinde str2 varsa; str2’nin, str1 içindeki kaçıncı karakterden başladığını gösteren bir karakter işaretçisi (pointer) döner. Bulunamazsa NULL değer dönecektir.
char * baslangic = strstr (str1,str2);
Çok Önemli Not: Bu yazıyı programlama dilleri dersi ödevi için birkaç saatlik araştırma sonucunda yazdım. C++ ve Java hakkında hemen hemen hiçbir bilgim yoktur, o yüzden yazıda hatalar olması muhtemeldir. Lütfen görürdüğünüz hataları alta yorum yazarak gideriniz.
Önceki Sayfa: 23 / 32 Sonraki