Yeditepe Üniversitesi Bilgisayar Topluluğu

Kasım 16, 2008

Arch Linux üzerinde en hızlı yansıyı bulmak

Filed under: Linux — xaph @ 10:40 pm
Tags: , ,

Eğer Arch Linux kullanıyorsanız ve kullandığınız yansının hızından memnun değilseniz mevcut Arch yansıları arasından en hızlısını tespit edebilirsiniz. Bunun için öncelikle /etc/pacman.d/mirrorlist dosyasını açıp test etmek istediğiniz yansıları yazmalısınız. Ardından

xaph@linux#  rankmirrors -v /etc/pacman.d/mirrorlist

komutu ile kullanmak istediğiniz yansıları hızlarına göre sıralayabilirsiniz.
Hızlarına göre sıralanmış yansılardan kullanmak istemediklerinizi silip

xaph@linux#  pacman -Sy

ile paket listenizi yenileyedikten sonra yeni ve hızlı yansınızı dilediğiniz gibi kullanabilirsiniz.

Ayrıca

xaph@linux#  rankmirrors -u <yansı_adresi>

komutu ile dilediğiniz herhangi bir yansının hızını kontrol edebilirsiniz.

Kolay gelsin.

Not: rankmirrors programını kullanmak için sistemde kurulu python bulunması gerekir.

Kasım 8, 2008

C’ye giriş (3)

Filed under: C/C++ — shultays @ 5:15 pm
Tags:

C’ye giriş konumuzun 3. ve son bölümünden C’de (ve genel olarak bütün programlama dillerinde) kullanılan basit bir kaç komuttan bahsedeceğim.

if

İlk bahsedeceğim komut if komutu. if komutu sayesinde programımızın istediğimiz bir bölümünü bir şarta bağlı olarak çalıştırabilir veya o kısmın çalışmamasını sağlayabiliriz. if komutunun genel olarak kullanımı şu şekildedir.

if ( … şart … ) {

komutlar

}

Burada eğer şart kısmında belirttiğimiz koşulumuz doğru ise { … } arasında kalan tüm komutlar çalıştırılacaktır, eğer doğru değil iste bu parantezler arasında kalan komutlar görmezden gelinecek, program }’dan sonra gelen satırdan çalışmaya devam edecektir.

şart kısmında belirttiğimiz koşul herhangi bir matematiksel eşitlik olabilir. Örnek olarak

if ( a > b ) {
  ...
}

if içindeki komutlar sadece a değişkeni b’den büyük ise çalışacaktır. a’nın daha küçük veya eşit olma durumlarında … kısmındaki komutlar atlanacaktır. Kullanabileceğimiz diğer şart komutları

a > b (a b’den büyük ise)
a >= b (a b’den büyük veya eşit ise)
a < b (a b’den küçük ise)
a <= b (a b’den küçük veya eşit ise
a == b (a ve b birbirine eşit ise)
a != b (a ve b birbirine eşit değil ise)

Bir örnek program ile daha iyi açıklamaya çalışayım.

#include <stdio.h>

int main(void){  
  int x;
  scanf("%d", &x);

  if( x > 0 ) {
    printf("X is a positive number!\n");
  }

  if( x < 0 ) {
    printf("X is a negative number!\n");
  }

  if( x == 0 ) {
    printf("X is zero!\n");
  }

  return 0;
}

main fonksiyonumuzu incelediğimizde, ilk satırımızda x isminde bir değişken tanımlıyoruz. Bir sonraki komutta scanf diye bir fonksiyon kullandık. Bu da aynı printf gibi stdio.h kütüphanesinde bulunan bir fonksiyon. İşlevi ise kullanıcının klavye gireceği bir inputu bir değişkene atamak. Bu fonksiyonu kullandığımız yerde program durdurulacak, kullıcıdan bir sayı (veya string) girmesi beklenecektir. Kullanıcı istediği bir değişkeni girip enter’a bastığında girmiş olduğu sayı x değişkenine (veya fonksiyonda hangi değişkeni belirttiysek) atanacaktır. %d kullanmamızın sebebi x in bir integer olması, farklı değişken türleri için farklı harfler kullanılır. Daha fazla bilgi için

http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html

inceleyebilirsiniz. x den önce kullandığımız & işareti ise x değilde x’in adresini gönderdiğimizi gösteriyor, adresler ve pointerlar daha ileri bir konu olduğu için burada bahsetmeyeceğim.

Özet olarak scanf fonksiyonu geldiğinde kullanıcı bir sayı girecek enter a basacak ve bu sayı x e atanmış olacak. Bundan sonra bir if komutu ile karşılaşıyoruz

if( x > 0 ) {
  printf("X is a positive number!\n");
}

Burada { … } içindeki satırlar yani printf fonksiyonumuz eğer if ( … şart …) kısmındaki şart doğru ise çalışacaktır. Yani eğer kullanıcı pozitif bir sayı girmişse ekrana X is a positive number! yazdırılacaktır. Eğer sayı 0 dan büyük değil { … } parantezleri arasındaki bütün komutlar görmezden gelinecek, program } dan sonra gelen ilk satırdan devam etmeye başlayacaktır.

