Sunday, December 26, 2010

Стек, Stack загвар класс, стекийн хэрэглээ

Стек нь өгөгдөл хийх (оруулах) ба авах (гаргах) гэсэн үндсэн хоёр үйлдэлтэй шугаман бүтэц юм. Эдгээр үйлдлүүдийг стекийн орой гэгдэх зөвхөн нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэбэл, хамгийн сүүлд орсон элемент эхэлж гарах зарчмаар ажиллана. Стекийг "сүүлд орсон нь эхэлж гарах" LIFO (Last in, First out) жагсаалт ч гэж нэрлэх нь бий.
Стекийг массив болон жагсаалтаар нэвтрүүлж болдог.
Стек загвар класс
Гишүүн функцүүд:
empty: хоосон эсэхийг шалгана.
size: хэмжээг нь буцаана.
top: оройн элемент.
push: элемент оруулах.
pop: элемент гаргах.
эдгээр функцүүд бүгд public хандалттай.
Стекийг маш олон бодлогонд ашиглаж болно. Хамгийн өргөн ашигладаг жшиээ гэвэл илэрхийлэл бодох, хаалтны баланс тогтоох, тоог тооллын системүүдийн хооронд хөрвүүлэх г.м.
Хаалтны баланс тогтоох бодлогыг stack загвар класс ашиглан бодъё. Хаалтны баланс тогтоох гэдэг маань илэрхийлэлд орсон (), [], {} хаалтууд зөв логик дараалалтай орсон эсэхийг шалгана гэсэн үг. Жишээлбэл, 2*{10+5-3*(2*a[5] - 7)} гэвэл зөв баланслагдсан байна, харин 2*{10+5-3*(2*a[5] - 7}) тохиолдолд буруу.

Хаалт зөв баланслагдаагүй байх тохиолдлууд:
1. Хаах хаалт тааралдахад стек хоосон байх
2. Бүх тэмдэгтүүдийг уншиж дуусахад стек хоосон биш байх
3. Тухайн хаах хаалтны хувьд стекийн оройгоос авсан нээх хаалт нь харгалзахгүй байх.

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main() {
stack<char> st;
char ch[100], c;
int l, i;
bool ok = true;

string errorMessage = "";

cout<<" Ilerkhiillee oruulna uu?\n -> ";
gets(ch);
l = strlen(ch);
for(i=0; i<l; i++) {
if(ch[i] == '(' || ch[i] == '{' || ch[i] == '[')
st.push(ch[i]);
if(ch[i] == ')' || ch[i] == '}' || ch[i] == ']') {
if(!st.empty()) {
c = st.top();
if((c == '(' && ch[i] == ')') || (c == '{' && ch[i] == '}') || (c == '[' && ch[i] == ']'))
st.pop();
else {
ok = false;
errorMessage.push_back(c);
errorMessage.append("-iin khaakh khaalt buruu baina!");
break;
}
}
else {
ok = false;
errorMessage.push_back(ch[i]);
errorMessage.append("-iin neekh khaalt baikhgui baina!");
break;
}
}
}

cout<<"\n Khariu: ";
if(ok) {
if(!st.empty()) {
ok = false;
errorMessage.push_back(st.top());
errorMessage.append("-iin khaakh khaalt baikhgui baina!");
}
else
cout<<"Khaaltny balans zov baina";
}
if(!ok)
cout<<"Khaaltny balans buruu baina.\n Aldaa: "<<errorMessage;
cout<<"\n\n";
system("pause");
}

Wednesday, December 22, 2010

Жижигхэн хор

Windows-д сууриласан тухайлбал, MS-DOS, Windows XP, Windows Vista, Windows 7 үйлдлийн системтэй копмьютерт "CON" (кавичкагүй) нэртэй Фолдер яагаад үүсч чаддаггүйг Билл Гэйтс болон Майкрософт тайлбарлаж чадаагүйг та мэдэж байгаа байх. Гэвч комманд промптоор амархан үүсгэчдэг. Харин устгахдаа бас тийм аргаар л устгана. Энийг ашиглаж мангар олон CON фолдер үүсгэх вирусэнцэр хийж сууна. Хийх ч гэж дээ С++ дээр хэдэн мөр бичээд л CTRL+F9. (Залхуу хүрэхээрээ иймэрхүү хачин хобби хөдөлчдөг юм). Д дискэнд 200 ширхэг санамсаргүй нэртэй устдаггүй фолдер үүсээд л тэдгээрийн дотроос хэрэгтэй фолдероо хайгаад л... хөгжилтэй санагдаж байгаа биз?! Татаж аваад хэн нэгэнд илгээж хорлоорой!
Анти хорлогчийг эндээс аваарай.

Friday, December 17, 2010

Эрэмбэлэлт

