bilgisayar bilimleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
bilgisayar bilimleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Mayıs 2010 Pazar

Action Script 3.0 ile Xml'den Resim Çekme

Öncelikle şunu belirtmeliyim ki dün internette yaptığım araştırmalar sonucu bazı konularda (özellikle kodlama) ne kadar kopyacı olduğumuzu, kopyacılıktan da öte bulduğumuz bir kodu kontrol etmeden sitemizdeki kullanıcıların hizmetine sunduğumuzu gördüm. Aynı yanlış kodu türkçe sayfalarda arama yaptığımızda hemen hemen 2 sideden birinde bulmamız olası. Neyse lafı uzatmadan çalışan kodları vereyim. Umarım faydalı olur.

İşte boş bir As 3.0 flash çalışma sayfası oluşturarak başlayalım. Sonra tablomuza yeni bir layer ekleyelim. Bu layer'ı action script kodlarımız için kullanacağız. Actions layer'ımızın ilk frame'ine gelip actions penceremizi açalım.

Şimdi ilk olarak yeni bir movie clip oluşturalım. Resmimizi / Resimlerimizi bu movie clip içine yerleştireceğiz.

var backgroundMC:MovieClip=new MovieClip();


Şimdi mc'mizin yerleşim yerine bakalım. Ben kodumda arka plan çektiğim için x ve y değerlerini 0 yaptım.

backgroundMC.x=0;
backgroundMC.y=0;


Şimdi mc'mizi ekleyelim

addChild(backgroundMC);


Şimdi bir adet de imageLoader oluşturalım.

var imageLoader:Loader=new Loader();


Xml ile bağlantı kurmaya geldi sıra.

var myxml:XML=new XML();
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest("xml_dosya_adı.xml"));


Xml yüklendi fonksiyonumuzu ekliyoruz.

xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);


Xml başarıyla yüklendiğinde, harici xml deki verileri kendi oluşturduğumuz myxml objesine aktarıp buradan nodelardaki image url mizi loader ile mc'mize aktaracağız. İşte kodlar

function xmlLoaded(event:Event):void
{
myxml = XML(event.target.data);

var i=0;
imageLoader.load(new URLRequest(myxml.bilgi[i].img));
backgroundMC.addChild(imageLoader);
}


Şimdi örnek xml kodlarımıza bakalım:

root

bilgi
img arkaplan.jpg /img
/bilgi

/root


Böylece oluşturduğumuz movie clip e xml den aldığımız resim urlsini yüklüyoruz. Eğer bir resim galeri oluşturacaksanız xml başarıyla yüklendikten sonra bir for döngüsü ile tüm node'lardaki url leri alarak yeni image loader oluşturup tek tek load etmeniz mümkün.

Umarım bir gün kopyacılıktan kurtuluruz. Herkese kolay gelsin.

tyln

14 Mayıs 2010 Cuma

Data Abstraction - Veri Soyutlama nedir?

Data Abstraction Türkçe karşılığı ile veri soyutlama bir programın kayda değer özelliklerini içeren alt birimlerin reprezentasyonudur.

Veri soyutlama programlamanın ve bilgisayar bilimlerinin temel kavramnlarından biridir.

1980 den sonra dizayn edilen -yaklaşık- tüm programlama dilleri veri soyutlamayı (data abstraction) desteklemektedirler.

25 Ocak 2010 Pazartesi

Unary Notasyon nedir? Unary Notation

- Unary Notation for Encoding:
Sayıları T.M. de göstermek için kullanılan yöntemlerden biridir.
Şeritteki sembol sayısı, girdi veya çıktının hangi sayı olarak yorumlanabileceğini gösterir:
Şeritte hepsi boşluk ise: 0
Girdi alfabesi={a} ise,
Şeritte 1 tane a varsa:1
Şeritte 2 tane a varsa:2 gibi ...

alıntıdır.

13 Ocak 2010 Çarşamba

Bisection Algorithm

A method for solving nolinear equations (bisection)

value tolerance, given values x1,x2

repeat
set x3=(x1+x2)/2
if f(x3)*f(x1)<0 than
set x2=x3
else
set x1=x3
end if
until (|x1-x2|)<2*Tolerance


(final value of x3 approximates the root)

11 Aralık 2009 Cuma

Java'da Bir Ağaçtaki Düğümlerin Düzeylerini Yazdırma

Displaying level of each node in binary tree in java

Javada oluşturduğunuz bir binary tree'nin her düğümünün düzeyini ekrana yazdırmak için aşağıdaki algoritmayı yada java kodunu kullanabilirsiniz.

Kod:

public void duzey_bul(agacDugumu etkin,int duzey)
{
if(etkin!=null)
{
duzey=duzey+1;

duzey_bul(etkin.leftChild,duzey);
System.out.println(" "+etkin.ad+" "+duzey+". duzeyde" );
duzey_bul(etkin.rightChild,duzey);
}

}


Algoritma:

Fonksiyonumuzda özyinelemeden yararlanacağız. Etkin düğüm sırasıyla bir düğümün sol çocuğu ve sağ çocuğu olarak ağaç dolaşılır. Eğer etkin düğüm null'dan farklıysa düzey bir arttırılır ve ekrana yazdırılır.