İkinci if komutu yine ilkine benzer bu sefer x in 0′dan küçük olup olmadığını kontrol ediyor, son if komutumuzda x in 0′a eşit olduğu durumları kontrol ediyor.

Yukarda bahsettiğimiz örnekler hep tek bir şarta bağlı olarak çalışıyordu. Eğer gerekiyorsa tek bir if içinde birden fazla şartı kontrol edebilir, tüm bu şartlara bağlı olarak if komutunun içini çalışıp çalıştırabiliriz. İki tip bağlaç ile şartları birbirine bağlayabiliriz. Birincisi && (and) kullanarak, ikincisi || (or) kullanılarak yapılır. Eğer && kullanırsak bütün koşullar doğru olduğunda if çalışacaktır, || kullanır isek herhangi bir koşulun doğru olması yeterli olacaktır. İkisi içinde birer örnek verelim,

if ( a > b && a > 0) {
  printf("a is greater than b and it is a positive number!\n");
}

Burada a sayısı b sayısından büyük olduğunda ve a sayısı 0′dan büyük olduğunda if komutu içinde ki kodlar çalışacaktır, eğer iki koşuldan en az birisi yanlış ise görmezden gelineceklerdir. or için bir örnek:

if ( a == 0 || b == 0 ) {
  printf("a*b is zero!\n");
}

Yukarıdaki örnekte de a veya b sayılarından herhangi birinin 0 olup olmadığını kontrol ediyoruz, eğer bu sayılardan biri 0 ise bunların çarpımlarının sonucu da 0 olacağı için a*b is zero! yazısını ekrana yazdırıyoruz.

2 den fazla şartıda bir birine bağlayabiliriz, hatta bu grupladığımız şartları parantez içine alarak yine başka bir şart ilede birbirine bağlayabiliriz. Bir örnek ile göstermeye çalışayım.

if ( (a > 0 && b > 0) || (a < 0 && b < 0) ){ 
  printf("a*b is a positive number!\n");
}

Yukarıdaki örnekte eğer a ve b değişkenlerinin ikiside 0 dan büyük veya ikiside 0 dan küçük ise printf komutu çalışacaktır.

else, else if

else komutu if komutundan sonra kullanılır. Eğer bir if komutunun şartı doğru değil ise, ve bundan sonra bir else geliyorsa else içindeki kodlar çalışacaktır. Eğer if komutu doğru ise çalışmayacaktır.

if ( a > 0 ) {
  printf("a is a positive number!");
} else {
  printf("a is not a positive number!");
}

Yukarıdaki örnekte ilk önce a değişkeni 0′dan büyük mü diye kontrol ettik, eğer büyük ise if komutundan sonra gelen { … } parantezlerinin içi çalışacaktır, eğer yanlış ise else komutundan sonra gelen { … } parantezlerinin içi çalışacaktır. Yani a sayısı 0 dan büyük ise “a is a positive number!” yazısı ekrana yazdırılacak, değil ise “a is not a positive number!” yazısı ekrana yazdırılacaktır.

else if komutu yine else e benzer bir şekilde bir if komutundan sonra kullanılır fakat bu sefer else den farklı olarak else kısmının içini de bir şarta bağlı olarak çalışmasını sağlayabiliriz.

if ( a > 0 ) {
  printf("a is a positive number!");
} else if ( a < 0 ) {
  printf("a is a negative number!");
} else {
  printf("a is zero!");
}

Yukarıdaki örnekte önce a > 0 şartı kontrol edilecektir. Eğer doğru ise “a is a positive number” ekrana yazılacak, else kısmına hiç bakmadan en son } parantezinden sonraki komuta geçilecektir. Eğer a > 0 şartı yanlış ise else kısmının şartı yani a < 0 kontrol edilecek ve eğer doğru ise ekrana “a is a negative number!” ekrana yazdırılacaktır. Eğer bu şartta doğru değil ise en sonda gelen else kısmı çalışacaktır.

if, else, else if konusunda bilmemiz gerek bir diğer şey de, eğer {…} parantezleri arasında sadece tek satırlı bir komut varsa eğer istersek bu parantezleri kullanmayabiliriz. Mesela

if ( a > b ) {
  printf("a is greater than b!");
}

ile

if ( a > b )
  printf("a is greater than b!");

arasında hiç bir fark yoktur. Fakat eğer if komutu içinde birden fazla satır kullanıyorsak bu şekilde bir  kısaltma yapamayız. Aynı durumu else veya else if içinde kullanılabilir.

Kasım 7, 2008

Seçmeli Sıralama ( Selection Sort )

Filed under: Algoritma,C/C++ — aycanayhan @ 10:13 pm
Tags: ,

Neden Sıralıyoruz?
Elimizde bulunan her türlü bilgiye kolay ulaşmak için o bilgilerin belirli bir düzen ve sıra içinde olması, aradığımız bilgiye kolay ulaşmak için gerekli olan temel ihtiyaçlardan biridir. Basit örnek olarak; elimizde 100 tane gözü olan bir raf ve 1’den 100’e kadar numaralandırılmış 100 tane kitap olsun. Kitapların raflara belirli bir sıra ile değil de rastgele yerleştirilmiş olduğunu düşünürsek, 45 numaralı kitaba ulaşmak için en az 1, en fazla 100 rafa bakmamız gerekebilir. Ama kitapların raflara sırayla yerleştirirsek, istediğimiz numaralı kitaba tek bir rafa bakarak ulaşabiliriz. Elimizdeki bilgilerin sıralı olması bu gibi durumlarda, özellikle arama ( searching ) durumlarında işimizi oldukça kolaylaştıracaktır.
Birçok sıralama algoritması vardır. Bu algoritmalardan selection sort’a değinmeye çalışacağım:

Seçmeli Sıralama ( Selection Sort )
En basit sıralama algoritması olarak gösterilebilir. Elimizdeki dizide sıralanması gereken n tane sayı olsun. Bu sayıları küçükten büyüğe sıralamak gerekirse, sıralama algoritması şöyledir:
1- Dizinin 1. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
2- Bulduğun en küçük sayıyı dizinin 1. sayısıyla yer değiştir (swap).
3- Dizinin 2. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
4- Bulduğun en küçük sayıyı dizinin 2. sayısıyla yer değiştir (swap).
5- ……
6- Dizinin (n-1). elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
7- Bulduğun en küçük sayıyı dizinin (n-1). sayısıyla yer değiştir (swap).
Her bir jenerasyonda en küçük sayıyı bulup onu swap ettiğimiz yer, o sayının sıralanmış dizideki uygun yeri olmuş oluyor.


Bir parça c kodu ile;

#include <stdio.h>
int main()
{
	int dizi[6] = { 10,1,9,2,8,3 };
	int n=6;
	int i,j,indexOfMin,temp;
	int min;

	for ( i=0;i<n-1;i++ )
	{
		min=dizi[i];
		indexOfMin=i;
		for ( j=i+1;j<n;j++ )
		{
			if( dizi[j]<min )
			{
				min=dizi[j];
				indexOfMin=j;
			}
		}
		temp=dizi[i];
		dizi[i]=min;
		dizi[indexOfMin]=temp;
	}
	printf("siralanmis dizi\n");
	for( i=0;i<n;i++ )
		printf("%d ",dizi[i] );
	printf("\n");
	return 0;
}

(21-23. satırlar arasında swap işlemi yapılıyor)
Kodda ufak değişiklikler yaparak büyükten küçüğe de sıralama yapmak mümkündür.

Karmaşıklık ( Complexity )
Sıralanmış dizinin herbir elemanını bulurken, sıralanmamış diziyi baştan sonra kontrol etmemiz gerekiyor.
1. en küçük elemanı bulurken n-1,
2. en küçük elemanı bulurken n-2,
3. en küçük elemanı bulurken n-3,
…..
(n-1). en küçük elemanı bulurken 1 tane kontrol yapılır. Yapılan tüm bu kontrollerin toplam sayısı:

( n X (n-1) ) / 2 tanedir. Seçmeli sıralamanın karmaşıklığı O(n2) olur.

Kasım 4, 2008

VirtualBox üzerine iso dosyası ile işletim sistemi kurmak

Filed under: Genel — xaph @ 11:46 pm
Tags: , , ,

Daha önce buradaki yazımda Ubuntu üzerine VirtualBox’ın nasıl kurulacağını anlatmıştım. Şimdi ise kurduğumuz VirtualBox üzerine elimizdeki iso dosyasından nasıl işletim sistemi kuracağıımızı inceleyelim. Örnek kurulum olarak buradan indirebileceğimiz Pardus 2007.3 kurulan sistemini seçtim.
Öncelikle Uygulamalar>>Sistem Araçları menümüzden VirtualBox’ımızı çalıştıralım.
VirtualBox
Ardından VirtualBox üzerinde “Yeni” butonuna basıp çıkan pencerede “ileri”yi seçerek yeni bir sanal bir makine oluşturmaya başlayalım.
VirtualBox yeni sanal makine
Çıkan pencerede oluşturacağımız sanal makineye bir isim verelim. Ben PARDUS ismini seçiyorum. İsmi verdikten sonra hemen altından işletim sistemi tipi seçebilirsiniz. Pardus Linux Kernel 2.6.* kullandığı için Linux 2.6 seçiyorum.
VirtualBox
İleri tuşuna bastıktan sonra size oluşturacağınız sanal bilgisayarın ne kadar ram kullanacağını soracaktır. En az 256 MB önerilse de kuracağınız sistem ihtiyacına göre dilediğiniz değeri verebilirsiniz.
VirtualBox sanal bellek boyutu
Sonraki pencerede size kullanmak için ne kadarlık bir hard disk alanı ayıracağınızı soracaktır. Öncelikle yeni bir hard disk kalıbı oluşturmak için “Yeni..”ye basalım. Çıkan pencerede “İleri” dedikten sonra size “Dinamik olarak genişleyen kalıp” ve “Sabit boyutlu kalıp” olarak iki seçenek sunacaktır. Dinamik olarak genişleyen kalıp, hard diskinizde sanal bilgisayarınızda kullandığınız alan kadar yer kaplayacaktır, kullandıkça artacaktır. Sabit boyutlu kalıp ise sanal bilgisayarınızda kullansanız da kullanmasanız da hard diskinizin belli bir boyutunu kullanacaktır, ancak diğer seçeneğe göre daha verimlidir. Ben sabit boyutlu kalıp seçip “ileri” diyorum.VirtualBox Sanal Hard Disk
Şimdi seçeceğiniz sanal hard diske bir boyut verelim. Kuracağınız sisteme göre buradan yeterli olacak kadar bir alan ayırabilirsiniz. Burada da 4 GB seçip ileri diyor ve en son halini kontrol edip bitir diyorum.
VirtualBox sanal harddisk boyutu
Bitir dedikten sonra VirtualBox’ın hard diski oluşturmasını bekliyorum.
VirtualBox sanal hard disk oluşturulması

