C/C++ Dizilere ait İlginç Bir Özellik

Bugün internette dolaşırken şu şekilde bir kullanıma rastladım. Bunu sizlerle paylaşmak istiyorum.

int main() { int array[] = {10 , 20 , 30 , 40 , 50}; int index = 2; printf(“%d\n” , index[array]); /* Bu satıra dikkat */ return 0; }

Normalde diziye erişim yaparken dizi_ismi[indis] şeklinde erişim yaparız. Fakat yukarıdaki hiçbir şekilde hata vermeden “array[index]” ile aynı sonucu veriyor.

İspatına gelince de şu şekilde;

Dizi veri yapısı bellekte bitişken şekilde açılır. Yani her bir indis bellekte rastgele yerlere değil ardışık biçimde dizilir. Biraz da pointer aritmetiğine bakacak olursak;

array[index] = *(array + index)
*(array + index) = *(index + array)
*(index + array) = index[array]
array[index] = index[array]

Bu yukarıdaki kodu herhangi başka bir programlama dilinde yani en azından benim bildiklerim arasında (C/C++ hariç) yazarsanız derleme aşamasında hata alırsınız. Böyle bir işleme izin verilmez.

157 Words

Ek Değişken Kullanmadan Swap İşlemi Yapmak

*Bilgisayar Biliminde* iki değişkenin değerlerinin karşılıklı olarak birbirlerine aktarılması işlemine *[Swap](http://en.wikipedia.org/wiki/Swap_%28computer_science%29)* işlemi denir. Swap işlemi çoğumuzun da bildiği üzere ek bir değişken kullanarak yapılıyor.

void swap(int *var1, int *var2) { int temp; temp = *var1; *var1 =*var2; *var2 = temp; }

**

Peki hiç düşündük mü acaba bu işlemi ek değişken kullanmadan yapabilir miyiz diye? Kullağa ilk başta çok ilginç geliyor tıpkı* Veri Yapıları ve Algoritmalar* dersine ait bir soruymuş gibi geliyor.

Bu sorunun cevabı evet. Burada yardımımıza yine Bilgisayar Biliminde çok duymuş olduğumuz **[XOR](http://tr.wikipedia.org/wiki/XOR_kap%C4%B1s%C4%B1)** işleci yardımımıza koşuyor.

void xorSwap(int* var1, int *var2){ if ( var1 != var2 ){ *var1 ^= *var2; *var2 ^= *var1; *var1 ^= *var2; } }

*Örnek C kodu*

**

Yukarıda yazdığımız kodun makrosunu tanımlamak istersek onu da şu şekilde tanımlıyoruz.

#define xorSwap1(x,y) {x^=y; y^=x; x^=y;}

İşlem 1. Değişkenin
içeriği
2. Değişkenin
içeriği
İlk Durum var1 var2
1. Adım var1 ^= var2 var1 xor var2 var2
2. Adım var2 ^= var1 var1 xor var2 ((var1 xor var2)  xor var2)  = var 1
3. Adım var1 ^= var2 ((var1 xor var2) xor var1) =** var2** **var1**
[XOR SWAP İşlemine ait Wikipedia Sayfası](http://en.wikipedia.org/wiki/XOR_swap_algorithm)

242 Words

jQuery ile Form Validation

FORM VALIDATION – Örnek Senaryo;
Diyelim ki sitemizde kayıt formu kullanmak istiyoruz. Ve bu forumda girilen bilgilerin belirttiğimiz özellikleri taşımasını istiyoruz.
Ad Soyad bilgisi 8 harften az olamaz.
E-mail bilgisi gerçek bir mail adresini yansıtmalı.
Şifre alanlarında girilen şifrelerin birbirinin aynısı olmasını istiyoruz diyelim.

Elimizdekiler
Formda girilecek olan alanların bilgileriniJavaScript kodu içinde gerekli değişkenlere aktarma işlemi

var x = $(“#pass1”).val();var y = $(“#pass2”).val();var z = $(“#name”).val();var t = $(“#mail”).val();

ilk durumda Submit butonu pasif durumda

$(“#submit”).attr(“disabled”, “disabled”);

Mail kontrolü sırasında kullanılacak Regular Expression bilgisi

RegExp(/^((“[\w-\s]+”)|([\w-]+(?:\.[\w-]+)*)|(“[\w-\s]+”)([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i)
var pattern = new RegExp(yukarıdaki ifade);

Formum şu şekilde

<form><label> Tam Adınız: label><inputid=“name”type=“text”/><imgid=“img1”src=“tick.png”alt=“”/><label> e-mail: label><inputid=“mail”type=“text”/><imgid=“img2”src=“tick.png”alt=“”/><label>Şifre: label><inputid=“pass1”type=“password”/><label>Yeniden Şifre: label><inputid=“pass2”type=“password”/><imgid=“img3”src=“tick.png”alt=“”/><inputid=“submit”type=“button”value=“SUBMIT”/>form>

– – – – – –