Програм зохиох явцад эрэмбэлэх үйлдэл олонтаа тохиолддог. Эрэмбэлэлт нь өгөгдлүүдийг тодорхой дарааллаар (өсөхөөр эсвэл буурахаар) зохион байгуулах үйлдэл юм. Жишээлбэл,
A1<=A2<=A3<=...<=An, B1>=B2>=B3>=...>=Bn дарааллуудын хувьд A дараалал нь өсөхөөр, B дараалал нь буурахаар эрэмбэлэгдсэн дараалал байна. Хэрэв дурын дараалсан хоёр гишүүний хувьд < (эрс их), > (эрс бага) нөхцөлүүд биелэгдэж байвал харгалзан монотон өсөх, монотон буурах дараалал гэж нэрлэнэ. Өмнөх тохиолдолд (<=, >= нөхцөлүүд биелэх) монотон үл буурах, монотон үл өсөх дараалал болно. Эдгээрийн аль аль нь эрэмбэлэгдсэн дарааллын тохиолдол юм. Эрэмбэлэгдсэн өгөгдөл нь хайлтын процессыг хурдасгах ач холбогдолтой. 30 оюутантай ангийн журналаас Дорж гэдэг оюутны ирцийг харах шаардлага гарсан байг. Хэрэв оюутнуудын нэрс нь санамсаргүйгээр бичигдсэн бол бүх оюутнуудыг нэрийг эхнээс нь эхэлж унших шаардлага гарна. Харин эрэмбэлэгдсэн тохиолдолд Д-с өмнөх үсгүүдээр эхэлсэн нэртэй оюутнуудын нэрийг унших шаардлагагүй. Зөвхөн эхний үсгийг хараад л алгасаж явна.
Эрэмбэлэх маш олон аргууд байдаг. Энгийн, хүндэвтэр эрэмбэлэлтийн эрэмбэлэлтийн аргууд гэж ерөнхийд нь 2 ангилж болно.
Энгийн эрэмбэлэх аргууд:
- Сонгон эрэмбэлэх арга (Selection Sort)
- Оруулан эрэмбэлэх арга (Insertion Sort)
- Бөмбөглөн эрэмбэлэх арга (Bubble Sort)
- Индексээр эрэмбэлэх арга (Index Sort)
- Shell-ийн арга
Хүндэвтэр эрэмбэлэлтийн аргууд:
- Хурдан эрэмбэлэлтийн арга (Quick Sort)
- Сууриар эрэмбэлэх арга (Radix Sort)
- Хоёртын хайлтын модоор эрэмбэлэх (Binary Sort)
- Heap
- Нийлүүлэн эрэмбэлэх арга (Merge Sort)
зэрэг аргууд байдаг. Эдгээрээс гадна зарим програмчлалын хэлэнд шууд өөрөө эрэмбэлдэг сан, функцууд байдаг. Ж, С/C++ хэлний algorithm.h сангийн sort() функц нтр.
Эдгээр аргуудыг дараа нэг нэгээр нь тайлбарлаж, бодолтыг нь тавьж өгмой.
Мартсанаас эрэмбэлэлт нь амьдралд голдуу 1 эсвэл 2 хэмжээст хүснэгтэн дээр хийгдэнэ.

Wednesday, December 15, 2010

Pascal хэлний бичлэг төрөл

Янз бүрийн төрөлтэй өгөгдлүүдийг нэг өгөгдлийн төрөл мэт нэгэтгэсэн төрлийг бичлэг (Record) төрөл гэдэг. Түүний гишүүдийг талбар гэнэ. Бичлэг төрлийг RECORD END нөөц үгээр зарлана. (Бичлэг нь C/C++ хэлний struct гэсэн үг. Энэ талаар дараа бичинэ.)
Формат нь:
Type
нэр = Record
<Талбар1>: <Төрөл>;
<Талбар2>: <Төрөл>;
<Талбар3>: <Төрөл>;
...
<ТалбарN>: <Төрөл>
End;


Ижил төрөлтэй талбаруудыг ,-аар тусгаарлаж, жагсааж бичиж болно.
Жишээлбэл,
Type
myRecord = Record
k, h, a, i: integer;
r: arary[1.100] of real;
o: boolean;
s: string
End;
Бичлэг төрлийн хувьсагчийг ердийн хувьсагч зарлахтай адилхан зарладаг. Дээрхи myRecord төрлийн хувьсагчийг дараах байдлаар зарлана гэсэн үг.
myR: myRecord;
myRec: array[1.10] of myRecord;
Бичлэгийн талбаруудад хандахдаа, мөн утга олгохдоо бичлэг төрлийн хувьсагчийн ард . тавьж цэгийн ард нь талбарын нэрийг бичинэ. Ж, Printf(' k = ', myR.k); w := myRec[2].r[1]; myR.k := 10; myR.s := 'Good luck!', myRec[1].o := TRUE; г.м.
Мөн WITH оперторыг ашиглан бичлэгийн талбаруудад шууд утга олгож болно. Формат нь:
With <хувьсагч> do <оператор>;
Ж.
With myR do begin
k := 0;
s := 'Easy';
o := FALSE;
end;

Жишээ бодлого. N тооны хүний биеийн жин ба өндөр өгөгджээ. Энэ хүмүүсийг өндөр ба жингийн харьцаа нь хамгийн их байхаас нь эхлэн эрэмбэлж гарга.
Энэ бодлогыг Бичлэг ашиглаж бодъё.

Program Example_Record;

Type
People = record
m, h: integer;
end;

var
person: array[1..100] of People;
n, i, j: integer;
q: array[1..100] of real;
p: People;
qq: real;

begin
write(' n = ');
read(n);
for i:=1 to n do begin
writeln(' ', i, '-r khun');
write(' Jin: ');
read(person[i].m);
write(' Ondor: ');
read(person[i].h);
q[i] := person[i].h / person[i].m;
end;

for i:=1 to n-1 do
for j:=i+1 to n do
if q[i] < q[j] then begin
p := person[i];
person[i] := person[j];
person[j] := p;
qq := q[i];
q[i] := q[j];
q[j] := qq;
end;
for i:=1 to n do begin
writeln('');
writeln(' ', i, '-r khun');
write(' Jin: ');
writeln(person[i].m);
write(' Ondor: ');
writeln(person[i].h);
writeln(' Kharitsaa: ', q[i]:0:2);
end;
end.

Sunday, December 12, 2010

DotNet дээр Setup (Install) бэлдэх

1. Solution Explorer (default байрлал нь баруун дээд булан) цонхонд байгаа Project дээрээ (Solution'Project-ийн нэр' гэж байгаа) баруун клик.
2. Add -> New Project.
3. Project types буюу Project-ийн төрлүүд хэсгээс Other Project Types доторхи Setup and Deployment-ийг, Templates-ээс Setup-ийг сонгоод Name талбарт Setup-ынхаа нэрийг бичээд Ok.
4. Үндсэн Project-оо Build хийнэ.

5. Setup Project-ийн File System-ийн Application Folder дээр баруун клик.
6. Add -> File -> Project-ийн bin/Debug-д байгаа бүх файлыг идэвхжүүлээд Open.
7. Setup Project дээр баруу клик -> Build.

