asdf

Tuesday, January 10, 2012

Флашгот(Flashgot) дээр хүссэн Интернет Татагчаа оруулах

Миний хамгийн дуртай програмуудын нэг нь Флашгот. Жилийн өмнөхөн л Виндөвс ахаас Убунту руу шилжиж билээ. Тэгсэн нөгөө алдарт Интернет Дөвшлөүд Менежер (Internet Download Manager - АиДиЭм) гуай Лайнукс дээр байдаггүй. Сайтаас видео энэ тэр татах болсон чинь болдоггүй. Тэгээд хайж байгаад Мозилла(Mozilla) ахын Файрфокс (Firefox) дээр Флашгот байж нэг нар гардаг байна ш дээ. Флашгот бол сайт дахь медиаг барьж аваад татагчтай холбож өгдөг файрфоксын нэмэгдэл юм.

Тэгсэн бас болоогүй ээ. Нөгөө татагчид нь арай удаан байлаа. АиДиЭм шиг л хурдан татдаг татагч хэрэгтэй байлаа. Тэгсэн Аксел (Axel) гэдэг нэг сайхан залуу гараад ирлээ. Акселыг суулгахаар Флашгот дээр автоматаар нэмэгдчихдэг юм байна. Даанч нэг гэм нь терминал дээр ажилладаг татагч нар маань икстерм (xterm) терминал дээр ажиллаад байх юм. Икстерм-д би дургүй ээ.

Саяхан надад акселийн икстермийг жином-терминал (gnome-terminal)-аар солих хүсэл бий болоод Гүүглэ ахаасаа шалгаалаа. Тэгсэн Монголын Лайнукс бүлгэмийн вики дээр байна. Тэгээд л хүсэж байсан мэдлэгээ олж авлаа. Баярлалаа Лимнукс-даа.

За өөрийнхөөрөө нэг товч тайлбарлачихъя.

1. Танд Флашгот, Интернет татагч чинь байгаа
2. Интернет татагчаа ашиглах бүрхүүл (shell) кодоо бичнэ.
   
Акселын хувьд нэг иймэрхүү.
#!/bin/bash

cd /home/CHANGE_IT_TO_YOUR_USERNAME/Downloads
gnome-terminal --command "axel -an 10 $1" 
 
Татсан файл чинь ~/Downloads дотор хадгалагдана. Дураараа өөрчилж болно.
--command гэдгийн ардаас Татагчийнхаа командыг бичиж өгнө. Тэгээд л sh өргөтгөлтэй хадгална. Жишээ нь дээр бүрхүүл кодыг axel1.sh гэж хадгалъя.


3. Флашгот-доо нэмье. Файрфоксын tools->Flashgot->More Options гэж ороод
General цэс дээр Add гэдгийг дараад axel1 гээд нэр өгчихье. Тэгээд Executable path дээр нь өнөөх бүрхүүл код axel1.sh ээ заагаад өгнө. Тэгээд OK товч дараад дуусаа.

4. Файл татахдаа axel1 гэсэн татагчаа сонгоод л татна.

Одоо хүссэн татагчаа флашгот руу оруулж чаддаг боллоо. Баяр хүргэе!

Monday, January 9, 2012

Оруулах эрэмбэлэлт (Insertion Sort) [Lisp VS C]

Оруулах эрэмбэлэлт бол маш энгийн эрэмбэлэлт. Бид ихэвчлэн амьдралдаа энэ эрэмбэлэлтийг хэрэглэж байдаг. Үндсэн санаа нь бол жагсаалтаас нэг элементийг нь аваад эрэмбэлэгдсэн жагсаалт руу зөв байрлуулахад оршдог. Уг эрэмбэлэлтийн давуу талууд гэвэл:
  1. Хялбархан, ойлгомжтой
  2. Жижиг жагсаалтыг хурдан эрэмбэлдэг
  3. Нэмэлт санах ой шаардлагагүй
  4. Бараг эрэмбэтэй жагсаалтад илүү үр дүнтэй
  5. Жагсаалтын хэмжээнээс үл хамааран эрэмбэлж эхэлдэг гэх мэт
Үндсэн санааг нь дээр дурдсан. Псевдо код нь:


 for i ←1 to i <= length(A)-1
key ← A[ i ]
> A[ i ] is added in the sorted sequence A[0, .. i-1]
j ← i - 1
while j >= 0 and A [ j ] > key
A[ j +1 ] ← A[ j ]
j ← j -1
A [j +1] ← key
 
 
 Хугацааны хувьд:
                 Сайн тохиолдолд (Бараг эрэмбэлэгдсэн): Ө(n) 
                 Дундаж тохиолдолд: O(n^2)
           Муу тохиолдолд : О(n^2)
 
Си хэл дээр:

#include <stdio.h>
//Массиваа хэвлэнэ
void print_array(int a[], int n)
{

int
i;
for
(i = 0; i < n; i++)
printf("%d ", a[i]);
putchar('\n');
}