Son olarak ise oluşturduğum sanal diski seçerek ileri diyorum. Çıkan pencerede ayarları kontrol ettikten sonra bitir diyerek kurulumu tamamlıyorum.
VirtualBox sanal harddisk
Artık sol tarafta PARDUS isimli bir sanal makine goruyor olmamız lazım. Buraya kadar yapılanlar normal bir sanal makine oluşturma işlemiydi. Şimdi ise sanal makinemizin nasıl iso dosyasından kurulum yapacağına bakalım:
Öncelikle sol taraftaki sanal makinemizin üzerine sağ tıklayarak “Ayarlar”a girelim.VirtualBox sanal makine ayarları
Genel sekmesinden ekran kartı bellek boyutunu 32 MB değerine getirelim(bu işlem zorunlu değil ancak kuracağınız işletim sistemini çalıştırabilecek bir değerde olmalı). Ardından CD/DVD-ROM sekmesine girerek “CD/DVD-ROM sürücüsünü bağla” kutusunu etkin hale getirmeli ve CD/DVD-ROM’u tanıtmak için iso kalıp dosyasını seçmeliyiz.
VirtualBox iso dosyasını ayarlamak
Iso kalıp dosyamızı VirtualBox’a göstermek için önce soldaki küçük dosya simgesine basmalı ve açılan pencerede “ekle” diyerek iso dosyamızın bulunduğu yeri belirtmeliyiz.
VirtualBox iso dosyasini seçmek
Daha sonra belirttigimiz iso dosyasını “seç” diyerek sanal makinemizi çalışacak hale getiriyoruz. Son olarak ise, Ayarlarımızı kabul ederek baslat tusu ile sanal bilgisayarımızı başlatabiliriz. İyi kurulumlar…
VirtualBox pardus başlat

Ubuntu üzerinde tek komutla LAMP kurulumu

Filed under: Genel,Linux,PHP — xaph @ 12:39 am
Tags: , , , ,

Eğer Ubuntu 7.04 ve üstü bir sürüm kullanıyorsanız tasksel sayesinde tek komutla LAMP server kurulumu yapabilirsiniz. Bunun için konsoldan:

sudo tasksel install lamp-server

komutunu yazıp onaylamanız yeterli olacaktır. Kurulum esnasında sizden mysql root parolası isteyecektir. Dilediğiniz değeri verebilirsiniz.

Bu aşamadan sonra http://localhost/ bağlantısını tıklayarak çalışan apache sunucunuzu görebilirsiniz. Yazacağınız kodların sunucu üzerinde çalışması için kodlarınızı /var/www dizininde saklamanız gerekmektedir.

Buraya kadarı basit bir LAMP kurulumuydu. Şimdi biraz detaya inelim.

Kurulan Paketler:

Web sunucumuzu tasksel kullanarak yaptığımız için öntanımlı paketler yüklenmiştir. Bu öntanımlı paketler şunlardır:

apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl libplrpc-perl libpq5 mysql-client-5.0 mysql-common mysql-server mysql-server-5.0 php5-common php5-mysql

Kullanıcı Dizini Oluşturmak:

Biraz önce de yazdığım gibi yazacağınız kodlar için öntanımlı klasör /var/www klasörüdür. Ancak bu klasör üzerine yazma hakkınız bulunmadığından ve her seferinde root yetkileriyle çalışmak güvenli olmadığı için /home klasörünüz içerisinde bir web dizini oluşturabilirsiniz. Bunun için sırasıyla şunları yapmanız yeterlidir:

  • İstediğiniz bir metin düzenleyici(gedit, nano, vi ..) kullanarak ayar dosyamızı açalım.
    sudo gedit /etc/apache2/sites-available/default
  • Document Root satırını bularak orada yazan dizin yolunu istediğimiz şekilde değiştirelim. (Örnek olarak /home/kullanıcı_adiniz/public_html)
  • <Directory /var/www/> olan kısmı <Directory /home/kullanıcı_adiniz/public_html/> şeklinde değiştirelim.
  • Son olarak sunucumuzu yeniden başlatalım.
    sudo /etc/init.d/apache2 restart

Artık /home/kullanıcı_adiniz/public_html/ klasörü sizin web dizininiz olacaktır.

PhpMyAdmin’i kurmak:

PhpMyAdmin veritabanı tablolarınızı yönetmek, yeni tablolar oluşturmak gibi işlemleri yapmak için oldukça kullanışlı bir araçtır. Kurulumu için öncelikle konsoldan

sudo apt-get install phpmyadmin

yazıp onaylamalıyız. Bu aşamada sistemimize phpmyadmin kurulmuş oldu ancak bunu bir de web sunucumuza belirtmeliyiz. Bunun için öncelikle