Өгсөн нэр бүхий прожектийн Debug фолдерт нь сетап прожектийн нэртэй ижил нэртэй суулгах EXE файл үүссэн байна. Энэ нь шаардлагатай DLL-үүдийг өөртөө агуулсан байдаг учраас ямар ч ПиСи-нд шууд суулгаж ашиглах боломжтой.
Хэрэв програмдаа өөрчлөлт оруулбал үндсэн прожектоо эхлээд Build хийгээд дараа нь сетап прожектоо Build хийнэ.

Thursday, December 2, 2010

Дөрвөлжин спираль

Натурал N тоо өгөгдсөн бол 1-ээс N*N хүртэлх натурал тоог дөрвөлжин спираль буюу дараах хэлбэрээр хэвлэ гэсэн бодлогыг 3 жилийн өмнө CODER дээр бодож байсан билээ.
Ж:
Одоо харин энэ бодлого Hit болжээ. Бүх сургуулийн бүх багш нар нь бүх програмчлалын хэл дээр бодуулж байх шиг байна. Энэ долоо хоногт л гэхэд 4 өөр сургуулийн 5 оюутан энэ бодлогыг бодуулсан гэж бод доо. Дахиж бодож өгөхгүй шүү, блогтоо тавьчъя. Харин жаахан явцуу код байж магадгүй. Эсрэгээрээ тэнэг хүн ч ойлгохоор энгийн.
За өөртөө хэрэгтэйг нь татаж ав.















Sunday, November 28, 2010

Паскаль (Pascal) хэл

Францын математикч Паскалийн нэрээр нэрлэгдсэн энэ хэлийг Цюрихын технологийн дээд сургуулийн (Щвейцар) эрдэмтэн Никлаус Вирт (Nicklaus Wirth) 1970-аад онд оюутнуудыг програмчлалд сургах зориулалтаар бүтээсэн. Эхлээд Вирт, ФОРТРАН болон тухайн үед өргөн тархсан байсан Алгол (Algol) хэлийг оюутнуудад заадаг байжээ. Энэ хоёр хэл хоёулаа оюутнуудыг програмчлалд сургахад тохиромжгүй мэт түүнд санагддаг байсан тул тэрээр шинэ хэл зохиож, 17-р зууны Францын алдарт эрдэмтэн Блез Паскалийн нэрээр нэрлэсэн байна. (Учир нь 1640 онд Паскаль хамгийн анхны тооцоолох машин-арифмометрыг зохион бүтээсэн гэж үздэг.) Програмчлалын Паскаль хэл маш амжилттай зохиогдсон учраас сургалтын хүрээнээс халин гарч, түгээмэл хэрэглэгдэгч алгоритмын хэл болсон. Одоо ч гэсэн сургалтанд өргөн хэрэглэгддэг.
Паскал хэл ашиглан програм зохиохдоо програмын ерөнхий бүтэц дараах хэлбэртэй байна.

1. Програмын эхлэлийн хэсэг.
2. Холбох хэсэг (Заавал байх албагүй).
3. Тэмдгүүдийг зарлах хэсэг (Заавал байх албагүй).
4. Тогтмолуудыг зарлах хэсэг.
5. Өгөгдлийн төрлийг зарлах хэсэг.
6. Хувьсагчдыг зарлах хэсэг.
7. Функц, процедурыг зарлах хэсэг.
8. Үндсэн програм
9. Програмын тайлбар



Saturday, November 27, 2010

Толгой хүрэхгүй нь

Би нэг юмны учрыг хамгаас илүү олж чадахгүй байна. Мэргэжлийн гэмээр хүмүүсээс асуугаад ч олигтой хариулт сонссонгүй. Эсвэл би зөвхөн өөрийнхөөрөө зүтгэдэг зөрүүд зангаасаа болж тэдний зөв, оновчтой тайлбарыг нь үгүйсгэдэг юм болов уу? Надад лав тэдний тайлбар нь сэтгэцийн өвчтэй хүнд тайлбар хийж байгаа мэт л санагддаг. Тухайлбал, "Байхгүй юм гэж байхгүй байгаа юмыг хэлнэ" гэсэнтэй утгын хувьд адилхан, шал утгагүй зүйрлэлүүд. Энэ ямар асуудал вэ гэхээр мэдээж учир битүүлэг шашинтай холбоотой асуудал. Ихэнх шашинд бурхан гэсэн ойлголт байдаг ба бурхныг ертөнцийн эзэн, бүхнийг бүтээгч бас бүхнийг устгагч гэж үздэг. Исламын шашинд энэ нь цорын ганц бурхан болох Аллах гэсэн ойлголтоор илэрхийлэгдэнэ. Дээр дурьдсанчлан Аллахын хүч чадал нь хязгааргүй бөгөөд бүхнийг өөрчилж чадна. Гол асуудал маань аливаа юмыг бүтээхэд, устгахад, өөрчлөхөд бодит хүч заавал үйлчлэх хэрэгтэй. Хийсвэр юмыг хийсвэрээр өөрчилж болдог ч бодит биетийг бол хүч үйлчлэхгүйгээр өөрчлөх боломжгүй. Жишээлбэл, Аллах хүн бүтээхээр шийдлээ гэж үзье. Хязгааргүй их хүч, чадалтай учраас амархан бүтээчих л байх. Харин яаж? Аллахыг "Хүн бүт" гэж хэлэхэд нь хүн бүтдэг бол Аллахын хүслийг биелүүлэгч бас хэн нэгэн байж таараа. Энэ нь Аллах цорын ганц, бүхнийг чадна гэдэгт харшилна. Эсрэг тохиолдолд аливаа юмыг гараараа бүтээх болж таарч байна. Үүний тулд материал бас зохион бүтээх чадвар хэрэгтэй :). Биеийг нь хийчлээ гэхэд амь оруулах гэсэн төвөгтэй ажил байгаа. Амь оруулах бол гараараа хийж чадах зүйл бол ёстой биш. "Амь ор" гэж хэлэхэд нь амь орвол бас л хүсэл биелүүлэгч хэрэг болж, төгсгөлгүй давталт руу орно. Би харин энэ давталтаас гарч чадахгүй л явна. Эсвэл миний толгой хүрэх зүйл биш юм болов уу?
Би хувьдаа Аллах эзэнд итгэдэг л дээ. Итгэх үндэслэл ч олон байгаа. Хамгийн бодит жишээ гэвэл жилийн өмнө Дагестанд Али Якубов хэмээх 9 сартай хүүхдийн биенд "Аллах... " гэсэн Араб үсгээр бичигдсэн үгнүүд бий болсон нтр.
Аллахын хүч, чадалт итгэхгүй байх бол Исламын шашин ёсоор маш том уучлашгүй нүгэл. Хэрэв энэ үнэн л бол би там руу bye bye...
Али Якубовын товчхон бичлэг


