Boş vakit 2

[sourcecode language=”cpp”]include <stdio.h>
int main(){
char t[] = "èfİ÷¬—}ÖJÕwÓÕ|t³İï"γû¤ÛÖ²¯²ì¡ú®×ÖšïE›­û\0\0\0";
unsigned *a= (unsigned*)t, y=0;
do printf("%c", ((y=y*((*a)&1)+1)-1)?(y>5)?10:32:10+32);
while(*(((*a>>=1)-1)?a:++a));

return 0;
}[/sourcecode]

cse 112 labwork 1 in cevabı

Büyük sayılar üzerinde 4 işlem

Nerdeyse 3 haftadır Nottingham’dayım. Mutluyum. Yazamıyorum =)

Genelde bütün boş zamanımı bu directx projesi yiyor. Ama dün ve önceki gün zaman ayırıp (aslında inada girip =D) integer sınırlarını taşacak sayılar üzerinde işlem yapmayı sağlayan bir kütüphane yazabildim. Neden böyle bir şey yaptın diye sorarsanız bir şey diyemem =)

Kullanımı basit, operator overloading eklemeyi denedim çalışıyor gibi. Ama ilk defa böyle bir şey yaptığım için ne kadar doğru bilmiyorum.

Nasıl çalıştığına gelince, sayıları bir karakter arrayi olarak tutuyor. Array in her elemanını bir basamak olarak düşünelim, yani 256 lık taban üzerinde çalışıyoruz 😀

Mesela toplama yapmak için

a b c d
e f g h +
———
1 2 3 4

önce sondan başlıyor, d+h i buluyor ve bir integer a atıyor. sonra bu integer ın son 8 bit ini (int&0xFF) sonuçta 4 numaralı byte a yazıyor. daha sonra bunu sağa 8bit shift ediyor ve kalanı bir sonraki basamağın toplanmasında kullanıyor. kalan bu durumda zaten en fazla 1 olabilir. sonra aynı işlemi cg bf ae için yapıyor ve sonucu buluyor.

çarpma işlemi biraz daha karışık. önce h ile d den başlayıp a b c d ile tek tek çarpıyor. yine aynı şekilde kalanı bir sonraki basamağa atıyor (bu sefer kalan 1 den fazla olabilir). sonra aynı şekilde g ile a b c d yi çarpıyor ve sonuca ekliyor. böyle giderek sonucu hesaplıyor.

bölme işlemi ise en zoru =D

a b c d
e

önce böleni aynı hizaya gelecek şekilde kaydırıyor

a b c d
e 0 0 0

eğer ilk sayı diğerinde büyük ise sayıyı çıkarıyor ve sonuçta o kısma gelen bit i 1 yapıyor. daha sonra e sayısı sağa 1 kez shift ediyor (tüm sayıyı, yani hex olarak 0x2F 00 00 00 ise sayı shift edince 0x17 80 00 00 oluyor) ve aynı işlemi tekrarlıyor. sonuçta bölümden geriye kalan sayı kalan oluyor ve sonuçta elde ettiğimizde bölüm oluyor.

kodumuz ve örnek program burada

Eklenecek daha çok şey var, integer sayılarını toplayabilme çıkarabilme desteği, onluk tabanda bastırabilme desteği vs… Aslında hepsini tasarladım ama koda dökmeye üşeniyorum. Kim bilir belki bi gün =)

Aslında Odtü yarışmasında beri aklımda idi bu proje, o zaman bu tip bir sistem yapmıştım ama o hexadecimal olarak değilde 10luk tabanda çalışıyordu o yüzden çok daha az performanslı idi ve ayrıca bölme işlemi yoktu =)

Futurama!

Herkesin izlemesi gereken bir yapım. Nedense yayından kaldırılmış idi, yakında tekrar dönüyormuş.

http://www.tvsquad.com/2009/06/08/benders-back-baby-new-futurama-episodes-are-in-our-future/

Umarım simpsons lar kadar uzun bir ömrü olur

