Monday, January 10, 2011

Kaspersky-ийг зүгээр л үнэгүй ашигла

Kaspersky ашигладаггүй хүн ховор байх. Мэддэггүй хүн байхгүй байх. Харин лицензийг нь худалдаж авдаг хүн бүр байхгүй байх. Касперский миний хувьд лав хамгийн сайн хамгаалагч, би түүнд л итгэдэг. Гэвч би хэзээ ч лицензийг нь худалдаж авч байгаагүй. Харин триалыг нь Ressetter-ийн тусламжтайгаар төгөсгөлгүй удаа хэрэглэгдэг. Энэ аргыг танд ч гэсэн зааж өгье.

1. Kaspersky-ийг энд дарж татаж авна уу. Зөвхөн энэ version-д нь тохирно.
2. Resetter-ийг эндээс аваарай. Энэ RAR-ыг задалвал хэд хэдэн Ressetter байгаа ба Ressetter 2.3.exe гэснийг нь ашиглана.
3. Сарын эрх нь дууссаны дараа Kaspersky-ийн Icon дээр баруун клик -> Settings -> Options. Enable Self-Defence-ийг check-гүй болгоод Ok.
Яг энэ зурагт байгаа шиг тохируулаарай















4. Ressetter 2.3.exe-г уншуулж триал лицензийг нь татаад л болоо.
Ингээд Kaspersky-ийг үнэгүй хэрэглээд бай хэрэглээд бай.

Бусад хувилбарын resetter-үүд: Kaspersky 10 Resetter, KIS 2010 Resetter

Friday, January 7, 2011

C/C++ бүтэц (struct), массив төрлийн утга буцаах функц

C/C++ хэлэнд байдаг бүтэц нь Паскаль хэлний бичлэг(Record)-тэй яг ижил утгатай ойлголт учраас дахин тайлбарлах илүү байх (Паскаль хэлний бичлэгийн тухай эндээс уншаарай). C/C++-д бүтцийг яаж тодорхойлж, програмдаа яаж ашиглах талаар товчхон бичье. Бүтцийг struct нөөц үгийн тусламжтайгаар тодорхойлдог.
Формат нь:
struct Бүтцийн_нэр {
талбар1;
талбар2;
...
талбарN;
};
Бүтцийн_нэр: бүтцийн нэр.
талбар1, талбар2, ..., талбарN: талбарууд.

Талбарууд нь стандарт болон хэрэглэгчийн тодорхойлсон төрөл, мөн бүтэц төрөлтэй байж болно.
Жишээлбэл,
struct Display {
string companyName;
float width, height, weight;
};
Бүтэц төрлийн хувьсагчийг энгийн хувьсагч зарлахтай адил Бүтцийн_нэр хувьсагч; гэж зарлана.
Жишээлбэл,
struct Computer {
int ram, cpu;
string name;
float price;
Display disp;
};

int main() {
Computer com;
}

Бүтцийн талбаруудад утга олгохдоо, мөн талбарын утгыг ашиглахдаа бүтцийн объектын ард .(цэг) тавьж, ард нь талбарын нэрийг бичинэ.
Жишээлбэл,
Display disp;
disp.companyName = "Acer";
disp.width = disp.height = 50;
disp.weight = 5;
Computer com;
com.cpu = 4;
com.disp = disp;

Бүтцийг ашиглаж нэг гоё жишээ бодлого бодъё. Танд гоё санагдахгүй ч байж магадгүй. Надад лав гоё. Тэр юу вэ? гэхээр бүтцийг ашиглаж массив төрлийн утга амархан буцааж болно. Хоёр матрицын нийлбэр матрицыг буцаадаг функц бичиж, уг функцийг дуудаж, үр дүнгийн матрицыг хэвлэе.


#include <iostream.h&gt
#include <iomanip.h>

struct Matrix {
float a[100][100];
};

Matrix Sum(int n, int m, float a[100][100], float b[100][100]) {
Matrix mat;
int i, j;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
mat.a[i][j] = a[i][j] + b[i][j];
return mat;
}