void
insertion_sort(int a[], int n)
{

int
i, j;
int
key;
for
(i = 1; i < n; i++)
{

key = a[i];
j = i - 1;
//key-ээс их элементүүдийг урагшлуулж
while(j >= 0 && a[j] > key)
{

a[j + 1] = a[j];
j--;
}

//Үүссэн хоосон зайд key орно
a[j + 1] = key;
//Массивыг хэвлэж байна
print_array(a, n);
}
}


int
main()
{

int
a[8] = {6, 5, 3, 1, 8, 7, 2, 4};

print_array(a, 8);
insertion_sort(a, 8);

return
0;
}
 
Гаралт нь:
6 5 3 1 8 7 2 4 
5 6 3 1 8 7 2 4
3 5 6 1 8 7 2 4
1 3 5 6 8 7 2 4
1 3 5 6 8 7 2 4
1 3 5 6 7 8 2 4
1 2 3 5 6 7 8 4
1 2 3 4 5 6 7 8 
 
Lisp дээр:
 
 
Гаралт нь:

Өсөхөөр эрэмбэлэгдэж буй

(6)
(5 6)
(3 5 6)
(1 3 5 6)
(1 3 5 6 8)
(1 3 5 6 7 8)
(1 2 3 5 6 7 8)
(1 2 3 4 5 6 7 8)

Буурахаар эрэмбэлэгдэж буй

(6)
(6 5)
(6 5 3)
(6 5 3 1)
(8 6 5 3 1)
(8 7 6 5 3 1)
(8 7 6 5 3 2 1)
(8 7 6 5 4 3 2 1)
Лисп дээр өөрийнх нь эрэмбэлэх SORT гэсэн МАКРО байдаг. Энэ эрэмбэлэх МАКРО нь
Оруулах Эрэмбэлэлт дээр үндэслэсэн байдаг. Жишээ програм:
 