sudo gedit /etc/apache2/apache2.conf

komutu ile apache ayar dosyamızı açmalıyız. Daha sonra

Include /etc/phpmyadmin/apache.conf

satırını ayar dosyamızın en altına yazmalıyız. Böylece apacheye phpmyadmini göstermiş olduk.

Son olarak

sudo /etc/init.d/apache2 restart

komutu ile sunucumuzu yeniden başlatmalıyız. Artık http://localhost/phpmyadmin bağlantısı ile phpmyadmin’e ulaşabilirsiniz.

Sunucunuzu güle güle kullanın :)

Kasım 3, 2008

NTFS ve Ext2/3 Dosya Sistemleri Arasında Tam Erişim

Filed under: Genel,Linux — ayberkk @ 5:27 pm
Tags: , , ,

Windows ve Linux işletim sistemlerini dual boot olarak kullananların bileceği üzere, Windows işletim sisteminden ext dosya sistemle şekillendirilmiş disk bölümüne hiçbir şekilde erişilmez. Linux uzerinden ise NTFS bölümlere sadece okuma yapılabilinir. Ama tabiki bu konu çözümsüz değil. NTFS-3G ve IFS sayesinde bu soruna çözüm bulmak mümkün.

Linux üzerinden NTFS’e tam erişim sağlamak:

Öncelikle kaynak kodumuzu indiriyoruz. Tar dosyasını istediğimiz bir yere açıyoruz. Daha sonra rutin yükleme işlemini gerçekleştiriyoruz. Konsoldan klasöre gidiyoruz ve şu komutları uyguluyoruz:

./configure
make
make install

Artık Linux üzerinden NTFS’e tam erişim sağlamış bulunmaktasınız.

Windows üzerinden Ext dosya sistemine tam erişim sağlamak:

Bu sorunu, alman bir üniversite öğrencisinin tez çalışması olarak yazdığı ext2 IFS ile çözmek mümkün. Yapmamız gereken tek şey gerekli sürücüyü indirmek ve kurmak. Kurduktan sonra windows üzerinden linux bölümünüze tam erişim sağlamış oluyorsunuz.

C’ye giriş (2)

Filed under: C/C++ — shultays @ 3:05 pm
Tags:

Fonksiyonlar

C’deki fonksiyonlar matematik fonksiyonlarına benzer. Bir sayı alırlar onun üzerinde işlem yaparlar ve bir sayı geri döndürürler. Örnek olarak sin(x) fonksiyonu bir açı alır ve bu açının sinüs değerini geri döndürür. C’de bir fonksiyonu kullanmak için öncelikle onu tanımlarız. Mesela bir sayının karesini döndüren bir fonksiyon:

int square(int x)
{
 int y = x*x;
 return y;
}

Yine bu fonksiyonun ne yaptığını satır satır inceleyelim. Burada ilk satırda önce int yazıp fonksiyonumuzun bir integer döndüreceğini belirtiyoruz. Daha sonra yazdığımız “square” fonksiyonumuzun adı oluyor. Son olarak bu satırda fonksiyonumuzun alacağı değerleri yazıyoruz. Bizim square fonksiyonumuz x adında bir integer alıyor, daha sonrada bu x in karesini gene integer olarak bize geri verecek.

Sonraki kısımda fonksiyonumuzun ne yapacağını yazacağız. Bu işlemler { … } parantezleri arasında yapılmalıdır. Şu anki örneğimiz de y isminde bir değişken tanımlıyoruz ve buna x*x (x in karesi) ni atıyoruz. Daha sonrada return y; diyerek y değişkenini geri döndürüp fonksiyonumuzu bitirmiş oluyoruz. Bu fonksiyonu içerecek örnek bir program yazalım

#include <stdio.h>
int square(int x)
{
  int y = x*x;
  return y;
}
int main(void)
{
  int a, b, c;
  a = 2;
  b = square(5);
  c = square(a);
  printf("b is equal to %d.\n", b); 
  printf("c is equal to %d.\n", c);
  return 0;
}

Yukarıda ki örneğimiz de yine önce stdio.h kütüphane mizi yükledik. Daha sonra square fonksiyonu nu tanımladık. main fonksiyonumuz da a, b, c isminde 3 tane integer tanımladık ve bundan sonra a ya 2 değerini atadık.

Bir sonraki satırda (b = square(5);) daha önceden tanımlamış olduğumuz square fonksiyonuna 5 değerini yollayıp, bu fonksiyonun döndürdüğü değeri (25) b ye eşitlemiş oluyoruz. Burada square(5) dediğimizde square fonksiyonu 5′i alıyor x e eşitliyor, y değerini hesaplıyor ve y değerini geri döndürmüş oluyor. Geri döndürdüğü bu değer de b sayısına eşitleniyor.

Bir sonraki adımda bu sefer direk 5 gibi bir tam sayı yollamıyoruz da bir değişken yolluyoruz. square(a) dediğimiz de a değerinin değişkeni (yani 2) square fonksiyonuna yollanıyor, bu değerin karesi hesaplanıp c ye yazılıyor.