Tetris! MSP430F417 üzerinde

Microcontrollers & Microprocessors dönem projesi. Aslında proje olarak sadece led lerden ekran yapmak ve bir kaç basit uygulama düşünmüştüm ama sonradan tetris fikri aklıma geldi.

4 adet 5×7 led matrix kullanıyor (LMD20057BSR). Mikro işlemci olarak msp430f417 var. Bilgisayar bağlantısı sadece güç için kullanılıyor, yoksa vcc ve gnd bağlanınca kendi başınada çalışacaktır.

Asıl istediğiğim LCD bir ekranı bu işlemci üzerinden çalıştırabilmekti ama malesef hiç o tip bir şey bulamadım. 3 renkli led matrixler bile satılmıyordu.

Tetris on MSP430F417

Game of Life! (msw logo üzerinde ^^)

Okulumuzun ilk döneminde bize öğretilen program idi msw logo. Yeni öğrenciler programlamaya giriş yapsın diye bu tip eğitim programları gösteriliyor.

Msw logo bir çizim programı denebilir, fakat kullanıcılar komut girerek çizim yapıyorlar.

logo2

Yukarıdaki üçgen (ismi turtle, eskiden hakikaten kaplumbağa şeklindeymiş ondan adı böyle =)) bizim kalemiz. Biz verdiğimiz komutlarla turtle ı hareket ettiriyor, döndürüyor ve çizim yapıyoruz. Yukarıdaki örnekte turtle karenin sol alt köşesinden başladı ve yukarı bakıyordu. fd 100 (forward 100) ile 100 pixel ileri gitti ve karenin sol kenarını çizdi. rt 90 üçgeni 90 derece saat yönünde döndürdü. Sonra gene fd 100 ile karenin üst kenarını çizdik. Yukarıdaki komutları takip ederek resimdeki şekli oluşturduk.

Kulağa komik bir program gibi gelebilir =), ama gayet geniş bir şey aslında. 3d çizim yapmaya izin veriyor mesela. İnternette araştırılırsa çok güzel çizimler sunan basit kodlar bulunabilir. Mesela bir örnek şu (tıklayarak büyük halini açın):

desen

Bu deseni ortaya çıkartan kod da şurada. Denemek için Edall a tıklayın, kodu yapıştırın, “save and exit” ile çıkın ve komut verilen yere “db 2 6” yazıp çalıştırın. Yapan arkadaş recursive in dibine vurmuş hakikaten.

Benimde yıllar sonra aklıma esti ve game of life ı msw logo üzerinde çalıştırayım dedim =D. Sonucu da burada

gameoflifemswlogo

Kaynak kodumuzda buradan alabilirsiniz.

http://www.shultays.com/gameoflifelogo.txt

Kullanmak için Edall butonuna tıklayın, açılan pencereye bu kodu yapıştırın ve “save and quit” ile pencereyi kapatın. Daha sonra komut yerine “gameoflife 16 16 100” yazarak game of life ı başlatabilirsiniz (ilk 16 değeri satır sayısı, ikinci 16 sütun ve 100 de toplam kaç generation yapılacak onun sayısı, isteğinize göre arttırıp azaltabilirsiniz)

Mswlogo yu indirebilmek için.

http://www.softronix.com/logo.html

Game of Life hakkında bilgi

http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

Z fighting

Opengl de bana ilginç bir anı ve şu anda kullandığım avatarımı vermiş olan konu.

Basit olarak anlatmak gerekirse 3d ile çizilen iki şeklin kameraya olan uzaklıklarının birbirine eşit (veya çok yakın) olması ile oluşan, opengl in hangi şekil üstte olmalı anlayamamasından oluşur.

En basit çözümü üstte görünülmesi istenilen şeklin bir birim daha öne kaydırılmasıdır, ama eğer bizim başta  “en fazla şu kadar uzaklıkta olan z lerin çizilmesine izin ver” diye verdiğimiz değer çok büyükse bu yeterli olmayabilir.