Eğer ağacın derinliğini de bulmak istiyoranız düzeylerden en büyüğünü math kütüphanesindeki max bulan hazır fonksiyon ile döndürerek ağacın düzeyini elde edebilirsiniz. Ayrıca her null olmayan etkin yeni bir eleman olacağından eleman sayısı da bir arttırılarak ağacın toplam eleman sayısı bulunabilir.

2 Aralık 2009 Çarşamba

Artış Oranı Fonksiyonları

Artıs Oranı Fonksiyonları
O(1) : Sabit zaman
Örnek : n elemanlı bir dizinin i. elemanına bir deger atanması O(1)’dir. Çünkü bir
elemana indisinden dogrudan erisilmektedir.
O(n) : Dogrusal zaman
Örnek : n elemanlı bir dizinin tüm elemanlarının ekrana yazdırılması O(n)’dir.
Örnek : sıralı olmayan bir dizideki (listedeki) elemanlardan birinin aranması O(n)’dir
(en kötü durumda da, ortalama durumda da).
O(log2n) : O(1)’den fazla O(n)’den azdır.
Örnek : Sıralı bir listenin elemanları içinde ikili arama (binary search) uygulanarak
belirli bir degerin aranması O(log2n)’dir.
O(n2) : kinci dereceli zaman
Örnek : Basit sıralama algoritmalarının birçogu (selection sort gibi) O(n2)’dir.
O(n log2n) : Bazı hızlı sıralama algoritmaları O(n log2n)’dir.
O(n3) : Kübik zaman
Örnek : Üç boyutlu bir tamsayı tablosundaki her elemanın degerini artıran algoritma.
O(2n) : Üstel zaman, çok büyük degerlere ulasır.

Alıntıdır. (Yrd Doç Dr Aybars Ugur)

26 Kasım 2009 Perşembe

Java class örneği

Java ile basit bir class örneği yapımını göstereceğim. Deneyim adında bir class tanımlayacağız ve bu class içinde işyerine ait ad,adres ve işyerindeki pozisyon bilgilerini tutacağız.

İşte deneyim class'ımız:

public class deneyim { // class oluşturuldu

public String yer_ad; // class'ta tutulacak bilgiler
public String yer_adres;
public String pozisyon;

public deneyim() // yapıcı / constructor
{
yer_ad=null;
yer_adres=null;
pozisyon=null;
}

}


Yapıcı fonksiyonumuz class adı ile aynı olup program içinde deneyim class'ı çağırıldığı an boş bir deneyim alanı oluşturur.

2 Kasım 2009 Pazartesi

Postfix ifadelerin sonucunu hesaplayan algoritma

Algoritma : (Bir postfix ifadenin sonucunu hesaplar)
opndstk = the empty stack;
// scan the input string reading one element at a time into symb
while (not end of input) {
symb = next input character;
if (symb is an operand)
push(opndstk,symb);
else {
// symb is an operator
opnd2 = pop(opndstk);
opnd1 = pop(opndstk);
value = result of applying symb (case *,/,+,-) to opnd1 and opnd2
push(opndstk,value);
} // end else
} // end while
return(pop(opndstk));

Fonksiyon ve Metot Çağırımlarında Yığıtların Kullanımı

Fonksiyon ve Metot Çagrımları - I

Yıgıtlar, listelerin ters sırada yazdırılması, palindrom (okundugunda ve
tersten okundugunda aynı sonucu veren karakter dizisi) benzeri
yapıların bulunması, bir ifadedeki parantez gibi sembollerin
geçerliliginin test edilmesi, ifadelerin sonuçlarının hesaplanıp
degerlerinin elde edilmesi, infix ifadelerin postfix ifadeye
dönüstürülmesi gibi amaçlarla kullanılabildigi gibi, programlama dili
derleyicileri (compiler) fonksiyon çagrımlarında da yıgıtlardan
yararlanırlar.
Bir fonksiyon çagrıldıgında, çagıran fonksiyonun yerel degiskenleri
sistem tarafından kaydedilmelidir; aksi halde çagrılan fonksiyon
çagıran fonksiyonun degiskenlerini ve degerlerini ortadan kaldıracaktır.
Ayrıca çagıran fonksiyonda kalınan nokta (geri dönüs adresi), çagrılan
fonksiyonun bitmesinden sonra geri dönmek üzere tutulmalıdır.

Soyut olarak bakıldıgında, yeni bir fonksiyonun çagrılması ile çagıran
fonksiyonun degiskenleri ve geri dönülecek adres bir kagıda kaydedilir
ve daha önce çagrılan fonksiyonlara iliskin bilgilerin tutuldugu
kagıtların üzerine konulur. Bundan sonra denetim çagrılan fonksiyona
geçer. Kendi degiskenlerine yer açarak onlar üzerinde islemler
yapılmasını saglar. Fonksiyondan geri dönülecegi zaman en üstteki
kagıda bakılıp degiskenler üzerinde ilgili degisiklikler yapılarak geri
dönüs adresine atlanır. Derleyici bu islemleri kagıt yerine yıgıt
kullanarak gerçeklestirir.

alıntıdır.

22 Temmuz 2009 Çarşamba

Action Script Hakkında

Action Script Hakkında