Bir sonraki satırımızda b ve c değerlerini ekrana yazmış oluyoruz. Burada Hello world örneğinden farklı olan %d ifadesini kullanmamız. Eğer ekrana bir integer yazmak istiyorsak tırnak içindeki bölümde, integer ın yazılmasını istediğimiz yere %d yazıyoruz, tırnak işaretlerini kapadıktan sonra da virgül ile ayırıp değişkenimizi yazıyoruz. Tırnak içinde yazdığımız \n ise sayır atlanacağını gösteriyor.

Sonuç olarak bizim programımızın çıktısı:

b is equal to 25.
c is equal to 4.

oluyor.

Bu örnekte dikkat ederseniz main de aynı square gibi bir fonksiyon. Hiç bir değer almıyor (void yazdığımızda bir değer almadığını belirtmiş oluyoruz) ve integer döndürüyor. Döndürdüğü integer ise en sonda return 0; ile döndürdüğümüz 0 değeri oluyor. Fonksiyonumuz hiç bir değer döndürmesini istemiyorsak yine başına int değil de void koyarak belirtebiliriz.

void printHello(void)
{
  printf("Hello world!\n");
}

Yukarıdaki örnekte hiç bir şey almayan ve döndürmeyen printHello isminde bir fonksiyon yazdık. Bu fonksiyonu şu şekilde çağırdığımızda

printHello();

ekrana yine Hello world! yazdırmış oluyoruz.

C’ye giriş (1)

Filed under: C/C++ — shultays @ 3:04 pm
Tags:

C’ye yeni başlayacaklar için bir kaynak olsun dedim. İlk önce basit olarak C programları nedir nasıl çalışır ondan bahsedeceğim değişkenler nelerdir onlardan bahsetmeye çalışacağım. Diğer derslerde de fonksiyonlar nasıl tanımlanır ve kullanılır, if, while, switch gibi komutları ne işe yararlar, nasıl kullanılırlar ondan bahsedeceğim.

Hello world!

Giriş olarak basit bir uygulamanın adım adım nasıl çalıştığını anlatacağım. Aşağıdaki program ekrana Hello world! yazısını yazdıracaktır.

#include <stdio.h>
int main(void)
{
  printf("Hello world!");
  return 0;
}

Adım adım kodumuzu inceleyecek olursak:

#include <stdio.h>

Bu satırda stdio.h isimli kütüphaneyi programıza eklemiş olduk. Kütüphaneler içinde programlarımızda kullanabileceğimiz fonksiyonlar ve değişken içeren .h dosyalarıdır. Bir kütüphaneyi ekledikten sonra o kütüphane ile birlikte gelen herhangi bir fonksiyonu artık programımızda kullanabiliriz. stdio.h kütüphanesi kullanıcı ile etkileşime geçebileceğimiz temel fonksiyonları (örnek olarak programımızda kullandığımız printf fonksiyonu) içerir. Fonksiyonlar nedir, nasıl kullanılır ilerde biraz daha fazla değineceğim.

int main(void)
{
  printf("Hello world!");
  return 0;
}

Bu kısım da bizim main fonksiyonumuz. Bir c programı bir çok fonksiyondan oluşur, main fonksiyonu ise bir c programı çalıştırıldığında çağrılan ilk ana fonksiyondur. main fonksiyonu içindeki ilk satırında kullandığımız printf fonksiyonu ekrana bir şey yazdırmak için kullanılır. Bizim örneğimizde de Hello world! yazısı ekrana yazılacaktır.

Son satırımızda da return 0; ile main fonksiyonumuzun başarılı bir şekilde bittiğini söylüyor ve programımızı sonlandırmış oluyoruz.

Değişkenler (Variables)

Bir programda tüm bilgiler değişkenlerde tutulur. Mesela bu bilgi bir öğrencinin numarası, sınav notu veya ismi olabilir. Bir değişkeni fonksiyonun başında bir kez tanımladıktan sonra artık ona herhangibir değer atayabilir, üzerinde matematik işlemleri yapabiliriz. Mesela örnek olarak x isimli bir değişken tanımlayalım.

int x;

Burada önce değişkenin türünü yazıyoruz. Yazdığımız “int” değişkenimizin bir integer (tam sayı) olduğunu belirtiyor. Değişken tipini belirttikten sonra ismini belirtiyoruz. Yani yukarıdaki satırda x isminde bir integer tanımlamış olduk. Daha sonradan bu x e bir değer atamak istediğimizde

x = 5;

gibi bir ifade kullanırız. Yukarıdaki örnekte x i 5′e eşitlemiş olduk. Eğer istersek bu işlemi tanımlama sırasında da yapabiliriz. Mesela örnek bir toplama işlemi yapalım.

int a;
int b;
int c;
a = 5;
b = 3;
c = a + b;

Yukarıdaki örnekte  önce a, b ve c isiminde 3 tane integer tanımlıyoruz. Daha sonradan a ya 5 değerini, b ye 3 değerini atıyoruz. En son adımda da c = a + b; ile a ve b nin toplamını (yani 8′i) c ye atamış oluyoruz.

Eğer istersek bir değişkene tanımlama aşamasında bir değer atayabiliriz. Mesela yukarda önce x i tanımlamış, sonradan ona 5 değerini atamıştık. Bunların hepsini tek adımda yapmak için