Wednesday, November 24, 2010

Хоёр Солонгосын цэргийн хүчний харьцуулалт



Хойд Солонгос

Өмнөд Солонгос

Санхүү

$5 тэрбум

$24.5 тэрбус

Нийт бие бүрэлдэхүүн

1'106'000

687'000

Арми

950'000

560'000

Далайн цэрэг

46'000

68'000

Агаарын цэрэг

1'110'000

64'000

Танк

3'500

2'750

Шумбагч онгоц

63

13

Байлдааны онгоц

388

467

Их буу

17'900

10'774

Tuesday, November 23, 2010

Алгоритмчлал ба Програмчлал

Компьютерийн шинжлэх ухаан нь нялх хирнээ гэрлийн хурдтай дүйцэхүйц хурдаар хөгжихийн ачаар хэдхэн жилд дэлхийг гартаа оруулж чадсан бөлгөө. Яасан ч хурдан хөгждөг юм бэ дээ? 10хан жилийн өмнө надад лав компьютерийн талаар төсөөлөл ч байгаагүй. Одоо бие засахаас төр засах хүртэлх бүхий л ажил, алхам компьютерийн мэдэлд бүрэн шилжжээ. Ийм нөхцөл байдалд түүнийг програмчилж, хүссэн үйлдлээ гүйцэтгүүлэх нь хүн болгоны хүсэл эрмэлзлэл төдийгүй хэрэгцээ шаардлага байхаас ч аргагүй юм. Порограмчлах буюу програм хангамж үйлдвэрлэнэ гэдэг нь та бидний Word, Notepad дээр юм тэмдэглэдэг шиг тийм ч амархан зүйл биш. Энэ нь хүнээс багагүй хичээл зүтгэл, оюун ухаан, чадвар шаардана.
Програм хангамжийг яаж үйлдвэрлэдэг вэ?
Програм хангамжийг програмчлалын хэл (Programming Language) ашиглан зохионо. Програмчлалын хэл гэдэг нь алгоритмыг компьютерт зориулан бичихэд хэрэглэгддэг хэл юм. Өөрөөр хэлбэл компьютерт ойлгогдохоор заавар(instruction) бэлдэх арга гэсэн үг. Програмчлалын ямар нэгэн хэл сурч програм зохиохоос өмнө судалж мэдэх ёстой зүйл бол яах аргагүй алгоритмчлал. Алгоритм нь товчоор аливаа ажил болоод үйлдлийг үр бүтээмжтэйгээр гүйцэтгэх аргачлал юм. Явцуу утгаараа "Бодлогын хариуг гаргаж авахын тулд зохиож бичсэн, алхам алхмаар биелж дуусах тодорхой төгсгөлөг тооны үйлдлүүдийн дараалал" гэж тодорхойлж болно. Зохиосон алгоритмын дагуу үйл ажиллагааг биелүүлэгчийг алгоритмыг гүйцэтгэгч гэнэ. Аливаа алгоритмыг тодорхой гүйцэтгэгчид зориулж зохионо. Алгоритмыг гүйцэтгэгч нь хүн эсвэл компьютер, работ байж болно. Компьютерт алгоритмыг гүйцэтгүүлэхдээ зохиосон алгоритмаа ямар нэгэн програмчлалын хэлээр дүрслэнэ. Энэ үйл ажиллагааг програмчлал (programming) гэнэ.

Алгоритмчлал мэддэггүй хүн програмчлалын хэл сурч, сайн програм зохионо гэдэг бол бараг боломжгүй. Харин алгоритм бэлэн болсон тохиолдолд түүнийг ямар нэгэн програмчлалын хэл рүү хялбархан хөрвүүлж болно.

Энэ бүхнээс дүгнэж хэлэхэд хэрэв программист болмоор байгаа бол эхлээд алгоритм зохиож сур, дараа нь бусад хэл сур. Бас анхлан суралцагсдад гэж зөвлөхөд Д.Гармаа багшийн (МУИС - МКС-ийн багш) "Алгоритмчлал ба програмчлал", Улаанбаатар 2009 он, Ю.Намсрай багшийн (УБДС-ийн багш) "Алгоритм зохиох арга зүй", Улаанбаатар 2009 он номнуудыг нь ашиглаарай.


Sunday, November 21, 2010

Хайрын хөгжил

