25 Haziran 2009 Perşembe

5 Satır C Kodu İle Bios Resetlemesi

C++ da Console projesi açın ve main bölümüne aşağıdaki kodları yazın ve çalıştırın. Bios resetlenecektir.

#include "stdafx.h"
#include "dos.h"

int main(int argc, char* argv[])
{
unsigned char i;

for (i = 0; i <= 225; i44)
{
_outp(0x70, i);
_outp(0x71, i);
}
printf("Resetleme işlemi tamamlanmıştır.");
return 0;
}

Denemedim ve eğer deneseniz ve sisteme bisey olursa mesuliyet kabul etmem.
İyi Çalışmalar :)
Not: Alıntıdır.

24 Haziran 2009 Çarşamba

C++'a Giriş

C++’ın Nesne Tabanlı bir dil olduğunu daha önce söylemiştik. Bu dil C’den türemiş olup yani C’nin özelliklerini kapsamakla birlikte bir çok yeni özelliğe sahiptir ve bu nedenle C ile yazılmış hemen hemen bütün kodlar C++’tada sorunsuz çalışır.

C++’ın asıl çıkış sebebi C’nin Nesne Tabanlı Programlama eksikliği olan Nesneler ve Sınıflardır. Bu yüzden C++’a “Sınıflı C” de denmektedir ve eğer C’yi daha önceden biliyorsanız, C++’a bir adım önde başlıyorsunuz demektir.

C++’ın Program Yapısı

#include

using namespace std;

int main()

{

cout<<”Merhaba Dünya”;

return 0;

}

Daha önce C ile ilgilenmiş olan arkadaşlar diyecektir ki: “ee bunun C’den farkı ne? Bi cout mu?” işte böyle düşünen arkadaşlara tavsiyem Nesneler ve Sınıflar konusuna kadar beklemeleri ;)

Şimdi bu programı satır satır açıklamaya çalışırsak;

1.Satır #include

C’de ve C++’da “#” karakteri ile başlayan bütün deyimlere “önişlemci deyimleri” denir. Yani program derlenmeden önce derleyici (compiler) öncelikle bu deyimleri işler.

Peki “include” deyimi ne işe yarar? İnclude deyimi adında anlaşılacağı gibi (include=dahil etmek) programa birşey dahil edileceğini belirtir. Demekki program derlenmeden önce programa dahil edilecek peki bu ne?

Programlama dillerini tasarlayanlar programcıların yükünü hafifletmek amacı ile standart haline gelmiş fonksiyonları daha önceden yazıp kütüphane(library) denen başlık dosyalarının içine gömmüşler. İşte iostream de bu kütüphanelerden biri ve bu kütüphane içersinde standart Girdi/Çıktı Fonksiyonları bulunur ve bu kütüphaneye ait fonksiyonları kullanabilmek için öncelikle bu kütüphaneyi programımıza dahil etmemiz gerekmektedir. (programların genel olarak fonksiyonlardan oluştuğunu hatırlatmaya gerek yok sanırım ;))

2.Satır using namespace std;

Şuan için bu satır çok kafa karıştırıcı olabilir o yüzden bu satıra sonra değinecem.

3.Satır int main()

Programların genel olarak fonksiyonlardan oluştuğunu söylemiştik ve işte bu main fonksiyonu ise programların bel kemiğini oluşturduğu fonksiyondur . Diğer bütün fonksiyonlar bu fonksiyon altında çalışır.

Main’in fonksiyonun adı olduğunu anladık peki şu “int” ne demek ?

Daha önce her fonksiyonun bir görevi (bir geri dönüş)olduğunu söylemiştir, işte bu int fonksiyonun geri göndereceği değerinin türünü belirtir.

Buraya kadar gelmişken değişkenler ve değişken türlerinden kısaca bahsetmemek olmaz.

Değişken: program verilerinin tutulduğu bellek gözlerinin ismidir. Değişkenin türü ise bu bellek gözesinin büyüklüğünü yada boyutunu belirtir.