(setq list '(6 5 3 1 8 7 2 4))
(write-line "Lisp-ийн өөрийнх нь эрэмбэлэх функц ашиглаж байна")
(print list)
;Өсөхөөр эрэмбэлээд хэвлэж байна
(print (sort list #'<))
;Буурахаар эрэмбэлээд хэвлэж байна
(print (sort list #'>))
Гаралт нь:
Lisp-ийн өөрийнх нь эрэмбэлэх функц ашиглаж байна

(6 5 3 1 8 7 2 4)
(1 2 3 4 5 6 7 8)
(8 7 6 5 4 3 2 1)
 
 
 
Дараагийн эрэмбэлэлт Хурдан Эрэмбэлэлт(Quick Sort) байна.

Sunday, January 8, 2012

Виндөвс (Windows) дээр Лайнукс (Linux)-ыг мэдэрцгээе!

Юникс(UNIX) програмчлал үзэж байгаатай холбогдуулж бүхэл бүтэн үйлдлийн систем суулгахгүйгээр ердөө Виндөвс дээрээ л Юникс, Лайнукс програмчлалыг хийж болохуйц програмыг танилцуулж байна. Энэ бол Сигвин (Cygwin). Сигвиний уриа бол Виндөвс дээр Лайнуксыг мэдэрцгээе! За тэгээд сонирхоно биз дээ.

www.cygwin.com




Thursday, December 29, 2011

VAIO зөөврийн тооцоолуурын touchpad-ын scroll-ыг ажиллуулах

Хагас жилийн өмнө дөнгөж авсан зөөврийн тооцоолуураа шууд л Убунту 11.10-ыг суулгаж билээ. Бүх зүйл л дажгүй байлаа. Гэхдээ Убунту дээр заавалчгүй нэг алдаа гардаг. Алдаа гардаг гээд би муулсангүй. Харин тэрхүү алдааг засна гэдэг л хамгийн том мэдлэг, ухааныг өгдөгөөрөө хамгийн сайхан нь.

За тэгээд Убунту 11.10 дээр touchpad-ны scroll нь ажилладаггүй юм байна. Гүүглэдээд гүүглэдээд олигтой шийдэл олж чадалгүй тэгээд хаясан юм. Тэгсэн саяхан нет ухаж байгаад ажиллуулах аргыг оллоо. За тэгээд тэрийгээ хуваалцахаар шийдлээ.

Дараах зүйлсийг хийнэ:

1. sudo gedit /etc/default/grub  гэж терминал дээрээ бичнэ
2. GRUB_CMDLINE_LINUX гэсэн дээр мөрийг олоод GRUB_CMDLINE_LINUX="i8042.reset i8042.nomux i8042.nopnp i8042.noloop" болгоно.
3. Дараа нь grub файлаа шинэчлэнэ: sudo update-grub
4. http://www.mediafire.com/?74wbdmph52sugw5 гэсэн хаягаар орж psmouse-alps-dkms_0.10_all.deb-ийг татаж аваад суулгана.
5. Тооцоолуураа дахин эхлүүлнэ.

Ингээд л таны scroll чинь ажилчихсан байна.

Tuesday, November 1, 2011

Сонгох Эрэмбэлэлт (Selection Sort) - C vs Lisp

Сонгох эрэмбэлэлт. Энэ эрэмбэлэлтийг Си болон Лисп хэл дээр үзье. Сонгох эрэмбэлэлтийн мөн чанар нь бол жагсаалтаас хамгийн бага элементийг сонгож жагсаалтын эхний элементтэй солиход оршдог. Хамгийн бага элементийг олохын тулд жагсаалтыг бүх элементийг шалгадаг болохоор жагсаалтын хэмжээ их үед тохиромжгүй эрэмбэлэлтийн арга юм. Харин жижиг жагсаалтыг (20, 30 элементтэй) бол хурдан эрэмбэлдэг. Бидний өмнө үздэг Хөвөх Эрэмбэлэлт-ээс арай хурдан.

Хугацааны хувьд бол O(n2).

Си дээрх код:

Гаралт нь:

Одоо Лисп дээр үзье. Лисп дээр маш хялбархан бичиж болно.



Одоо гаралтыг нь харъя:

Дараагийн эрэмбэлэлтээр Оруулах Эрэмбэлэлт (Insertion Sort) үзнээ. Явандаа бүх эрэмбэлэлтээ үзсэний дараа ерөнхий харьцуулалт хийх санаа байна. За тэгээд сонирхож байгаа хүмүүс үзэл бодлоо чөлөөтэй хуваалцаарай!

Monday, October 24, 2011

Си дээр ингэж болдог байсан юм байна ш дээ

Си дээр нэг сонин юм харлаа. Тухайлбал функц дээр. Ингэж болдог гэхээр гайхмаар ч юм шиг. Функцыг тодорхойлж бичихэд ингэж бичдэгийг анх удаа л харж байна. Хамгийн Си-гийн функцыг ингэж бичнэ гэж заалгуулж байлаа.

datatype function-name (datatype argument-list)
{
      local variable declarations;
      executable statements;
      ......................................
      return (expression);
}

За нэг ийм л юм үздэг билээ. Жишээ нь хоёр тооны ихийг олдог функц гэвэл:

int max (int a, int b)
{
      return (a > b) ? a : b;
}

Тэгсэн бас ингэж бичиж болдог юм байна шүү!

datatype function-name (argument-list)
argument declaration;
{
      local variable declarations;
      executable statements;
      ......................................
      return (expression);

}

Энэ форматаар бол дээрх мах функцыг бол ингэж бичиж болох нь:

int max (a, b)
     int a, b;
{
      return (a > b) ? a : b;
}

Гэхдээ анх сурсан минь арай эвтэйхэн юмаа. Хэ хэ.

Sunday, October 23, 2011

Хөвөх эрэмбэлэлт (Bubble Sort) Х Лисп хэл Х Си хэл

За Лисп хэлийг оролдож үзэж байна. Тэгээд энэ хөвөх эрэмбэлэлтийг Лисп дээр хийж үзэхээр шийдлээ. Хөвөх эрэмбэлэлт бол хамгийн энгийн эрэмбэлэлт. Үндсэн санаа нь бол хөөс хөвөх зарчимтай адил. Усан дотор хөнгөхөнүүд нь дээш хөөрч, хүнд нь доошилдогтой адил жагсаалтын бага элементүүд аажмаар дээшилдэг. Үндсэн хийж байгаа үйлдэл нь зэрэгцээ элементүүдийг шалгаад байрыг нь солих замаар явна.

Хөвөх эрэмбэлэлт нь туулай яст мэлхийн төрлийн эрэмбэлэлт. Энэ төрлийн эрэмбэлэлт нь нэг төрлийн элементүүд нь хурдан байрандаа орж үлдсэн нь удаан байрандаа ордог. Хөвөх эрэмбэлэлт дээр бол багаас их рүү эрэмбэлж байгаа тохиолдолд их элементүүд нь хурдан байрандаа орж бага элементүүд нь удаан байрандаа ордог. Өөрөөр хэлбэл их элементүүдийг зөв байранд нь оруулахад чиглэгдсэн гэсэн үг. Доор хөдөлгөөнт жишээ үзүүлсэн байна.

Псевдо код нь:

procedure bubbleSort( A : list of sortable items )
repeat
swapped = false
for i = 1 to length(A) - 1 inclusive do:
if A[i-1] > A[i] then
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
 
Нэг иймэрхүү байх нь. За тэгвэл Си хэл дээрх ингэж бичлээ. 

 
Гаралт нь:

 За тэгвэл одоо Лисп хэл дээр бичиж үзье. 
 
 
Гаралт нь:
 
Лисп хэлний бичиглэлийг харж байгаа байх. Си-гээс хоёр дахин бага бичлэгтэй байгаа 
биз. Дараа нь Сонголтын Эрэмбэлэлтийн тухай оруулнаа.