40 орчим насны нутгийн нэг ахтай янз бүрийн юм ярьж суулаа. Ярианы сэдэв аяндаа хайр дурлал, гэр бүл рүү шилжин орж, ах маань өөрийн хайрын түүхээсээ хуваалцлаа.
"... Ах нь 20 орчим насандаа үеийн нэг охинтой танилцав. Тэр үед ямар утас байгаа биш захидал солилцож сар орчим хугацаа өнгөрлөө. Захидал маань 100% хайрын мөртүүд. Өөрсдөө зохиож бичсэн нэг ч юм алга, ном нтр-ээс хуулж, цээжилж авсан мөртүүд. Одоогийнх шиг олон жилийн турш үерхэж найзлах, хамтран амьдрах зэрэг нь зүүдэнд ч ордоггүй. 2-3 удаа уулзлуу яалаа. Сарын дараа эцэг эх маань бэр гуйж, хуримаа хийлээ. Хурим найр шөнөжингөө үргэлжилж үүр ч цайлаа. Нэгэнт гэр бүл болсон хойно хамт унтах нь ойлгомжтой. Нар жаргах дөхөх тусам энэ л миний сэтгэлийг хамгаас их зовоолоо. Аав ээжээсээ өөр хүний өвөрт орж үзээгүй хүн айлын охинтой яаж хамт унтах билээ дээ? Би хичнээн ичиж зовсон ч жам ёсоороо орой болж, бүгдээрээ оронд орцгоолоо. Аргагүйн эрхэнд нэг оронд орж л таарлаа. Эхнэр бид хоёр 3 шөнө юу ч ярилгүй бие биенээсээ ичиж, 2 тийшээ харж унтлаа. Дөрөвдөх өдрөөс бага сага юм ярьж, сарын дараа л эхнэр нөхөр шиг харилцаатай болж билээ.
Харин одоогийн хүүхдүүд 4-5-р ангидаа л анхны хайртайгаа учирч, үерхэж, найзалдаг болсон байна. Хүүхдүүдийн үерхэл ч яахав, оюутан залуучуудын маань хайр нь “Мессеж эсвэл Чаат-> Уулзана -> Кафе -> Пиво -> Буудал -> Үргэлжилнэ эсвэл Сална” гэсэн дараалалтай болжээ. Бас хамтран амьдрагч ч гэнэ үү тестийн гэр бүл маягийн харилцаа моодонд оржээ. Хөгжил хөгжил гэхэд хэтэрхий хөгжөөд байгаа юм уу даа...” гэж гомдолтой инээмсэглэн бидэн рүү харлаа.

Friday, November 19, 2010

Компьютер гэж юу вэ, яаж ажилладаг вэ?

Компьютер бол мэдээллийг асар өндөр хурдаар боловсруулдаг програмчлагдагч электрон машин юм. Ө.х компьютер нь ямар нэгэн зорилгоор оруулсан мэдээллийг тэр зорилгынх нь дагуу хувирган өөрчилж, өөр мэдээлэл болгоно гэсэн үг. Боловсруулах гэж буй мэдээллийг өгөгдөл (data), бодлого (task) эсвэл асуудал (problem) харин боловсруулагдаж гарсан мэдээллийг харгалзан үр дүн (result), бодлого бодох эсвэл асуудал шийдвэрлэх (problem solving) гэх мэтээр хэлнэ.Хүн мэдрэхүйн эрхтнүүдээрээ мэдээллийг гадаад ертөнцтэй солилцож, уураг тархиараа боловсруулдгийн адил комьютер нь мэдээллийг оролт, гаралтын хэрэгслүүдээрээ гадаад ертөнцтэй солилцож, төв процессороороо боловсруулдаг.
Гэвч хүн, компьютерийн хооронд асар том ялгаа бий. Хүн оюун ухаантай учраас мэдээлэл боловсруулах үйл явцаа 100% өөрийн дур зоригоороо удирдан хэрэгжүүлдэг. Хүсвэл болино, хүсвэл үргэлжлүүлнэ. Харин компьютер бол оюун ухаангүй учраас өөрийн дур зориг гэж байхгүй, мэдээллийг зөвхөн хүний өгсөн зааврын(instruction) дагуу боловсруулдаг буюу хүн бол заавр(даалгаврыг)-ыг төлөвлөгч, компьютер бол зааврыг гүйцэтгэгч юм.

Компьютер яаж ажилладаг вэ?
Компьютерийн мэдээлэл боловсруулах үйл ажиллагаа нь дотор талын логик элементүүдэд (схемүүдэд) өгөгдсөн хүчдлүүдээр зохицуулагддаг. Логик элемент нь “Асалттай” ба “Унтраалттай” (“Үнэн” ба “Худал” буюу “Хүчдэл байна” ба “Хүчдэл байхгүй”) гэсэн хоёр тогтвортой логик төлвийн аль нэгэнд оршдог. Ө.х, компьютер хоёр ялгаатай төлвийг л мэдэрдэг. Тиймээс компьютерт орж буй аливаа мэдээлэл нь ийм хоёр ялгаатай төлвүүдийн комбинаци(хослол)-аар, ө.х логик элементүүдийн дарааллаар дүрслэгдэх ёстой болно. Эс тэгвээс компьютер тухайн мэдээллийг ойлгохгүй. Энэ бол компьютерийн мэддэг “төрөлх хэл” бөгөөд үүнийг машины хэл (machine language) гэдэг. Хүн логик элементүүдийн төлвийг тоогоор дүрсэлж ойлгоно. Тухайлбал, “Асаалттай” төлвийг “1”, “Унтраалттай” төлвийг “0”-ээр кодлоно. Ө.х хүний хувьд машины хэл гэдэг нь ...01110010... гэсэн тоон дараалал байдаг ба харин компьютерийн хувьд цахилгаан дохионуудын дараалал байна.
Машины хэл нь удрьдчилан тодоройлогдсон бүлэг командуудаас тогтдог. Эдгээр командуудыг машины командууд (machine commands) гэнэ. Урьдчилан тодорхойлогдсон гэдэг нь команд бүр өөрийн гэсэн тоон кодтой гэсэн үг юм. Энэ кодоороо санах ойд хадгалагдаж байдаг. Өөр өөр төрлийн компьютерийн машины командууд, машины хэлнүүд нь өөр өөр байдаг.

Thursday, November 18, 2010

C++ Map загвар класс

