Мэдээллийн технологийн инженерийн шалгалтанд бэлдэх, өөрсдийн үзэж судалсан зүйлс, энэхүү шалгалтын талаарх мэдээ мэдээлэл, мэдлэгээ харилцан солилцох, хамтран суралцах сонирхолтой хэсэг залуус нэгдэн энэхүү блогийг нээж байна. Монгол хэл дээр хөтлөн явуулах ба хамтран бичих гишүүнчлэл нээлттэй. Та бүхнийг урьж байна. Бүгдээрээ мэдээллийн технолийн инженерийн шалгалтандаа тэнцэхийн төлөө :D
Блогийн хаяг: http://itfemn.blogspot.com/
Saturday, December 19, 2009
MT инженерийн шалгалтанд бэлтгэгчдийн блог нээгдлээ
Posted by Gansukh Batjargal at 2:50 AM 1 comments
Labels: News
Sunday, September 6, 2009
Python: Hello World
Аливаа програмчлалын хэлд суралцаж байгаа хэн бүхний хийдэг хамгийн эхний алхам нь Hello World мөрийг хэвлэх явдал байдаг гэвэл худлаа хэлсэн болохгүй болов уу. Хэрвээ та Windows хэрэглэгч бол Python-ы албан ёсны сайтаас татаж аваад суулгаж болно. Энэ хэл маань өөрөө нээлттэй эх бүхий програм хангамж болохоор болохоор мэдээж үнэгүй.
Харин Linux хэрэглэгчдийн хувьд Python хэл маань үйлдлийн системтэйгээ хамтдаа ирдэг болохоор бидний гарын дор хэрэглэгдэх хэлүүдийн нэг юм. Миний өмнө бичсэн Python-ы талаар бичлэг дээр командын мөрөнд ажиллах боломжтой байдаг талаар дурдаж байсан.
Терминал дээр python командыг бичихэд дараах байдалтай. бичиг гарч ирнэ.
ganaa@ganaa-laptop:~$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Python хэлний өгөгдөл дэлгэцэнд хэвлэх print функц байдаг. Харин одоо дараах командыг бичиж анхны програмыхаа үр дүнг харъя.
>>> print "Hello World"
Үр дүнд:
Hello World
Терминалаас Python-ы командуудыг шууд ажиллуулах нь жижиг кодуудыг туршиж үзэхэд тохиромжтой байдаг бол томоохон эх кодуудыг python-ы үндсэн өргөтгөлүүд болох .py, .pyw, .pyc, .pyo өргөтгөлүүдээр хадгалаад хөрвүүлж ажиллуулах нь тохиромжтой.
Хадгалсан эх кодыг ажиллуулахдаа:
python sourcename.py
командаар эх кодыг хөрвүүлж ажиллуулна.
Posted by Gansukh Batjargal at 4:45 AM 2 comments
Labels: Learning Python, Python
Python
Python хэл нь обьект хандалтат технологи, командын мөрнөөс ажиллах, өгөгдлийн динамик төрөл, автоматаар санах ойг удирдах зэрэг олон хүчирхэг боломжуудыг өөртөө агуулдагаараа Perl, Ruby, Scheme, Tcl зэрэг динамик програмчлалын хэлүүдтэй төсөөтэй. Зарим үед Python хэлийг скрипт байдлаар ч ашиглах боломж бий.
Python хэлний талаар дэлгэрэнгүй уншихыг хүсвэл эндээс уншаарай.
Миний дараагийн бичлэг Python хэлийг Windows, Linux дээр ашиглах талаар зөвлөгөө, Python хэлний анхны алхмуудад хөтлөх болно.
Posted by Gansukh Batjargal at 4:44 AM 0 comments
Labels: Python
Thursday, August 27, 2009
Fundamental Engineering Exam preparing books
Posted by Gansukh Batjargal at 7:26 AM 6 comments
Labels: Books
Saturday, August 22, 2009
Voltron Defender of the Universe Episode
Манай баатрын албан ёсны сайт: http://www.voltron.com/main.asp
Posted by Gansukh Batjargal at 7:02 AM 8 comments
Labels: Cartoon
Tuesday, August 18, 2009
Saturday, August 15, 2009
Apache friends:XAMPP
Windows-д зориулсан хувилбарыг татаж авах линк.
Linux-д зориулсан хувилбарыг татаж авах холбоос.
файлыг татаж авсан байх шаардлагатай. Татаж авч дууссаны дараа терминалаараа татаж авсан суулгацаа байрлах газар орно.
sudo tar xvfz xampp-linux-1.7.2.tar.gz -C /opt
XAMPP-ийг ажиллуулж эхлүүлэхдээ
sudo /opt/lampp/lampp startтушаалыг өгч эхлүүлнэ.
Starting XAMPP 1.7.2...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.
sudo chmod -R 0777 /opt/lampp/htdocs
Posted by Gansukh Batjargal at 11:43 PM 6 comments
Labels: Learning PHP, Setting Up Localhost
Friday, August 14, 2009
You are not alone
Өөрийгөө ганцаардаж байна гэж бодож буй бүх хүмүүст зориуллаа(өөртөө ч гэсэн :)).
Та ганцаараа биш шүү. Би энд байна :)
Posted by Gansukh Batjargal at 5:45 AM 0 comments
Labels: Entertainment, Music
Make me a sandwich
Эх сурвалж: http://battur.blogspot.com/
Posted by Gansukh Batjargal at 12:02 AM 4 comments
Wednesday, August 12, 2009
Download managers for Ubuntu
Download manager төрлийн програмын үзүүлж чадах боломжууд гэвэл:
-Том файлуудыг татаж үед түр зогсоц авах
-Түр зогссон юм уу татах үйл үйл явц ямар нэгэн тохиолдоор тасалдсан тохиолдолд татаж авах үйл явцыг үргэлжлүүлэх
-Маш удаан интернэт холболттой үед ч татаж авах үйл явцыг явуулах боломжтой байх
-Mirror(толь) сайтаас татаж авах. Энгийнээр тайлбарлавал нэг файлыг хэд хэдэн сервер дээр байрлуулсан бол тэдгээрээс аль хурдан татах боломжтойг сонгож татаж авах ойлгож болно.
-Тодорхой заасан хуваарийн дагуу татаж авах боломжууд(татаж авч дууссаны дараа компьютер өөрөө унтрах, файлуудыг тодорхой дараалаар татаж авах гэх мэт)
Одоо харин Ubuntu-д зориулагдсан нэлээд нэр хүндтэй Download manager програмуудын талаар жаахан мэдээллийг хүргэе.
Aria
Өгөгдөл дамжуулах үйл явцыг түр зогсоох, үргэлжлүүлэх, цуваа болгох, хадгалах боломжуудаар хангагдсан Download manager.
Суулгахдаа:
sudo apt-get install aria
Curl
Суулгахдаа:
sudo apt-get install curl
Downloader for X
Энэ програм нь тун дажгүй хэрэглэгчийн график интерфэйстэй, зарим үед терминалаас ч ажиллуулах боломжтой. Бусад програмуудыгаа бодвол илүү олон боломжуудаар хангагдсан гэж үзэж болно.
Суулгахдаа:
sudo apt-get install d4x
командаар суулгана.
Axel
Энэ програмын талаар Хасаагийн блог дээрээс дэлгэрэнгүй уншина уу.
Миний бичсэн зүйлс Ubuntu дээр Downlaod manager програмууд суулгаж ашиглах талаар та бүхэнд жаахан ч гэсэн хэрэгтэй мэдээлэл болсон гэж бодож байна. Дутуу юм ч их байгаа байх. Харин туршлагатай Linux-чид маань туршлагаасаа хуваалцаарай :)
Posted by Gansukh Batjargal at 1:47 AM 15 comments
Labels: Internet, SoftWares for Ubuntu
Sunday, August 9, 2009
Quotes by Music Lovers
Music before everything else ... Music again and forever! - Paul Verlaine
Music ... is something we are all touched by. No matter what culture we're from, everyone loves music. - Billy Joel
Life exists for the love of music or beautiful things. - G. K. Chesterton
The pleasure we feel in music springs from the obedience which is in it. - Henry David Thoreau
Music is an intellectual or sensual pleasure, according to the temperament of him who hears it. - Thomas de Quincey
Music is the only sensual pleasure without vice. - Samuel Johnson
Music produces a kind of pleasure which human nature cannot do without. - Confucius
My heart, which is so full to overflowing, has often been solaced and refreshed by music when sick and weary. - Martin Luther
Intelligence is not knowledge,
knowledge is not wisdom,
wisdom is not truth,
truth is not beauty,
beauty is not love,
love is not music.
Music is best. - Frank Zappa
There are two means of refuge from the misery of life, music and cats. - Albert Schweitzer
Music is the nearest at hand, the most orderly, the most delicate, and the most perfect, of all bodily pleasures; it is also the only one which is equally helpful to all the ages of man. - John Ruskin
Every kind of music is good, except the boring kind. - Gioacchino Rossini
Posted by Gansukh Batjargal at 5:59 PM 0 comments
Labels: Quotes
Tuesday, August 4, 2009
Download videos from YouTube in Ubuntu
Ubuntu дээр YouTube-ээс видео татаж авдаг youtube-dl гэж програм байдаг юм байна. Над шиг хөгжмөөр "хооллодог" Ubuntu-чид дуртай видеогоо татаж авчихаад тухтайхан үзээд сууж байж болох нь. Тэнд ганц дуу хөгжим гэлтгүй бүхий л төрлийн, өргөн хүрээг хамаарах видео байдаг л даа. За тэр олон үг яахав. Энэ програмыг суулгахдаа:
sudo apt-get install youtube-dl
командыг терминал дээрээ бичиж суулгана.
Харин видео татаж авахдаа:
youtube-dl http://www.youtube.com/video/url/
командаар Home Folder - тоо татаж авна.
Sponsors' Advertisement
Posted by Gansukh Batjargal at 3:27 AM 5 comments
Labels: SoftWares for Ubuntu, YouTube
Friday, July 31, 2009
Ubuntu - г G - Mobile - ийн интернэтэд холбох - 2
Саяхан өөрийн тооцоолуур дээрээ Ubuntu 9.04 суулгаад өөрийн өмнөх бичлэг дээрх (Мөнхбаатар ахын)аргаар G-mobile - аа холбох гэтэл ганц хоёр бэрхшээлтэй тулгарлаа.
Эхнийх нь гэвэл Ubuntu 8 дээр хамтдаа ирж байсан wvdial програм нь Ubuntu 9.04 дээр хамтдаа ирээгүй байв. Татаж аваад суулгах гэтэл өөр 4 package суулгахыг шаардаж байна. Татаж аваад л суулгачихна.
wvdial
libxplc
libwvstreams-base
libwvstreams-extras
libuniconf
Хэрэг болж магадгүй гээд package-уудыг 4shared.com дээр тавьчихлаа.
Харин
$ sudo modprobe usbserial vendor=0x05c6 product=0x3197
мөрийг терминал дээр бичихэд
FATAL: Module usbserial not found
гэсэн агуулгатай алдаа өгч байв.
Түүнээс гарахын тулд ерминал дээр gksu gedit /boot/grub/menu.lst гэж бичээд menu.lst файлыг нээнэ. Нээгээд дараах байдалтай мөрүүдийг олно.
title Ubuntu jaunty (development branch), kernel 2.6.28-11-generic custom
uuid 44daa138-39e6-450f-b840-76940da90d1f
kernel /vmlinuz-2.6.28-11-generic root=UUID=f2441938-7359-49d7-95eb-81f36a166757 ro quiet splash
initrd /initrd.img-2.6.28-11-generic
quiet
Одоо харин энд жаахан өөрчлөлийг оруулна.
title Ubuntu jaunty (development branch), kernel 2.6.28-11-generic custom
uuid 44daa138-39e6-450f-b840-76940da90d1f
kernel /vmlinuz-2.6.28-11-generic root=UUID=f2441938-7359-49d7-95eb-81f36a166757 ro quiet splash usbserial.vendor=0x05c6 usbserial.product=0x3197
initrd /initrd.img-2.6.28-11-generic
quiet
Харин usbserial.vendor=0x05c6 usbserial.product=0x3197 эдгээрийн ард байх тоонууд нь $lsusb мөрийг бичихэд гарч ирэх төхөөрөмжийн чинь тоонуудтай адилхан байх ёстой. Дараа нь Restart хийхэд бүх асуудал ОК.
Хамгийн сүүлд тохиолдсон асуудал гэвэл
sudo wvdial командаар холбогдох үед
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT#777
--> Waiting for carrier.
ATDT#777
NO CARRIER
--> No Carrier! Trying again.
--> Sending: ATDT#777
--> Waiting for carrier.
ATDT#777
гээд холбогдож өгөхгүй байв. Тэгэхээр нь USB modem - оо Windows дээрээ ажиллуулаад UIM картныхаа PIN кодыг хүчингүй болгосноор дээрхи асуудлаас ангижирсан. Одоо харин жинхэнэ Linux - чин болох л үлдлээ. ;)
Posted by Gansukh Batjargal at 9:59 PM 4 comments
Ubuntu - г G - Mobile - ийн интернэтэд холбох
Мөнхбаатар ахын IT-around блог дээр байсан бичлэгийг оруулчихлаа. Хэрэг болно хэмээн найдаж байна.
$ lsusb
========================================
Bus 005 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 002 Device 004: ID 05c6:3197 Qualcomm, Inc. CDMA Wireless Modem/Phone
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
========================================
Нэг иймэрхүү юм гарч ирнэ. Өөр ямар нэгэн юм USB-гээр холбосон бол өөр зүйл гарч ирнэ. Тэр нь гэхдээ хамаагүй.
$ sudo modprobe usbserial vendor=0x05c6 product=0x3197
Энд арын тэр үсэг тоонууд "Bus 002 Device 004: ID 05c6:3197 Qualcomm, Inc. CDMA Wireless Modem/Phone" байгаатай адилхан байх ёстой. Компьютэрээсээ хамаараад өөр өөр байна.
$ dmesg
Энэ хэсэг байхгүй байсан ч болох юм шиг байна лээ. Гэхдээ юмыг яаж мэдэх бичиж уншуулаад модемтойгоо холбогдсон эсэхээ шалгачих.
$ sudo apt-get install wvdial
Энэ нь wdvial гэсэн програмыг суулгаж байгаа гэсэн үг нь ойлгомжтой. Энэ коммандыг ажиллуулангуут sudo password гэж асууна. Энэ нь super user-ын буюу root-ын нууц үгийг асууж байгаа юм.
$ sudo wvdialconf /etc/wvdial.conf
========================================
Scanning your serial ports for a modem.
Modem Port Scan<*1>: S0 S1 S2 S3
WvModem<*1>: Cannot get information for serial port.
========================================
Гэсэн эхлэлтэй бичигнүүд байх ба сүүлчээсээ өмнөх мөрөнд:
========================================
Modem configuration written to /etc/wvdial.conf.
========================================
гэж байвал комманд амжилттай биелэгдсэн гэсэн үг.
$ sudo gedit /etc/wvdial.conf
Текст засварлагчаар засвар хийнэ гэсэн үг.
========================================
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Stupid Mode = yes
ISDN = 0
Modem Type = USB Modem
New PPPD = yes
Phone = #777
Modem = цаанаасаа тохируулагдчихсан байна. өөрчлөх хэрэггүй.
Username = таны хэрэглэгчийн нэр
Password = таны нууц үг
Baud = 460800
========================================
Stupid Mode = yes гэсэн мөр зарим тохиолдолд байхгүй байж магадгүй. Минийх дээр лав байгаагүй. Үүнийг copy-paste хийгээд нэмчихээрэй.
$ sudo wvdial
Энэ коммандаар интэрнэтэд холбогдож байх болно. Terminal дээр
========================================
WvDial<*1>: WvDial: Internet dialer version 1.56
WvModem<*1>: Cannot get information for serial port.
WvDial<*1>: Initializing modem.
WvDial<*1>: Sending: ATZ
WvDial Modem<*1>: ATZ
WvDial Modem<*1>: OK
WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: OK
WvDial<*1>: Modem initialized.
WvDial<*1>: Sending: ATDT#777
WvDial<*1>: Waiting for carrier.
WvDial Modem<*1>: ATDT#777
WvDial Modem<*1>: CONNECT
WvDial<*1>: Carrier detected. Starting PPP immediately.
WvDial: Starting pppd at Sun Feb 10 22:18:34 2008
WvDial: Pid of pppd: 7410
WvDial<*1>: Using interface ppp0
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: local IP address **.**.**.**
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: remote IP address **.**.**.**
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: primary DNS address ***.***.***.***
WvDial<*1>: pppd: P?[06][08]??[06][08]
WvDial<*1>: secondary DNS address ***.***.***.***
WvDial<*1>: pppd: P?[06][08]??[06][08]
========================================
гэсэн бичигнүүд гарч ирж байвал okay гэсэн үг. Ip болоод сүүийн хэдэн мөрөн дэхь текстүүд зөрж болно. Ингээд интэрнэтэд холбогдчихсон гэсэн үг. Энэ терминал-аа хаавал интэрнэт салгагдана гэсэн үг.
Дараа интернэтэд холбогдохдоо
$ sudo wvdial
гэсэн хамгийн сүүлийн коммандыг тэрминал дээр бичихэд л болно.
Posted by Gansukh Batjargal at 9:53 PM 2 comments
Thursday, July 9, 2009
Компьютерийн хөгжлийн түүхэн үе шатууд
Хэдий хүн төрөлхтний оюун ухааны хөгжил хүн анх үүсч байсан үетэй харьцуулахад асар өндөр түвшинд хүрсэн хэдий ч дээрхи шинжлэх ухаануудын томоохон, нарийн ширийн тооцоололуудыг хүн өөрийн оюун биеэр хийхэд алдаа гаргах магадлал их, удаан бодох, "залхуурах" гэх мэт хандлагууд ихээр ажиглагдах учир тэр их нүсэр тооцооллуудыг техникийн тусламжтай шийдэх гарцыг хайж эхэлсэн байна.
Компьютерийн үүсэл нь МЭӨ 2200 онд зохиогдсон нэмэх, хасах үйлдлийг хийдэг гүйцэтгэдэх механик тооцоолох Abacus төхөөрөмжөөс эхлэлтэй хэмээн үздэг. Энэ төхөөрөмжийн ажиллах боломж нь хязгаарлагдмал байсан учир эрдэмтэд түүнийг сайжруулах оролдлого хийсээр ирсэн байна. Эдгээр оролдлогын үр дүнд Шотландын математикч Жон Напьер(1555-1617) зааны ясаар тооцоолох төхөөрөмж зохиосон ба тэр төхөөрөмжийг "Напьерийн шоо" хэмээн нэрлэх болсон юм. Энэ төхөөрөмжийг логарифмийн хүснэгтийг гаргахад ашигладаг байсан ба үржүүлэх, хуваах үйлдлийг хялбархан хийж боломжтой байсан гэдэг. Энэ төхөөрөмж дээр үндэслэн Вильгелм Шеккард(1592-1635) “Напьерийн шоо”-н дээр үндэслэн “Тооцоолох цаг” нэртэй эргэдэг цлиндр гадаргуу зохиож түүний тусламжтай логарифмийг тоо болгох үйлдлийг нэмж хийсэн ажээ.
Тооцоолох төхөөрөмжүүдийн хөгжилд гарч байсан ахиц дэвшлүүд дотор эдгээр төхөөрөмжийг програмчлах санааг анх Лорд Байроны охин математикч Аугуста Ада(1815-1853) гаргасан бөгөөд тооны машиныг ажиллуулах загварыг өгсөн програм хийхийг санал болгож байжээ. Сонирхуулахад хожим нь түүний нэрээр нэрлэгдсэн ADA хэмээх прорамчлалын хэл зохиогдсон байдаг.
Харин орчин үеийн электрон комьпютерийн хөгжлийг ерөнхийд нь 5 үе шатад хувааж авч үздэг ба 1939 онд Айво мужийн дээд сургуулийн математикийн профессор Жон Атанов ба түүний туслах Клиффорд Берри нар хамтран вакуум дэнгүүдийг логик сүлжээ ашиглаж хийсэн эхний электрон компьютерийн загварыг бүтээсэн нь хамгийн эхний электрон тоон компьютер болсон байна. Эхний үеийн (1942 оноос 1959 он хүртэл) комьпютерүүд нь машины хэл дээр програмчлагдаж байсан ба үйлдвэрлэл вакуум дэнгүүдийг ашиглаж байсан нь болхи, хэт халдаг гэх мэт сул талууд ихтэй байсан тул алдаатай үйлдэл ихээр гаргадаг байжээ.
Бидний өдөр тутмын амьдралын хэрэглээний тоног төхөөрөмжийн үндэс болсон транзисторыг одоогоос жар гаран жилийн өмнө буюу 1947 онд Bell Labs-ийн ажилтнууд болох Жон Бардин, Уолтер Браттайн, Вильям Шокли нар бүтээснээр технологийн хөгжлийг шинэ түвшинд гаргасан юм. Энэ гурван хүнд 1956 онд Физикийн салбарын Нобелийн шагналыг олгосон байдаг. Транзистор нь унтраалга мэтээр ажилладаг боловч түүнд ямар нэгэн хөдөлгөөн байхгүй учиг компьютерийн овор хэмжээ багасч, нэг үйлдлийг микро секундэд гүйцэтгэх, олон мянган тэмдэгтийг хадгалах гэх боломжууд нэмэгджээ. Эхний транзисторт компьютеийг 1954 онд Bell Labs-д 800 транзистор хэрэглэсэн TRADIC компьютерийг бүтээснээр компьютерийн хөгжлийн шинэ үеийг авчирсан юм. Энэ технологи гарснаар компьютер үйлдвэрлэгчид илүү багтаамжтай, хурдан, найдвартай, халалт багатай, овор хэмжээ багатайгаар компьютерийг үйлдвэрлэх
болжээ. Харин програмчлал нь машины хэл болон Симболик хэл дээр бичигдэж байсан байна.
1965 оноос 1970 он хүртэл компьютерүүд жижиг хэсгүүд бүхий интетграл хэлхээнээс бүтэх болсон ба энд компьютерийн бүхий л хэсгүүд оролт, гаралт, хадгалах, боловсруулах хүчин чадал нэмэгдсэн бөгөөд оролт гаралтын төхөөрөмжүүд нь телефоны болон бусад төхөөрөмжүүдээр дамжуулан хоорондоо холбогдох болсон. Хадгалах боломж нь олон сая тэмдэгтүүд хадгалах боломжтой болсон, процессорын хурд нано секундээр хэмжигдах болсон, програмын хэд хэдэн инструкцуудын зэрэг гүйцэтгэх болсон гэх мэт боломжууд нэмэгдсэн. Энэ үед програмчид өндөр түвшиний хэлүүд дээр объект хандалтат програмчлал дээр ажиллах болжээ.
1970 оноос хойш гарсан томоохон дэвшил бол бие даасан хадгалах төхөөрөмж гаргасан явдал ба энэ нь цахиураар бүрхэгдсэн төхөөрөмж байв. Мөн лазер санах ойг НАСА-д бүтээсэн байна. Ингэснээр лазер санах ой нь 50 тэрбум гаруй тэмдэгтийг хадгалах болсон. Энэ үед Buroughs, IBM-ийхэн өөрсдийн 5000 болон 370 төрлийн комьпютерүүддээ виртуал хадгалах зарчмыг танилцуулжээ. Энэ үед CD, CDROM гарсан байна. Мөн 1000 хуудас бүхий текст багтаах боломжтой болсноор компьютерийн програм хангамжийг хөгжүүлэхэд томоохон хувь нэмэр болсон байна.
Харин өнөө үеийн компьютерүүд нь техникийн тал дээр улам бүр хэмжээ нь багасч, хүчин чадал нь өмнөх үетэй харьцуулахад асар хурдацтай өсч байгаа байгаа билээ. Java, Microsoft .NET гэх мэт програмчлах хүчирхэг технологууд гарсанаар програм хангамжийг хурдан шуурхай, хямд зардлаар бүтээх боломжтой болж байгаа билээ. Хурдацтай хөгжиж буй мэдээллийн технологийн салбарын мэргэжилтнүүд, энэ чиглэлээр суралцаж байгаа оюутнууд бидэнд шинээр гарч буй технологийг эзэмших хүсэл эрмэлзэлтэй, эзэмших чадвартай болж өөрсдийгөө төлөвшүүлэх шаардлага өндрөөр тавигдах болсон учир шилдэг мэргэжилтнүүд болох эсэх нь гагцхүү бидний сэтгэл, хичээл зүтгэлээс л хамаарах буй за.
Posted by Gansukh Batjargal at 11:40 PM 2 comments
Labels: Computer history
Tuesday, March 31, 2009
Quotes about Laziness
Ларошфуко:
Залхуурал гэдэг хүмүүс бидний хүсэл таашаалын дотроос хамгийн мунхаг нь юм.
Бидэнд учруулсан хор хохирол нь нүдэнд үзэгдэхгүй хэдий ч түүн шиг бэлэн дүрэлзэж байдаг, түүн шиг хөнөөлтэй хүслэн алга аа.
Залхуурлын амар тайван жаргалыг эдэлж байхдаа бид хамгийн хатуу төлөвлөсөн ажлаа ч мартаж орхидог.
Залхуу хойрго арчаагүй хүмүүс нь ямагт юунд ч хэрэггүй хүмүүс болдог.
Ухарч няцан бэрхшээлээс айж шантран бэлтгэл дасгалыг "Дараа, эвтэй үед" хийхээр хойшлуулж байдаг хүн хэзээ ч амжилт олохгүй.
...Амжилт олоход нь саад бологч нь залхуу байдал мөн.
...Хамгийн ноцтой хэцүү нь залхуу зан бөгөөд залхууг зөвхөн зоригийн хүч чармайлтаар л даван туулж болно.
...Зориг муутай хүмүүст энэ нь онцгой ашигтай боловч, харамсалтай нь тэд зоригийн хүч чадал гаргаж чаддаггүй гэдгийг хэлбэл зохино.
Залхуурал бол эцэстээ хүнийг өвчтэй, амьдрал дорой, хоцрогдмол, уй гунигтай болгож, гэмшил мухардалд оруулдаг.
Юу ч хийхгүй гэдэг чинь залхуугаас л болдог хэрэг.
Залхуурал гэж хэцүү өвчин бий. Энэ өвчин бол төрөлхийн зүйл биш, харин булингартай сэтгэл, хар амиа бодсон бэртэгчин үзэл юм.
...Юуны өмнө залхуурал гэдэг өвчнөөс салах хэрэгтэй.
Сэтгэлээр унах бол залхуугийн садан мөн.
Н. Г. Чернийшевчкий:
Хийх юмгүй гиюүрэн суух нь бидний амь наснаас унтах нойр, ужиг өвчин хоёроос илүү хороодог.
Бие хүний өөртөө итгэх чанар нь хангалттай, хүчтэй атал залхуу учир бэлтэл дасгал хойш татагдан, зайлшгүй хэрэгтцээтэй ажил хэргийн оронд хоосон ярьж, цагийг ямар ч үр дүнгүй өнгөрөөдөг байна явдал бас бий.
Залхуугийн гайгаар хүн өөртэйгээ ажиллах ажлаа эхлэх буюу үргэлжлүүлэхээ хойшлуулж, бас янз бүрийн шалтаг шалтгаанаар биеэ цааргалан, өөрөө өөрийгөө хуурч байдаг. Ийм тохиолдолд өөрийгөө албаддаг байх хэрэгтэй. Ингэж дасгалаа таслах явдал дахин давтагдвал өөрийгөө шийтгэж, дуртай болон эрхэмлэж явдаг юмаа хасаж, орхих хэрэгтэй. Өөрийгөө хүмүүжүүлэх ажилд том ахиц, мэдэгдэхүйц амжилт гарсан үед өөрийгөө ямар нэгэн зүйлээр урамшуулах хэрэгтэй.
Өөрийгөө хүмүүжүүлэх ажлыг үлэмж идэвхжүүлдэг, нэлээд үр нөлөөтэй хэрэгсэл бол хамт олон буюу хүндэтгэж явдаг ойр дотны хүнийхээ өмнө үүрэг авах явдал мөн.
Posted by Gansukh Batjargal at 9:27 AM 7 comments
Labels: Quotes
Wednesday, March 11, 2009
PHP
PHP нь Script маягийн хэл ба ялангуяа HTML кодчилолд суурилж вэб хөгжүүлэлтэнд хэрэглэгддэг хэл юм. PHP-ийн ихэвчлэн нь вэб сервер дээр суурилагдан ажилладаг бөгөөд сервер дээр хөрвүүлэгдсэний дараа РНР кодоос HTML хуудас бүтээгдэн бидэнд харагддаг. РНР-ийн гайхамшигт чанар бол бүхий л вэб серверүүд ба бараг бүх л үйлдлий систем, платформ дээр ажилладаг. Дэлхий дээр РНР-г ашиглан хийгдсэн 20 сая вэб сайт, РНР-г дэмждэг нэг сая вэб сервер ажиллаж байна.
PHP гэдэг нь Personal Home Page гэсэн үгийн товчлол бөгөөд анх 1994 онд Common Gateway Interface binaries бүтээхийн тулд С хэл дээр Rasmus Lerdorf бичсэнээр түүх нь эхэлдэг. Тэрээр анх Perl хэлний script-д багахан өөрчлөлт оруулан өөрийн Personal HomeРage бүтээсэн байна. Энэхүү багажыг анх нь түүний вэб хуудсанд хичнээн хүн зочилж байгааг тоолон мэдээлэх зорилгоор хэрэглэжээ. Тэрээр эдгээр бинар кодуудаа PHP/FI бүтээх Form Interpreter хэмээн нэрлэж, илүү олон боломжуудаар хангаж өгөх болсон ба Өгөгдлийн сантай харьцах, динамик вэбийг бүтээх боломжтой болсон байна. Ингээд 1995 оны 6 сарын 8-д Lerdorf РНР-ийн release хувилбарыг олон нийтэд дэлгэн тависанаар РНР-ийн хөгжил нь эрчээ авчээ. Энэ release хувилбар нь РНР 2 нэртэй байсан ба өнөөгий РНР-ийг үндсэн функцуудийг агуулж байжээ. Түүнд Perl-тэй адил төстэй хувьсагчууд, form handling ба HTML-тэй хамтран хэрэглэгдэх боломж байв. Бичиглэл(syntax) нь Perl-тэй талууд нэлээд байсан ч түүнийг бодвол хязгаарлагдмал, энгийн, илүү болхи байсан юм.
Израйлын Technion IIT компаний хөгжүүлэгчид болох Zeev Suraski, Andi Gutmars хоёр РНР-г сул талуудыг засаж янзлан 1997 онд РНР 3 -ийг гаргасан ба нэрээ өөрчлөн PHP: Hypertext Preprocessor болов. Хөгжүүлэлтийн баг нь албан ёсоор PHP/FI 2 -ийн бета туршилтын хувилбарыг 1997 оны 11 сарын 2-нд гаргажээ. Дараа нь РНР 3-ийн нийтийн тест эхэлсэн бөгөөд жинхэнэ хувилбар нь 1998 оны 6-р сард гарсан. Suraski, Gutman нар
РНР-ийн цөмийг шинээр бүтээн Zend Engine-ийг 1999 онд бүтээсэн бөгөөд Израйлын Ramat Gan хотод Zend Technologies-г байгуулсан ажээ.
2000 он 5-р сарын 22-нд РНР 4, Zend Engine 1.0 хамт гарсанаар РНР нэлээдгүй хүчирхэгжсэн ба 2004 оны 6 сарын 13-нд мөн РНР 5, Zend Engine 2 хамтдаа гарчээ. РНР 5 дээр Объект Хандалтат Програмчлалын Технологийг оруулсанаараа нэлээд онцлогтой болж чаджээ. Хамгийн сүүлчийн сайжруулалтыг РНР-ийн хуучин хувилбар болох РНР 4 дээрээ хийсэн бөгөөд 2008 онд РНР 4.4.9 хувилбарыг гаргасан юм. Үүнээс цааш РНР 4 дээр хамгаалалттай холбоотой сайжруулалт хийгдэхгүй гэнэ.
2008 онд гаргасан РНР 5 хувилбар нь зөвхөн хөгжүүлэгдэж байгаа гүйцэд биш тогтвортой хувилбар(Stable version) юм.
Мэдээллийн эх сурвалж: WikiPedia, the free encyclopedia
Posted by Gansukh Batjargal at 6:39 AM 7 comments
Labels: About PHP, Programming Languages, Web Programming
Thursday, February 19, 2009
Багцын хандалтат классууд
Java хэлийг судалж байгаа найзууддаа Объект Хандалтат аргачлалын онцлогоос тусгасан нэгэн жишээ source-ийг танилцуулъя. Хэдийгээр энэ хэдэн багцын хандалтат коднууд жижигхэн харагдаж байгаа хэдий ч Объект хандалтат технологид суралцахад үндсэн ойлголтыг өгөх болов уу хэмээн бодлоо.
package my.java;Main класс-д AskName классын Ask() функцийг дуудахад Hello! What's your name? тэмдэгт мөрийг хэвлээд, Answer() функцээр гараас тэмдэгт мөрийг авч тэр утгыг буцаана.
import java.io.*;
public class AskName {
public void Ask() {
System.out.printf("Hello! ");
System.out.printf("What's your name?\n");
}
public String Answer() throws IOException {
InputStreamReader inStream = new
InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inStream);
String name = br.readLine();
return name;
}
}
package my.java;HelloClass классын PrintHello() функц Hello тэмдэгт мөр утгыг буцаана.
public class HelloClass {
public String PrintHello(){
return "Hello! ";
}
}
package my.java;Дээрхи классууд my/java директорт хадгалагдахаа мартаж үл болно. Хэрвээ зөв ажиллуулбал дараах үр дүнг үзүүлнэ.
import java.io.*;
public class Main{
public static void main(String[]args) throws IOException{
AskName hi = new AskName();
HelloClass he = new HelloClass();
hi.Ask();
System.out.println(he.PrintHello()+hi.Answer());
}
}
Posted by Gansukh Batjargal at 7:56 AM 10 comments
Labels: Java - OOP, Learning Java
Sunday, February 8, 2009
Java хэлэнд гараас өгөгдөл унших
Java хэлний консол програмд гараас өгөгдөл оруулах хэд хэдэн арга байдаг. Гараас өгөгдөл авахад BufferedReader, InputStreamReader, System гэх мэт классуудыг ашигладаг.
import java.util.Scanner;
public class Stdin{
public static void main(String[]args){
String name;
Scanner in = new Scanner(System.in);
System.out.println("Sain uu! Tanii neriig hen gedeg ve?");
name = in.next();
System.out.println(name+"! "+"Ta heden nastai ve");
int age = in.nextInt();
System.out.println(name+"! Ta "+age+" nastai. :)");
}
}
import java.io.*;
public class Stdin2{
public static void main(String[] args){
try {
BufferedReader br = new BufferedReader(
new InputStreamReader( System.in ) );
System.out.println("a toog oruul!");
String a = br.readLine();
//Гараас өгөгдөл авах
System.out.println("b toog oruul!");
String b = br.readLine();
int s = Integer.parseInt(a)+Integer.parseInt(b);
//Гараас авсан өгөгдлөө Бүхэл тоонд хөрвүүлж байна.
System.out.println(a+" + "+b+" = "+s+"\nOK?");
}
catch(IOException e){
e.printStackTrace();
}
}
}
br объектыг үүсгэсний дараа түүний public String readLine( ) функцийг дуудвал тэр нь бидний бичсэн тэмдэгт мөрийг буцаана. Тиймээс тоон дээр үйлдэл хийх гэж байгаа учир тэмдэгт мөрөө бүхэл тоон төрөлд хөрвүүлж байна.
Posted by Gansukh Batjargal at 10:17 AM 15 comments
Labels: Learning Java
Sunday, February 1, 2009
Eclipse - тэй ажиллах
Төсөл үүсгэх
Класс үүсгэх
Өөрийн төслөө эхлүүлсэн бол програмаа бичиж эхэлцгээе. Програмаа бичиж эхлэхдээ өөрийн хүссэн Package дээр хулганы заагчийг аваачин баруун товчийг дарахад гарч ирэх сонголтуудаас New-Class cонголтыг хийхэд дараах жижиг цонх гарч ирэх ба Name хэсэгт классын нэрийг бичиж оруулна. Классын нэрэнд хоосон зай, зарим тэмдэгтүүдийг зөвшөөрдөггүй болохыг анхаараарай.
Сонголтыг хийсний дараа HelloWorld.java файл үүссэнийг харж байна. Харин одоо HelloWorld.java дээрээ дараах програмыг бичиж ажиллуулцгаая.
public class HelloWorld {
public static void main(String[]args){
System.out.println("Hello World!");
}
}
package Swing;Энэ бичсэн кодоо ажиллуулахад дараах байдалтай прорам ажиллана.
import javax.swing.*;
public class HelloWorldSwing {
public static void main( String[] args ) {
JFrame frame = new JFrame( "Hello!" );
JLabel label = new JLabel("Hello! Friends!", JLabel.CENTER );
frame.getContentPane( ).add( label );
frame.setSize( 300, 200 );
frame.setVisible( true );
}
}
Кодоо ажиллуулж чадсанд баяр хүргэе!
GOOD LUCK!
Posted by Gansukh Batjargal at 7:58 AM 1 comments
Labels: Learning Java
Friday, January 30, 2009
Онч мэргэн үгс 2
Өдөр бүр ядаж нэг дуу сонсож, уран зураг үзэх юм уу мэргэн үг ганцыг ч болов уншиж байх хэрэгтэй.
Онч үгсийг хэрэглэвэл үг цөөн, утга агуу болно.
Бидний бодол санаа амьралыг хэрхэн төсөөлж байна, сайн, муу, баяр гутранги, ялан давамгайлсан эсвэл дуулгавартай юу гэдгээс л хамаардаг.
Эрдэм чадлыг хичээн эс сурваас хэрэглэх цаг дор гэмшмүй
Эрүүл биеэ хичээн эс сувилбаас өвдсөн цаг дор гэмшмүй
Хийж чаддаг зүйлээ байнга хийвэл хэзээ ч өсөхгүй. Харин хийж чаддаггүй зүйлсээ хийж байж та өснө.
Дундаж хүн цагийг хэрхэн өнгөрөөхөө л бодож явдаг бол авьяастай хүн түүнийг ашиглахыг чармайдаг.
Өрөвдөж байгаа нь биш тусалж байгаа нь л нөхөр
Гай зовлон амсахгүй гэвэл ухаантныг түш,
Лай болдог хар санаатнаас хол яв.
Ухаантан мэргэд хор өгсөн ч хүртэж болгоо,
Угаас муу хүн эм өгсөн ч бүү хуурт.
Posted by Gansukh Batjargal at 9:20 PM 5 comments
Labels: Quotes
Sunday, January 18, 2009
Java хөгжүүлэгчид
Жава дээр програм хєгжvvлэхэд хэрэглэгддэг олон програмууд байдаг ба тэдгээрийн сайтын линкийг татаж авах линктэй нь тавилаа.
- Borland JBuilder
- JCreator Татаж авах
- Oracle JDeveloper
Жава дээр бичихэд дээрхи програмуудын аль нэгнээс гадна JDK, JRE - суулгах хэрэгтэй.
JRE(Java Runtime Environment) нь жава хэл дээр бичигдсэн програмуудыг ажиллуулах орчныг бүрдүүлдэг програм юм.
Posted by Gansukh Batjargal at 11:20 PM 7 comments
Labels: About Java
Wednesday, January 14, 2009
QuickSort
Бидний урьд өмнө хэрэглэж байсан бөмбөлөгөн эрэмбэлэлт, оруулалттай эрэмбэлэлт, сонголттой эрэмбэлэлтийн аргууд нь олон тооны элемэнтүүдийн эрэмбэлэх үед хугацаа нэлээд шаарддаг байсан. Харин эрэмбэлэлтийн маш үр өгөөжтэй нэгэн аргыг 1962 онд Ч. Хоар санал болгосон. Энэ аргыг QuickSort буюу хурдан эрэмбэлэлтийн арга хэмээн нэрлэдэг.
Энэ аргын гол санаа нь эхлээд анхны эрэмбэлэлт хийгдээгүй массив дотроос нэгэн Х элемэнтийг сонгон авч түүний зүүн талд түүнээс бага буюу тэнцүү элементүүд, баруун талд түүнээс олон элемэн байрлаж байхаар сэлгэн байрлуулна. Энэ алхмын дараа Х элемэнт нь өөрийн байраа олсон байх ба түүний 2 талд эрэмбэлэгдээгүй 2 хэсэг үүссэн байх бөгөөд энэ хоёр хэсэг дээрээ дахин түрүүчийн алхмыг хийх гэх мэтээр бүгд эрэмбэлэгдэх хүртэл үргэлжилнэ.
Харин одоо бүхэл тоон массивын элемэнтүүдийг эрэмбэлэх програмыг рекурс ашиглан бичье.
#include <stdio.h>
int a[100];
int qsort(int m,int l){
int i=m;
int j=l;
int x=a[(m+l)/2];
do
{
while(a[i]<x) i++;
while(a[j]>x) j--;
if(i<=j){
int w=a[i];
a[i]=a[j];
a[j]=w;
i++;
j--;
}
}
while(i<=j);
if (m<j) qsort(m,j);
if (i<l) qsort(i,l);
}
main(){
int n,e;
scanf("%d",&n);
for(e=0; e<n; e++)
scanf("%d",&a[e]);
qsort(0,n-1);
for(e=0; e<n; e++)
printf("%d ",a[e]);
return 0;
}
Харин QuickSort-ыг C/C++ хэлэнд бичиглэл маш багатайгаар алдаа бараг гаргахгүйгээр хэрэглэж боломж байдагийг та бүхэн мэдэх үү?
C/C++ хэлэнд stdlib.h толгой файлд qsort хэмээх функцийг цаанаас нь тодорхойлж өгсөн байдаг ба түүнийг хэрэглэхэд маш хялбар. Энэ функцыг ашиглан бүхэл тоон массивыг эрэмбэлэх жишээг доор үзүүллээ.
#include <stdio.h>
#include <stdlib.h>
int comp(const void*a,const void*b){
int *x=(int*)a;
int *y=(int*)b;
return *x-*y;
}
int main(){
int n;
int a[100];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),comp);
for(int i=0; i<n; i++)
printf("%d ",a[i]);
return 0;
}
Posted by Gansukh Batjargal at 12:34 AM 4 comments
Labels: C/C++ programming
Monday, January 12, 2009
Java
Хэдэн сарын өмнө ComputerTimes сэтгүүл дээр гарсан Жавагийн талаар гарсан нийтлэлийг Объект Хандалтат Програмчлал хамтдаа үзэх гэж байгаа найзууддаа зориулаад энэ нийтлэлийн ач холбогдлыг бодон нийтэллээ.
Java бол Sun Microsystems корпорацийн бүтээсэн програмчлалын хэл бөгөөд хамгийн анх 1995 онд түүнийг олон нийтэд танилцуулагджээ. Анх хийгдэхдээ Sun-ийн Java платформ дээр ажиллахаар байсан юм. Жава-г бүтээхдээ С ба С++ хэлийн онцлог, бичиглэлийг хүчтэй тусган авчээ. Гэхдээ хамгийн гол нь обьект хандалтат загвар дээр түлхүү анхаарсан ба доод түвшний програмчлалын боломжийг бага оруулсан байна.
Java програм нь бит биш байт коднуудад хөрвүүлэгдэн ажилладаг бөгөөд энэхүү байт коднуудыг зөвхөн Java Virtual Machine (JVM) хэмээх систем ажиллуулдаг юм. Харин JVM нь платформ болгонд зориулагдан тусдаа хийгдсэн байдаг тул таны бичсэн програм, код аль ч үйлдлийн систем, платформ дээр ажиллах болж байгаа нь түүний хамгийн өвөрмөц онцлог юм.
Албан ёсоор Java 1.0 хэл нь 1995 онд бүтээгдсэн бий болсон бөгөөд хамгийн гайхамшигтай уриа болох Write Once, Run Anywhere (Нэг удаа бич, Хаа сайгүй ашигла) хэмээх уриаг гаргасан юм. Энэ нь жава кодыг аль ч платформ дээр ажиллуулах боломжийг олгох зохион байгуулалттай байлаа.
Жавагийн хамгаалалтын түвшинг хэрэглэгч хүн хүссэнээрээ өөрчлөх боломжтой ба зарим тохиолдолд сүлжээ болоод файл руу хандах эрхийг нь цаанаас нь хаачихсан нь хүмүүст ихээр таалагдсан юм. Ийм болохоор ихэнхи броузерууд Java Applet-г ажиллуулах боломжийг өөртөө нэмсэн байна. Яагаад гэвэл Java Applet нь хэрэглэгч хүнд ямар ч аюул учруулахгүй байсан байна. Өөрөөр хэлбэл програмист хүн Java Applet-ийг ашиглан хэрэглэгчдийн компьютерт халдах боломжийг тун сайн хаажээ.
Ер нь бол Жава маш богино хугацаанд олон нийтийг олон нийтийг хамарч эхэлсэн ба түүний хамгийн гол уриа болох бүх платформ дээр ажиллах гэсэн нь хамгийн ихээр таалагдсан юм. Java-гийн гол хувилбар болох Java 2.0 гарснаас хойш түүний хүчин чадал, нэр хүнд огцом нэмэгджээ. Энэ үеэс тусгай платформуудад зориулагдсан хувилбарууд гарах болсон нь програм хөгжүүлэгчдэд бүр их эрх чөлөөг мэдрүүлсэн юм. Жишээлбэл J2EE хэмээх багц нь том корпораци, байгууллагын түвшинд програм бичих боломжийг олгож байсан бол J2ME нь жижиг электрон төхөөрөмжүүд, тэр дундаа гар утсанд зориулагдсан програм бичих, харин J2SE нь жирийн компьютер дээр ажиллах програм бичих зориулалттай байлаа. 2006 оны үеэс эхлэн Жава програмчлалын систем нь Java EE, Java ME, Java Se гэж 3 хуваагдах болсон юм.
1997 онд Sun Microsystems нь ISO/IEC, JTC1 гэх мэтийн стандартуудын болзлыг хангав. Сүүлд нь Ecma байгууллага нь Java-гийн стандартуудыг тогтоосон ба энэ бүхэн түүний хөгжилд ихээхэн хувь нэмэр оруулсан нь гарцаагүй. Энэ үед Sun корпораци нь Java-гийхаа бүхий л код, багаж хэрэгслүүдийг нийтэд үнэ төлбөргүйгээр дэлгэв. Энэ нь Microsoft-ыхны хувьд байж болшгүй үзэгдэл байсан бол Sun нь алс ирээдүйг олж харжээ. Гэхдээ Sun нь ашиг олж байсан бөгөөд жишээ нь Java Enterprise системдээ зориулсан тусгай лиценз бүхий бүтээгдэхүүнийг борлуулах замаар орлогоо бүрдүүлж байв.
2006 оны 11 сарын 13нд Sun нь Java-гийхаа ихэнх хэсгийг GNU лицензтэй болгож, хэн дуртай нь татаж авч ашиглах боломжтой болгов. Харин 2007 оны 5 сарын 8нд Java-гийн нууц байсан гол гол файлууд, цөм хэсгийг хийж дуусгасан ба тэдгээрийгээ нээлттэй эхтэй болгосон байна. Ингэснээр Жава нь даянд дэлхийн програм хөгжүүлэгчдийн өмч болсон байна.
Үндсэн зорилго
Java-г анх хийж эхлэхээс 5 үндсэн дүрмийг баримталж ирсэн байна. Үүнд:
1. Жава бол обьект хандалтад програмчлалын арга зүйтэй.
2. Жава бол ижил програмыг хэд хэдэн үйлдлийн систем дээр ажиллуулахыг зөвшөөрнө.
3. Жава бол компьютрийн сүлжээг дээд зэргээр ашиглахаас гадна бүхий л боломжуудыг хангаж өгнө.
4. Жава бол алс зайд байгаа кодыг нууцлал хамгаалалттайгаар ажиллуулах боломжтой байна.
5. Жава бол бусад объект хандатат програмчлалын хэлүүдийн бүхий л сайн талуудыг өөртөө агуулна.
Үйлдлийн системээс хамаарахгүй ажиллах нь
Зөвхөн энэ чанараас болж өдөр тутам олон зуун мянган програм хөгжүүлэгчид Жава руу урваж байгаа нь нэгэнтээ ил болжээ. Өөрөөр хэлбэл таны бичсэн програм бүхий л үйлдлийн систем, платформ, тоног төхөөрөмж дээр ажиллах боломжтой гэдэг бол үнэхээр гайхамшиг.
Жава дээр бичсэн код нь ихэнх Жаватай нийцтэй үйлдлийн систем, тоног төхөөрөмж дээр ажиллах боломжтой юм. Програмаа нэг удаа бичээд хөрвүүлээд л авсан бол түүнийгээ хаа сайгүй ажиллуул гэсэн үг шүү дээ.
Энэ хүү гайхамшигт боломжийг хэрхэн хангадаг вэ?
Java compiler буюу Жава хөрвүүлэгч нь Жава дээр бичигдсан кодыг бүтэн машины хэл болох битэд хөрвүүлдэггүй юм байна. Харин хагас боловсруулсан бүтээгдэхүүн гэдэг шиг хагас хөрвүүлж Java Bytecode гаргаж авдаг ажээ. Энэ кодыг зөвхөн Java Virtual Machine ажиллуулж дөнгөдөг юм. Тэгэхээр JVM нь ихээхэн чухал үүрэгтэй юм байна. JVM - ийг тухайн үйлдлийн системд зориулан тусгайлан бичсэн байдаг. Тэгэхээр энэхүү VM маань эцсийн бүтээгдэхүүн болох машин дээр ажиллах боломжтой бит кодыг үүсгэдэг байна. Бас VM нь тоног төхөөрөмжийн график хэсэг, санах ой, сүлжээ гэх мэт амин чухал зүйлсийг удирдана. Ихэнх тохиолдолд Java Bytecode нь саадгүй ажилладаг боловч зарим хэт онцгой машин дээр JIT хэмээх хөрвүүлэгч шаардлагатай болдог. Тэгэхээр таны бичсэн код тань JVM хэмээх системээр дамжиж байж хэрэгждэгийг ойлгож авсан байх. Тэгэхээр програмын ажиллагаа яалтчгүй удаан байхаас аргагүй болж байгаа юм. Яагаад гэвэл C/C++ дээр бичсэн код нь шууд машины бит кодонд хөрвүүлэгдсэн байдаг тул ажиллагааны хувьд маш хурдан байдаг бол Жавагийн эх код нь заавал ЖаваВиртуалМашинаар дамжина. Энэ үүднээс удаан ажилладаг гэсэн шүүмжлэлийг байнга сонсдог байсан бөгөөд энэ нь түүний гол сул тал байлаа. Гэхдээ сүүлийн үеийн JVM нь төрөл бүрийн технологи, аргуудыг хэрэглэснээр дутахгүй хурдан ажилладаг болоод байна. Гэхдээ орчин үеийн тоног төхөөрөмжүүд тооцоолох чадвар нэмэгдсэнээр энэхүү дутагдал онцын мэдэгдэхээ болиод байгаа юм.
Жишээ нь хурдыг нэмэгдүүлэх нэг арга бол Just-in-Time(JIT) буюу Яг цагт гэсэн хөрвүүлэлтийн арга юм. Энэ бол програм яг ажиллах үед нь ЖаваБайткодыг машины код руу хөрвүүлнэ гэсэн үг. Ингэснээр програм илүү хурдан ажиллах бололцоотой болдог. Гэвч энэ арга нь Overhead буюу хэт ачаалалд орох эрсдэлтэй. Иймээс сүүлийн үеийн VM-ууд динамик маягийн холимог аргыг хэрэглэдэг болоод байна. Энэхүү динамик арга нь програмын амин чухал хэсгүүдийг хэрхэн хөрвүүлэхээ сайтар тооцоолж чаддаг юм. Ингэснээр эцсийн дүндээ таны бичсэн код C/C++ дээр бичсэнээс дутахгүй хурдан ажиллаж чадах билээ.
Хурдыг нэмэгдүүлэх өөр нэг арга бол статик хөрвүүлэгч ашиглах явдал юм. Энэ хөрвүүлэгч нь шулуухан машины эх код руу хөрвүүлчихдэг. Өөрөөр хэлбэл Жавагийн сонгодог байткод үүсгэхгүй гэсэн үг юм. Ийм статик хөрвүүлэгчийн жишээ гэвэл GCJ юм. Гэвч ингэх юм бол өвөрмөц онцлог огтхон ч үр дүнгүй болчихож байгаа юм. Ийм арга хэрэглэх нь заавал Жава дээр бичих огтхон ч шаардлагагүй болж байгаа бөгөөд C/C++ дээр бичиж байгаагаас огтхон ч ялгаагүй болж байна.
Хөгжүүлэлт
SunMicroSystems нь JavaStandardEdition хэмээх платформын лицензийг албан ёсоор эзэмшдэг юм байна. Энэ платформ нь MicrosoftWindows, Linux, Solaris гэсэн үйлдлийн системүүд дээр ажиллана. Бусад платформуудад зориулсан Жавагийн орчныг бүрдүүлэгч системүүд бас бий.
Жава брэнд нь шулуун дардан замаар явсангүй. Мэдээж Microsoft-той зүйл бүрээр тэрсэлдэж байсан нь ойлгомжтой. Тухайлбал Java нь Microsoft-ийн үйлдлийн систем дээр ажилладаг болохын тулд ихээхэн саадыг давсан юм. Учир нь Microsoft нь Жава ажиллахад шаардлагатай RMI болон JNI интерфэйсүүдийг хаачихсан юм. Мэдээр Sun-ыхан шүүхэд зарга мэдүүлсэн бөгөөд 1997 онд 20 сая долларыг төлүүлж чаджээ. Гэсэн ч Windows нь анх ирэхдээ Жавагүй ирдгийг бид бүгд мэднэ. Бас сүүлийн үеийн InternerExplorer нь JavaApplet-ийг дэмждэггүй шүү дээ. Заавал 3дагч нэмэлт Plug-In суулгах шаардлагатай болдог. Гэхдээ та дуртай үедээ интернэтээс RunTime орчныг бий болгогч дэд системүүдийг татан авч болно.
Платформ хамаарахгүй ажилладаг чанар нь Enterprise маягийн томоохон програм хөгжүүлэгчдэд онцгой таалагдсан юм. Яагаад гэвэл ийм чиглэлийн лицензтэй програм хангамжууд асар өндөр үнэтэй байдаг шүү дээ. Түүнчлэн Enterprise чиглэлийн системүүд нь олон платформ болоод янз бүрийн орчинд ажиллах дэд системүүдээс бүрдэх шаардлагатай байдаг юм. Тэгвэл Жавад энэ бүхэн бүгд бий. Сервэр талдаа гэвэл Жишээ нь: servlet хэмээх вэб серверийг нэрлэж болох юм. Enterprise орчинд JavaBeans байж болно. Жава нь нээлттэй эхтэй болохоор дэлхийн шилдэг систем хөгжүүлэгчид өөр өөрсдийн тусгай системүүдийг бүтээж байгаа билээ. Хамгийн сүүлд GlassFish хэмээх төсөл нэн амжилттай хэрэгжиж байгаа бөгөөд энэ нь JavaEE орчинд үнэхээр тансаг зүйл хийж болохоор хэмжээнд ирээд байна.
Санах ойг автоматаар удирдах нь
Жавагийн үнэхээр өвөрмөц онцогийн нэг бол санах ойг автоматаар удирдах аргачлал юм. Энэ боломжийн хүчээр програмчин хүн гар аргаар санах ойг удирдах нүсэр ажлаас чөлөөлөгдөж байгаа билээ. Бусад хэлнүүд дээр объектийг үүсгэхийн тулд юуны өмнө хэрэгцээт санах ойг бий болгож авах, обьектоо хэрэглэж дууссаны дараа суллах гэх мэтийн ажиллагааг хийдэг шүү дээ. Хэрэв програмчин хүн объектоо суллаж, устгахаа мартсан бол санах ойн тэр хэсгийг ашигласан тэр чигээрээ үлдчихдэг. Програм гацах, алдаа гарах мэтэд санах ойг иймэрхүү байдлаар эзлээд үлдчих тохиолдол зөндөө гардаг. Бас санах ойг суллах гэж оролдох үедээ алдаа гаргах, дахин дахин оролдох гэх мэтэд гацаах ноцтой алдаанууд гарах нь түгээмэл байдаг.
Харийн Жава дээр бол үүнийг сайхан шийдэж өгчээ. Автомат хог цэвэрлэгч гэсэн систем байдаг бий. Програмчин хүн объект үүсгэлээ гэхэд түүнийг зааж байдаг ямар нэгэн хувьсагч, эзэмшигч заавал үүсдэг. Энэ нь уг объектыг удирдах, ашиглах үүрэгтэй. Тэгвэл объектыг устгалаа гэхэд зөвхөн энэ объектын заагч хувьсагчийг устгачихдаг. Энэ үед заагчгүй объект санах ойд үлдчихнэ гэсэн үг. Харин JavaGarbageCollection(Жавагийн хог цэвэрлэгч) нь иймэрхүү эзэнгүй санах объект санах ойд байгаа эсэхийг автоматаар шалгаж байдаг. Эзэнгүй объект тааралдвал. Түүнийг санах ойгоос бүрэг чөлөөлж бүрмөсөн устгана.
Java-гийн хувьд syntax нь бараг тэр чигээр C++ юм. C++ -ээс ялгаатай зүйл нь гэвэл тэрээр тэр чигтээ объект хандалтат тул энэ талд нэмэгдсэн ганц нэг зүйлс бий. Гэхдээ мэдээж C++ -тэй усны дусал шиг адилхан байна гэж юу байхав. Объект хандалтат тул бүх коднууд ямар нэгэн объектэд харьяалагдах бөгөөд бүгд class дотор бичигдэнэ. Зөвхөн бодит өгөгдлийн төрлүүд (тоон утгууд, boolean утга, тэмдэгт) л class дотор бичигдэхгүй байж болдог нь түүний ганц зөрчил юм.
Анхны програм "Hello World!"
public class Hello{Энэ жава програм нь ажиллахын тулд заавал Hello.java нэртэй файлд хадгалагдах ёстой. Яагаад гэвэл классын маань нэр Hello байна шүү дээ. Дараа нь энэхүү кодыг Bytecode буюу хагас машины хэлэн хөрвүүлэх болно. Бидэнд Java Compiler хэрэг болно. Хөрвүүлсний дараа Hello.class файл үүссэн байх ёстой.
public static void main(String[] args){
System.out.println("Hello World!");
}
}
Posted by Gansukh Batjargal at 1:13 AM 0 comments
Labels: About Java, Programming Languages
Хэрэглэгчийн Функц
Бид С хэлийг ашиглан өмнө тулгарсан бодлогыг бодох бүртээ sqrt(x), strcmp(s1,s2), pow(x,y) гэх мэт функцуудтэй алхам тутамдаа тааралдаж,
ашиглаж ирсэн билээ. Харин хэрэглэгч өөрийн сонирхолд нийцүүлэн, олон давтагдах үйлдэлийг товчлох, бичлэгийг хэмнэх зорилгоор функц үүсгэн ашиглаж болдог. Ямар ч програмчлалын хэлэнд функц үүсгэн ашиглах ерөнхий зарчим нь адилхaн байдaг.
С хэлний функцын ерөнхий бичлэг нь:
<Буцаах утгын төрөл><Функцийн нэр>(<Төрөл><Зарлалт>)
<Хувьсагчдыг зарлах>
{
<Дотооод хувьсагчдыг зарлах>
<Командууд>
...
return (Буцаах утга);
}
Хэрвээ функц утга буцаах шаардлагүй бол түүний нэрийн өмнө void түлхүүр үгийг бичиж өгөх буюу ямар ч түлхүүр үг бичихгүй байж болно. (void гэсэн түлхүүр үгийг бичиж өгөөгүй үед return 0; гэсэн бичлэгийг ашигласан байдгийг анзаарсан байх.)
Функц руу утга дамждаг бол тухайн хувьсагчдыг функцийн нэрийн ард хаалтан дотор төрөлийн хамт бичнэ.
Хэрэв функц утга хүлээн авдаггүй бол хаалтан дотор юу ч бичихгүй.
2222. Бутархай
Бодлогын дугаар: CSMS0010
Энгийн бутархайн хүртвэр нь хуваариасаа бага бол зөв бутархай гэнэ. Мөн өгөгдсөн бутархайгаас хүртвэр болон хуваариараа бага бөгөөд түүнтэй тэнцүү бутархай байхгүй бол анхны бутархайг үл хураагдах бутархай гэнэ. Хүртвэр болон хуваарийнх нь нийлбэр n-тэй тэнцүү байх хамгийн их утгатай зөв, үл хураагдах бутархайг ол.
Input
ганц n бүхэл тоо байна (3 <= n <= 1000)
Output
олдсон бутархайн хүртвэр болон хуваарийг гаргана
Example
Input:
10
Output:
3 7
Input:
23
Output:
11 12
Өгүүлбэрээс бутархайн хуваарь, хүртвэрийг нийлбэр нь n, тэдгээрийн ялгавар нь хамгийн бага, ХИЕХ нь 1-тэй тэнцүү байхаар авах нь тодорхой байна. Хүртвэрийг n/2-оос эхлэн нэг нэгээр бууруулж, хуваарийг нэг нэгээр нэмэгдүүлэх үйлдлийг ХИЕХ нь 1 болтол хийх шийдлийг сонгоё. Харин ХИЕХ=1 эсэхйиг шалгахдаа Евклидийг алгоритмийг ашиглан 2 тооны ХИЕХ-ыг олох функц үүсгэн ашиглая.
#include <stdio.h>
long int XIEX(long int a,long int b)
{
while(a!=0 && b!=0)
{
if(a>b) a%=b;
else b%=a;
}
if (a!=0 && b==0) return a;
if (b==0 && a!=0) return b;
}
void main()
{
long int n;
long int x,y;
scanf("%ld",&n);
for(x=n/2; x>0; x--)
{
y=n-x;
if(XIEX(x,y)==1)/**/
{
printf("%ld %ld\n",x,y);
break;
}
}
}
Posted by Gansukh Batjargal at 12:36 AM 1 comments
Labels: C/C++ programming
Рекурсив Функц
Програмчлалах үед хэргэгчийн функц нь шууд болон шууд бус аргаар өөрөө өөрийгөө дуудах боломж байдаг ба үүнийг рекурс хэмээн нэрийддэг. Рекурсийг ямар нэг түвшин дэх үзэгдэл нь түүний өмнөх түвшиний үзэгдэлээр тодорхойлогдох үйл явц гэж тодорхойлж болох юм.
Рекурсыг ашигласанаар програмчлалын кодчилолыг бага хэмжээтэй болгох, мод, граф мэт шаталсан зохион байгуулалттай бүтцүүтэй ажиллах боломжийг бүрдүүлж өгдөг ба програмын бичих, ойлгоход тун хялбархан болгодог.
Рекурсийг ашигласан хамгийн энгийн жишээ болох өгөгдсөн тооны факториалыг олох програмын рекурс ашиглан бичье.
#include <stdio.h>
int fact(int a){
if(a==1) return 1;
return a*fact(a-1);
}
main(){
int n;
scanf("%d",&n);
printf("%d",fact(n));
return 0;
}
fact функцийн { } хаалтан дотор байгаа бичиглэлийн эхний мөрийг рекурс дуусах нөхцөл гэж нэрлэдэг. Харин 2-р мөрөнд а тоог а-1 тооны факториалаар үржүүлсэн утгыг буцааж байгаа ба энэ нь fact функц нь ажиллах явцдаа а-1ийн факторалын олох fact функцийн дахин дуудаж байгаа хэрэг. Рекурс функц өөрөө өөрийгөө дуудахдаа өмнөх утгаа компьютрийн стек санах ойд хадгалж байдаг. Харин төгсгөх нөхцөлд хүрмэгцээ өмнөх санах ойд хадгалсан утгуудаа дэс дараалан үржүүлж утгаа fact функцээр дамжуулан буцаана.
Харин одоо арай өөр рекурс шийдэлтэй програмыг бичиж үзье.
Өгсөн 10-тын тооллын системийн тоог хэрэглэгчээс авсан дурын k тооллын систем рүү (16-тын тооллын систем хүртэл. Хэрэв хүсвэл 16-таас илүү тоолын системд хөрвүүлэхээр бичиж болно.) хөрвүүлж хэвлэх програмыг доор сийрүүлэв.
#include <stdio.h>
long convert(long n,int k){
if(n){/*Энэ мөр нь рекурс функцийн төгсгөх
нөхцөл болж байна. n=0 болмогц convert
функц өөрөө өөрийгөө дуудахаа зогсооно.
n>0 үед л биелэнэ гэсэн үг */
convert(n/k,k);/*Энэ хэсэг функц өөрөө
өөрийгөө дуудаж байна.*/
switch(n%k){
case 0:printf("0"); break;
case 1:printf("1"); break;
case 2:printf("2"); break;
case 3:printf("3"); break;
case 4:printf("4"); break;
case 5:printf("5"); break;
case 6:printf("6"); break;
case 7:printf("7"); break;
case 8:printf("8"); break;
case 9:printf("9"); break;
case 10:printf("A"); break;
case 11:printf("B"); break;
case 12:printf("C"); break;
case 13:printf("D"); break;
case 14:printf("E"); break;
case 15:printf("F"); break;
}
}
}
int main(){
long n;
int k;
printf("N naturgal toog oruul\n");
scanf("%ld",&n);
printf("Huvirgah toollin systemiig oruul\n");
scanf("%d",&k);
convert(n,k);
return 0;
}
Функц маань төгсгөх нөхцөлд хүрмэгцээ санах ойд хадгалсан тэмдэгтүүдээ буцаан хэвлэж байгааг анзаарсан байх. Тоонуудыг тоолын системүүдэд шилжүүлэх талаар урьд өмнө нь бичиж байсан учраас энэ талаар дэлгэрэнгүй бичилгүй орхилоо. Хэрэв хүсвэл энд дарж үзэж болно.
Posted by Gansukh Batjargal at 12:36 AM 3 comments
Labels: C/C++ programming