ActionScript, Adobe® Flash® Player ve Adobe® AIR™ çalışma zamanı ortamları için programlama dilidir. Flash, Flex ve
AIR içerik ve uygulamalarında etkileşim, veri işleme ve daha fazlasına olanak sağlar.
ActionScript, Flash Player ve AIR uygulamasının bir parçası olan ActionScript Virtual Machine (AVM) tarafından
çalıştırılır. ActionScript kodu, Adobe® Flash® CS4 Professional veya Adobe® Flex™ Builder™ uygulamasında yerleşik
olanlar ya da Adobe® Flex™ SDK uygulamasında kullanılabilir olanlar gibi, genellikle bir derleyici tarafından bayt kodu
formatında (bilgisayarlar tarafından yazılan ve anlaşılan bir çeşit programlama dili) derlenir. Bayt kodu, Flash Player
ve AIR uygulamaları tarafından çalıştırılan SWF dosyalarında gömülüdür.
ActionScript 3.0, nesne tabanlı programlama konusunda temel bilgisi olan geliştiricilere bilindik gelecek güçlü bir
programlama modeli sunar. ActionScript 3.0'ın önceki ActionScript sürümlerinden daha gelişmiş olan bazı önemli
özellikleri arasında şunlar yer alır:
• AVM2 adı verilen ve yeni bir bayt kodu talimat kümesi kullanıp önemli ölçüde performans artışı sağlayan yeni bir
ActionScript Virtual Machine.
• Önceki derleyici sürümlerinden daha derin eniyileştirmeler gerçekleştiren daha modern bir derleyici kodu
• Düşük düzeyde nesne denetimi ve gerçek bir nesne odaklı model içeren, genişletilmiş ve geliştirilmiş bir uygulama
programlama arabirimi (API)
• XML için ECMAScript (E4X) belirtimini (ECMA-357 sürüm 2) esas alan XML API'si. E4X, dilin yerel veri türü
olarak ECMAScript'e XML ekleyen bir dil uzantısıdır.
• Belge Nesnesi Modeli (DOM) Düzey 3 Olaylar Belirtimi'ni esas alan bir olay modeli

17 Temmuz 2009 Cuma

C / Çok Boyutlu Diziler

ÇOK BOYUTLU DİZİLER

Bir sınıftaki 40 öğrencinin notlarını saklamak için 40 elemanlı tek boyutlu bir dizi gerekirken; bir sınıftaki 40 öğrencinin 3’er notlarını saklamak için 40 satırı ve 3 sütunu bulunan (40 X 3 ) iki boyutlu bir dizi gerekecektir. İlk öğrencinin ilk notu dizinin [0][0] indis numaralı notudur. Dizinin [23][2] indis numaralı elemanı ise 24. elemana ait 3. notu saklamaktadır. Çünkü dizilerin indis numarası 0(sıfır)’dan başlar.

Eğer sınıftaki 40 öğrencinin, 6’şar dersten aldıkları 3’er notları saklamak isteseydik üç boyutlu bir diziye ihtiyaç duyacaktık. (40 X 10 X 3 )

Elemanlarına birden fazla indis numarası ile ulaşılan dizilere çok boyutlu diziler denir. C dilinde dizi boyutları hafızanın desteklediği ölçüde olabilir. Çok boyutlu diziler arasında en çok kullanılanı 2 boyutlu dizilerdir. 2 boyutlu dizileri bir tablo gibi düşünebiliriz. Bu tablodaki herbir elemana ulaşmak için önce satır sonrada sütun indis numarasını söylemek gerekir.

İKİ BOYUTLU DİZİLERİN TANIMLANMASI

İki boyutlu dizi tanımlanırken dizinin içerisinde saklanacak elemanların tipi, dizinin adı ve satır –sütun boyutları söylenir.

int not [40] [3];

İlk söylenen satır sayıs, ikinci söylenen sütun sayısıdır.

ÇİFT BOYUTLU DİZİLERE İLK DEĞER ATANMASI

Çift boyutlu dizinin herbir elemanına satır ve sütun indis numarası söylenerek ulaşılıp değer atanabilir.

not[23][2] = 78;

Bununla birlikte tıpkı tek boyutlu dizilerde olduğu gibi tanımlama esnasında da ilk değer ataması yapılabilir. Bu defa içiçe iki küme parantesi kullanmak gerekir. Her bir küme parantezi içerisindeki değerler herbir satırdaki değeri ifade eder. Örneği inceleyelim.

int a[3] [4] = { {1,2,3,4} , {5,6,7,8} , {9,10,11,12} }

Böyle bir atama sonunda değerler diziye aşağıdaki şekilde yerleşecektir:


0. Sütun 1. Sütun 2. Sütun 3. Sütun
0. Satır 1 2 3 4
1. Satır 5 6 7 8
2. Satır 9 10 11 12
Bu durumda; a[2][1] indis numaralı elemanın değeri 10’dur. Yukarıdaki gibi bir değer atama işleminin ilk bakışta daha kolay anlaşılabilmesi için şu şekilde bir yazım yöntemi tercih edilebilir:

A[3] [4] = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12} } ;

ÖRNEK:

4 X 3 boyutlarında bir diziye klavyeden eleman girdiriniz. Girilen elemanlar içerisinde en büyüğünü buldurunuz. Diziyi ekrana tablo şeklinde yazdırınız.