Map нь түлхүүрийн утга (key value) болон түүнд харгалзах утга(mapped value)-ыг хослуулсан хэлбэртэй элементүүдийг агуулагч төрөл юм. Key value нь элементүүдийг бие биенээс ялгаж байдаг бөгөөд утга нь давхардаж болохгүй. Key value, mapped value 2-ын авах утгын төрөл нь ялгаатай байж болно. Маш энгийн жишээ дурдъя. Ашиглагдаж байгаа гар утасны дугаар болгон эзэнтэй, мөн дугаар давхарддагүй гэдгээс дугаарыг key value, эзмшигчийн нэр(мэдээлэл)-ийг maped value болгон харгалзуулж болно. Map-ийг дараах хэлбэртэйгээр зарлана: map<түлхүүр утгын төрөл, харгалзах утгын төрөл> нэр; Ж. map <int, string> mobile;
Key value, mapped value-ийн хосолсон утгыг хамтад нь iterator гэж нэрийдэнэ. Iterator-ийг map<түлхүүр утгын төрөл, харгалзах утгын төрөл>::iterator итераторийн_нэр; гэж зарлана. Итераторын түлхүүр утгыг итераторын_нэр -> first, харгалзах утгыг итераторын_нэр -> second гэж авна.
Гишүүн функцүүд:

1. begin(): map-ийн эхний итераторын утгыг буцаана.
2. clear(): map-ыг цэвэрлэнэ (бүх утгыг устгана).
3. count(): map-д тухайн key бүхий элемент байгаа эсэхийг тодорхойлно. Байвал 1, байхгүй бол 0 гэсэн утга буцаана.
4. empty(): map хоосон эсэхийг тодорхойлно.
5. end(): map-ийн сүүлчийн итераторын утгыг буцаана.
6. erase(): map-аас өгөгдсөн key-тэй итераторыг устгана.
7. find(): өгөгдсөн key-тэй итератор map-д байгаа эсэхийг тодорхойлж, байвал тухайн key бүхий итераторыг буцаана.
8. insert(): map-д итератор нэмнэ.
9. max_size() : map-д байж болох итераторын хамгийн их тоог буцаана.
10. size(): map-д байгаа итераторын тоог буцаана.

Жишээнүүд

// map::begin/end
#include <iostream>
#include <map>
using namespace std;

int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;

mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;

// show content:
for ( it=mymap.begin() ; it != mymap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;

return 0;

}

// map::find
#include <iostream>
#include <map>
using namespace std;

int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;

mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;

it=mymap.find('b');
mymap.erase (it);
mymap.erase (mymap.find('d'));
// print content:
cout << "elements in mymap:" << endl;
cout << "a => " << mymap.find('a')->second << endl;
cout << "c => " << mymap.find('c')->second << endl;
return 0;
}

// map::insert
#include <iostream>
#include <map>
using namespace std;

int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
pair<map<char,int>::iterator,bool> ret;

// first insert function version (single parameter):
mymap.insert ( pair<char,int>('a',100) );
mymap.insert ( pair<char,int>('z',200) );
ret=mymap.insert (pair<char,int>('z',500) );
if (ret.second==false)
{
cout << "element 'z' already existed";
cout << " with a value of " << ret.first->second << endl;
}

// second insert function version (with hint position):
it=mymap.begin();
mymap.insert (it, pair<char,int>('b',300)); // max efficiency inserting
mymap.insert (it, pair<char,int>('c',400)); // no max efficiency inserting

// third insert function version (range insertion):
map<char,int> anothermap;
anothermap.insert(mymap.begin(),mymap.find('c'));

// showing contents:
cout << "mymap contains:\n";
for ( it=mymap.begin() ; it != mymap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;

cout << "anothermap contains:\n";
for ( it=anothermap.begin() ; it != anothermap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;
return 0;
}

Saturday, November 13, 2010

Yahoo-ийн нууц үг илрүүлэгч

Жич: Шинэчилж тавилаа!!!
Хэдэн жил оролдсоны эцэст Yahoo-ийн ч нүхийг нь оллоо гэж. Хүмүүсийн Yahoo нууц үгийг мэдэхэд тийм хэцүү биш юм байна. Та хэн нэгний нууц үгийг мэдмээр байна уу? Маш амархан, би танд зааж өгье.
Та үнэхээр итгэж байгаа биш биз?
Тйим ээ, энэ бол реклам байлаа. Гэхдээ энэ мессенжерэнцэр танд тус болж магадгүй. Яг мессенжерийг дуурайлгаж хийсэн, нэвтрэх гэж бичсэн ID, нууц үгийг хадгалж авдаг. Энд дарж татаж аваарай.
1. Winrar, Zip ч юм уу, ямар нэгэн RAR файл задалдаг программын тусламжтайгаар татаж авсан файлаа задална.
2. Задлахдаа үүссэн Yahoo Messenger/Debug/Yahoo Messenger.EXE файлыг суулгана.
3. Суулгаж дуусахад Start -> All Programs-д Khairosh гэсэн хавтас(Folder) үүссэн байна. Энэ folder-т байгаа Yahoo! Messenger (Yahoo-ийн Icon-тай)-ийг ажиллуулаад болох ёстой. Гэвч хэн ч ийм олон дамжлагаар орж нууц үгээ үлдээхгүй учраас Desktop-д shortcut-ыг нь гаргая . Саяны Start -> All Programs -> Khairosh -> Yahoo! Messenger дээр баруун click -> Send to -> Desktop. Жинхэнэ мессенжерийн шорткат байгаа бол делетлэчээрэй.
4. Desktop дээр Yahoo! Messenger - Shortcut гэсэн shortcut үүссэн байна. F2 дээр дарж нэрийг нь Yahoo! Messenger гэж өөрчлөөрэй.
5. Дээрхи shortcut дээр баруун click -> Properties -> Change Icon -> Browse гэж ороод, C:\Program Files\Yahoo!\Messenger(хэрэв таны компьютерт мессенжер суусан бол) folder-т байгаа YahooMessenger EXE файлыг (generic_messenger-ийг биш шүү) сонгоод Ok. Одоо Desktop дээр яг Yahoo! Messenger шиг харагдаж байна. 5-р алхмыг орхисон ч болно.
Одоо нэвтрэх оролдлого хийсэн хүмүүсийн ID, нууц үг D дискэнд data.txt гэсэн файлд "ID###нууц үг" форматаар хадгалагдаж үлдэнэ. Харахдаа тус файл (data.txt) дээр баруун клик -> Open Width -> WordPad гээд л болоо.
Хэрэв та Internet cafe-нд ажилладаг бас хүн хорлох хоббитой бол маш хэрэгтэй эд шүү. :)