int main() {
float a[100][100], b[100][100];
Matrix mat;
int n, m, i, j;
cout<<" n = ";
cin>>n;
cout<<" m = ";
cin>>m;
for(i=0; i<n; i++) {
cout<<endl;
for(j=0; j<m; j++) {
cout<<" a["<<i<<"]["<<j<<"] = ";
cin>>a[i][j];
cout<<" b["<<i<<"]["<<j<<"] = ";
cin>>b[i][j];
}
}
mat = Sum(n, m, a, b);
cout<<"\n Niilber matrix:\n";
for(i=0; i<n; i++) {
cout<<endl;
for(j=0; j<m; j++) {
cout.width(8);
cout<<mat.a[i][j];
}
}
cout<<"\n\n";

Wednesday, January 5, 2011

Матрицын тодорхойлогч, урвуу матриц олох

Матрицын үржвэр, нийлбэр, урвуу матриц олох, ялангуяа матрицын тодорхойлогч олох шаардлага амьдралд олон тохиолддог. Гаусын аргаар квадрат матрицыг дээд, доод гурвалжин матрицад шилжүүлж, тодорхойлогчийг нь олж, улмаар урвуу матрицыг олох бодлогын бодолтыг тавилаа. Дээд, доод гурвалжин матрицыг зэрэг олох шаардлагагүй л дээ. Аль нэг нь байхад л хангалттай ч гэсэн 2 аргаар тодорхойлогчийг нь олж, ижил хариу гарч байгааг харуулж, танд бодолтоо зөв гэдгийг итгүүлэх гэж л хоёр аргаар бодлоо гэж худлаа хэлээд ч яахав, дээр нэг найз мань багшийнхаа өгсөн даалгавар ёсоороо тэгж бодуулж байсан юм. Өгөгдөл матрицыг input.txt файлаас уншина. Уг файлын хамгийн эхэнд квадрат матрицын мөр болон баганы тоо болох N бүхэл тоо, дараа нь N*N ширхэг хоосон зай эсвэл [Enter] эсвэл [Tab]-аар тусгаарлагдсан бодит тоонууд байна. Жишээлбэл,
4
1 2 2.5 4
5 6.5 7 8
9 -0.5 11 1
-1.3 15.2 15 1
Үр дүн нь консолд хэвлэгдэхийн зэрэгцээ output.txt текст файлд алхам болгоны үр дүнгийн хамт бичигдэнэ. Зарим нэгэн үйлдлүүдийг нь болоод бүхэлд өөр нэг бодлогод ашиглахад тохиромжтой шүү.

#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <mem.h>

ifstream ifs;
ofstream ofs;

int main() {
//Bodlogyn ogogdliig unshikh file
ifs.open("input.txt", ios::in);
//Bodlogyn khariug bichikh file
ofs.open("output.txt", ios::out);
int n, i, j, k, w, p;
float a[100][100], top[100][100], bottom[100][100], reverse[100][100], b[100][100], det, q, temp, A;
bool end = false;
if(ifs.is_open()) {
//File-iin ekhnii element khusnegtiin khemjees bolokh n too baina
ifs>>n;
cout<<"\n Ogogdson ni\n\n";
ofs<<" Ogogdson ni\n\n";
cout<<" n = "<<n<<endl;
ofs<<" n = "<<n<<endl;
//Khusnegtiin elementuudiig file-s unshikh
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
ifs>>a[i][j];
for(i=1; i<=n; i++) {
cout<<endl;
ofs<<endl;
for(j=1; j<=n; j++) {
cout.width(8);
ofs.width(8);
cout<<a[i][j];
ofs<<a[i][j];
}
}

memcpy(bottom, a, sizeof(a));

ofs<<"\n\n Dood gurvaljin matrix gargakh";

for(i=1; i<n; i++) {
for(j=i+1; j<=n; j++) {
p = -1;
for(w=i; w<=n; w++)
if(bottom[i][w] != 0) {
p = w;
break;
}
if(p != -1) {
//0-ees yalgaatai element bukhii bagana bolon tukhain davtaltand khargalzakh bagana 2-yn bairyg solikh

for(w=1; w<=n; w++) {
temp = bottom[w][i];
bottom[w][i] = bottom[w][p];
bottom[w][p] = temp;
}

q = bottom[j][i] / bottom[i][i];
for(k=i; k<=n; k++)
bottom[j][k] -= bottom[i][k] * q;

}
else {
cout<<"\n\n Dood gurvaljin gargakh yavtsad "<<(i-1)<<"-r khuvirgaltyn daraa\n";

for(int ii=1; ii<=n; ii++) {
cout<<endl;
for(int jj=1; jj<=n; jj++) {
cout.width(10);
cout<<fixed<<setprecision(4)<<bottom[ii][jj];
}
}
cout<<"\n\n Matrixyn "<<i<<"-r moriin bukh element 0-tei tentsuu uchraas det(a) = 0 baina. Tsaash ni khuvirgakh shaardlagagui.\n";

ofs<<"\n\n Matrixyn "<<i<<"-r moriin bukh element 0-tei tentsuu uchraas det(a) = 0 baina. Tsaash ni khuvirgakh shaardlagagui.\n";

det = 0;
end = true;
break;
}
}
if(end)
break;
else {
//Alkham bolgony matrixyn khuvirgaltyg "output.txt" file-d bichikh

ofs<<"\n\n "<<i<<"-r khuvirgalt\n";

for(int ii=1; ii<=n; ii++) {
ofs<<endl;
for(int jj=1; jj<=n; jj++) {
ofs.width(10);
ofs<<fixed<<setprecision(4)<<bottom[ii][jj];
}
}
}
}

if(!end) {
//Dood gurvaljin matrixyg khevlekh
cout<<"\n\n Dood gurvaljin matrix\n";
//det-r a matrixyn todorhoilogchiig temdeglev
det = 1;
for(i=1; i<=n; i++) {
cout<<endl;
for(j=1; j<=n; j++) {
cout.width(10);
cout<<fixed<<setprecision(4)<<bottom[i][j];
}
det *= bottom[i][i];
}
cout<<"\n\n det(a) = "<<fixed<<setprecision(2)<<det<<endl;
ofs<<"\n\n det(a) = "<<fixed<<setprecision(2)<<det<<endl;
}

end = false;
ofs<<"\n Deed gurvaljin matrix gargakh";
memcpy(top, a, sizeof(a));

for(i=n; i>0; i--) {
for(j=i-1; j>=0; j--) {
p = -1;
for(w=i; w>=0; w--)
if(top[i][w] != 0) {
p = w;
break;
}
if(p != -1) {
//0-ees yalgaatai element bukhii bagana bolon tukhain davtaltand khargalzakh bagana 2-yn bairyg solikh

for(w=1; w<=n; w++) {
temp = top[w][i];
top[w][i] = top[w][p];
top[w][p] = temp;
}

q = top[j][i] / top[i][i];
for(k=i; k>=0; k--)
top[j][k] -= top[i][k] * q;

}
else {
cout<<"\n\n Dood gurvaljin gargakh yavtsad "<<(n - i)<<"-r khuvirgaltyn daraa\n";

for(int ii=1; ii<=n; ii++) {
cout<<endl;
for(int jj=1; jj<=n; jj++) {
cout.width(10);
cout<<fixed<<setprecision(4)<<top[ii][jj];
}
}
cout<<"\n\n Matrixyn "<<i<<"-r moriin bukh element 0-tei tentsuu uchraas det(a) = 0 baina. Tsaash ni khuvirgakh shaardlagagui.\n";

ofs<<"\n\n Matrixyn "<<i<<"-r moriin bukh element 0-tei tentsuu uchraas det(a) = 0 baina. Tsaash ni khuvirgakh shaardlagagui.\n";

det = 0;
end = true;
break;
}
}
if(end)
break;
else {
//Alkham bolgony matrixyn khuvirgaltyg "outpu.txt" file-d bichikh

ofs<<"\n\n "<<(n-i+1)<<"-r khuvirgalt\n";
for(int ii=1; ii<=n; ii++) {
ofs<<endl;
for(int jj=1; jj<=n; jj++) {
ofs.width(10);
ofs<<fixed<<setprecision(4)<<top[ii][jj];
}
}
}
}

if(!end) {
//Deed gurvaljin matrixyg khevlekh
cout<<"\n\n Deed gurvaljin matrix\n";
//det-r a matrixyn todorhoilogchiig temdeglev
det = 1;
for(i=1; i<=n; i++) {
cout<<endl;
for(j=1; j<=n; j++) {
cout.width(10);
cout<<fixed<<setprecision(4)<<top[i][j];
}
det *= top[i][i];
}
cout<<"\n\n det(a) = "<<fixed<<setprecision(2)<<det<<endl;
ofs<<"\n\n det(a) = "<<fixed<<setprecision(2)<<det<<endl;
cout<<"\n //Deed, dood gurvaljind shiljuulj olson todorkhoilogchid tentsuu baigaa biz?!\n";
ofs<<"\n //Deed, dood gurvaljind shiljuulj olson todorkhoilogchid tentsuu baigaa biz?!\n";
}

cout<<"\n Urvuu matrix\n";
ofs<<"\n Urvuu matrix\n";
long detL = (long)(det * 10000);
if(detL == 0) {
cout<<"\n Todorkhoilogch ni 0-tei tentsuu uchraas urvuu matrixgui baina. Ooroor khelbel, ogogdson matrix ni bokhson matrix baina.";
ofs<<"\n Todorkhoilogch ni 0-tei tentsuu uchraas urvuu matrixgui baina. Ooroor khelbel, ogogdson matrix ni bokhson matrix baina.";
}
else {
for(int i1=1; i1<=n; i1++) {
for(int j1=1; j1<=n; j1++) {
for(int i2=1; i2<i1; i2++) {
for(int j2=1; j2<j1; j2++) {
b[i2][j2] = a[i2][j2];
}
for(int j2=j1+1; j2<=n; j2++) {
b[i2][j2-1] = a[i2][j2];
}
}
for(int i2=i1+1; i2<=n; i2++) {
for(int j2=1; j2<j1; j2++) {
b[i2-1][j2] = a[i2][j2];
}
for(int j2=j1+1; j2<=n; j2++) {
b[i2-1][j2-1] = a[i2][j2];
}
}
for(i=1; i<n-1; i++) {
for(j=i+1; j<=n-1; j++) {
p = -1;
for(w=i; w<=n; w++)
if(b[i][w] != 0) {
p = w;
break;
}
if(p != -1) {
//0-ees yalgaatai element bukhii bagana bolon tukhain davtaltand khargalzakh bagana 2-yn bairyg solikh

for(w=1; w<=n-1; w++) {
temp = b[w][i];
b[w][i] = b[w][p];
b[w][p] = temp;
}

q = b[j][i] / b[i][i];
for(k=i; k<=n-1; k++)
b[j][k] -= b[i][k] * q;
}
}
}
A = 1;
for(i=1; i<n; i++)
A *= b[i][i];
if((i1 + j1) % 2 == 1)
A *= -1;
reverse[j1][i1] = A;
}
}
for(i=1; i<=n; i++) {
cout<<endl;
ofs<<endl;
for(j=1; j<=n; j++) {
reverse[i][j] /= det;
cout.width(10);
cout<<fixed<<setprecision(4)<<reverse[i][j];
ofs.width(10);
ofs<<fixed<<setprecision(4)<<reverse[i][j];
}
}
}
}
else
cout<<" \"input.txt\" file oldsongui";

cout<<endl<<endl;
ifs.close();
ofs.close();

system("pause");
}

Saturday, January 1, 2011

Төлөвлөгөө...

Шинэ оны мэнд хүргэе! Бүх жилийн турш хаппи байж, амжилт бүтээлд дарагдаарай гэж хүсэн ерөөе!
Миний хувьд шинэ жилийн баярыг архи тамхигүй маш гоё тэмдэглэлээ. (Тамхи гэдэг нь наргиа шүү, яснаасаа дургүй) Архи пивогүй. Архи пиво нтр баярын өнгө оруулдаг ч хэрэглэхгүй байвал илүү үр дагавартай байдаг юм байна. Дараа дараагийн баяруудыг дандаа шинэ жилээ тэмдэглэсэн шиг тэмдэглэнэ ээ. Өнгөрсөн онд юу хийж бүтээснээ, алдаа оноогоо нэг дүгнэж үзлээ. Сургууль төсөх, ажилд орох гээд л олон чухал үйл явдлууд болж өнгөрчээ. Алдаа оноо ч их байна. Том алдаа гэвэл төлөвлөгөөгүй тухайн үед хиймээр санагдсан юмаа хийдэг минь буруу байжээ. Одоо нарийн төлөвлөгөө гаргаж, хатуу баримталж ажиллана аа. Миний төлөвлөгөөнд ороогүй л бол ямар ч процесс байсан хойшлогдож, хүлээлэлтийн төлөвд орно гэсэн үг. Хэрэв та над шиг төлөвлөгөөгүй ажилладаг байсан бол одоо төлөвлөгөө гаргаарай гэж зөвлөе. Амжилтанд хүрэх нэг чухал алхам шүү.
Би 2011 оныг "Инглиш жил" болгон зарлалаа.
Өдөр өнгөрөх тусам цаг хугацааны үнэ цэнэ мэдрэгдсээр..

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 оюутан энэ бодлогыг бодуулсан гэж бод доо. Дахиж бодож өгөхгүй шүү, блогтоо тавьчъя. Харин жаахан явцуу код байж магадгүй. Эсрэгээрээ тэнэг хүн ч ойлгохоор энгийн.
За өөртөө хэрэгтэйг нь татаж ав.