Algoritma ve Programlama II Dersi 3.ÖDEVĠ 1. 3 boyutlu uzayda koordinatları dıģarıdan girilen bir üçgenin normalini ve açılarını bulan programı yazınız. 3 boyutlu uzaydaki bir V vektörünün x,y ve z koordinatları 3 B bir vektörün uzunluğu V simgesi ile gösterilir ve aģağıdaki formül ile elde edilebilir. Uzunluğu 1 birim olan vektörlere birim vektör adı verilir. Bir vektörü birim vektör haline getiren iģleme normalizasyon adı verilir. Dot Product (nokta çarpımı) iģlemi iki vektör arasındaki açıyı bulmak için kullanılmaktadır. A ve B gibi iki birim vektörün nokta çarpımı A.B Ģeklinde gösterilir. Nokta çarpımı iki yöntem ile bulunabilmektedir. A α B A. B A x B x A y B y A z B z A. B A B cosα Cross Product (çapraz çarpım) iģlemi iki vektöre dik olan bir vektörü bulmak için kullanılır. A ve B birim vektörlerinin çapraz çarpımı A x B Ģeklinde gösterilir. Çapraz çarpım sonucunda A ve B vektörüne dik yeni bir vektör elde edilecektir. (http://en.wikipedia.org/wiki/cross_product) A x B A Y B Y A Z B Z i A x B x A Z B Z j A x B x A y B y k A 2 3 4 gibi bir vektör A 2i 3j 4k şeklinde de gösterilebilmektedir. AĢağıdaki üçgene dik olan bir vektörü (normal) bulabilmek için öncelikle üçgen ile aynı düzlemde bulunan iki vektör elde etmemiz gerekir. AĢağıda bu iki vektörün nasıl elde edildiği gösterilmiģtir. Üçgenin normal vektörü üçgenin yüzeyine dik olan vektördür. p 3 a p 3 p 1 p 1 p 2 b p 2 p 1 normal a x b
AĢağıda projenizde bulunması gereken Math3D.h dosyası verilmiģtir. Bu dosyadaki bütün fonksiyonların gövdeleri Math3D.cpp dosyasına yazılacaktır. Ödevin çalıģtırılabilir halini aģağıdaki linkten indirebilirsiniz. http://www.kayhanayar.com/dersler/algoritma2/odevler/bin/odev3_1.zip Kosinüsün tersini almak için acos fonksiyonu kullanılabilir. http://www.cplusplus.com/reference/cmath/acos/
2. Bu soruda bir tam sayı dizisine, boģ bir kutuya kitap yerleģtirip çıkarma iģleminde olduğu gibi ilk yerleģtirilen sayının ilk çıkarılmasını sağlayacak bir yapı ve bu yapıyı manipüle eden fonksiyonları tasarlayacaksınız. Ödevin çalıģtırılabilir halini aģağıdaki linkten indirebilirsiniz. http://www.kayhanayar.com/dersler/algoritma2/odevler/bin/odev3_2.zip ÇALIġMA ÖRNEĞĠ BoĢ dizi. Sırayla,,,44 eklendiğinde 44 Bir eleman çekildiğinde 44 55 elemanı eklendiğinde 55
Yapımızın ve fonksiyonların bulunduğu kutu.h dosyası aģağıda gösterilmiģtir. kutu yapısının elemanlar adlı dizisi kutuya eklenen sayıları tutacaktır. Kutuya son eklenen sayının indeksi tepe değiģkeninde tutulacaktır. Bu durumlar göz önünde bulundurularak yukarıda verilen fonksiyonların gövdeleri kutu.cpp dosyası içerisine yazılmalıdır. BĠRĠNCĠ SORU : 60 PUAN ĠKĠNCĠ SORU : 40 PUAN Ödevin son teslim tarihi : 14.03.2013 :00
UYULMASI GEREKEN KOD DÜZENĠ Her C++ dosyasının baģında aģağıdaki yorum bloğu bulunacaktır. Yorum bulunmayan her C++ dosyası için 10 puan kırılacaktır. (pdf üzerinden kopyalayıp yapıģtırmanız problem çıkartabilir) /**************************************************************************** ** SAKARYA ÜNĠVERSĠTESĠ ** BĠLGĠSAYAR VE BĠLĠġĠM BĠLĠMLERĠ FAKÜLTESĠ ** BĠLGĠSAYAR MÜHENDĠSLĠĞĠ BÖLÜMÜ ** ALGORĠTMA VE PROGRAMLAMA II DERSĠ ** ** ÖDEV NUMARASI...: ** ÖĞRENCĠ ADI...: ** ÖĞRENCĠ NUMARASI.: ** DERSĠN ALINDIĞI GRUP: ** ****************************************************************************/ DeğiĢken isimleri anlamlı olmalıdır. Örneğin tek sayı adedini tutacak bir değiģken için YANLIġ DOĞRU yerine yazılmalıdır. int a; int TekAdedi; Her bir küme parantezinin altındaki kodları yazmadan önce tab tuģuna basılarak boģluk bırakılmalıdır. YANLIġ DOĞRU if(true) { int a =6; printf("merhaba"); if(false) printf("nasilsin"); } if(true) { } int a =6; printf("merhaba"); if(false) printf("nasilsin"); Her döngü ve koģul iģlemlerinden önce yapılan iģlem hakkında yorum yazılmalıdır YANLIġ DOĞRU int t = 0; for(int i=0;i<100;i++) t+=i; int Toplam = 0; //1 den 100 e kadar olan sayılar toplanıyor for(int i=0;i<100;i++) Toplam+=i; Fonksiyon gövdelerinin üstüne aģağıdaki gibi yorum blokları bulunmalıdır. /* Bir sayının istenen üssünü hesaplar. (Sadece pozitif sayılarda çalışır.) @Param taban üstü alınacak olan sayı @Param ust tabanın alınacak üst değeri. Negatif girilmemelidir. @return ust alma işleminin sonucu döndürülür. */ int ustal(int taban,int ust) { int sonuc = 1; for(int i=0;i<ust;i++) sonuc*=taban; return sonuc; }
Ödev Teslim Kuralları KURAL 1 Birinci soru için Math3D.h ve Math3D.cpp dosyaları oluģturulmalı fakat bu dosyalar içerisinde main fonksiyonu bulunmamalıdır. Ġkinci soru için kutu.h ve kutu.cpp dosyaları oluģturulmalı fakat bu dosyalar içerisinde main fonksiyonu bulunmamalıdır. Her bir soru için iki farklı.cpp dosyası ve bu iki dosya içerisinde birer main fonksiyonu bulunacaktır. Dosya ismi: ÖğrenciNumarası_SoruNumarasi. cpp Öğrenci numarasının 0001.10002 olduğunda ödev dosyalarının isimleri aģağıdaki gibi olacaktır. b0000002_1.cpp b0000002_2.cpp KURAL 2 Ġki dosyayı derleyebilecek bir Makefile dosyası oluģturulmalıdır. Programların derlenmesi ile oluģacak dosyaların ismi aģağıdaki gibi olmalıdır. program1 program2 KURAL 3 Ödev dosyaları zip dosya formatı ile sıkıģtırılmalı ve sıkıģtırılan dosyanın ismi aģağıdaki kurala uymalıdır. Dosya Ġsmi: ÖğrenciNumarası_ÖdevNumarasi.zip Öğrenci numarasının 0001.10002 olduğunu ve 1.ödevi teslim edildiğini düģünelim. Gönderilecek dosyanın ismi b0000002_odev1.zip 1.sorunun main fonksiyonunun bulunduğu.cpp dosyası 2.sorunun main fonksiyonunun bulunduğu.cpp dosyası
KURAL 4 Derleme için mingw C++ derleyicisi kullanılacaktır. Dosya isimlerinde yapılan hatalar her dosya için 10 puan kırılmasına sebep olacaktır. Zamanında teslim edilmeyen ödevden 0 puan alınacaktır. KURAL 5 Ödevler mail yoluyla teslim edilecektir. GRUP 1.Öğretim A Grubu 2.Öğretim A Grubu 1.Öğretim B Grubu 2.Öğretim B Grubu 1.Öğretim C Grubu 2.Öğretim C Grubu 1.Öğretim D Grubu 2.Öğretim D Grubu Karma Öğretim A Grubu Karma Öğretim B Grubu TESLİM EDİLECEK MAİL Algoritma1a@gmail.com Algoritma2a@gmail.com Algoritma1b@gmail.com Algoritma2b@gmail.com Algoritma1c@gmail.com Algoritma2c@gmail.com Algoritma1d@gmail.com Algoritma2d@gmail.com Algoritma3a@gmail.com Algoritma3b@gmail.com KOD PAYLAġMAK YASAKTIR Ödevler bireyseldir ve verilen bütün ödevler karģılaģtırılacaktır. Birbirine çok benzeyen ödevler kopya muamelesi görecektir. Bu tür ödevleri teslim edenlerin hepsi 0 alacaktır. Kesinlikle kod paylaģımı yapılmamalıdır.