int x = 5;

de diyebilirdik. Burada x isminde bir integer tanımlıyoruz ve 5 değerini atıyoruz.

Ayrıca aynı türden birden fazla değişkeni yine bu şekilde tek bir satırda yapabiliriz. Yukarıda ki toplama işlemini şu şekilde de gösterebilirdik.

int a = 5, b = 3, c;
c = a + b;

ilk satırda a, b, c değişkenlerimizi tanımladık ve a ve b ye 5 ve 3 değerlerini atadık. İkinci satırda da c değişkenin a ve b nin toplamını atamış olduk.

Daha önceden bahsettiğim gibi integer sadece tam sayıları (-1, 5, 0 vs) tutabilir. Küsuratlı sayıları tutmak için double veya float kullanmalıyız.

double a = 1.5;
float b = 2.5;

double ve float arasındaki fark double hafızada iki kat daha fazla yer tutar, bu yüzden çok daha büyük sayıları double da tutabiliriz. Eğer çok büyük sayılarla uğraşmayacaksak sadece float kullanabiliriz.

Diğer bir değişken türümüz ise char (character) türüdür. Yine integer gibi sadece tam sayı tutabilen bu değişkenler hafızada tek byte yer kaplar ve sadece -127 ve +127 arasındaki değerleri alırlar. Genel olarak tek bir karakteri tutmak icin kullanılırlar.

Kasım 2, 2008

Ubuntu Üzerinde VirtualBox Kurulumu

Filed under: Linux — xaph @ 9:24 am
Tags: , , , ,

Öncelikle VirtualBox nedir ne işe yarar bununla başlamakta yarar var sanırım.
VirtualBox InnoTek firması tarafından üretilen bir sanal PC (virtual PC) yazılımıdır. Kendi işletim sisteminiz üzerinde sanal olarak bir bilgisayar daha oluşturup farklı işletim sistemlerini kullanmanızı, denemenizi sağlar. Ama genellikle Windows üzerinde Linux veya Linux üzerinde Windows kurulumu için kullanılırlar. VirtualBox hakkında ayrıntılı bilgi için şu siteleri ziyaret edebilirsiniz:
VirtualBox resmi sitesi
Odtu e-bergi üzerinde VirtualBox incelemesi

Şimdi Ubuntu üzerine nasıl VirtualBox kurulacağını adım adım inceleyelim:

1- Öncelikle ekle kaldır yöneticimizi açıp “Tüm mevcut uygulamalar”ı (All available applications) göstermesini sağlamalıyız.
2- Daha sonra ise resimde gözüktüğü gibi arama alanımıza “virtual” kelimemizi girmemiz VirtualBox’un bulunmasına yeterli oluyor.
3- VirtualBox’u işaretleyerek sağ alt kısımda bulunan değişiklikleri onayla(apply changes) butonumuza basabiliriz. (Bu işlemden sonra internet hızınıza bağlı olarak VirtualBox’ın indirilmesini biraz beklemelisiniz. Ardından kurulum kendiliğinden gerçekleşecektir.)
4- VirtualBox şu aşamada sistemimize kurulmuş ve Uygulamlar menüsünde Sistem Araçları seçeneğinin altından ulaşılabilir olmalı. Ancak VirtualBox’u açıp bir sanal makine oluşturduktan sonra sanal makinemizi çalıştırmak istediğimizde büyük ihtimalle

VirtualBox kernel driver not installed. The vboxdrv kernel module was either not loaded or
/dev/vboxdrv was not created for some reason. Please install the virtualbox-ose-modules package
for your kernel, e.g. virtualbox-ose-modules-generic..
VBox status code: -1908 (VERR_VM_DRIVER_NOT_INSTALLED).

Sonuç Kodu:0x80004005Bileşen:ConsoleArayüz:IConsole {1dea5c4b-0753-4193-b909-22330f64ec45}

şeklinde bir hata verir. Bu hata VirtualBox programımız için gerekli kernel modüllerinin yüklenmediği anlammına gelir. Bunu yükleyebilmek için Sistem->Yönetim menüsünden Synaptic Paket yöneticisini açmanız ve burada “virtualbox-ose-modules” paketini aratmanız gerekmektedir. Ancak aratma sonucunda karşımıza birden fazla paket çıkıyor. Hangi paketi yükleyeceğinizi öğrenmek için öncelikle kernel versiyonunuzu ögrenmeniz gerekmektedir. Bunun için bir uçbirim(terminal/konsol) açıp

$ uname -r

komutunu vermeniz yeterlidir. Benim kernel versiyonum 2.6.24-16-generic olarak gözüküyor dolayısıyla virtualbox-ose-modules paketlerinden “generic” isimli olanı seçmem ve uygula(apply) tuşunu kullanarak yüklemem gerekiyor.
5- VirtualBox’ı yeniden başlattığımızda bu sefer başka bir hata ile karşılaşırız. Hatanın raporu

The VirtualBox kernel driver is not accessible to the current user. Make sure that the user
has write permissions for /dev/vboxdrv by adding them to the vboxusers groups. You will need
to logout for the change to take effect..
VBox status code: -1909 (VERR_VM_DRIVER_NOT_ACCESSIBLE).

