Saturday, August 29, 2009

Programming IQ test: Round 1, 2


Фүү сая infoworld.com сайтнаас тест өгсөн чинь 20-иос дөнгөж 9 авлаа даа. Зарим үгийг нь орчуулж чадахгүй юм гэхдээ л оролдоод үзлээ. Харин хоёрдугаар раундад 12 авлаа. Хэр программист болохоо сонирхоорой!
http://www.infoworld.com/d/developer-world/programming-iq-test-round-1-166

Saturday, August 22, 2009

Friday, August 21, 2009

Хонхыг жингэнүүлмээр байвал зүгээр л жингэнүүлэх хэрэгтэй

Он гарснаас хойш програмчлалын нэгэн хэсгийн их нухацтайгаар бодох болсон юм. Энэ нь ямар нэгэн зүйл програмчилж байхад ямар нэгэн тохиолдолд хэзээ ч ажиллахгүй гэдгийг нь мэдсээр байж түүнийг заавал шалгах хэрэгтэй болдог(if,switch бичих хэрэгтэй). Үүнийг зохицуулахын тулд runtime явцдаа өөрийнхөө кодыг RAM-н дээр өөрчилдөг зарим жижигхэн кодуудыг ажиглаж үзэв. Энэ тухайгаа GURU багшдаа хэлэхэд "Наадах чинь боломжтой, гэхдээ үүнийг сонирхвол чи хэзээ ч амжилтанд хүрэхгүй" гэж байсан юм. Намайг буруу ойлгосон байж болох ч би өөрийнхөө хариултыг долоо хоногийн өмнө л оллоо. Сонирхуулъя:
За мессенжерийн нэг программ бичиж байлаа гэж бодъё. Тэгсэн хэн нэг нь мессенжерт орж ирээд buzz хийх үед нь 2 төрлийн notification тохиргооноос хамаарч хийдэг байг.
1. Дуут дохио өгөх
2. Панел дээр жижигхэн мессеж болгож харуулах, нөхцөл ийм байна.
За би хариултаа олоогүй байсан бол яаж шийдэх байснаа харуулъя:

void onBuzz() {
switch(settings.buzzType) {
case makeSound: {
Device.makeSound();
break;
}
case showMessage: {
Panel.showMessage();
break;
}
default: {
throw new SomeException();
}
}
}
Аа харин хариултаа олсныхоо дараа:
abstract class Buzzer {
abstract void buzz();
}
class SoundBuzzer extends Buzzer {
void buzz() {
Device.makeSound();
}
}
class MessageBuzzer extends Buzzer {
void buzz() {
Panel.showMessage();
}
}
тэгээд программ эхлэх үед нь:
Buzzer buzzMaster=new SoundBuzzer();
buzz хийх үед ажиллах функц маань ийм болж хувирна.
void onBuzz() {
buzzMaster.buzz();
}
За ингээд бичиглэл хэмнээгүй ч ажиллах процессийн хувьд нэг switch-г авч хаяад шууд элдэв нэмэлтгүйгээр ажиллуулдаг болгочихлоо. Гоё биш гэж үү?,
Тэгвэл одоо яаж Settings-ээ сольж MessageBuzz болгох уу?
it's easy:
buzzMaster=new MessageBuzzer();