#include
#include
void main ( )
{
int a[3][4], i, j, eb;

for ( i=0;i <3; i++) for (j=0; j<4; j++) { printf ( “%d. Sütun %d. Satır elemanını giriniz:”, i+1, j+1); scanf ( “%d”, &a[i][j] ); } eb=a[0][0]; for ( i=0; i<3; i++) for(j=0; j<4; j++) if (a[i][j] > eb)
eb = a[i][j];
printf ( “\n Dizinin en büyük elemanı %d ‘dir...”, eb);
printf(“\nDizi ekrana tablo halinde yazdırılıyor...”);
for (i=0; i<3; i++) { printf (“\n”); /* Her satır elemanını yeni bir satırın başından yazmak için */ for ( j=0; j<4; j++) printf (“%5d”, a[3][4]); } getch(); } NOT: İki boyutlu dizileri hafızanızda daha iyi canlandırabilmeniz için tablo örneğini verdik. Ama iki boyutlu diziler hafızada tablo şeklinde yerleşmezler. Arka arkaya önce ilk satır elemanları, hemen arkalarından ikinci satır elemanları....şeklinde tıpkı tek boyutlu dziler gibi saklanırlar. Biz başlangıç adreslerini (dizinin adında başlangıç adresi saklıdır) ve her satırda kaç eleman olduğunu bildiğimizden hangi elemanın hangi satıra ait olduklarını bulabiliriz. 3X4 boyutundaki bir dizinin ilk 4 elemanı ilk satıra, ikinci 4 elemanı ikinci satıra ait elemanlardır. ÇOK BOYUTLU DİZİLERİN FONKSİYONA PARAMETRE OLARAK GÖNDERİLMESİ Tıpkı tek boyutlu dizilerde olduğu gibi iki boyutlu dizi de fonksiyona gönderilirken sadece adı yazılır. Yani gönderilen dizinin başlangıç adresidir. Ancak fonksiyonda gelen diziyi karşılamak için dizinin boyutlarına uygun dizi tanımlanmalıdır. Gönderilen diziyi karşılayacak dizinin ilk boyut değeri söylenmez ama ikinci boyut değeri mutlaka söylenmelidir. ÖRNEK: Elemanları klavyeden girilecek 3X4 boyutlarında ki bir diziyi fonksiyonda ekrana tablo şeklinde yazdırınız. #include
#include
void dizi_yaz (int [][4]);
void main ( )
{
int a[3][4], i, j;

for ( i=0;i <3; i++)
for (j=0; j<4; j++)
{
printf ( “%d. Sütun %d. Satır elemanını giriniz:”, i+1, j+1);
scanf ( “%d”, &a[i][j] );
}
eb=a[0][0];
dizi_yaz (a);
getch();
}

void dizi_yaz (int b[][4])
{
int i,j;
printf(“\nDizi ekrana tablo halinde yazdırılıyor...”);
for (i=0; i<3; i++)
{
printf (“\n”); /* Her satır elemanını yeni bir satırın başından yazmak için */
for ( j=0; j<4; j++)
printf (“%5d”, a[3][4]);
}
}

ÇALIŞMA SORULARI:
50 elemanlı integer bir diziye 1-10 arasında rasgele değerler atayınız. Her sayıdan kaç tane olduğunu buldurunuz.

Örnek:
1’lerin sayısı: 4
2’lerin sayısı: 12
3’lerin sayısı: 8
.
.
.

50 elemanlı integer bir diziye 1-10 arasında rasgele değerler atayınız. Dizi elemanlarının herbirinin tekrar sayısını bir histogramla gösteriniz.

Örnek:
Eleman Sayısı Histogram
1 3 ***
2 12 ************
3 8 ********
.
.
.
20 elemanlı integer bir diziye 1-100 arasında rasgele değerler aktarınız. Diziyi ters çeviren fonksiyonu tasarlayınız.Ters çvirme işlemini elemanların yerlerini değiştirerek yapınız. Fonksiyon parametre olarak dizinin bşlangıç adresini almalıdır.




Dizi[0] Dizi[1] ..... Dizi[18] Dizi[19]
6 1 ........ 45 7




Elemanları klavyeden girilen 4 X 3 boyutlarında bir tablonun elemanlarını 3 X 4 boyutlarında bir tabloya aktaran fonksiyonu tasarlayınız. İlk tablonun satır elemanları, ikinci tablonun sütun elemanları olmalıdır. Fonksiyon parametre olarak tablonun başlangıç adresini almalıdır.

İLK TABLO

5 3 2
8 1 4
2 6 7
3 7 1

İKİNCİ TABLO

5 8 2 3
3 1 6 7
2 4 7 1

C / Dizileri Fonksiyona Parametre Olarak Gönderme

DİZİLERİ FONKSİYONA PARAMETRE OLARAK GÖNDERMEK (Passing Array to Function)

Parametre olarak bir dizi alacak olan fonksiyon tanımlanırken parametrei dizi olarak söylenmelidir.

void dizi_yaz (int [], int);

tanımlaması, birisi integer dizi, diğeri integer olan iki parametre alıp geriye değer döndürmeyen bir fonksiyonu ifade eder. Yani fonksiyona bir dizi gönderileceğinden onu karşılayan değerinde bir diziolması gerekir. Ancak fonksiyonda diziyi karşılayacak olan diziye boyut ya da indis belirtilmez.

Herhangibir dizi fonksiyona parametre olarak gönderilirken sadece dizinin adı söylenir, [] işaretleri kullanılmaz ve indis numarası belirtilmez.

int a[10]; şeklinde tanımlanmış bir diziyi fonksiyona göndereceksek