Sonuç Kodu:0x80004005Bileşen:ConsoleArayüz:IConsole {1dea5c4b-0753-4193-b909-22330f64ec45}

şeklindedir. Buradaki sorun ise VirtualBox uygulamasının gerekli izinlere sahip olmaması ve VirtualBox uygulamamızı kullanma hakkımızın bulunmamasından kaynaklanmaktadır.
Çözüm olarak ise öncelikle uçbirimden

$ sudo chmod 777 /dev/vboxdrv

yazıp VirtualBox için gerekli izinleri vermeliyiz. Sonrasında menüden Sistem->Yönetim->Kullanıcılar ve Gruplar ı açmalı, ardından açılan Kullanıcı Ayarları penceresinden önce “Grupları Yönet(manage groups)” butonuna basmalı ve gelen menüden vboxusers grubunu bulmalıyız. Daha sonra ise vboxusers grubumuza tıklayıp sağ taraftan “özellikler”i seçip kendi kullanıcı adınızı seçmeli ve tamam diyerek onaylamalısınız. Böylece sorunumuzu tamamen halletmiş bulunmaktayız.
Artık VirtualBox’ı rahatlıkla kullanabiliriz.

Kasım 1, 2008

Linux üzerinde gcc kullanımı, C kodlarını derlemek ve çalıştırmak

Filed under: C/C++,Linux — xaph @ 7:56 pm
Tags: , ,

Linux üzerinde çalışıyorsanız ve C programlaya yeni başladıysanız, başlangıçta C kodlarını yazarken ve derlerken zorluk çekebilirsiniz.
Bunu halletmek için her şeyden önce elinizde C kodlarınızı yazacağınız bir text editorunuz bulunmalıdır. Seçeceğiniz text editörü konsol üzerinde çalışan vi, nano gibi editörler ya da görsel olarak çalışabileceğiniz gedit, kate, emacs gibi editörler olabilir. Hangisini kullanacağınıza karar vermek tamamen size kalmış. Herhangi bir text editöründe kodlarınızı yazdıktan sonra istediğiniz herhangi bir yere kaydedebilirsiniz. Kayıt işleminde dikkat etmeniz gereken nokta C kodlarınızı .c uzantılı olarak kaydetmenizdir.
Kodumuzu ornek.c adıyla /home/kullanıcı_adı klasörünüze kaydettiğimizi düşünelim ve örnek olarak bir C programını çalıştıralım. İlk yapmamız gereken bir konsol açıp kodumuzun bulunduğu dizine geçmek olmalı. Bunu yapmak için

$ cd /home/kullanıcı_adı

yazmamız yeterli olacaktır.
Eğer ki C kodumuzun olduğu klasörde olup olmadığımız hakkında bir şüphemiz varsa bunu

$ ls

komutunu kullanarak kontrol edebiliriz. “ls” komutu bulunduğumuz klasördeki dosyaların isimlerini konsola yazar.
Kodumuzun bulunduğu klasöre geçtikten sonra gcc ile kodumuzu derleyebiliriz. gcc’nin açılımı “gnu c compiler” olmakla linux dağıtımlarında kullanılan standart C derleyicisidir. gcc kullanarak kodumuzu derlemek için yine konsol üzerinde

$ gcc ornek.c

yazmamız yeterli olacaktır. Bu işlem sonunda kodumuz derlenir ve eğer varsa kod üzerindeki hatalar konsola yazılır. Eğer ki sorunsuz bir derleme yaptıysanız kodunuzun bulunduğu dizinde “a.out” adında bir dosya oluştuğunu görmelisiniz. Bu c kodunuzun derlenmiş, çalıştırılabilir(binary) halidir.
Derlenmiş C kodumuzu çalıştırmak için ise konsola

$ ./a.out

yazmamız yeterli olacaktır. Böylece C kodumuzun çıktısını konsol üzerinde görebiliriz.

a.out çıktısından farklı bir çıktı adıyla kod derlemek
Derleme işlemi yaparken birbirinden ayrı birkaç tane kod derlememiz ve hepsini ayrı ayrı kullanmamız gerekebilir. Eğer ki bütün kodlarımız a.out olarak derlenirse her çalıştırma işlemi için kodlarımızı yeniden derlememiz gerekir. Bunu engellemek için gcc’ye -o parametresini girmemiz ve kodumuzun derlenmiş halini başka bir isimde kaydetmemiz gerekmektedir. Örnek olarak ornek.c kodumuzu derleyip ornek adında kaydetmek için

$ gcc ornek.c - ornek

yazmamız yeterli olacaktır. Burada kullanacağımız -o parametresi gcc’ye kodumuzun çıktısı için farklı bir isim seçmek istediğimizi, ornek ise çıktımızın hangi adı alacağını anlatır. Kodumuzu farklı bir isimle derledikten sonra ise dikkat etmemiz gereken şey artık a.out değil de yani dosya adımızı çalıştırmamızdır. Yani son derlememiz için konsola

$ ./ornek

kodunu girmeliyiz. Böylece ornek.c dosyamızın derlenmiş hali olan ornek dosyasını çalıştırmış oluruz.

Sonraki Sayfa »

Theme: Rubric. WordPress.com'dan blog alın.

Follow

Get every new post delivered to your Inbox.