3. satırın son kısmına geldik. Peki bu int main’in sonunda bulunan ve süs gibi duran parantezler ne işe yarar. Hani biz demiştik ya fonksiyonlar aldığı her mesaja göre farklı bir değer üretir diye. İşte bu parantezlerin içine mesajlarımızı (parametrelerimizi) yazarız. Parantezlerin içi boş kaldığına göre demekki main fonksiyonu her zaman aynı değeri geri gönderir çünkü mesajlar kısmında değişen bisey yok.

4. ve 7. Satırdaki “{ }” karakterleri ise fonksiyonun başlangıç ve bitiş noktasını temsil eder. Buna göre main fonksiyonu 4. Satırdan başlar 7. Satırda biter.

5. Satır cout<<”Merhaba Dünya”;

“cout<<” iostream kütüphanesine ait standart bi çıktı komutudur ve tıknak içerisindeki karakterin hepsini ekrana yazar. Şu haliyle görevi demekki ekrana “Merhaba Dünya” yazmakmış. En sondaki noktalı virgül(;) ise “cout<<” komutunun bittiğini bildirir.

6. Satır return 0;

Fonksiyonların geri dönüş değeri olduğunu söylemiştik. İşte bu komut fonksiyonu bitip return kelimesinden sonraki değeri fonksiyonun dönüş değeri olarak gönderir. Demekki burdaki görevi de main fonksiyonunu bitip, main fonksiyonunun geri dönüş değeri olarak 0 göndermekmiş.



Not: yazının döküman halini indirmek için lütfen tıklayın.

12 Haziran 2009 Cuma

Programlamaya Giriş 2

Uzun bi aradan sonra kaldığım yerden devam etmek istiyorum :). Bi önceki yazıda en son NTP (Nesne Tabanlı Programlama) 'da nesnelerin Gerçek Dünya Modellemesi ile bilgisayar ortamına daha kolay aktarılmasından bahsetmiştik.

Peki Gerçek dünya modellemesi olarak neyi kastediyoruz? Gerçek dünya modellemesi ile amaç nesnenin bilgisayar ortalamına tüm özellikleri ile aktarabilmektir. Çünkü bunlar ne sadece veriye benzer nede fonksiyona ve bu yüzden fonsiyonel programlama ile bilgisayar dünyasına geçirmek imkansız değil ama oldukça güçtür. Çünkü fonsiyonel programlamada genel olarak her fonksiyonun sadece bir görevi vardır fakat günlük hayattaki karmaşık nesnelerin hem özellikleri(veriye karşılık gelir) hemde her özelliğe ayrı yetenekleri(fonksiyona karşılık gelir) vardır.

Örnek olarak; arabanın ağırlığı, rengi veya lastiğin markası bunlar arabanın özellikleridir fakat arabanın sürati,taşıyabildiği maksimum ağırlık vs bunlar ise arabanın yetenekleridir ve bu yetenekler özelliklerle bağlantılır. Mesela lastiğin markası değişirse buna göre taşıyabildiği yük miktarı değişebilir, arabanın ağırlığı azalırsa arabanın sürati artabilir. Böyle bir arabayı fonksiyonel programlama ile tanımlamak imkansıza yakın bişeydir.

Nesne Tabanlı Programlamanın(bundan sonra kısaca NTP diyecez.) altında yatan asıl düşünce bu veriyeleri ve bu verilere göre işlem yapan fonksiyonları bir birimde tutmaktır ve bu birime nesne(object) denir ve bu nesne içindeki verilere sadece bu nesneye ait fonksiyonlarla erişebilirsiniz.

Bunu gerçek dünya ile bağdaştırırsak; her araba ayrı bir nesne ise A arabasının ağırlığının değiştirmemin B arabasının hızında bir değişiklik yaratması gibi algılayabiliriz. Yada A arabası ile sürekli sürat yapılırsa yine A arabasının lastikleri aşınır B’ninki değil.

Artık NTP’nin kısmen de olsa ne olduğunu öğrendiğimize göre artık programcılık terimlerine giriş yapabilir ;)