Sunday, November 7, 2010

Ухаарал

Зиак цаг ч нилээн оройтчихжоо (Энд нийтлэгдсэн огноог харуулж байгаа цаг серверийн цаг шүү). Шар шувуу болооод ч удаж байх шив. Бүр 5-6-р ангиас л өдөржингөө теннис, ПиСи тоглоод шөнжингөө хичээлээ хийдэг байлаа. Тэр шөнийн амьдрал оюутны 4 жилийг үдэж, одоо ч яг хэвээрээ үргэлжилсээр. Нам гүм, харанхуй орчинд анхаарал сайн төвлөрдөг болоод ч тэр үү, ер нь шөнө юм хийх миний хувьд өдрийг бодвол илүү үр бүтээлтэй байдаг. Тэгээд ч харанхуй болох тусам юм хийх сонирхол хөдлөнө. Өдөр жаахан нойр хүрч, манарахыг эс тооцвол шөнө хичээл, ажил ч юм уу өөр сонирхолтой юмаа хийж суух ч сайхан шүү. Гэвч бүх юм санасанаар болдоггүй, бага унтсанаас болж хорт хавдар үүснэ, дархлаа муудана, хөгширөлт хурдан явагдана ч гэнэ үү олон хор уршигтай юм гэнэ. Тэр ч үнэн бололтой сүүлийн үед миний антивирус суларч, ханиад их хүрдэг болсон. Бас нүд өвдөнө, юманд хурдан уурлана, ер нь л миний системийн файлууд устаж гэмтээд, ажиллагаа нь хэвийн биш болоод байх шиг. Шөнийн амьдралтай болох нь мэргэжилтэй ч холбоотой болов уу даа. Хараад байх нь ээ манай мэргэжлийнхэн ихэнх нь л шөнийн хэдэн цаг хүртэл ПиСи-гээ ухаж, матийнхан тоотой ноцолдоно, харин зарим бусад мэргэжлийнхэн тайван унтаж амарна. Манай нэгэн багш "Залуу хүнийг мэдлэг чимдэг ч, эрүүл мэндээ бодохгүй бол болохгүй шүү" гэж хэлдэг нь гэнэт санаанд орлоо. Нойр их хүрээд байгаа болохоор ч юм уу, эрүүл мэндээ бодмоор санагдчлаа. Маргаашнаас эхэлж өдөр ажлаа амжуулж, шөнө эрт унтахыг өөртөө даалгалаа. Харин мессенжер нтр-д орохгүй байсан ч ер нь яадаг юм... Надтай ижил төстэй хүмүүст хандаж хэлэхэд "жаахан ч гэсэн их унтаж байгаарай" гэж зөвлөе!

Saturday, October 23, 2010

Сүйрэл рүү

Хувь хүн төдийгүй улс орны хөгжил дэвшлийн гол хүчин зүйл эрдэм мэдлэг билээ. Харин боловсрол бол уг эрдмийг зааж сургах процесс гэдгийг хэн хүнгүй мэднэ. Баян чинээлэг, эрх мэдэлтэй, нэр төртэй амьдрахыг хүсдэггүй хүн нэг ч байхгүй. Харин энэ бүхэн боловсролоос хамааралтай гэдгийг эрүүл ухаантай хүн болгон ухаардаг байх.
Алт, мөнгийг уул мэт овооловч
"А" үсэг сурсанд хүрэхгүй ээ гэж.
Боловсролын талаар бодож, санаа зовж явдаг зүйлүүдээ бичмээр санагдаж, ийнхүү блогдоо тэмдэглэж сууна. Гэвч Монголын улсын боловсролын талаар биш, "сүйрэл" рүү явж байгаа төрөлх аймаг, сумынхаа боловсролын талаар. Магадгүй таны нутгийн нөхцөл байдалтай адилхан ч юм бил үү.
Манай аймаг Төгсөлтийн Ерөнхий Шалгалтын "Хамгийн муу үзүүлэлт" номинацийн төлөө өрсөлдөж, дундаж дүнгээрээ сүүлийн хэдэн жил дараалан улсд тэргүүлж, жил өнгөрөх тусам амжилтаа баталснаар зогсохгүй, улам л ахиулж олны танил болоод байгаа билээ. Энэ амжилтаас гадна арга хэмжээ авч, залруулмаар дутагдлууд тоолж баршгүй...
Намайг анх хичээлд орохдоо багш нар нь мэдлэг, туршлагатай, сурагчид нь жигд онц болон сайн сурлагатай, дарга нь дарга шиг, бүх юм байх ёстойгоороо байлаа. Жил өнгөрөх тусам "улс төржилт, туйлшрал"-ын улмаас бүх юм хувиран өөрчлөгдөж, бууран доройтсоор.
Манай аймагт найман настай балчраас наян настай буурал хүртэл улс төрөөр амьсгалж, гэр бүл, эхнэр нөхөр, хамаатан садан, хөршүүд, байгууллага хамт олны харилцаанаас авахуулаад ажил хэрэг, үүрэг хариуцлага, соёл урлаг, худалдаа наймаа гээд бүх зүйл улс төрөөс хамаарч байна. Ажилд орохдоо мэдлэг чадвар нь биш өөрийнх нь болон ар гэрийнхний намын үзэл бодол нь хамгийн гол шалгуур болно. Сонгууль дөхөх тусам энэ шалгуурыг давж л байвал ажлын байр нь бэлэн гэсэн үг. Харин энэ шаардлагыг хангадаггүй нэг нь ажлаа хийж чадаагүй мэтээр нэрлэгдсэн шалтгаанаар ажлаасаа хөөгдөж таараа. Үүний улмаас сургуулиуд мэдлэг, чадваргүй хатуухан хэлбэл бичиг үсэгт ч тайлагдаагүй багш нараар дүүрлээ. Ийм багшаар хичээл заалгасан сурагчид юу л болох бол.
Бүх төрийн албан хагчдыг намаас чөллөө, аттестатчлал явууллаа. Энэ нь зөв санаачлага, цагаа олсон арга хэмжээ боловч яг үнэндээ ямар ч өөрчлөлт гараагүй. Хэдхэн мянган хүн амтай сумын хувьд хэн нь ямар намыг дэмждгийг нь мэдэхэд намын үнэмлэхийн ямар ч шаардлага үгүй. Сумын засаг дарга аль намынх байна, тус сумын байгууллаггуудын бүх дарга, ихэнх албан хагчид тэр намынх байна гэсэн үг. Сумын засаг дарга нарт дээрээсээ "мөнгө тараах" хэмжээний л эрх олгож байхад, өөрсдөө эзэн хаан шиг сүр бадрааж, сургууль, цэцэрлэг зэрэг боловсролын байгууллагуудыг өөрийнхөө эрх ашгийг хамгаалах хэрэгсэл болгож яваа бол, захирал мэтийн албан тушаалтнууд тархигүй хүн буюу засаг даргын virtual роботын үүрэг гүйцэтгэж, ард иргэд нь улс төрөөс өөр бодож санах юмгүй, хүүхдээ ч хүмүүжүүлэх, боловсролд нь анхаарах цаг завгүй амьдрана. Энэ шударга бус байдлыг эсэргүүцгчид, сөрөг хүчнийх нь ч мэдээж байгаа. Гэвч гэр бүлээ тэжээхийн тулд "Сохрын газар сохор, ... " гэгчээр орчиндоо дасан зохицно, эс тэгвээс цөллөгдөнө. Харин эрхэм "ихэр гурван" гишүүн маань үүрэг хариуцлагаа ч ухаарч амжаагүй яваад байх шиг.
Энэ бүхний үр дүнд боловсрол, боловсролыг дагаж ирээдүй сүйрэл рүү...