Diğer bir çözümde stencil buffer kullanmak. Önce altta kalmasını istediğimiz nesneyi hem ekrana hem de stencil bufferına çizeriz, daha sonrada üstte kalmasını istediğimiz nesneyi eğer stencil buffer 1 ise kesin çiz, 0 ise depth test yap öyle çiz deriz. Şu an da tam hangi değerleri vereceğiz aklımda olmadığı için böyle yarım yamalak bir tanım yaptım =)

Neyse asıl anlatmak istediğim bu z buffer ın bana bıraktığı hoş anı =) 3 boyutlu engebeli bir gezegen yapmak istiyordum, ve onunla uğraşırken şu şekli ortaya çıkardım.

interesting1

Ne olduğunu başta çözemedim, sonradan farkedebildim niye böyle bir şey çıktığını. İşte z fighting sonucu ortaya çıkan bir şekil, doğrusu gözüme çok hoş geldi ve avatar olarak kullanma kararı aldım =D İlerde birileri sorunca avatarın ne diye “Kendisi bir bugtır” diyeceğim.

Malesef programın o halini kaydetmemişim =( ama bir gün tekrar aynı “hata”yı ortaya çıkarmaya çalışacağım.

gezegen

Bu da şeklin olması gerek şey idi, malesef sadece çok küçük bir resmini tutmuşum. Soldaki şey engebeli bir gezegen aslında, döndürünce falan hoş duruyordu. İleride tekrar uğraşabilirim, yapmak istediğim proje küre şeklinde bir dünya yaratmak ve uçarak bu dünya üzerinde gezine bilmek idi (Spore oynayanlar demek istediğimi anlayabilmiştir) hatta binalar falan eklerim diyordum ama sonunda (diğer bir çok projeye olan şey gibi =D) yarım kaldı. Şu an dosyalarını bile bulamıyorum.

shultays.com

shultays.com

Bir yıl kadar önce yaptığım, 3D grafik olayına giriş yaptığım kişisel web sitem. Hazırlık-1.sınıf zamanlarında AS2 olarak başlamıştım, daha sonra AS3 kullanmaya başladım. Asıl amacım flashta 3D site yapmak değilde bir 3D grafik motoru yazmak idi, bu yüzden hiç bir hazır kütüphane kullanmadım. AS2 hali hala duruyor, ama resimler eksik, mesela ortada bir küp vardı o görünmüyor, kenarda bir Otostopçunun Galaksi Rehberi vardı, hatta kapağı bile açılıyordu (vay be)

Pek kullanıcı dostu değil, zaten öyle olması için de tasarlanmadı =p Aslında aklımda göze güzel gelebilecek bir menü sistemi var ama hep üşeniyorum. Uzun süredir de flash kullanmadım, o yüzden de biraz çekinme var. Hem zaten zaman da yok =D

WASD tuşları ile kamera aşağı yukarı hareket ediyor. İleri gitmek için RF tuşlarını kullanarak ileri geri gidebilirsiniz. QE ekranı çevirir. Ayrıca farenin sol tuşunu basılı tutarakta kamerayı döndürebilirsiniz.

Renkli ve ünlemli gezegenler aslında bizim linklerimiz oluyor, onlara tıklayınca gezegene gidiyoruz ve onunla alakalı flash yükleniyor. Beyaz gezegenler de boş gezegenler, yanlarına gidebiliyorsunuz ama bir şey açmıyorlar.

Hayalimdeki proje evrende kişilere belirli bölgeler vermek, o bölgelerde kendi gezegenlerini oluşturmalarını sağlamak idi. Siz evrende gezinerek aslında siteler arasında geziniyor gibi olacaktınız. Lakin bir süre sonra artık sıkmaya başladı ve bitirilmemiş projeler arasında yerini aldı. Bir diğeride bu mesela. Multiplayer bir savaşlı yarışlı oyun yapayım dedim ama görebileceğiniz o daha başlarda yalan oldu =)