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";

18 comments:

  1. matritsiin diognal elementuud bolon hesegchlen awsan elementuudiin niilberiig oloh jishee tawij ogooch taalagdaj bna bayarlalaa

    ReplyDelete
  2. Хэсэгчлэн авсан элемент гэдгийг ойлгосонгүй. Ямар ч байсан тодорхой (сонгон авсан) элементүүдийг хооронд нь нэмчих л байх. Харин N*N квадрат матрицын гол болон хажуугийн диагоналийн элементүүдийн нийлбэрийг олдог код бичиж өгье (C++).

    #include

    int main() {
    float a[100][100], s1, s2;
    int n, i, j;
    cout<<" n = ";
    cin>>n;
    s1 = s2 = 0;
    for(i=0; i<n; i++) {
    cout<<endl;
    for(j=0; j<n; j++) {
    cout<<" a["<<i<<"]["<<j<<"] = ";
    cin>>a[i][j];
    }
    s1 += a[i][i];
    s2 += a[i][n-i-1];
    }
    cout<<"\n Gol diagonaliin elementuudiin niilber: "<<s1;
    cout<<"\n Khajuugiin diagonaliin elementuudiin niilber: "<<s2<<endl;
    system("pause");
    }

    ReplyDelete
  3. thanks! ih medeelel awlaa!!!!!
    nohoi gesen butets uusge, talbaruud ni huis, uildwer, nas bna.
    tegwel 8-s doo\sh nasnii hohoinii medeelllig garga!
    eniig bodood uguuch..,

    ReplyDelete
  4. #include
    #include
    using namespace std;

    struct Dog {
    string sex, breed;
    int age;
    };

    int main() {
    Dog d[100];
    ...
    for(i=0; i<N; i++)
    if(d[i].age < 8)
    cout<<d[i].sex<<" "<<...;
    system("pause");
    }

    Өөрөө гүйцээтчих дутууг нь. Залхуу хүрчихлээ :)

    ReplyDelete
  5. Оюутны код, оюутны нэр, хичээлийн нэр, авсан оноо, анги гэсэн талбаруудтай бүтэц төрлийн массив өгөгдөв.
    a. Оюутны код өгөгдөхөд тухайн оюутны мэдээллийг харуул.

    ReplyDelete
  6. eniig yaaj bodox ystoi ve tuslaach

    ReplyDelete
  7. Оюутны код, оюутны нэр, хичээлийн нэр, авсан оноо, анги гэсэн талбаруудтай бүтэц төрлийн массив өгөгдөв.
    a. Оюутны код өгөгдөхөд тухайн оюутны мэдээллийг харуул.
    eniig yaj bodox ve?

    ReplyDelete
  8. Өмнөх жишээнүүд дээрхи бүтэцийн нэр, талбаруудыг нь өөрчлөөд л болоо ш дээ.

    ReplyDelete
  9. oyuutniih ni too ni ugugduhgui bolhor sn oilgohgui bnaaa

    ReplyDelete
  10. ta zuvhun naad bodlogoo zaagaad ugchh tehuu??? guij bn

    ReplyDelete
  11. cout<<d[i].sex<<" "<<...; ene ni yaaj bgaa uildel um bol????

    ReplyDelete
    Replies
    1. Dog (struct) төрлийн d массивын i дүгээр элементийн sex талбарын утга буюу дугаарлагдсан бүлэг нохойнуудын i дүгээр нохойн хүйс гэсэн үг.

      Delete
  12. #include
    #include
    unsigned int i,n;
    struct student{
    char code, name, hichelinner, onoo, angi;
    };
    int main(){
    student a[100];
    for(i=0;i<n;i++)
    printf("%s\n", a[i].name);
    printf("%s\n", a[i].hichelinner);
    printf("%s\n", a[i].onoo);
    printf("%s\n", a[i].angi);
    getch();
    }

    ReplyDelete
    Replies
    1. ene mun vv?? ta shalgaad uguuch

      Delete
    2. 1. Оюутны тоо нь өгөгдөх ёстой. Оюутны тоог гараас авна.
      2. Давталтаар бүх оюутны мэдээллийг гараас оруулна.
      3. Хайж олох гэж байгаа оюутны кодыг гараас оруулна.
      4. Давталтаар оюутнуудын эхнээс нь эхэлж код нь өгөгдсөн кодтой тэнцүү эсэхийг шалгаж, тэнцүү байвал уг оюутны мэдээллийг хэвлээд давталтаас гарна.
      Хэрэв давталт дуустал тийм кодтой оюутан олдохгүй бол "Оюутан байхгүй" гэсэн мэдээлэл хэвлэнэ.
      5. Төгсгөл.

      Ийм л дараалалтай байна даа

      Delete
  13. #include
    #include
    unsigned int i,n;
    struct student{
    char code[20];
    char name[20];
    char hichelinner[20];
    int onoo[20];
    char angi[20];
    };
    int main(){
    student a[n];
    for(i=0;i<n;i++)
    printf("%s\n", a[i].name);scanf("%s",a[i].name);
    printf("%s\n", a[i].hichelinner);scanf("%s",a[i].hichelinner);
    printf("%d\n", a[i].onoo);scanf("%d",a[i].onoo);
    printf("%s\n", a[i].angi);scanf("%s",a[i].angi);
    getch();
    }

    odoo ene mun bolov uu

    ReplyDelete
  14. sain bnuu neg yuma suuh gesimaa oyutni burtgel gedeg sedver bie dalt hij bgama tgd oyutang burtgechihed tuhain oyutni medeelliig oorchloh ustgah haih nemeh geh met uildluudig ni coden dotroo bichej ogoh estoin yaj hihin bolooo HEEELP MEEEE stack 2 holboost jagsaalt ashiglana gesiin

    ReplyDelete