(Төрөлх нутгаа муулъя гэж биш, бусдад уриалж, хувь нэмрээ оруулцгаая, сэрцгээе гэж л үүнийг бичлээ. Үнэн үг ямагт гашуун байдаг аа гэж)

Wednesday, October 20, 2010

Намайг үнэхээр орхиод явлаа гэж үү?!

Программист хүний хувьд файлуудаас нь илүү нандин, үнэтэй зүйл гэж байхгүй байх. Миний хувьд лав тийм. Project-үүд алт, class-ууд мөнгө шиг л... JAR, EXE, SQL файл гээд бүгд эрдэнэсүүд. Манай улсд ч IT сайн хөгжөөгүй болохоор хүмүүс сайн ойлгохгүй л байх. Файлын үнэ цэнэ байтугай программист гэж ямар мэргэжилтэн, юу хийдгийг нь мэддэг хүн ч ховор бололтой. Хөдөө орон нутгийн малчдыг бүү хэл хотын оюутнууд, сэхээтнүүд хүртэл программист гэж юу юм, юу хийдэг юм бэ? гэж асуугаад байдаг нь гутармаар ч юм шиг. Ихэнх хүмүүсийн төсөөлөлд программист гэхээр Word-ист, Excel-ист, Photoshop-ист эсвэл компьютерийн засварчин мэт дүр зураг байдаг. Надаас олон хүн яг ингэж асуудаг. Би ойлгуулах гээд хичнээн хичээдэг ч ямар ч үр дүн гардаггүй. Би ажлаасаа голдуу 8, 9 гэж харьдаг юм л даа. Хүмүүс тэгээд "Ийм орой болтол юу хийдэг юм бэ, бичих юм(Word, Excle дээр) тийм их байгаа юм уу?" гэж асуухаар ямар их уур хүрдэг гээч. Хэлэх үг ч олддоггүй. Би мэргэжилдээ, бас ажилдаа маш их дуртай болохоор ч юм уу, надад энэ хорвоод программистаас сайн мэргэжил байхгүй юм шиг санагддаг. Их ажиллана, ачаалал ихтэй, ажлаа амждаггүй, гэр бүл, найз нөхөддөө цаг гаргаж чадахгүй, цалин ч их биш, гэхдээ л би ажилдаа хайртай. Ингэхэд миний ажил танд уйтгартай, хийхээргүй муу ажил мэт санагдсан уу? Огт үгүй шүү. Давуу тал нь бүр ч их. Сайхан хамт олон, тохитой орчин, юм сурах боломж, ажлын кайф гээд л...
Бичих гэж байсан сэдвээсээ бүр холдоод явчихжээ. Устсан файлдаа буцаад оръё. Өчигдөр нэг бүтэлгүй өдөр байлаа. Ер нь миний хувьд зарим өдрүүд тэр чигээрээ бүтэлгүй байдаг. Гэхдээ Exception шиг хааяа л тохиолддог байсан юм даг. Сүүлийн үед харин бүтэлгүйдлийн цикль хурдан давтагдаад ч байх шиг. Хамаг бие даалт, курсын ажил, дадлагын тайлан, хичээллүүд, ном лекцүүд, дуу, кино клип, бусад цуглуулсан материалууд, хөгжүүлэлт хийгдэж байгаа программууд гээд л бүх юмаа устгуулчлаа. Хугацаа нь дөхөж байгаа маш чухал нэгэн Project бас бусад найзуудын хамт хорвоогийн мөнх бусыг үзүүллээ. Тэрээр компаний Project учраас намайг, миний ажлыг, миний файлуудыг хамгийн сайн ойлгодог хүнд албаар устгуулсанд хичнээн хармсаад ч буцаж ирэхгүй болохоор шөнөжингөө сууж арай гэж дөхүүллээ. Харин одоо нойр хүрээд ажлаа түр завсарлуулаад тэмдэглэл хөтөлж сууна. Эцэст нь хэлэхэд энийг хэнд ч биш зөвхөн өөртөө л зориулж бичлээ.