dizi_yaz ( a , 10)

dememiz gerekir. Dikkat edilirse sadece dizinin adını (a) yazdık. Ne köşeli parantez kullandık ne de indis numarası söyledik. Eğer indis numarası kullanarak gönderseydik hatalı bir işlem yapmış olurduk.

dizi_yaz (a[3], 10) gibi bir ifade fonksiyona diziyi değil, dizinin 3 indis numaralı tekbir elemanını gönderir. Dizinin tamamını fonksiyona gönderebilmek için sadece adını yazmak gerekir.

Bu ifade aslında dizinin başlangıç adresini göndermektir. (Dizinin adında hafızadaki başlangıç adresi saklı değil miydi?) Böylece dizi elemanları hafızada arka arkaya yerleştiğinden istenilen herhangi bir elemana ulaşılabilir. Fonksiyonda işlem gören dizinin saklanmış olduğu hafıza adresleri olduğundan ve hafızada aynı adresten sadece bir tane bulunduğundan fonksiyonda yapılan işlemler (mesela dizi elemanlarının değiştirilmesi) ana programdaki diziyi de etkilemiş olur. Yani ana programdaki dizi ile fonksiyondaki dizinin adları farklı olsa da aynı hafıza hücresinde bulunan elemanlar üzerinde çalışmaktadırlar. Böylece fonksiyonun geriye parametre döndürmesine gerek kalmadan dizi elemanlarının hepsi fonksiyonda değiştirilebilir.

ÖRNEK: Değerleri ana programda kullanıcıdan istenen 10 elemanlı integer bir diziyi fonksiyona gönderip, fonksiyonda kabarcık sıralaması yöntemini kullanarak sıralatalım. Ve sıralı halini ana programda ekrana yazdıralım.

#include
#include
void sirala ( int [] );
void main()
{
int a[10], i;

for (i=0; i<10; i++) { printf(“Dizinin %d. Elemanını giriniz:”); scanf(“%d”, &a[i]); } sirala ( a ); printf (“\nDizinin sıralı hali:”); for ( i=0; i<10; i++) printf(“%d\n”, dizi[i]); getch(); } void sirala (int b[] ) /* Parametre olarak dizi geldiği için onu karşılayan da dizi olmak zorunda*/ { int i, j, yedek; for (i=0; i<10; i++) for ( j = 0; j< 10-1; j++) if (b[j]>b[j+1]) /* Her elemankendinden bir sonraki ile karşılaştırılıyor */
{
yedek = b[j]; /* yer değiştirme yapılıyor */
b[j] = b[j+1];
b[j+1] = yedek;
}
}

ÇOK BOYUTLU DİZİLER

Bir sınıftaki 40 öğrencinin notlarını saklamak için 40 elemanlı tek boyutlu bir dizi gerekirken; bir sınıftaki 40 öğrencinin 3’er notlarını saklamak için 40 satırı ve 3 sütunu bulunan (40 X 3 ) iki boyutlu bir dizi gerekecektir. İlk öğrencinin ilk notu dizinin [0][0] indis numaralı notudur. Dizinin [23][2] indis numaralı elemanı ise 24. elemana ait 3. notu saklamaktadır. Çünkü dizilerin indis numarası 0(sıfır)’dan başlar.

Eğer sınıftaki 40 öğrencinin, 6’şar dersten aldıkları 3’er notları saklamak isteseydik üç boyutlu bir diziye ihtiyaç duyacaktık. (40 X 10 X 3 )

Elemanlarına birden fazla indis numarası ile ulaşılan dizilere çok boyutlu diziler denir. C dilinde dizi boyutları hafızanın desteklediği ölçüde olabilir. Çok boyutlu diziler arasında en çok kullanılanı 2 boyutlu dizilerdir. 2 boyutlu dizileri bir tablo gibi düşünebiliriz. Bu tablodaki herbir elemana ulaşmak için önce satır sonrada sütun indis numarasını söylemek gerekir.

C Dizilerde Arama & Sıralama

DİZİ İÇERİSİNDE ELEMAN ARAMA: Herhangibir elemanın dizi içerisinde olup olmadığına bakılabilir. Bunun için kullanılacak en basit yöntem, dizi elemanlarının aranılan elemana eşit olup olmadığına sıra ile bakmaktır. Sonuna kadar bakılıp hiçbirine eşit bulunamadı ise o eleman dizide yok demektir.

DİZİ ELEMANLARINI SIRALAMA: Dizideki elemanları büyükten küçüğe ya da küçükten büyüğe sıralamak için farklı mantıklar kullanılabilir. Sıralama çoğunlukla iki yöntem kullanılır.

Seçme Sıralaması (Selection Sort) : Dizinin ilk elemanı kendinden sonraki elemanların hepsi ile tek tek karşılaştırılır. Her karşılaştırma işleminden sonra eğer elemanlar ters sırada ise (küçükten büyüğe sıralamada üstteki eleman büyükse) bu iki eleman yer değiştirilir. İlk eleman sonuna kadar her elemanla karşılaştırılıp gerekli olanlar yer değiştirdikten sonra dizinin ilk elemanı (küçükten büyüğe sıralanıyorsa dizinin en küçük elemanı, büyükten küçüğe sıralanıyorsa dizinin en büyük elemanı) bulunup yerine yerleştirilmiş olur. Bundan sonra aynı işlem dizinin diğer elemanlarına da tek tek uygulanır. Bunları örnek bir dizi üzerinde görürsek daha iyi anlayacağız.

