Bir NYP sınavı nasıl yapılır?

NYP dersindeki düşük başarının, soruların “zor” olması nedeniyle olduğunu düşünen öğrenciler için bu yazıyı yazma ihtiyacı duydum. Bu “zor” soruları derste defalarca çözmüştük; ama bir de bu ortamda gösterelim. 

Sadece “Örgün öğretim” sorularını ayrıntılı cevaplayacağım, zaten benzer kurallar 2. öğretim içinde geçerli, ayrıca sayfa sonunda word belgesi halinde sınav cevap kağıtlarını yayınlıyorum. 1. zor soru ile başlayalım:

Soru 1. 3D bir oyunda tasarlayan bir geliştirici bir cismi oyun çalışırken istediği koordinatlarda yaratmak istemektedir.  OyunCismi adındaki sınıfta “Cisim_ID, X, Y Z” bilgileri tutulması düşünülmektedir. Oyun X, Y, Z sıfırdan küçük olursa 0’a, diğer taraftan X, Y, Z 1024’ten büyük olursa 1024 olmalıdır.(30)

a) Yapıcı (Constructor) kullanarak tüm bilgileri alın. (7)

b) X değerinin 0’dan küçük 1024’ten büyük olmamasını sağlayın. (8)

c) X koordinatında istenildiği kadar arttıran fonksiyonu yazın. (5)

d) X koordinatında istenildiği kadar azaltan fonksiyonu yazın. (5)

e) Nesnenin son koordinatlarını string türünden döndüren yordamı yazın. (5)

Tasarımı yaparken property veya fonksiyon kullanmada özgürsünüz. Sarmallama kuralına özen gösterin. (Y ve Z aynısı yazmaya gerek yok.)

Cevap:

Constructor oluşturma: Derste birçok defa constructor oluşturuldu. Private değişken konusu dersin başında encapsulation uyalım deyip her örnekte hatırlatıldı. Değişkeni hem fonksiyonla hem de property ile kontrol altına alabileceğiniz gösterildi. void ve değer döndüren metotlardan onlarcası yapıldı. Bu örnekte mantık açısından en zor kısım if şartları??? Değer < 0 ise sıfıra ve Değer > 1024 ise 1024 tamamlayın aksi taktirde değer aynı kalsın. Bunun eğer şartını tek if’le yazmaya çalışıyorsan, for ile karşılaştırma yapıyorsan, void yordama return yapıyorsan düşüneceksin acaba ben doğru bölümde mi okuyorum diye. Gelelim ikinci soruya…
 
Soru 2. Aşağıdaki koddaki hataları bulup sebeplerini belirtin. Main %100 doğrudur. (20)
 

Soruda Main bölümünü içeren kısmın 100% doğru olduğu söylenmiş. Hata satır numarası ile belirtilen yerde aranmalıydı. En az 10 öğrenci hatayı Main’de aramış. Sınav başlangıcında hatayı ve hatanın satır kodunu yazın diye uyarmıştık. Öncelikle Main bölümünü  Comment satırları yazıp konuları yorumladım. (Comment satırları sınavda yoktu siz bulacaktınız.) Şimdi bu comment satırlarından sonra gelelim cevaba: 
Cevap:
08. public A()
14. public int T
11. public A(int Z) 
03.public static int X;
Cevap bitti. Cevap sadece 5 comment ve düzeltilmiş 4 hata satırından oluşmaktadır!!!. Static bölümü derste çok defa anlatıldı. Hatta bir nesne oluşturulurken şimdi direkt sınıf ismi ile değişkeni/fonksiyonu nasıl yaratırız diye defalarca soruldu. Başarılı öğrencilerden derste de doğru cevaplar sınavda olduğu gibi alındı. Gelelim 3. soruya tek amaç sınıf oluşturabilmeniz…
Soru 3. Aşağıdaki main’de bulunan kodun çalışması için gerekli sınıf veya sınıfları oluşturun. (25) (Aşağıdaki kod %100 doğrudur.) 

Öncelikle açıklama satırı şeklinde konuları yazdım. Çok basit bir soru…

Cevap:

Evet, cevap bu kadar… Ne if şartı ne for döngüsü!!! Sadece constructor metot yapabilme ve static bir fonksiyon yazabilme sorusu idi. En zor sorumuza gelelim. En zor sorumuzda for ve if var. Hem de 2 tane for bir de iç içe!!! çok zor çoookkk…
 
Soru 4. Temel Bilgi (25)
İki diziyi karşılaştırıp benzer eleman sayısını int türünden döndüren fonksiyonu (static olmayan) bir sınıf içine yazın. Sınıfı main bölümünden çağırıp int bir değişken içine atın.
Dizi tanımlama:
int[ ] array01 = { 5, 6, 7, 2, 1 };
int[ ] array02 = { 6, 7};
İstenen fonksiyon:
Public int karsilatirma(int[ ] x, int[ ] y)
 
Öncelikle bir önceki sorulardan bu bölüme kopya çekebilirsiniz. Örneğin main bölümü önceki 2 soruda var, tanımlanması belli. Ama main’i static yazmayan, hiç main yazamayan o kadar çok kişi vardı ki!!! Şimdi gelelim cevaba!!!
Cevap:

İki diziyi karşılaştırıp ortak elemanları bulma kodu 5 satırdan oluşuyor. 
 
Sorulardaki konular:
Sınıf tanımlama, Nesne Oluşturma, Constructor, Constructor Overloading, Metot Oluşturma, Static konusu, for, if ve array konuları. Çok temel konular, internette hangi eğitim sitesine giderseniz gidin bu konuları görebilirsiniz.
 
Sorulmayan konular:
Çok boyutlu diziler, dinamik diziler, öz yinelemeli fonksiyonlar, temel I/O işlemleri, dönüşüm işlemleri, Namespace, DLL oluşturma, indeksleyiciler, operator overloading, inheritance gibi konulardan soru sorulmadı. Derste anlatılmayan mantık sorusu sınavda sorulmadı ki Bilgisayar Mühendisliği MANTIK demektir.
Bu güne kadar haftada 12-15 saatimi bu derse verdim. Nasıl daha iyi öğretebilirim, ders notları nasıl daha iyi olabilir diye uğraştım. Ders slaytlarını saatlerce çalışarak hazırladım. İddia ediyorum ki Türkiye’de tüm üniversiteler arasında en ayrıntılı notlardan birini açık ders notu olarak internette yayınlıyorum. Sınav kağıtlarını değerlendirdikten sonra öğrenci hatalarını görsün diye sınav kağıtlarını gösterdim. Ayrıca hatalarını en iyi kağıtla karşılaştırma imkanı verdim.
 
Sınavda elinden geleni yapan ve yüksek alan arkadaşlara teşekkür ederim, en azından beni anlayan öğrenciler var. 

Not: cevapların ilk karakterleri büyüktür, word ilk kelimeyi otomatik büyüttüğü için düzeltmeye gereği duymadım. Sınavda da önem verdiğim bir konu değil. İyi bir IDE zaten bu düzeltmeleri otomatik yapıyor.