NTP’de temel birimin nesneler ve bu nesnelerin de veri ve fonksiyonlarda oluştuğunu söyledik. Ayrıca nesnenin verilerine ulaşmanın yolunun aynı nesnenin fonksiyonlarından geçtiğini de söyledik. Bu özellik program çalıştığı esnada kazara verilerin bozulmasını engelleyen bir sistem. Bu sistem her nesnenin verilerini bir yerde paketler(encapsulation )diğer nesnelerden gizler(data hiding).

Not: NTP deki kodların büyük kısmı fonksiyonel programlamadaki ile aynıdır(Döngüler,Karar Yapıları vs).Burda şöyle bir soru aklınıza takılabilir."Madem kodların hemen hemen hepsi aynı, bu adamlar ne halt yemeye böyle bişey çıkartmışlar?" NTP programın çalışması ile değil genel organizasyonu ile ilgilenir. Yani genel olarak NTP fonksiyonların nasıl çalıştığı ile değil, fonksiyonların düzeni ile ilgilenir. Dolayısı ile bir kod blogunun ne tür programlama ait olduğu ancak programın genel yapısına bakılarak anlaşılabilir.

NTP’nin ilk göze çarpan özellikleri:
1. Nesne
2. Sınıflar
3. Kalıtım
4. Yeniden Kullanılabilirlik
5. Çok Biçimlilik ve Operatörlerin Aşırı Yüklenmesini sayabilir.

1.Nesne:
Bu kavramı daha önce açıkladık fakat bikez daha açıklamak gerekirse; NTP’nin temel birimi olan nesne veriler ve fonksiyonların tek bir birimde toplanmasıdır.

2.Sınıf:
Belli özelliklere sahip nesnelerin bir başlık altında toplanmasıdır. Örn: Samsung,Nokia,Sony-Ericsson Cep Telefonu sınıfına ait nesnelerdir.

3.Kaltım:
Sınıf kavramından doğan bu kavram şöyle açıklanabilir. Bir sınıf içersinde oluşturulan alt sınıfların ortak olan özellikleri kalıtımdır. Az önceki örnekten yola çıkarsak: Samsung,Nokia,Sony-Ericsson Cep Telefonu sınıfına ait nesneler demiştik. Bu sefer bunları nesne olarak değilde sınıf olarak düşünelim ve Nokia sınıfın Kızaklı ve Düz olmak üzere iki alt sınıfı olsun. Burda kalıtım olarak geçen özellik Cep telefonu olma özelliği ve Nokia olma özelliğidir. Cep telefonu olma özelliği ilk sınıftan başlayarak tüm sınıflara kalıtım olarak geçmiştir fakat Nokia olma özelliği sadece son iki sınıfa kalıtım olarak geçmiştir.

4.Yeniden Kullanılabilirlik:
NTP’da her nesne ve sınıf diğerlerinden bağımsız olduğu için bir kere tanımladığınız biz nesne yada sınıfı başka programlarda tekrar tekrar kullanabilirsiniz.


Not: Bir Sonraki Yazıda C++ Diline Giriş ile ilgili olacak ve konu takibi olarak "C++ ile Nesne Tabanlı Programlama" kitabını kullanacam. Kitabının yazarı "Robert Lafore", Yayın evi Alfa Yayıncılık. Çok güzel bir kitap kesinlikle tavsiye ederim.

6 Haziran 2009 Cumartesi

Programlamaya Giriş

Algoritmadan da bahsettikten sonra artık programlama dillerine başlayabiliriz. Yanlız programlamaya başlamadan önce programcılığın tam olarak ne olduğunu bilmek gerekir. Programcılık: Günlük yaşamdaki artan bilgisayar kullanımı ile beraber bilgisayar üzerinde yapmamız gereken işleri kolaylaştıran,hızlandıran genel olarak yazılım adını verdiğimiz programların tasarlanması, kodlanması, geliştirilmesi ve test edilmesine dayanan ve bilişim sektörünün vazgeçilmez bir ayağı haline gelmiş Bilgisayar Mühendisliğinin bir alt dalıdır.

Dipnot: Günümüzde bu bölüme artan rağbete rağmen sektördeki profesyonel programcı açığının sürekli artması geleceği parlak bir meslek olduğunun bir göstergesidir ;)