İlk eleman için:

9 3 6 1 12

9>3 mü? Evetse ters sıradalar. 9 ve 3’ü yer değiştir. Hayırsa hiç birşey yapma. devam Arık 3 ilk eleman oldu. Karşılaştırma sıradaki elemandan devam ediyor.


3 9 6 1 12

3>6 mı? Hayır. Karşılaştırma sıradaki elemandan devam ediyor.


3 9 6 1 12

3>1 mi? Evet. Bu iki elemanı yer değiştir. Artık ilk eleman 1 oldu. Karşılaştırma sıradaki elemandan devam ediyor.


1 9 6 3 12

1>12 mi? Hayır.

İlk eleman sonuna kadar her elemanla karşılaştırıldı. Ters sırada olanlar yer değiştirildi. Böylece ilk geçişte en küçük eleman bulundu ve ilk sıraya yerleşti. Aynı karşılaştırılma işlemi 2. eleman için tekrarlanacak: (İlk eleman zaten doğru sırasına yerleştiğine göre karşılaştırmaya en baştan başlamaya gerek yok. Kendinden bir sonraki elemandan başlanabilir.)



1 9 6 3 12

9>6 mı? Evet. Bu iki elemanı yer değiştir. Artık ikinci eleman 6 oldu. Karşılaştırma sıradaki elemandan devam ediyor.


1 6 9 3 12

6>3 mü? Evet. Bu iki elemanı yer değiştir. Artık ikinci eleman 3 oldu. Karşılaştırma sıradaki elemandan devam ediyor.


1 3 9 6 12


3>12 mi? Hayır.

İkinci eleman da sonuna kadar her elemanla karşılaştırıldığında ve gerekli değiştirme işlemleri yapıldığında ikinci sırada yeralması gereken eleman da yerine yerleşmiş oluyor. Ancak sonraki elemanlar hala karışık. Aynı işlemi onlara da uygulayalım. Şimdi sıra 3. elemanda


1 3 9 6 12

9>6 mı? Evet. Bu iki elemanı yer değiştir. Artık üçüncü eleman 6 oldu. Karşılaştırma sıradaki elemandan devam ediyor.


1 3 6 9 12

6>12 mi? Hayır.

Karşılaştırma 4. eleman için devam ediyor:


1 3 6 9 12

9>12 mi? Hayır.

Bu sıralama algoritmasını C koduna dökmek için elbetteki içiiçe iki döngü kullanılmalıdır. Ancak iki elemanın yerini değiştirirken 3. bir yedek değişken kullanmaya dikkat edilmelidir. Aksi taktirde iki elemanın yerini değiştirmek için,
a = b;
b = a; gibi iki komut kullanmak son derece yanlış bir sonuç doğurur. Bu iki komut sonunda her iki sayıda ikinci sayı ile (b değişkeni) aynı olur.

Halbuki yer değiştirme işlemi için kullanılacak yedek bir değişkenle aşağıdaki gibi yapılır.

yedek = a;
a = b;
b = yedek;

Şimdi bu mantığı kullanarak örnek bir dizi sıralaması yapalım:

/* Seçme Sıralaması yöntemi dizi sıralama */
#include
#include
#define BOYUT 5;
void main()
{
int a[5] = {9,3,6,1,12};
int i, j,yedek;
for (i=0 ; ia[j] )
{
yedek= a[i];
a[i] = a[j];
a[j] = yedek;
}
printf (“\n Dizi sıralandı:”);
for ( i=0; i3 mü? Evetse ters sıradalar. 9 ve 3’ü yer değiştir. Karşılaştırma sıradaki elemandan devam ediyor.


3 9 6 1 12

9>6 mı? Evet. Bu iki elemanı yer değiştir. Karşılaştırma sıradaki elemandan devam ediyor.


3 6 9 1 12

9>1 mi? Evet. Bu iki elemanı yer değiştir. Karşılaştırma sıradaki elemandan devam ediyor.


3 6 1 9 12

9>12 mi? Hayır.

İlk tur karşılaştırma bitti. Ters sırada olanlar yer değiştirildi. Böylece ilk geçişte en büyük eleman bulundu ve ilk sıraya yerleşti. Aynı karşılaştırılma işlemi ilk elemandan başlanıp tekrarlanacak. Dizideki eleman sayısınca aynı işlem yapıldığında dizi sıralanmış olacak. Bu sıralama algoritmasının kodunu sanırım kendiniz düzenleyebilirsiniz. Lütfen deneyiniz!...

C Dizi Elemanlarına Değer Atanması

DİZİ ELEMANLARINA DEĞER ATANMASI

Dizilere değer atama işlemi tanımlanması sırasında ilk değer atayarak da, sonradan programın herhangibir yerinde de yapılabilir. Eğer tanımlama sırasında değer atanacaksa aşağıdaki örnekte olduğu gibi yapılmalıdır. Bu durumda dizi elemanları küme parantezi (brace) içerisinde aktarılır ve herbirisi diğerinden virgülle ayrılır. Elemanlar ilk hücreden itibaren sırası ile yerleştirilirler.

int a[10] = { -45, 6, 0, 72, 1543, -89, 0, 62, -3, 1};

Bu ilk değer ataması işleminde bazı hususlara dikkat edilmelidir:
Küme parantezi içerisinde dizinin söylenen boyutundan daha fazla eleman olmamalıdır. Böyle bir durumda yazım hatası (syntax error) ile karşılaşılır.
Küme parantezi içerisinde dizinin söylenen boyutundan daha az eleman varsa belirtilen elemanlar sırasıyla diziye aktarılır, boş kalan yerlerdeki elemanlar 0 kabul edilir.
İlk değer ataması sırasında dizinin boyutu verilmemişse ise, küme parantezi içerisinde eleman sayısı dizi boyutu olarak kabul edilir.
ÖRNEK: int a[] = {-45, 6, 0, 72, 1543, -89}; şeklinde tanımlanmış bir dizinin boyutu söylenmemiş olsa da (diziye 6 eleman aktarıldığı için) 6 olarak algılanır.

Fakat dizi sadece tanımlanacak ve eleman aktarılmayacaksa boyutu mutlaka belirtilmelidir. Aksi hatalı bir durumdur. Yani int a[]; şeklinde bir tanımlama yapılamaz.
Dizi tanımlanmış, ancak hiçbir eleman aktarılmamışsa dizi içerisinde rasgele değerler bulunur. (Aslında abu değerler dizi için ayrılmış olan hafıza bölümünde daha önceden varolan değerlerdir.)

Bütün bunların dışında dizinin herbir elemanına indis numarasını kullanarak tek tek de ulaşılıp değer atanabilir.

a[5] = 65; /* Dizinin 5 indis numaralı elemanına –aslında 6. eleman- 65 değerini aktarır. */

Örnek: Klavyeden girilen 10 adet sayıyı giriş sıralarının tersinden ekrana yazdırınız.

Böyle bir örneği dizi kullanmadan yapmak için 10 tane ayrı değişken tanımlamak ve değerleri 10 ayrı komutla girdirip, yeniden 10 ayrı komutla yazdırmak gerekir. Çünkü her değer giriş işleminden sonra yeniden lazım olacağından mutlaka saklanmaları gerekecek. Ancak 10 elemanlı bir dizi ile bu işlemleri çok daha kısa sürede yapabiliriz.

#include
#include
void main()
{
int a[10]; i;
for ( i=0; i<10; i++) { printf (“%d. Elemanı giriniz:”, i+1); scanf (“%d”, &a[i]); } printf (“\n Elemanlar tersten yazılıyor:”) for ( i = 9; i >= 0; i--)
{
printf (“%d\t”, a[i]);
}

C Tek Boyutlu Diziler

TEK BOYUTLU DİZİLER

Tanımlanması: Tek boyutlu diziler tanımlanırken dizinin tipi, dizinin adı ve kaç eleman için yer ayrılacağı (dizinin eleman sayısı / boyutu) söylenmelidir. Dizinin boyutu değişken olamaz, mutlaka sabit olmalıdır. Tek boyutlu bir dizi aşağıdaki gibi tanımlanır:

Dizinin_Tipi Dizinin_Adi [Dizinin_Boyutu];

int a [10]; /* İçerisinde 10 tane integer sayı saklanabilecek dizi*/
float b[5]; /* İçerisinde 5 tane ondalık sayı saklanabilecek dizi */
char c[20]; /*İçerisinde 20 tane karakter saklanabilecek dizi*/

Diziler tanımlandığında söylenen sayıda elemanı saklayabilmek için hafızada gerekli miktarda yer ayrılır. Sözgelimi integer bir sayı hafızada 2 byte yer kapladığına göre, 10 elemanlı integer bir dizi için 2*10 byte yer ayrılmalıdır. Yani 10 elemanlı integer bir dizihafızada 20 bytelık adres alanı işgal eder. Ayrılan hafıza alanlarının başlangıç adresi de dizinin adında saklanır.

C Diziler Arrays Tanım

Tanım: Aynı tipteki birden fazla değişkeni tek bir isim altında tutmayı sağlayan yapılardır. (struct) Dizi, hafızada bir bölgenin birden fazla değişken için ayrılmasıdır. Dizi içerisinde saklanacak her verinin tipi birbiri ile aynı olmalıdır. Örneğin, tek bir dizi içerisinde hem tamsayı hem de ondalık sayı saklanamaz.

Dizi içerisindeki herbir elemanın adı aynıdır, bu elemanlara dizideki sıra numarası yardımı ile ulaşılır. Bu numaraya dizinin indis numarası denir ve [ ] işaretleri içerisinde gösterilir. Dizinin ilk elemanının indis numarası daima 0 (sıfır) dır.

Aşağıda 10 elemanlı bir dizi şeklen ifade edilmiştir.


Sayi
Sayi[0] - 45
Sayi[1] 6
Sayi[2] 0
Sayi[3] 72
Sayi[4] 1543
Sayi[5] -89
Sayi[6] 0
Sayi[7] 62
Sayi[8] -3
Sayi[9] 1


Görüldüğü gibi dizinin ismi sayi ‘dır ve dizinin ilk elemanı olan –45 sayısının dizideki sıra numarası (indisi) 0 dır. Dizinin 10. elemanı 1 dir, ancak bu elemanın indis numarası 9’ dur. Çünkü dizi numaralandırılmaya 0’dan başlanmaktadır.

13 Temmuz 2009 Pazartesi

Css Tutorial

Bir önceki yazımda bahsettiğim style css kodlarını içeren bir tutorial.

#header
{
border: 0;
margin: 0px auto;
width:800px;
height: 106px;
}

body
{
width: 1024px;
height: 768px;
background-color: #952828
}

#con
{
width: 800px;
height: 600px;
background-image: url(images/arkafon.png);
background-position: top center;
text-align: left;

}

#bodyarka
{
width: 800px;
height: 400px;
background-image: url(images/arkafon2.png);

}

#tablo
{
width: 400px;
height: 400px;
float: left;
margin: 20px;
margin-top: 30px;
}

#resim
{
MARGIN: -450px 120px 10px 10px;
float: right;
display:inline;
}

12 Temmuz 2009 Pazar

Css Özellikleri

Bir web tasarımım için yazdığım css dosyasında kullandığım özelliklerden bahsedeceğim bu yazımda.

color: #FFFFFF; (renk değişikliği)
background-color: red; (arkaplan rengini belirler)
background-image: url(image'in yolu); (arka plan için bir resim eklersiniz)
background-position: center center; (background'ı yatay ve düşey olarak hizalarsınız)

margin-top:40px;
margin-bottom:30px;
margin-left: 30px;
margin-right: 20px; (tablomuzun sol,say,yukarıdan ve aşağıdan hizalamamızı sağlar)

float: right;
float: left; (sağ yada sol hizalam)

text-align: center;
text-align: left;
text-align: right;
(yazılarınızı hizalamanızı sağlar)

Şimdilik bu kadar. sitemin ihtiyaçları arttıkça ekleyeceğim css kodlarını yine sizlerle paylaşacağım.

Herkese kolay gelsin.

11 Temmuz 2009 Cumartesi

CSS nedir, Nasıl Kullanılır?

HTML bize metin biçimlendirme alanında çok geniş olanaklar sunar. CSS, uzun yazılışıyla Cascading Style Sheets, veya Türkçesiyle Stil şablonları ise bunu bir adım daha öteye götürür, bize sayfalarımız için global şablonlar hazırlama olanağı verdiği gibi, tek bir harfin stilini; yani renk, font, büyüklük gibi özelliklerini değiştirmek için de kullanılabilir. Bu tekniğin en önemli özelliği kullanımındaki bu esnekliğidir.

Bir web sayfası içerisinde zaten estetik kuralları gereği yüzlerce renk ve font kullanmayız. Genelde birbiriyle uyumlu birkaç renk ve birkaç font kullanırız ki, bunları her sayfada ayrı ayrı tekrar belirtmek yerine CSS yardımıyla bir sefer tanımlayıp bütün web sayfamızda kullanabiliriz.Bu şekilde güncelleme yaparken de onlarca sayfayı değiştirmekten kurtuluruz.

CSS kodları HTML kodlarının içine yazılırlar. Türüne göre body veya head bölümlerinde yer alabilirler. Bunların dışında harici CSS dosyaları oluşturulup bunlar gerektiğinde HTML belgesi içerisinde çağırılabilirler.

Hemen hemen her konuda olduğu gibi CSS konusunda da Microsoft Internet Explorer ve Netscape farklı yorumlar ortaya koyarlar. Bu noktada her iki browserın da aynı/benzer yorumlayacağı kodlar yazmak en uygunudur.

alıntıdır.

4 Temmuz 2009 Cumartesi

C Do while Loop

C'de işleyeceğimiz bir başka döngü çeşidimiz de do / while döngüsüdür. Yaptığı iş hemen hemen while döngüsü ile aynıdır fakat tek bir fark vardır ki koşul sağlansa da sağlanma sa do / while döngüsü en az 1 kez çalıştırılır.

Konuyu biraz açacak olursak while döngüsünde koşul sağlanmadığı takdirde döngü içindeki komut çalıştırılmaz. Çünkü koşul başta belirtilmiştir. Fakat do / while döngüsünde koşul sonda kontrol edileceği için en az bir kez çalıştırılır.

Şimdi ufak bir örnek yapalım. Şöyle ki kodumudaki sayaç değeri 5'ten küçükse ekrana merhaba dünya yazalım. Eğer 5 ten küçük değilse merhaba dünya yazmasın. While ile do / while arasındaki farkı gözlemlemek için de sayaç degerimizi 10 yapalım.

Şimdi kodlara bakalım:

Aşağıdaki kod while döngüsü ile düzenlenmiştir. Sayaç başlangıç değeri 10 olarak atanmıştır. Koşul sağlanmadığı için ekrana herhangi birşey yazılmayacaktır.

# include
# include

int main()
{
int sayac = 10;

while (sayac < 5) { printf("merhaba dunya"); sayac ++; } getch(); }



Şimdi aynı kodu do / while ile yapıyoruz. Sayaç değeri yine 10 olarak belirlenmiştir. Fakat do / while'ın mantığına göre döngü en az bir kez çalışacağından 1 kez ekrana "merhaba dünya" yazdırılacaktır.

# include
# include

int main()
{
int sayac=10;

do {
printf("merhaba dunya! \n");
sayac++;
} while(sayac<5); getch(); }



Umarım aradaki farkı anlatabilmişimdir. Tüm c sever arkadaşlara kolay gelsin.

Programın kaynak dosyalarına aşağıdaki linkten ulaşabilirsiniz:

http://rapidshare.com/files/252043185/do_while.rar.html