Ödev 2

Teslim Tarihi: 5 Mart 2008

 

Ödev: N boyutundaki M adet diziyi ayrı ayrı sıraladıktan sonra NxM boyutunda iki boyutlu bir dizi haline getiriniz.

 

Ödevin açıklaması: Bilindiği üzere pointer (göstericiler) dizi üzerinde çalışmaktadır. Pointerların bu özelliklerinden faydalanarak M adet dizi oluşturulabilir ve diziler aynı boydaysa tek bir iki boyutlu matriks üzerinde toplanabilir.

 

Şekilde gösterildiği üzere tek bir pointer ile N adet dizinin sıralanması, daha sonra NxM boyutunda tanıtılan bir diziye bilgilerin atılması mümkündür. Buna göre karmaşık olarak verilmiş diziler sıralandıktan sonra her satırı sıralanmış M satırlı iki boyutlu bir dizi elde edilecektir.

 

Ödevin taşıması gereken özellikler:

Tek boyutlu dizilerin sıralaması için istediğiniz algoritmayı kullanabilirsiniz.

Sıralama işleminin derste anlatıldığı gibi bir fonksiyon ile yapılması ve fonksiyonun referans ile çağarılması (call by reference) isteniyor.

Hafızada N adet M uzunluğunda dizi ve bir adet NxM uzunluğunda dizi ve bir pointer dışında başka bir yer ayırmanıza izin verilmemiştir. Swap (yer değiştirme) işlemi için bu alanlar dışında fazladan bir değişken veya pointer daha kullanabilirsiniz.

İki boyutlu dizi üretildikten sonra her satırının kendi içinde sıralı olması ve orijinal matirste bulunan verilerin hepsini kaybetmeden taşıması gerekmektedir.

 

Bonus: Yukarıdaki ödevi yaptıktan sonra ilave olarak satırlar arası sıralama yapın. Yani matrisin sol üst köşesinde en küçük sayı, sağ üst köşesinde ise en büyük sayı bulunacak şekilde sıralayın. (bonusu yapmak sorunun orjinalini yapmamak demek değildir. Bonus yapmak isteyenler sorunun orjinaline ilave olarak kodda bir fonksiyon yazabilir veya ikinci bir dosyada yollayabilirler.)

 

Değerlendirme (aşağıda çeşitli durumlarda alınabilecek en yüksek puanlar verilmiştir, bu durumlarda daha düşük puan alabiilrsiniz)

Boş ödev veya şartlara uygun olmayan ödev yollanması durumunda 1 puan

Compile etmeyen kod 10 puan

Compile eden ama çalışırken problemi olan (sonsuz döngü, pointer hatası gibi) ödev 30 puan

Tek boyutlu diziyi sıralayan ve call by reference ile çalışan bir fonksiyonu olan ödev 50 puan

Tek boyutlu diziyi sıraladıktan sonra N adet dizi için sıralama işlemi yapan ödev 70 puan

Tek boyutlu diziyi N kere sıraladıktan sonra sonuçları 2 boyutlu diziye başarılı atan ödev 100 puan

Bonus 20 puan olarak değerlendirilecektir.

Bu projenin penaltı puanı fonksiyonelliktir. Şayet kodunuzu tek bir fonksiyon olarak (örneğin main kullanarak) yazarsanız -50 puan kırılacaktır.

Penaltı puanı almamak için kesinlikle fonskiyon ve call by reference kullanılmalıdır ve aşağıdaki fonksiyonlar kodlanmalıdır:

  • main fonksiyonu
  • tekboyutlu dizi sıralama fonksiyonu
  • sıralanmış dizileri ilişkilendirme fonksiyonu

  • yukarıdaki bu fonksiyonlar en az gereklililktir, gerekli görürseniz daha fazlasını yazabilirsiniz.

     

    Derste anlattığım call by reference örneklerinden faydalanabilirsiniz, derste not tutma problemi olanlar veya dersi kaçıranlar için örnek kodlar:

    1. Call by reference kullanılarak swap işlemi
    2. pointer işlemleri ve diziler
    Herkese başarılar.
    Sorularınız için her zaman datastr [at] sadievrenseker.com adresine ileti atabilirsiniz.