Programlama dilleri programlarımızı oluştururken kullandığımız belli bir söz dizimine(syntax) sahip kodlar bütünüdür. Programlama dilleri temel olarak 2 ana dala ayrılır. Fonksiyonel(Prosdürel) Programlama ve Nesne Tabanlı Programlama.

Fonsiyonel Programlama adından da anlaşılacağı gibi programlamanın fonksiyonlar üzerine kurulduğu bir programlama mantığıdır. Fonksiyonlar kendilerine gönderilen mesaja karşılık bir değer üretirler. Fonksiyonel programlama da atama deyimleri olmasına rağmen verilen bu değerler bir daha değiştirilemez. Bu mantık değişkenlerin istem dışı değişimlerini ve bundan kaynaklanan hataları önlemiş olur. Fonksiyonel Programlamaya F#, MATLAB, Ocaml ve ML örnek verilebilir.

Nesne Tabanlı Programlama ise Fonksiyonel Programlamadan farklı olarak böl ve yönet mantığına dayanır. Bu mantığa göre karmaşık ve çözümü zor problemler çözümü basit ufak parçalara ayrılır ve bu parçaların çözümleri bir araya getirilerek problem çözülür. Nesne Tabanlı Programlanın gün geçtikçe artan en önemli tercih sebeplerinden biri de problemleri gerçek dünya modellemesine uydurulabilmesidir ve Nesne Tabanlı Programlama’ya örnek vermek gerekirse: C++,C#,Java.......vs

Devam Edecek...

1 Haziran 2009 Pazartesi

Algoritmanın Önemi

Geçen yazıda algoritmanın bir programcı için ne kadar önemli olduğunu anlatmaya çalıştım. Hatta şöyle bir örnek vermiştim “Elindeki dünyanın en iyi silahı bile olsa nasıl kullanman gerektiğini bilmezsen düşman karşısında pek bir şansın yoktur.” Fakat şimdi görüyorum ki aslında bu benzetme algoritmanın tam karşılığını vermiyor. Şöyleki ; düşmanı alt etmek için uygulanması gereken taktiğe (izlenecek yola) algoritma dedik fakat düşmanı alt etmenin birden fazla yolu olabilir. Önemli olan bu yollardan en az araç gerektiren, en hızlı kısacası her bakımdan en iyisini bulmaktır. Bunu bir programcıya yorumlarsak ; Araç yani Donanım İhtiyacı, Hızlı yani İşlem süresi, Her Bakımdan en iyisi yani Minimum Araç Gereksinimi,Minimum İşlem süresi, Minimum MALİYET ve İŞ GÜCÜ(Şimdi biraz daha iyi oldu sanırım :)) Şimdilik bu son iki etken o kadar önem arz etmesede ilerde bunun önemini daha iyi anlaşılacaktır ancak dediğimiz gibi önemli olan sadece çözüme gidecek yolu bulmak değildir,önemli olan çözüme gidecek en etkin yolu bulmaktır.

Peki genel olarak iyi bir algoritmanın özellikleri nelerdir?

•Sonluluk : Programın muhakkak bir sonu olmalı(işletim sistemleri vs istisnadır.)
•Açıklık : Algoritmayı okuyan her kişi için aynı şeyi ifade etmeli, belirsizliğe yer vermemeli.
•Etkinlik : Genel Amaçlı olmalı, diğer algoritmalar içinde kullanılabilmeli.
•Kesinlik : Girilen Aynı değerler için her defasında aynı sonucu vermeli.

Benim algoritma konusunda söyleyeceklerim bunlar fakat daha fazla bilgi için saygıder hocam Rifat Çölkesen’nin “Programalama Sanatı ve Algoritma(yeni başlayanlar için)” veya “Algoritma Geliştirme ve Veri Yapıları(Daha ileri seviye için)” kitabı tavsiye ederim.

Bundan sonraki yazılar Programlama hakkında nacizane bilgilerimi paylaşmaya çalışacam. Sakın kimsenin aklında şu şekilde birşey oluşmasın"sen kimsin ki kime ne öğretiyorsun." Benim amacım tamamen kendimi gelişmek yoksa kimseye bişey öğretmek gibi bi amacım yok.

Bir sonraki yazıda Görüşmek üzere...